ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vdWFydC5jIGIvZHJpdmVycy9taXNjL2libWFzbS91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0ODA0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vdWFydC5jCkBAIC0wLDAgKzEsNzIgQEAKKworLyoKKyAqIElCTSBBU00gU2VydmljZSBQcm9jZXNzb3IgRGV2aWNlIERyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDQKKyAqCisgKiBBdXRob3I6IE1heCBBc2L2Y2sgPGFtYXhAdXMuaWJtLmNvbT4gCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSAiaWJtYXNtLmgiCisjaW5jbHVkZSAibG93bGV2ZWwuaCIKKworCit2b2lkIGlibWFzbV9yZWdpc3Rlcl91YXJ0KHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2VyaWFsOworCXZvaWQgX19pb21lbSAqaW9tZW1fYmFzZTsKKworCWlvbWVtX2Jhc2UgPSBzcC0+YmFzZV9hZGRyZXNzICsgU0NPVVRfQ09NX0JfQkFTRTsKKworCS8qIHJlYWQgdGhlIHVhcnQgc2NyYXRjaCByZWdpc3RlciB0byBkZXRlcm1pbmUgaWYgdGhlIFVBUlQKKwkgKiBpcyBkZWRpY2F0ZWQgdG8gdGhlIHNlcnZpY2UgcHJvY2Vzc29yIG9yIGlmIHRoZSBPUyBjYW4gdXNlIGl0CisJICovCisJaWYgKDAgPT0gcmVhZGwoaW9tZW1fYmFzZSArIFVBUlRfU0NSKSkgeworCQlkZXZfaW5mbyhzcC0+ZGV2LCAiSUJNIFNQIFVBUlQgbm90IHJlZ2lzdGVyZWQsIG93bmVkIGJ5IHNlcnZpY2UgcHJvY2Vzc29yXG4iKTsKKwkJc3AtPnNlcmlhbF9saW5lID0gLTE7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoJnNlcmlhbCwgMCwgc2l6ZW9mKHNlcmlhbCkpOworCXNlcmlhbC5pcnEJCT0gc3AtPmlycTsKKwlzZXJpYWwuYmF1ZF9iYXNlCT0gMzY4NjQwMCAvIDE2OworCXNlcmlhbC5mbGFncwkJPSBVUEZfQVVUT1BST0JFIHwgVVBGX1NIQVJFX0lSUTsKKwlzZXJpYWwuaW9fdHlwZQkJPSBVUElPX01FTTsKKwlzZXJpYWwuaW9tZW1fYmFzZQk9IGlvbWVtX2Jhc2U7CisKKwlzcC0+c2VyaWFsX2xpbmUgPSByZWdpc3Rlcl9zZXJpYWwoJnNlcmlhbCk7CisJaWYgKHNwLT5zZXJpYWxfbGluZSA8IDApIHsKKwkJZGV2X2VycihzcC0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHNlcmlhbCBwb3J0XG4iKTsKKwkJcmV0dXJuOworCX0KKwllbmFibGVfdWFydF9pbnRlcnJ1cHRzKHNwLT5iYXNlX2FkZHJlc3MpOworfQorCit2b2lkIGlibWFzbV91bnJlZ2lzdGVyX3VhcnQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKK3sKKwlpZiAoc3AtPnNlcmlhbF9saW5lIDwgMCkKKwkJcmV0dXJuOworCisJZGlzYWJsZV91YXJ0X2ludGVycnVwdHMoc3AtPmJhc2VfYWRkcmVzcyk7CisJdW5yZWdpc3Rlcl9zZXJpYWwoc3AtPnNlcmlhbF9saW5lKTsKK30K