LyoKICogRGlyZWN0M0Qgd2luZSBpbnRlcm5hbCBwdWJsaWMgaW50ZXJmYWNlIGZpbGUKICoKICogQ29weXJpZ2h0IDIwMDItMjAwMyBUaGUgd2luZS1kM2QgdGVhbQogKiBDb3B5cmlnaHQgMjAwMi0yMDAzIFJhcGhhZWwgSnVucXVlaXJhCiAqIENvcHlyaWdodCAyMDA1IE9saXZlciBTdGllYmVyCiAqIENvcHlyaWdodCAyMDA2IFN0ZWZhbiBE9nNpbmdlciBmb3IgQ29kZVdlYXZlcnMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2lmbmRlZiBfX1dJTkVfV0lORUQzRF9JTlRFUkZBQ0VfSAojZGVmaW5lIF9fV0lORV9XSU5FRDNEX0lOVEVSRkFDRV9ICgojaWYgIWRlZmluZWQoIF9fV0lORV9DT05GSUdfSCApCiMgZXJyb3IgWW91IG11c3QgaW5jbHVkZSBjb25maWcuaCB0byB1c2UgdGhpcyBoZWFkZXIKI2VuZGlmCgojaWYgIWRlZmluZWQoIF9fV0lORV9ERFJBV19IKQojZXJyb3IgWW91IG11c3QgaW5jbHVkZSBkZHJhdy5oIHRvIHVzZSB0aGlzIGhlYWRlcgojZW5kaWYKCiNpbmNsdWRlICJ3aW5lZDNkX3R5cGVzLmgiCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUSElTIEZJTEUgTVVTVCBOT1QgQ09OVEFJTiBYMTEgb3IgTUVTQSBERUZJTkVTIAogKiBQTEVBU0UgVVNFIHdpbmUvd2luZWQzZF9nbC5oIElOU1RFQUQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogI2RlZmluZXMgYW5kIGVycm9yIGNvZGVzCiAqLwojZGVmaW5lIF9GQUNXSU5FRDNEICAweDg3NgojZGVmaW5lIE1BS0VfV0lORUQzREhSRVNVTFQoIGNvZGUgKSAgICAgICAgICAgICAgICAgTUFLRV9IUkVTVUxUKCAxLCBfRkFDV0lORUQzRCwgY29kZSApCiNkZWZpbmUgTUFLRV9XSU5FRDNEU1RBVFVTKCBjb2RlICkgICAgICAgICAgICAgICAgICBNQUtFX0hSRVNVTFQoIDAsIF9GQUNXSU5FRDNELCBjb2RlICkKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBEaXJlY3QzRCBFcnJvcnMKICovCiNkZWZpbmUgV0lORUQzRF9PSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTX09LCiNkZWZpbmUgV0lORUQzREVSUl9XUk9OR1RFWFRVUkVGT1JNQVQgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzIpCiNkZWZpbmUgV0lORUQzREVSUl9VTlNVUFBPUlRFRENPTE9ST1BFUkFUSU9OICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzMpCiNkZWZpbmUgV0lORUQzREVSUl9VTlNVUFBPUlRFRENPTE9SQVJHICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzQpCiNkZWZpbmUgV0lORUQzREVSUl9VTlNVUFBPUlRFREFMUEhBT1BFUkFUSU9OICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzUpCiNkZWZpbmUgV0lORUQzREVSUl9VTlNVUFBPUlRFREFMUEhBQVJHICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzYpCiNkZWZpbmUgV0lORUQzREVSUl9UT09NQU5ZT1BFUkFUSU9OUyAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzcpCiNkZWZpbmUgV0lORUQzREVSUl9DT05GTElDVElOR1RFWFRVUkVGSUxURVIgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzgpCiNkZWZpbmUgV0lORUQzREVSUl9VTlNVUFBPUlRFREZBQ1RPUlZBTFVFICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNzkpCiNkZWZpbmUgV0lORUQzREVSUl9DT05GTElDVElOR1JFTkRFUlNUQVRFICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwODEpCiNkZWZpbmUgV0lORUQzREVSUl9VTlNVUFBPUlRFRFRFWFRVUkVGSUxURVIgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwODIpCiNkZWZpbmUgV0lORUQzREVSUl9DT05GTElDVElOR1RFWFRVUkVQQUxFVFRFICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwODYpCiNkZWZpbmUgV0lORUQzREVSUl9EUklWRVJJTlRFUk5BTEVSUk9SICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwODcpCiNkZWZpbmUgV0lORUQzREVSUl9OT1RGT1VORCAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIxNTApCiNkZWZpbmUgV0lORUQzREVSUl9NT1JFREFUQSAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIxNTEpCiNkZWZpbmUgV0lORUQzREVSUl9ERVZJQ0VMT1NUICAgICAgICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIxNTIpCiNkZWZpbmUgV0lORUQzREVSUl9ERVZJQ0VOT1RSRVNFVCAgICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIxNTMpCiNkZWZpbmUgV0lORUQzREVSUl9OT1RBVkFJTEFCTEUgICAgICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIxNTQpCiNkZWZpbmUgV0lORUQzREVSUl9PVVRPRlZJREVPTUVNT1JZICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDM4MCkKI2RlZmluZSBXSU5FRDNERVJSX0lOVkFMSURERVZJQ0UgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1NSkKI2RlZmluZSBXSU5FRDNERVJSX0lOVkFMSURDQUxMICAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1NikKI2RlZmluZSBXSU5FRDNERVJSX0RSSVZFUklOVkFMSURDQUxMICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1NykKI2RlZmluZSBXSU5FRDNERVJSX1dBU1NUSUxMRFJBV0lORyAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoNTQwKQojZGVmaW5lIFdJTkVEM0RPS19OT0FVVE9HRU4gICAgICAgICAgICAgICAgICAgICAgICAgTUFLRV9XSU5FRDNEU1RBVFVTKDIxNTkpCgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFByZWRlY2xhcmUgdGhlIGludGVyZmFjZXMKICovCgpzdHJ1Y3QgSVdpbmVEM0Q7CnN0cnVjdCBJV2luZUQzREJhc2U7CnN0cnVjdCBJV2luZUQzRERldmljZTsKc3RydWN0IElXaW5lRDNEUGFsZXR0ZTsKc3RydWN0IElXaW5lRDNEUmVzb3VyY2U7CnN0cnVjdCBJV2luZUQzRFZlcnRleEJ1ZmZlcjsKc3RydWN0IElXaW5lRDNESW5kZXhCdWZmZXI7CnN0cnVjdCBJV2luZUQzREJhc2VUZXh0dXJlOwpzdHJ1Y3QgSVdpbmVEM0RUZXh0dXJlOwpzdHJ1Y3QgSVdpbmVEM0RDdWJlVGV4dHVyZTsKc3RydWN0IElXaW5lRDNEVm9sdW1lVGV4dHVyZTsKc3RydWN0IElXaW5lRDNEU3RhdGVCbG9jazsKc3RydWN0IElXaW5lRDNEU3VyZmFjZTsKc3RydWN0IElXaW5lRDNEVm9sdW1lOwpzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbjsKc3RydWN0IElXaW5lRDNEQmFzZVNoYWRlcjsKc3RydWN0IElXaW5lRDNEVmVydGV4U2hhZGVyOwpzdHJ1Y3QgSVdpbmVEM0RQaXhlbFNoYWRlcjsKc3RydWN0IElXaW5lRDNEUXVlcnk7CnN0cnVjdCBJV2luZUQzRFN3YXBDaGFpbjsKCgovKiB7MTA4RjlDNDQtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0QsIAoweDEwOGY5YzQ0LCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEQmFzZSwKMHg0Njc5OTMxMSwgMHg4ZTBlLCAweDQwY2UsIDB4YjIsIDB4ZWMsIDB4ZGQsIDB4YjksIDB4OWYsIDB4MTgsIDB4ZmMsIDB4YjQpOwoKLyogezEwOEY5QzQ0LTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNERGV2aWNlLCAKMHgxMDhmOWM0NCwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHtmNzU2NzIwYy0zMmI5LTQ0MzktYjVhMy0xZDZjOTcwMzdkOWV9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFBhbGV0dGUsCjB4Zjc1NjcyMGMsIDB4MzJiOSwgMHg0NDM5LCAweGI1LCAweGEzLCAweDFkLCAweDZjLCAweDk3LCAweDAzLCAweDdkLCAweDllKTsKCi8qIHsxRjNCRkIzNC02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFJlc291cmNlLCAKMHgxZjNiZmIzNCwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHsyMTdGNjcxRS02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFZlcnRleEJ1ZmZlciwgCjB4MjE3ZjY3MWUsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7MjQ3NjlFRDgtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RWb2x1bWUsIAoweDI0NzY5ZWQ4LCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKCi8qIHszNEQwMUIxMC02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFN3YXBDaGFpbiwgCjB4MzRkMDFiMTAsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7MzdDRDU1MjYtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RTdXJmYWNlLCAKMHgzN2NkNTUyNiwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCgovKiB7M0EwMkE1NEUtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RJbmRleEJ1ZmZlciwgCjB4M2EwMmE1NGUsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7M0MyQUVCRjYtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RCYXNlVGV4dHVyZSwgCjB4M2MyYWViZjYsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7M0U3MkNDMUMtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RUZXh0dXJlLCAKMHgzZTcyY2MxYywgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHs0MTc1MjkwMC02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzREN1YmVUZXh0dXJlLCAKMHg0MTc1MjkwMCwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHs3QjM5NDcwQy02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFZvbHVtZVRleHR1cmUsIAoweDdiMzk0NzBjLCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyogezdDRDU1QkU2LTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEVmVydGV4RGVjbGFyYXRpb24sIAoweDdjZDU1YmU2LCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyoge0VBQzkzMDY1LUE0REYtNDQ2Ri04NkExLTlFRjJCQ0E0MEEzQ30gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEQmFzZVNoYWRlciwKMHhlYWM5MzA2NSwgMHhhNGRmLCAweDQ0NmYsIDB4ODYsIDB4YTEsIDB4OWUsIDB4ZjIsIDB4YmMsIDB4YTQsIDB4MGEsIDB4M2MpOwoKLyogezdGN0EyQjYwLTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEVmVydGV4U2hhZGVyLCAKMHg3ZjdhMmI2MCwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHs4MTg1MDNEQS02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFBpeGVsU2hhZGVyLCAKMHg4MTg1MDNkYSwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHs4M0IwNzNDRS02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFN0YXRlQmxvY2ssIAoweDgzYjA3M2NlLCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyogezkwNUREQkFDLTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEUXVlcnksIAoweDkwNWRkYmFjLCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENhbGxiYWNrIGZ1bmN0aW9ucyByZXF1aXJlZCBmb3IgcHJlZGVmaW5pbmcgc3VyZmFjZXMgLyBzdGVuY2lscwogKi8KdHlwZWRlZiBIUkVTVUxUIFdJTkFQSSAoKkQzRENCX0NSRUFURVJFTkRFUlRBUkdFVEZOKSAoSVVua25vd24gKnBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVVua25vd24gICAqcFN1cGVyaW9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgICAgICAgV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICBIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzREZPUk1BVCAgRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RNVUxUSVNBTVBMRV9UWVBFIE11bHRpU2FtcGxlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCAgICAgIE11bHRpc2FtcGxlUXVhbGl0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAgICAgICBMb2NrYWJsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IElXaW5lRDNEU3VyZmFjZSAqKnBwU3VyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEUgICAgKnBTaGFyZWRIYW5kbGUpOwoKdHlwZWRlZiBIUkVTVUxUIFdJTkFQSSAoKkQzRENCX0NSRUFURVNVUkZBQ0VGTikgKElVbmtub3duICpwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElVbmtub3duICAgKnBTdXBlcmlvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgICAgICAgSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RGT1JNQVQgRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEICAgICAgVXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRFBPT0wgUG9vbCwgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIExldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKipwcFN1cmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFICAgICpwU2hhcmVkSGFuZGxlKTsKCnR5cGVkZWYgSFJFU1VMVCBXSU5BUEkgKCpEM0RDQl9DUkVBVEVERVBUSFNURU5DSUxTVVJGQUNFRk4pIChJVW5rbm93biAqcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVW5rbm93biAgICpwU3VwZXJpb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICBXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNERk9STUFUICBGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRE1VTFRJU0FNUExFX1RZUEUgTXVsdGlTYW1wbGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEICAgICAgTXVsdGlzYW1wbGVRdWFsaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICAgICAgIERpc2NhcmQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKipwcFN1cmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFICAgICpwU2hhcmVkSGFuZGxlKTsKCgp0eXBlZGVmIEhSRVNVTFQgV0lOQVBJICgqRDNEQ0JfQ1JFQVRFVk9MVU1FRk4pIChJVW5rbm93biAqcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVW5rbm93biAgICpwU3VwZXJpb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICBXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIERlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RGT1JNQVQgIEZvcm1hdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRFBPT0wgUG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCAgICAgIFVzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFZvbHVtZSAqKnBwVm9sdW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRSAgICAqcFNoYXJlZEhhbmRsZSk7Cgp0eXBlZGVmIEhSRVNVTFQgV0lOQVBJICgqRDNEQ0JfQ1JFQVRFQURESVRJT05BTFNXQVBDSEFJTikgKElVbmtub3duICpwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RQUkVTRU5UX1BBUkFNRVRFUlMgKnBQcmVzZW50YXRpb25QYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFN3YXBDaGFpbiAqKnBTd2FwQ2hhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKdHlwZWRlZiBIUkVTVUxUIFdJTkFQSSAoKkQzRENCX0VOVU1ESVNQTEFZTU9ERVNDQUxMQkFDSykgKElVbmtub3duICpwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzREZPUk1BVCBQaXhlbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMT0FUIFJlZnJlc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgY29udGV4dCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZvciBjdXN0b20gaW1wbGljaXQgc3VyZmFjZSAvIHZvbHVtZSBkZXN0cnVjdGlvbi4KICovCnR5cGVkZWYgVUxPTkcgV0lOQVBJICgqRDNEQ0JfREVTVFJPWVNVUkZBQ0VGTikgKHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKnBTdXJmYWNlKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzREJhc2UgaW50ZXJmYWNlCiAqLwoKI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RCYXNlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzREJhc2UsIElVbmtub3duKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCAqKnBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQmFzZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzREJhc2VfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEIGludGVyZmFjZSAKICovCgojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRApERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0QsIElXaW5lRDNEQmFzZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQgKipwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRCBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oVUlOVCxHZXRBZGFwdGVyQ291bnQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoUmVnaXN0ZXJTb2Z0d2FyZURldmljZSkoVEhJU18gdm9pZCAqIHBJbml0aWFsaXplRnVuY3Rpb24pIFBVUkU7CiAgICBTVERNRVRIT0RfKEhNT05JVE9SLEdldEFkYXB0ZXJNb25pdG9yKShUSElTXyBVSU5UIEFkYXB0ZXIpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVJTlQsR2V0QWRhcHRlck1vZGVDb3VudCkoVEhJU18gVUlOVCBBZGFwdGVyLCBXSU5FRDNERk9STUFUIEZvcm1hdCkgUFVSRTsKICAgIFNURE1FVEhPRChFbnVtQWRhcHRlck1vZGVzKShUSElTXyBVSU5UICBBZGFwdGVyLCBVSU5UICBNb2RlLCBXSU5FRDNERk9STUFUIEZvcm1hdCwgV0lORUQzRERJU1BMQVlNT0RFICogcE1vZGUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0QWRhcHRlckRpc3BsYXlNb2RlKShUSElTXyBVSU5UICBBZGFwdGVyLCBXSU5FRDNERElTUExBWU1PREUgKnBNb2RlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEFkYXB0ZXJJZGVudGlmaWVyKShUSElTXyBVSU5UIEFkYXB0ZXIsIERXT1JEIEZsYWdzLCBXSU5FRDNEQURBUFRFUl9JREVOVElGSUVSKiBwSWRlbnRpZmllcikgUFVSRTsKICAgIFNURE1FVEhPRChDaGVja0RldmljZU11bHRpU2FtcGxlVHlwZSkoVEhJU18gVUlOVCAgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgIERldmljZVR5cGUsIFdJTkVEM0RGT1JNQVQgIFN1cmZhY2VGb3JtYXQsIEJPT0wgIFdpbmRvd2VkLCBXSU5FRDNETVVMVElTQU1QTEVfVFlQRSAgTXVsdGlTYW1wbGVUeXBlLCBEV09SRCAqcFF1YWxpdHkpIFBVUkU7CiAgICBTVERNRVRIT0QoQ2hlY2tEZXB0aFN0ZW5jaWxNYXRjaCkoVEhJU18gVUlOVCAgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgIERldmljZVR5cGUsIFdJTkVEM0RGT1JNQVQgIEFkYXB0ZXJGb3JtYXQsIFdJTkVEM0RGT1JNQVQgIFJlbmRlclRhcmdldEZvcm1hdCwgV0lORUQzREZPUk1BVCAgRGVwdGhTdGVuY2lsRm9ybWF0KSBQVVJFOwogICAgU1RETUVUSE9EKENoZWNrRGV2aWNlVHlwZSkoVEhJU18gVUlOVCAgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgIENoZWNrVHlwZSwgV0lORUQzREZPUk1BVCAgRGlzcGxheUZvcm1hdCwgV0lORUQzREZPUk1BVCAgQmFja0J1ZmZlckZvcm1hdCwgQk9PTCAgV2luZG93ZWQpIFBVUkU7CiAgICBTVERNRVRIT0QoQ2hlY2tEZXZpY2VGb3JtYXQpKFRISVNfIFVJTlQgIEFkYXB0ZXIsIFdJTkVEM0RERVZUWVBFICBEZXZpY2VUeXBlLCBXSU5FRDNERk9STUFUICBBZGFwdGVyRm9ybWF0LCBEV09SRCAgVXNhZ2UsIFdJTkVEM0RSRVNPVVJDRVRZUEUgIFJUeXBlLCBXSU5FRDNERk9STUFUICBDaGVja0Zvcm1hdCkgUFVSRTsKICAgIFNURE1FVEhPRChDaGVja0RldmljZUZvcm1hdENvbnZlcnNpb24pKFRISVNfIFVJTlQgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgRGV2aWNlVHlwZSwgV0lORUQzREZPUk1BVCBTb3VyY2VGb3JtYXQsIFdJTkVEM0RGT1JNQVQgVGFyZ2V0Rm9ybWF0KSBQVVJFOwogICAgU1RETUVUSE9EKEdldERldmljZUNhcHMpKFRISVNfIFVJTlQgIEFkYXB0ZXIsIFdJTkVEM0RERVZUWVBFICBEZXZpY2VUeXBlLCBXSU5FRDNEQ0FQUyAqcENhcHMpIFBVUkU7CiAgICBTVERNRVRIT0QoQ3JlYXRlRGV2aWNlKShUSElTXyBVSU5UICBBZGFwdGVyLCBXSU5FRDNEREVWVFlQRSAgRGV2aWNlVHlwZSxIV05EICBoRm9jdXNXaW5kb3csIERXT1JEICBCZWhhdmlvckZsYWdzLCBzdHJ1Y3QgSVdpbmVEM0REZXZpY2UgKipwcFJldHVybmVkRGV2aWNlSW50ZXJmYWNlLCBJVW5rbm93biAqcGFyZW50KSBQVVJFOwoKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRF9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEX0dldEFkYXB0ZXJDb3VudChwKSAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEFkYXB0ZXJDb3VudChwKQojZGVmaW5lIElXaW5lRDNEX1JlZ2lzdGVyU29mdHdhcmVEZXZpY2UocCxhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlZ2lzdGVyU29mdHdhcmVEZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEX0dldEFkYXB0ZXJNb25pdG9yKHAsYSkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEFkYXB0ZXJNb25pdG9yKHAsYSkKI2RlZmluZSBJV2luZUQzRF9HZXRBZGFwdGVyTW9kZUNvdW50KHAsYSxiKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRBZGFwdGVyTW9kZUNvdW50KHAsYSxiKQojZGVmaW5lIElXaW5lRDNEX0VudW1BZGFwdGVyTW9kZXMocCxhLGIsYyxkKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkVudW1BZGFwdGVyTW9kZXMocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEX0dldEFkYXB0ZXJEaXNwbGF5TW9kZShwLGEsYikgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShwLGEsYikKI2RlZmluZSBJV2luZUQzRF9HZXRBZGFwdGVySWRlbnRpZmllcihwLGEsYixjKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRBZGFwdGVySWRlbnRpZmllcihwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEX0NoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKHAsYSxiLGMsZCxlLGYpIChwKS0+bHBWdGJsLT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShwLGEsYixjLGQsZSxmKQojZGVmaW5lIElXaW5lRDNEX0NoZWNrRGVwdGhTdGVuY2lsTWF0Y2gocCxhLGIsYyxkLGUpICAgICAgKHApLT5scFZ0YmwtPkNoZWNrRGVwdGhTdGVuY2lsTWF0Y2gocCxhLGIsYyxkLGUpCiNkZWZpbmUgSVdpbmVEM0RfQ2hlY2tEZXZpY2VUeXBlKHAsYSxiLGMsZCxlKSAgICAgICAgICAgICAocCktPmxwVnRibC0+Q2hlY2tEZXZpY2VUeXBlKHAsYSxiLGMsZCxlKQojZGVmaW5lIElXaW5lRDNEX0NoZWNrRGV2aWNlRm9ybWF0KHAsYSxiLGMsZCxlLGYpICAgICAgICAgKHApLT5scFZ0YmwtPkNoZWNrRGV2aWNlRm9ybWF0KHAsYSxiLGMsZCxlLGYpCiNkZWZpbmUgSVdpbmVEM0RfQ2hlY2tEZXZpY2VGb3JtYXRDb252ZXJzaW9uKHAsYSxiLGMsZCkgICAocCktPmxwVnRibC0+Q2hlY2tEZXZpY2VGb3JtYXRDb252ZXJzaW9uKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRF9HZXREZXZpY2VDYXBzKHAsYSxiLGMpICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2VDYXBzKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RfQ3JlYXRlRGV2aWNlKHAsYSxiLGMsZCxlLGYpICAgICAgICAgICAgICAocCktPmxwVnRibC0+Q3JlYXRlRGV2aWNlKHAsYSxiLGMsZCxlLGYpCiNlbmRpZgoKLyogRGVmaW5lIHRoZSBtYWluIFdpbmVEM0QgZW50cnlwb2ludCAqLwpJV2luZUQzRCogV0lOQVBJIFdpbmVEaXJlY3QzRENyZWF0ZShVSU5UIFNES1ZlcnNpb24sIFVJTlQgZHhWZXJzaW9uLCBJVW5rbm93biAqcGFyZW50KTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRERldmljZSBpbnRlcmZhY2UgCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRERldmljZQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0REZXZpY2UsSVdpbmVEM0RCYXNlKSAKeyAKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0REZXZpY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoQ3JlYXRlVmVydGV4QnVmZmVyKShUSElTXyBVSU5UICBMZW5ndGgsRFdPUkQgIFVzYWdlLERXT1JEICBGVkYsV0lORUQzRFBPT0wgIFBvb2wsc3RydWN0IElXaW5lRDNEVmVydGV4QnVmZmVyICoqcHBWZXJ0ZXhCdWZmZXIsIEhBTkRMRSAqc2hhcmVkSGFuZGxlLCBJVW5rbm93biAqcGFyZW50KSBQVVJFOwogICAgU1RETUVUSE9EKENyZWF0ZUluZGV4QnVmZmVyKShUSElTXyBVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIFdJTkVEM0RGT1JNQVQgRm9ybWF0LCBXSU5FRDNEUE9PTCBQb29sLCBzdHJ1Y3QgSVdpbmVEM0RJbmRleEJ1ZmZlcioqIHBwSW5kZXhCdWZmZXIsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVTdGF0ZUJsb2NrKShUSElTXyBXSU5FRDNEU1RBVEVCTE9DS1RZUEUgVHlwZSwgc3RydWN0IElXaW5lRDNEU3RhdGVCbG9jayAqKnBwU3RhdGVCbG9jaywgSVVua25vd24gKnBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVTdXJmYWNlKShUSElTXyBVSU5UIFdpZHRoLCBVSU5UIEhlaWdodCwgV0lORUQzREZPUk1BVCBGb3JtYXQsICBCT09MIExvY2thYmxlLCBCT09MIERpc2NhcmQsIFVJTlQgTGV2ZWwsICBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiogcHBTdXJmYWNlLCBXSU5FRDNEUkVTT1VSQ0VUWVBFIFR5cGUsIERXT1JEIFVzYWdlLCBXSU5FRDNEUE9PTCBQb29sLCBXSU5FRDNETVVMVElTQU1QTEVfVFlQRSBNdWx0aVNhbXBsZSAsRFdPUkQgTXVsdGlzYW1wbGVRdWFsaXR5LCAgSEFORExFKiBwU2hhcmVkSGFuZGxlLCBXSU5FRDNEU1VSRlRZUEUgSW1wbCwgSVVua25vd24gKnBhcmVudCkgUFVSRTsgICAgCiAgICBTVERNRVRIT0QoQ3JlYXRlVGV4dHVyZSkoVEhJU18gVUlOVCBXaWR0aCwgVUlOVCBIZWlnaHQsIFVJTlQgTGV2ZWxzLCBEV09SRCBVc2FnZSwgV0lORUQzREZPUk1BVCBGb3JtYXQsIFdJTkVEM0RQT09MIFBvb2wsIHN0cnVjdCBJV2luZUQzRFRleHR1cmUqKiBwcFRleHR1cmUsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCwgRDNEQ0JfQ1JFQVRFU1VSRkFDRUZOIHBGbikgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVWb2x1bWVUZXh0dXJlKShUSElTXyBVSU5UIFdpZHRoLCBVSU5UIEhlaWdodCwgVUlOVCBEZXB0aCwgVUlOVCBMZXZlbHMsIERXT1JEIFVzYWdlLCBXSU5FRDNERk9STUFUIEZvcm1hdCwgV0lORUQzRFBPT0wgUG9vbCwgc3RydWN0IElXaW5lRDNEVm9sdW1lVGV4dHVyZSoqIHBwVm9sdW1lVGV4dHVyZSwgSEFORExFKiBwU2hhcmVkSGFuZGxlLCBJVW5rbm93biAqcGFyZW50LCBEM0RDQl9DUkVBVEVWT0xVTUVGTiBwRm4pIFBVUkU7CiAgICBTVERNRVRIT0QoQ3JlYXRlVm9sdW1lKShUSElTXyBVSU5UIFdpZHRoLCBVSU5UIEhlaWdodCwgVUlOVCBEZXB0aCwgRFdPUkQgVXNhZ2UsIFdJTkVEM0RGT1JNQVQgRm9ybWF0LCBXSU5FRDNEUE9PTCBQb29sLCBzdHJ1Y3QgSVdpbmVEM0RWb2x1bWUqKiBwcFZvbHVtZVRleHR1cmUsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVDdWJlVGV4dHVyZSkoVEhJU18gVUlOVCBFZGdlTGVuZ3RoLCBVSU5UIExldmVscywgRFdPUkQgVXNhZ2UsIFdJTkVEM0RGT1JNQVQgRm9ybWF0LCBXSU5FRDNEUE9PTCBQb29sLCBzdHJ1Y3QgSVdpbmVEM0RDdWJlVGV4dHVyZSoqIHBwQ3ViZVRleHR1cmUsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCwgRDNEQ0JfQ1JFQVRFU1VSRkFDRUZOIHBGbikgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVRdWVyeSkoVEhJU18gV0lORUQzRFFVRVJZVFlQRSBUeXBlLCBzdHJ1Y3QgSVdpbmVEM0RRdWVyeSAqKnBwUXVlcnksIElVbmtub3duICpwUGFyZW50KTsKICAgIFNURE1FVEhPRChDcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKShUSElTXyBXSU5FRDNEUFJFU0VOVF9QQVJBTUVURVJTICpwUHJlc2VudGF0aW9uUGFyYW1ldGVycywgc3RydWN0IElXaW5lRDNEU3dhcENoYWluICoqcFN3YXBDaGFpbiwgSVVua25vd24gKnBQYXJlbnQsIEQzRENCX0NSRUFURVJFTkRFUlRBUkdFVEZOIHBGbiwgRDNEQ0JfQ1JFQVRFREVQVEhTVEVOQ0lMU1VSRkFDRUZOIHBGbjIpOwogICAgU1RETUVUSE9EKENyZWF0ZVZlcnRleERlY2xhcmF0aW9uKShUSElTXyBDT05TVCBWT0lEKiBwRGVjbGFyYXRpb24sIHN0cnVjdCBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uKiogcHBEZWNsLCBJVW5rbm93biogcFBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVWZXJ0ZXhTaGFkZXIpKFRISVNfIENPTlNUIERXT1JEICpwRGVjbGFyYXRpb24sIENPTlNUIERXT1JEKiBwRnVuY3Rpb24sIHN0cnVjdCBJV2luZUQzRFZlcnRleFNoYWRlcioqIHBwU2hhZGVyLCBJVW5rbm93biAqcFBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVQaXhlbFNoYWRlcikoVEhJU18gQ09OU1QgRFdPUkQqIHBGdW5jdGlvbiwgc3RydWN0IElXaW5lRDNEUGl4ZWxTaGFkZXIqKiBwcFNoYWRlciwgSVVua25vd24gKnBQYXJlbnQpIFBVUkU7CiAgICBTVERNRVRIT0RfKEhSRVNVTFQsQ3JlYXRlUGFsZXR0ZSkoVEhJU18gRFdPUkQgRmxhZ3MsIFBBTEVUVEVFTlRSWSAqUGFsRW50LCBzdHJ1Y3QgSVdpbmVEM0RQYWxldHRlICoqUGFsZXR0ZSwgSVVua25vd24gKlBhcmVudCk7CiAgICBTVERNRVRIT0QoSW5pdDNEKShUSElTXyBXSU5FRDNEUFJFU0VOVF9QQVJBTUVURVJTKiBwUHJlc2VudGF0aW9uUGFyYW1ldGVycywgRDNEQ0JfQ1JFQVRFQURESVRJT05BTFNXQVBDSEFJTiBEM0RDQl9DcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKTsKICAgIFNURE1FVEhPRChVbmluaXQzRCkoVEhJUyk7CiAgICBTVERNRVRIT0RfKHZvaWQsIFNldEZ1bGxzY3JlZW4pKFRISVNfIEJPT0wgZnVsbHNjcmVlbik7CiAgICBTVERNRVRIT0QoRW51bURpc3BsYXlNb2RlcykoVEhJU18gRFdPUkQgRmxhZ3MsIFVJTlQgV2lkdGgsIFVJTlQgSGVpZ2h0LCBXSU5FRDNERk9STUFUIEZvcm1hdCwgdm9pZCAqY29udGV4dCwgRDNEQ0JfRU5VTURJU1BMQVlNT0RFU0NBTExCQUNLIGNiKSBQVVJFOwogICAgU1RETUVUSE9EKEV2aWN0TWFuYWdlZFJlc291cmNlcykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUlOVCwgR2V0QXZhaWxhYmxlVGV4dHVyZU1lbSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRCYWNrQnVmZmVyKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIFVJTlQgQmFja0J1ZmZlciwgV0lORUQzREJBQ0tCVUZGRVJfVFlQRSwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSoqIHBwQmFja0J1ZmZlcikgUFVSRTsKICAgIFNURE1FVEhPRChHZXRDcmVhdGlvblBhcmFtZXRlcnMpKFRISVNfIFdJTkVEM0RERVZJQ0VfQ1JFQVRJT05fUEFSQU1FVEVSUyAqcFBhcmFtZXRlcnMpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGV2aWNlQ2FwcykoVEhJU18gV0lORUQzRENBUFMqIHBDYXBzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERpcmVjdDNEKShUSElTXyBJV2luZUQzRCoqIHBwRDNEKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERpc3BsYXlNb2RlKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIFdJTkVEM0RESVNQTEFZTU9ERSogcE1vZGUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0RGlzcGxheU1vZGUpKFRISVNfIFVJTlQgaVN3YXBDaGFpbiwgV0lORUQzRERJU1BMQVlNT0RFKiBwTW9kZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRIV05EKShUSElTXyBIV05EICpod25kKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEhXTkQpKFRISVNfIEhXTkQgaHduZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUlOVCwgR2V0TnVtYmVyT2ZTd2FwQ2hhaW5zKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFJhc3RlclN0YXR1cykoVEhJU18gVUlOVCBpU3dhcENoYWluLCBXSU5FRDNEUkFTVEVSX1NUQVRVUyogcFJhc3RlclN0YXR1cykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRTd2FwQ2hhaW4pKFRISVNfIFVJTlQgaVN3YXBDaGFpbiwgc3RydWN0IElXaW5lRDNEU3dhcENoYWluICoqcFN3YXBDaGFpbikgUFVSRTsKICAgIFNURE1FVEhPRChSZXNldCkoVEhJU18gV0lORUQzRFBSRVNFTlRfUEFSQU1FVEVSUyogcFByZXNlbnRhdGlvblBhcmFtZXRlcnMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0RGlhbG9nQm94TW9kZSkoVEhJU18gQk9PTCBiRW5hYmxlRGlhbG9ncykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRDdXJzb3JQcm9wZXJ0aWVzKShUSElTXyBVSU5UIFhIb3RTcG90LCBVSU5UIFlIb3RTcG90LCBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiBwQ3Vyc29yQml0bWFwKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBTZXRDdXJzb3JQb3NpdGlvbikoVEhJU18gaW50IFhTY3JlZW5TcGFjZSwgaW50IFlTY3JlZW5TcGFjZSwgRFdPUkQgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0RfKEJPT0wsIFNob3dDdXJzb3IpKFRISVNfIEJPT0wgYlNob3cpIFBVUkU7CiAgICBTVERNRVRIT0QoVGVzdENvb3BlcmF0aXZlTGV2ZWwpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q2xpcFBsYW5lKShUSElTXyBEV09SRCAgSW5kZXgsQ09OU1QgZmxvYXQgKiBwUGxhbmUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0Q2xpcFBsYW5lKShUSElTXyBEV09SRCAgSW5kZXgsZmxvYXQgKiBwUGxhbmUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q2xpcFN0YXR1cykoVEhJU18gQ09OU1QgV0lORUQzRENMSVBTVEFUVVMgKiBwQ2xpcFN0YXR1cykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRDbGlwU3RhdHVzKShUSElTXyBXSU5FRDNEQ0xJUFNUQVRVUyAqIHBDbGlwU3RhdHVzKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEN1cnJlbnRUZXh0dXJlUGFsZXR0ZSkoVEhJU18gVUlOVCBQYWxldHRlTnVtYmVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEN1cnJlbnRUZXh0dXJlUGFsZXR0ZSkoVEhJU18gVUlOVCAqUGFsZXR0ZU51bWJlcikgUFVSRTsKICAgIFNURE1FVEhPRChTZXREZXB0aFN0ZW5jaWxTdXJmYWNlKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiBwTmV3WlN0ZW5jaWwpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVwdGhTdGVuY2lsU3VyZmFjZSkoVEhJU18gc3RydWN0IElXaW5lRDNEU3VyZmFjZSoqIHBwWlN0ZW5jaWxTdXJmYWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEZWRikoVEhJU18gRFdPUkQgIGZ2ZikgUFVSRTsKICAgIFNURE1FVEhPRChHZXRGVkYpKFRISVNfIERXT1JEICogcGZ2ZikgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgU2V0R2FtbWFSYW1wKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIERXT1JEIEZsYWdzLCBDT05TVCBXSU5FRDNER0FNTUFSQU1QKiBwUmFtcCkgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgR2V0R2FtbWFSYW1wKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIFdJTkVEM0RHQU1NQVJBTVAqIHBSYW1wKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEluZGljZXMpKFRISVNfIHN0cnVjdCBJV2luZUQzREluZGV4QnVmZmVyICogcEluZGV4RGF0YSxVSU5UICBCYXNlVmVydGV4SW5kZXgpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0SW5kaWNlcykoVEhJU18gc3RydWN0IElXaW5lRDNESW5kZXhCdWZmZXIgKiogcHBJbmRleERhdGEsVUlOVCAqIHBCYXNlVmVydGV4SW5kZXgpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0TGlnaHQpKFRISVNfIERXT1JEICBJbmRleCxDT05TVCBXSU5FRDNETElHSFQgKiBwTGlnaHQpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0TGlnaHQpKFRISVNfIERXT1JEICBJbmRleCxXSU5FRDNETElHSFQgKiBwTGlnaHQpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0TGlnaHRFbmFibGUpKFRISVNfIERXT1JEICBJbmRleCxCT09MICBFbmFibGUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0TGlnaHRFbmFibGUpKFRISVNfIERXT1JEICBJbmRleCxCT09MICogcEVuYWJsZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRNYXRlcmlhbCkoVEhJU18gQ09OU1QgV0lORUQzRE1BVEVSSUFMICogcE1hdGVyaWFsKSBQVVJFOwogICAgU1RETUVUSE9EKEdldE1hdGVyaWFsKShUSElTXyBXSU5FRDNETUFURVJJQUwgKnBNYXRlcmlhbCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXROUGF0Y2hNb2RlKShUSElTXyBmbG9hdCBuU2VnbWVudHMpIFBVUkU7CiAgICBTVERNRVRIT0RfKGZsb2F0LCBHZXROUGF0Y2hNb2RlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFBhbGV0dGVFbnRyaWVzKShUSElTXyBVSU5UIFBhbGV0dGVOdW1iZXIsIENPTlNUIFBBTEVUVEVFTlRSWSogcEVudHJpZXMpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UGFsZXR0ZUVudHJpZXMpKFRISVNfIFVJTlQgUGFsZXR0ZU51bWJlcixQQUxFVFRFRU5UUlkqIHBFbnRyaWVzKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFBpeGVsU2hhZGVyKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RQaXhlbFNoYWRlciAgKnBTaGFkZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UGl4ZWxTaGFkZXIpKFRISVNfIHN0cnVjdCBJV2luZUQzRFBpeGVsU2hhZGVyICoqcHBTaGFkZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UGl4ZWxTaGFkZXJDb25zdGFudEIpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgQ09OU1QgQk9PTCogcENvbnN0YW50RGF0YSwgVUlOVCAgQm9vbENvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFBpeGVsU2hhZGVyQ29uc3RhbnRCKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIEJPT0wqIHBDb25zdGFudERhdGEsIFVJTlQgQm9vbENvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKFNldFBpeGVsU2hhZGVyQ29uc3RhbnRJKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIENPTlNUIGludCogcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0aUNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFBpeGVsU2hhZGVyQ29uc3RhbnRJKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIGludCogcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0aUNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKFNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIENPTlNUIGZsb2F0KiBwQ29uc3RhbnREYXRhLCBVSU5UIFZlY3RvcjRmQ291bnQpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UGl4ZWxTaGFkZXJDb25zdGFudEYpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgZmxvYXQqIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGZDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRSZW5kZXJTdGF0ZSkoVEhJU18gV0lORUQzRFJFTkRFUlNUQVRFVFlQRSAgU3RhdGUsIERXT1JEICBWYWx1ZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRSZW5kZXJTdGF0ZSkoVEhJU18gV0lORUQzRFJFTkRFUlNUQVRFVFlQRSAgU3RhdGUsIERXT1JEICogcFZhbHVlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFJlbmRlclRhcmdldCkoVEhJU18gRFdPUkQgUmVuZGVyVGFyZ2V0SW5kZXgsIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBSZW5kZXJUYXJnZXQpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UmVuZGVyVGFyZ2V0KShUSElTXyBEV09SRCBSZW5kZXJUYXJnZXRJbmRleCwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSoqIHBwUmVuZGVyVGFyZ2V0KSBQVVJFOwogICAgU1RETUVUSE9EKFNldEZyb250QmFja0J1ZmZlcnMpKFRISVNfIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKkZyb250LCBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlICpCYWNrKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFNhbXBsZXJTdGF0ZSkoVEhJU18gRFdPUkQgU2FtcGxlciwgV0lORUQzRFNBTVBMRVJTVEFURVRZUEUgVHlwZSwgRFdPUkQgVmFsdWUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0U2FtcGxlclN0YXRlKShUSElTXyBEV09SRCBTYW1wbGVyLCBXSU5FRDNEU0FNUExFUlNUQVRFVFlQRSBUeXBlLCBEV09SRCogVmFsdWUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0U2Npc3NvclJlY3QpKFRISVNfIENPTlNUIFJFQ1QqIHBSZWN0KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFNjaXNzb3JSZWN0KShUSElTXyBSRUNUKiBwUmVjdCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRTb2Z0d2FyZVZlcnRleFByb2Nlc3NpbmcpKFRISVNfIEJPT0wgYlNvZnR3YXJlKSBQVVJFOwogICAgU1RETUVUSE9EXyhCT09MLCBHZXRTb2Z0d2FyZVZlcnRleFByb2Nlc3NpbmcpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0U3RyZWFtU291cmNlKShUSElTXyBVSU5UICBTdHJlYW1OdW1iZXIsc3RydWN0IElXaW5lRDNEVmVydGV4QnVmZmVyICogcFN0cmVhbURhdGEsVUlOVCBPZmZzZXQsVUlOVCAgU3RyaWRlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFN0cmVhbVNvdXJjZSkoVEhJU18gVUlOVCAgU3RyZWFtTnVtYmVyLHN0cnVjdCBJV2luZUQzRFZlcnRleEJ1ZmZlciAqKiBwcFN0cmVhbURhdGEsVUlOVCAqcE9mZnNldCwgVUlOVCAqIHBTdHJpZGUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0U3RyZWFtU291cmNlRnJlcSkoVEhJU18gVUlOVCBTdHJlYW1OdW1iZXIsIFVJTlQgRGl2aWRlcikgUFVSRTsKICAgIFNURE1FVEhPRChHZXRTdHJlYW1Tb3VyY2VGcmVxKShUSElTXyBVSU5UIFN0cmVhbU51bWJlciwgVUlOVCogRGl2aWRlcikgUFVSRTsKICAgIFNURE1FVEhPRChTZXRUZXh0dXJlKShUSElTXyBEV09SRCBTdGFnZSwgc3RydWN0IElXaW5lRDNEQmFzZVRleHR1cmUqIHBUZXh0dXJlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFRleHR1cmUpKFRISVNfIERXT1JEIFN0YWdlLCBzdHJ1Y3QgSVdpbmVEM0RCYXNlVGV4dHVyZSoqIHBwVGV4dHVyZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRUZXh0dXJlU3RhZ2VTdGF0ZSkoVEhJU18gRFdPUkQgU3RhZ2UsIFdJTkVEM0RURVhUVVJFU1RBR0VTVEFURVRZUEUgVHlwZSxEV09SRCBWYWx1ZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRUZXh0dXJlU3RhZ2VTdGF0ZSkoVEhJU18gRFdPUkQgU3RhZ2UsIFdJTkVEM0RURVhUVVJFU1RBR0VTVEFURVRZUEUgVHlwZSxEV09SRCAqcFZhbHVlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFRyYW5zZm9ybSkoVEhJU18gV0lORUQzRFRSQU5TRk9STVNUQVRFVFlQRSAgU3RhdGUsIENPTlNUIFdJTkVEM0RNQVRSSVggKiBwTWF0cml4KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFRyYW5zZm9ybSkoVEhJU18gV0lORUQzRFRSQU5TRk9STVNUQVRFVFlQRSAgU3RhdGUsIFdJTkVEM0RNQVRSSVggKiBwTWF0cml4KSBQVVJFOwogICAgU1RETUVUSE9EKFNldFZlcnRleERlY2xhcmF0aW9uKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbiogcERlY2wpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0VmVydGV4RGVjbGFyYXRpb24pKFRISVNfIHN0cnVjdCBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uKiogcHBEZWNsKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFZlcnRleFNoYWRlcikoVEhJU18gc3RydWN0IElXaW5lRDNEVmVydGV4U2hhZGVyKiBwU2hhZGVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFZlcnRleFNoYWRlcikoVEhJU18gc3RydWN0IElXaW5lRDNEVmVydGV4U2hhZGVyKiogcHBTaGFkZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIENPTlNUIEJPT0wqICBwQ29uc3RhbnREYXRhLCBVSU5UIEJvb2xDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgQk9PTCogICAgICAgIHBDb25zdGFudERhdGEsIFVJTlQgQm9vbENvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKFNldFZlcnRleFNoYWRlckNvbnN0YW50SSkoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBDT05TVCBpbnQqICAgcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0aUNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFZlcnRleFNoYWRlckNvbnN0YW50SSkoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBpbnQqICAgICAgICAgcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0aUNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKFNldFZlcnRleFNoYWRlckNvbnN0YW50RikoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBDT05TVCBmbG9hdCogcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0ZkNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFZlcnRleFNoYWRlckNvbnN0YW50RikoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBmbG9hdCogICAgICAgcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0ZkNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKFNldFZpZXdwb3J0KShUSElTXyBDT05TVCBXSU5FRDNEVklFV1BPUlQgKiBwVmlld3BvcnQpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0Vmlld3BvcnQpKFRISVNfIFdJTkVEM0RWSUVXUE9SVCAqIHBWaWV3cG9ydCkgUFVSRTsKICAgIFNURE1FVEhPRChNdWx0aXBseVRyYW5zZm9ybSkoVEhJU18gV0lORUQzRFRSQU5TRk9STVNUQVRFVFlQRSAgU3RhdGUsIENPTlNUIFdJTkVEM0RNQVRSSVggKiBwTWF0cml4KSBQVVJFOwogICAgU1RETUVUSE9EKFZhbGlkYXRlRGV2aWNlKShUSElTXyBEV09SRCogcE51bVBhc3NlcykgUFVSRTsKICAgIFNURE1FVEhPRChQcm9jZXNzVmVydGljZXMpKFRISVNfIFVJTlQgU3JjU3RhcnRJbmRleCwgVUlOVCBEZXN0SW5kZXgsIFVJTlQgVmVydGV4Q291bnQsIHN0cnVjdCBJV2luZUQzRFZlcnRleEJ1ZmZlciogcERlc3RCdWZmZXIsIHN0cnVjdCBJV2luZUQzRFZlcnRleEJ1ZmZlciogcFZlcnRleERlY2wsIERXT1JEIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEJlZ2luU3RhdGVCbG9jaykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChFbmRTdGF0ZUJsb2NrKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RTdGF0ZUJsb2NrKiogcHBTdGF0ZUJsb2NrKSBQVVJFOwogICAgU1RETUVUSE9EKEJlZ2luU2NlbmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoRW5kU2NlbmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoUHJlc2VudCkoVEhJU18gQ09OU1QgUkVDVCAqIHBTb3VyY2VSZWN0LENPTlNUIFJFQ1QgKiBwRGVzdFJlY3QsSFdORCAgaERlc3RXaW5kb3dPdmVycmlkZSxDT05TVCBSR05EQVRBICogcERpcnR5UmVnaW9uKSBQVVJFOwogICAgU1RETUVUSE9EKENsZWFyKShUSElTXyBEV09SRCBDb3VudCwgQ09OU1QgV0lORUQzRFJFQ1QgKiBwUmVjdHMsIERXT1JEIEZsYWdzLCBXSU5FRDNEQ09MT1IgQ29sb3IsIGZsb2F0IFosIERXT1JEIFN0ZW5jaWwpIFBVUkU7CiAgICBTVERNRVRIT0QoRHJhd1ByaW1pdGl2ZSkoVEhJU18gV0lORUQzRFBSSU1JVElWRVRZUEUgUHJpbWl0aXZlVHlwZSwgVUlOVCBTdGFydFZlcnRleCwgVUlOVCBQcmltaXRpdmVDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChEcmF3SW5kZXhlZFByaW1pdGl2ZSkoVEhJU18gV0lORUQzRFBSSU1JVElWRVRZUEUgUHJpbWl0aXZlVHlwZSwgSU5UIGJhc2VWSWR4LCBVSU5UIG1pbkluZGV4LCBVSU5UIE51bVZlcnRpY2VzLCBVSU5UIHN0YXJ0SW5kZXgsIFVJTlQgcHJpbUNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKERyYXdQcmltaXRpdmVVUCkoVEhJU18gV0lORUQzRFBSSU1JVElWRVRZUEUgUHJpbWl0aXZlVHlwZSwgVUlOVCBQcmltaXRpdmVDb3VudCwgQ09OU1Qgdm9pZCAqIHBWZXJ0ZXhTdHJlYW1aZXJvRGF0YSwgVUlOVCBWZXJ0ZXhTdHJlYW1aZXJvU3RyaWRlKSBQVVJFOwogICAgU1RETUVUSE9EKERyYXdJbmRleGVkUHJpbWl0aXZlVVApKFRISVNfIFdJTkVEM0RQUklNSVRJVkVUWVBFIFByaW1pdGl2ZVR5cGUsIFVJTlQgTWluVmVydGV4SW5kZXgsIFVJTlQgTnVtVmVydGV4SW5kaWNlcywgVUlOVCBQcmltaXRpdmVDb3VudCwgQ09OU1Qgdm9pZCAqIHBJbmRleERhdGEsIFdJTkVEM0RGT1JNQVQgSW5kZXhEYXRhRm9ybWF0LCBDT05TVCB2b2lkICogcFZlcnRleFN0cmVhbVplcm9EYXRhLCBVSU5UIFZlcnRleFN0cmVhbVplcm9TdHJpZGUpIFBVUkU7CiAgICBTVERNRVRIT0QoRHJhd1ByaW1pdGl2ZVN0cmlkZWQpKFRISVNfIFdJTkVEM0RQUklNSVRJVkVUWVBFIFByaW1pdGl2ZVR5cGUsIFVJTlQgUHJpbWl0aXZlQ291bnQsIFdpbmVEaXJlY3QzRFZlcnRleFN0cmlkZWREYXRhICpEcmF3UHJpbVN0cmlkZURhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoRHJhd1JlY3RQYXRjaCkoVEhJU18gVUlOVCBIYW5kbGUsIENPTlNUIGZsb2F0KiBwTnVtU2VncywgQ09OU1QgV0lORUQzRFJFQ1RQQVRDSF9JTkZPKiBwUmVjdFBhdGNoSW5mbykgUFVSRTsKICAgIFNURE1FVEhPRChEcmF3VHJpUGF0Y2gpKFRISVNfIFVJTlQgSGFuZGxlLCBDT05TVCBmbG9hdCogcE51bVNlZ3MsIENPTlNUIFdJTkVEM0RUUklQQVRDSF9JTkZPKiBwVHJpUGF0Y2hJbmZvKSBQVVJFOwogICAgU1RETUVUSE9EKERlbGV0ZVBhdGNoKShUSElTXyBVSU5UIEhhbmRsZSkgUFVSRTsKICAgIFNURE1FVEhPRChDb2xvckZpbGwpKFRISVNfIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBTdXJmYWNlLCBDT05TVCBXSU5FRDNEUkVDVCogcFJlY3QsIFdJTkVEM0RDT0xPUiBjb2xvcikgUFVSRTsKICAgIFNURE1FVEhPRChVcGRhdGVUZXh0dXJlKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RCYXNlVGV4dHVyZSAqcFNvdXJjZVRleHR1cmUsIHN0cnVjdCBJV2luZUQzREJhc2VUZXh0dXJlICpwRGVzdGluYXRpb25UZXh0dXJlKSBQVVJFOwogICAgU1RETUVUSE9EKFVwZGF0ZVN1cmZhY2UpKFRISVNfIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBTb3VyY2VTdXJmYWNlLCBDT05TVCBSRUNUKiBwU291cmNlUmVjdCwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSogcERlc3RpbmF0aW9uU3VyZmFjZSwgQ09OU1QgUE9JTlQqIHBEZXN0UG9pbnQpIFBVUkU7CiAgICBTVERNRVRIT0QoU3RyZXRjaFJlY3QpKFRISVNfIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBTb3VyY2VTdXJmYWNlLCBDT05TVCBSRUNUKiBwU291cmNlUmVjdCwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSogcERlc3RpbmF0aW9uU3VyZmFjZSwgQ09OU1QgUkVDVCogcERlc3RSZWN0LCBXSU5FRDNEVEVYVFVSRUZJTFRFUlRZUEUgRmlsdGVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFJlbmRlclRhcmdldERhdGEpKFRISVNfIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBSZW5kZXJUYXJnZXQsIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBTdXJmYWNlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEZyb250QnVmZmVyRGF0YSkoVEhJU18gVUlOVCBpU3dhcENoYWluLHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBTdXJmYWNlKSBQVVJFOwogICAgLyoqKiBJbnRlcm5hbCB1c2UgSVdpbmVEM0RldmljZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8odm9pZCwgU2V0dXBUZXh0dXJlU3RhdGVzKShUSElTXyBEV09SRCBTdGFnZSwgRFdPUkQgdGV4dHVyZV9pZHgsIERXT1JEIEZsYWdzKTsKICAgIC8qKiogb2JqZWN0IHRyYWNraW5nICoqKi8KICAgIFNURE1FVEhPRF8odm9pZCwgUmVzb3VyY2VSZWxlYXNlZCkoVEhJU18gc3RydWN0IElXaW5lRDNEUmVzb3VyY2UgKnJlc291cmNlKTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNERGV2aWNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVZlcnRleEJ1ZmZlcihwLGEsYixjLGQsZSxmLGcpICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVZlcnRleEJ1ZmZlcihwLGEsYixjLGQsZSxmLGcpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfQ3JlYXRlSW5kZXhCdWZmZXIocCxhLGIsYyxkLGUsZixnKSAgICAgICAocCktPmxwVnRibC0+Q3JlYXRlSW5kZXhCdWZmZXIocCxhLGIsYyxkLGUsZixnKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVN0YXRlQmxvY2socCxhLGIsYykgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVN0YXRlQmxvY2socCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVTdXJmYWNlKHAsYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8pICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVN1cmZhY2UocCxhLGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbykKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVUZXh0dXJlKHAsYSxiLGMsZCxlLGYsZyxoLGksaikgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVUZXh0dXJlKHAsYSxiLGMsZCxlLGYsZyxoLGksaikKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVWb2x1bWVUZXh0dXJlKHAsYSxiLGMsZCxlLGYsZyxoLGksaixrKSAgICAocCktPmxwVnRibC0+Q3JlYXRlVm9sdW1lVGV4dHVyZShwLGEsYixjLGQsZSxmLGcsaCxpLGosaykKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVWb2x1bWUocCxhLGIsYyxkLGUsZixnLGgsaSkgICAgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVWb2x1bWUocCxhLGIsYyxkLGUsZixnLGgsaSkKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVDdWJlVGV4dHVyZShwLGEsYixjLGQsZSxmLGcsaCxpKSAgIChwKS0+bHBWdGJsLT5DcmVhdGVDdWJlVGV4dHVyZShwLGEsYixjLGQsZSxmLGcsaCxpKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVF1ZXJ5KHAsYSxiLGMpICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVF1ZXJ5KHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfQ3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbihwLGEsYixjLGQsZSkgICAocCktPmxwVnRibC0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbihwLGEsYixjLGQsZSkKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihwLGIsYyxkKSAgICAgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihwLGIsYyxkKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVZlcnRleFNoYWRlcihwLGEsYixjLGQpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVZlcnRleFNoYWRlcihwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfQ3JlYXRlUGl4ZWxTaGFkZXIocCxhLGIsYykgICAgICAgICAgICAgICAocCktPmxwVnRibC0+Q3JlYXRlUGl4ZWxTaGFkZXIocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVQYWxldHRlKHAsIGEsIGIsIGMsIGQpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVQYWxldHRlKHAsIGEsIGIsIGMsIGQpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfSW5pdDNEKHAsIGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+SW5pdDNEKHAsIGEsIGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfVW5pbml0M0QocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VW5pbml0M0QocCkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRGdWxsc2NyZWVuKHAsIGEpICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRGdWxsc2NyZWVuKHAsIGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRW51bURpc3BsYXlNb2RlcyhwLGEsYixjLGQsZSxmKSAgICAgICAgICAocCktPmxwVnRibC0+RW51bURpc3BsYXlNb2RlcyhwLGEsYixjLGQsZSxmKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0V2aWN0TWFuYWdlZFJlc291cmNlcyhwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkV2aWN0TWFuYWdlZFJlc291cmNlcyhwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldEF2YWlsYWJsZVRleHR1cmVNZW0ocCkgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEF2YWlsYWJsZVRleHR1cmVNZW0ocCkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRCYWNrQnVmZmVyKHAsYSxiLGMsZCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRCYWNrQnVmZmVyKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRDcmVhdGlvblBhcmFtZXRlcnMocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRDcmVhdGlvblBhcmFtZXRlcnMocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldERldmljZUNhcHMocCxhKSAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZUNhcHMocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldERpcmVjdDNEKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERpcmVjdDNEKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXREaXNwbGF5TW9kZShwLGEsYikgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREaXNwbGF5TW9kZShwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXREaXNwbGF5TW9kZShwLGEsYikgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXREaXNwbGF5TW9kZShwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRIV05EKHAsIGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRIV05EKHAsIGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0SFdORChwLCBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0SFdORChwLCBhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldE51bWJlck9mU3dhcENoYWlucyhwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldE51bWJlck9mU3dhcENoYWlucyhwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1Jlc2V0KHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlc2V0KHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXREaWFsb2dCb3hNb2RlKHAsYSkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXREaWFsb2dCb3hNb2RlKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRDdXJzb3JQcm9wZXJ0aWVzKHAsYSxiLGMpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRDdXJzb3JQcm9wZXJ0aWVzKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0Q3Vyc29yUG9zaXRpb24ocCxhLGIsYykgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0Q3Vyc29yUG9zaXRpb24ocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9TaG93Q3Vyc29yKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TaG93Q3Vyc29yKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9UZXN0Q29vcGVyYXRpdmVMZXZlbChwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5UZXN0Q29vcGVyYXRpdmVMZXZlbChwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldEZWRihwLGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEZWRihwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0RlZGKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RlZGKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRDbGlwUGxhbmUocCxhLGIpICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRDbGlwUGxhbmUocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0Q2xpcFBsYW5lKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0Q2xpcFBsYW5lKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldENsaXBTdGF0dXMocCxhKSAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldENsaXBTdGF0dXMocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldENsaXBTdGF0dXMocCxhKSAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldENsaXBTdGF0dXMocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldEN1cnJlbnRUZXh0dXJlUGFsZXR0ZShwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEN1cnJlbnRUZXh0dXJlUGFsZXR0ZShwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0Q3VycmVudFRleHR1cmVQYWxldHRlKHAsYSkgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0Q3VycmVudFRleHR1cmVQYWxldHRlKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKHAsYSkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKHAsYSkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXB0aFN0ZW5jaWxTdXJmYWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRHYW1tYVJhbXAocCxhLGIsYykgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRHYW1tYVJhbXAocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRHYW1tYVJhbXAocCxhLGIpICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRHYW1tYVJhbXAocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0SW5kaWNlcyhwLGEsYikgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0SW5kaWNlcyhwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRJbmRpY2VzKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRJbmRpY2VzKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldExpZ2h0KHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldExpZ2h0KHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldExpZ2h0KHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExpZ2h0KHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldExpZ2h0RW5hYmxlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldExpZ2h0RW5hYmxlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldExpZ2h0RW5hYmxlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExpZ2h0RW5hYmxlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldE1hdGVyaWFsKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldE1hdGVyaWFsKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRNYXRlcmlhbChwLGEpICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRNYXRlcmlhbChwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0TlBhdGNoTW9kZShwLGEpICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0TlBhdGNoTW9kZShwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0TlBhdGNoTW9kZShwKSAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0TlBhdGNoTW9kZShwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFBhbGV0dGVFbnRyaWVzKHAsYSxiKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFBhbGV0dGVFbnRyaWVzKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFBhbGV0dGVFbnRyaWVzKHAsYSxiKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhbGV0dGVFbnRyaWVzKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFBpeGVsU2hhZGVyKHAsYSkgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFBpeGVsU2hhZGVyKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRQaXhlbFNoYWRlcihwLGEpICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQaXhlbFNoYWRlcihwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0UGl4ZWxTaGFkZXJDb25zdGFudEIocCxhLGIsYykgICAgICAgICAocCktPmxwVnRibC0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEIocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRQaXhlbFNoYWRlckNvbnN0YW50QihwLGEsYixjKSAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQaXhlbFNoYWRlckNvbnN0YW50QihwLGEsYixjKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFBpeGVsU2hhZGVyQ29uc3RhbnRJKHAsYSxiLGMpICAgICAgICAgKHApLT5scFZ0YmwtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRJKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0UGl4ZWxTaGFkZXJDb25zdGFudEkocCxhLGIsYykgICAgICAgICAocCktPmxwVnRibC0+R2V0UGl4ZWxTaGFkZXJDb25zdGFudEkocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRQaXhlbFNoYWRlckNvbnN0YW50RihwLGEsYixjKSAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50RihwLGEsYixjKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHAsYSxiLGMpICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0UmFzdGVyU3RhdHVzKHAsYSxiKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UmFzdGVyU3RhdHVzKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFJlbmRlclN0YXRlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFJlbmRlclN0YXRlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFJlbmRlclN0YXRlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFJlbmRlclN0YXRlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFJlbmRlclRhcmdldChwLGEsYikgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFJlbmRlclRhcmdldChwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRSZW5kZXJUYXJnZXQocCxhLGIpICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRSZW5kZXJUYXJnZXQocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0RnJvbnRCYWNrQnVmZmVycyhwLCBhLCBiKSAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0RnJvbnRCYWNrQnVmZmVycyhwLGEsYik7CiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0U2FtcGxlclN0YXRlKHAsYSxiLGMpICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0U2FtcGxlclN0YXRlKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0U2FtcGxlclN0YXRlKHAsYSxiLGMpICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0U2FtcGxlclN0YXRlKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0U2Npc3NvclJlY3QocCxhKSAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0U2Npc3NvclJlY3QocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFNjaXNzb3JSZWN0KHAsYSkgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFNjaXNzb3JSZWN0KHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRTb2Z0d2FyZVZlcnRleFByb2Nlc3NpbmcocCxhKSAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRTb2Z0d2FyZVZlcnRleFByb2Nlc3NpbmcocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFNvZnR3YXJlVmVydGV4UHJvY2Vzc2luZyhwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFNvZnR3YXJlVmVydGV4UHJvY2Vzc2luZyhwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFN0cmVhbVNvdXJjZShwLGEsYixjLGQpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFN0cmVhbVNvdXJjZShwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0U3RyZWFtU291cmNlKHAsYSxiLGMsZCkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0U3RyZWFtU291cmNlKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRTdHJlYW1Tb3VyY2VGcmVxKHAsYSxiKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFN0cmVhbVNvdXJjZUZyZXEocCxhLGIpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFN0cmVhbVNvdXJjZUZyZXEocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0U3dhcENoYWluKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0U3dhcENoYWluKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFRleHR1cmVTdGFnZVN0YXRlKHAsYSxiLGMpICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFRleHR1cmVTdGFnZVN0YXRlKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0VGV4dHVyZVN0YWdlU3RhdGUocCxhLGIsYykgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VGV4dHVyZVN0YWdlU3RhdGUocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRUZXh0dXJlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRUZXh0dXJlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFRleHR1cmUocCxhLGIpICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFRleHR1cmUocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0VHJhbnNmb3JtKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0VHJhbnNmb3JtKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldFRyYW5zZm9ybShwLGEsYikgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFRyYW5zZm9ybShwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRWZXJ0ZXhEZWNsYXJhdGlvbihwLGEpICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbihwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0VmVydGV4RGVjbGFyYXRpb24ocCxhKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VmVydGV4RGVjbGFyYXRpb24ocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldFZlcnRleFNoYWRlcihwLGEpICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFZlcnRleFNoYWRlcihwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0VmVydGV4U2hhZGVyKHAsYSkgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VmVydGV4U2hhZGVyKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIocCxhLGIsYykgICAgICAgIChwKS0+bHBWdGJsLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIocCxhLGIsYykgICAgICAgIChwKS0+bHBWdGJsLT5HZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEIocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEkocCxhLGIsYykgICAgICAgIChwKS0+bHBWdGJsLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEkocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEkocCxhLGIsYykgICAgICAgIChwKS0+bHBWdGJsLT5HZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEkocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYocCxhLGIsYykgICAgICAgIChwKS0+bHBWdGJsLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYocCxhLGIsYykgICAgICAgIChwKS0+bHBWdGJsLT5HZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRWaWV3cG9ydChwLGEpICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRWaWV3cG9ydChwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0Vmlld3BvcnQocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0Vmlld3BvcnQocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX011bHRpcGx5VHJhbnNmb3JtKHAsYSxiKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPk11bHRpcGx5VHJhbnNmb3JtKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1ZhbGlkYXRlRGV2aWNlKHAsYSkgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlZhbGlkYXRlRGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9Qcm9jZXNzVmVydGljZXMocCxhLGIsYyxkLGUsZikgICAgICAgICAgIChwKS0+bHBWdGJsLT5Qcm9jZXNzVmVydGljZXMocCxhLGIsYyxkLGUsZikKI2RlZmluZSBJV2luZUQzRERldmljZV9CZWdpblN0YXRlQmxvY2socCkgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5CZWdpblN0YXRlQmxvY2socCkKI2RlZmluZSBJV2luZUQzRERldmljZV9FbmRTdGF0ZUJsb2NrKHAsYSkgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5FbmRTdGF0ZUJsb2NrKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9CZWdpblNjZW5lKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5CZWdpblNjZW5lKHApCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRW5kU2NlbmUocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+RW5kU2NlbmUocCkKI2RlZmluZSBJV2luZUQzRERldmljZV9QcmVzZW50KHAsYSxiLGMsZCkgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5QcmVzZW50KHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRERldmljZV9DbGVhcihwLGEsYixjLGQsZSxmKSAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5DbGVhcihwLGEsYixjLGQsZSxmKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0RyYXdQcmltaXRpdmUocCxhLGIsYykgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkRyYXdQcmltaXRpdmUocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9EcmF3SW5kZXhlZFByaW1pdGl2ZShwLGEsYixjLGQsZSxmKSAgICAgIChwKS0+bHBWdGJsLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwLGEsYixjLGQsZSxmKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0RyYXdQcmltaXRpdmVVUChwLGEsYixjLGQpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkRyYXdQcmltaXRpdmVVUChwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRHJhd0luZGV4ZWRQcmltaXRpdmVVUChwLGEsYixjLGQsZSxmLGcsaCkgKHApLT5scFZ0YmwtPkRyYXdJbmRleGVkUHJpbWl0aXZlVVAocCxhLGIsYyxkLGUsZixnLGgpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRHJhd1ByaW1pdGl2ZVN0cmlkZWQocCxhLGIsYykgICAgICAgICAgICAocCktPmxwVnRibC0+RHJhd1ByaW1pdGl2ZVN0cmlkZWQocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9EcmF3UmVjdFBhdGNoKHAsYSxiLGMpICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5EcmF3UmVjdFBhdGNoKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRHJhd1RyaVBhdGNoKHAsYSxiLGMpICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+RHJhd1RyaVBhdGNoKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRGVsZXRlUGF0Y2gocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+RGVsZXRlUGF0Y2gocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NvbG9yRmlsbChwLGEsYixjKSAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNvbG9yRmlsbChwLGEsYixjKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1VwZGF0ZVRleHR1cmUocCxhLGIpICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVwZGF0ZVRleHR1cmUocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfVXBkYXRlU3VyZmFjZShwLGEsYixjLGQpICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VXBkYXRlU3VyZmFjZShwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU3RyZXRjaFJlY3QocCxhLGIsYyxkLGUpICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U3RyZXRjaFJlY3QocCxhLGIsYyxkLGUpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0UmVuZGVyVGFyZ2V0RGF0YShwLGEsYikgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UmVuZGVyVGFyZ2V0RGF0YShwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRGcm9udEJ1ZmZlckRhdGEocCxhLGIpICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRGcm9udEJ1ZmZlckRhdGEocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0dXBUZXh0dXJlU3RhdGVzKHAsYSxiLGMpICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0dXBUZXh0dXJlU3RhdGVzKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfUmVzb3VyY2VSZWxlYXNlZChwLGEpICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVzb3VyY2VSZWxlYXNlZChwLGEpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFdpbmVEM0RSZXNvdXJjZSBpbnRlcmZhY2UgCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFJlc291cmNlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzRFJlc291cmNlLElXaW5lRDNEQmFzZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldERldmljZSkoVEhJU18gSVdpbmVEM0REZXZpY2UgKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIENPTlNUIHZvaWQgKiBwRGF0YSwgRFdPUkQgIFNpemVPZkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgdm9pZCAqIHBEYXRhLCBEV09SRCAqIHBTaXplT2ZEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKEZyZWVQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsU2V0UHJpb3JpdHkpKFRISVNfIERXT1JEICBQcmlvcml0eU5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UHJpb3JpdHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsUHJlTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFJFU09VUkNFVFlQRSxHZXRUeXBlKShUSElTKSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFJlc291cmNlX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEUmVzb3VyY2VfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RSZXNvdXJjZV9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUmVzb3VyY2VfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUmVzb3VyY2VfR2V0RGV2aWNlKHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX1NldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkgICAgKHApLT5scFZ0YmwtPlNldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX0dldFByaXZhdGVEYXRhKHAsYSxiLGMpICAgICAgKHApLT5scFZ0YmwtPkdldFByaXZhdGVEYXRhKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RSZXNvdXJjZV9GcmVlUHJpdmF0ZURhdGEocCxhKSAgICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEUmVzb3VyY2VfU2V0UHJpb3JpdHkocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0UHJpb3JpdHkocCxhKQojZGVmaW5lIElXaW5lRDNEUmVzb3VyY2VfR2V0UHJpb3JpdHkocCkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UHJpb3JpdHkocCkKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX1ByZUxvYWQocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX0dldFR5cGUocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogV2luZUQzRFZlcnRleEJ1ZmZlciBpbnRlcmZhY2UgCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFZlcnRleEJ1ZmZlcgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RWZXJ0ZXhCdWZmZXIsSVdpbmVEM0RSZXNvdXJjZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldERldmljZSkoVEhJU18gSVdpbmVEM0REZXZpY2UgKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIENPTlNUIHZvaWQgKiBwRGF0YSwgRFdPUkQgIFNpemVPZkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgdm9pZCAqIHBEYXRhLCBEV09SRCAqIHBTaXplT2ZEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKEZyZWVQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsU2V0UHJpb3JpdHkpKFRISVNfIERXT1JEICBQcmlvcml0eU5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UHJpb3JpdHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsUHJlTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFJFU09VUkNFVFlQRSxHZXRUeXBlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFZlcnRleEJ1ZmZlciBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChMb2NrKShUSElTXyBVSU5UICBPZmZzZXRUb0xvY2ssIFVJTlQgIFNpemVUb0xvY2ssIEJZVEUgKiogcHBiRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKFVubG9jaykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChHZXREZXNjKShUSElTXyBXSU5FRDNEVkVSVEVYQlVGRkVSX0RFU0MgICogcERlc2MpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhCdWZmZXJfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0dldERldmljZShwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhCdWZmZXJfU2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKSAgICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0dldFByaXZhdGVEYXRhKHAsYSxiLGMpICAgICAgKHApLT5scFZ0YmwtPkdldFByaXZhdGVEYXRhKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhCdWZmZXJfRnJlZVByaXZhdGVEYXRhKHAsYSkgICAgICAgICAocCktPmxwVnRibC0+RnJlZVByaXZhdGVEYXRhKHAsYSkKI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9TZXRQcmlvcml0eShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhCdWZmZXJfR2V0UHJpb3JpdHkocCkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UHJpb3JpdHkocCkKI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9QcmVMb2FkKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5QcmVMb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhCdWZmZXJfR2V0VHlwZShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VHlwZShwKQovKioqIElXaW5lRDNEVmVydGV4QnVmZmVyIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0xvY2socCxhLGIsYyxkKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkxvY2socCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX1VubG9jayhwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVubG9jayhwKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0dldERlc2MocCxhKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERlc2MocCxhKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBXaW5lRDNESW5kZXhCdWZmZXIgaW50ZXJmYWNlIAogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RJbmRleEJ1ZmZlcgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RJbmRleEJ1ZmZlcixJV2luZUQzRFJlc291cmNlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUmVzb3VyY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKiBwcERldmljZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgQ09OU1Qgdm9pZCAqIHBEYXRhLCBEV09SRCAgU2l6ZU9mRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCB2b2lkICogcERhdGEsIERXT1JEICogcFNpemVPZkRhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoRnJlZVByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxTZXRQcmlvcml0eSkoVEhJU18gRFdPUkQgIFByaW9yaXR5TmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxHZXRQcmlvcml0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxQcmVMb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEUkVTT1VSQ0VUWVBFLEdldFR5cGUpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNESW5kZXhCdWZmZXIgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoTG9jaykoVEhJU18gVUlOVCAgT2Zmc2V0VG9Mb2NrLCBVSU5UICBTaXplVG9Mb2NrLCBCWVRFICoqIHBwYkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2spKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVzYykoVEhJU18gV0lORUQzRElOREVYQlVGRkVSX0RFU0MgICogcERlc2MpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEUmVzb3VyY2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfU2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKSAgICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfR2V0UHJpdmF0ZURhdGEocCxhLGIsYykgICAgICAocCktPmxwVnRibC0+R2V0UHJpdmF0ZURhdGEocCxhLGIsYykKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX0ZyZWVQcml2YXRlRGF0YShwLGEpICAgICAgICAgKHApLT5scFZ0YmwtPkZyZWVQcml2YXRlRGF0YShwLGEpCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9TZXRQcmlvcml0eShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9HZXRQcmlvcml0eShwKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQcmlvcml0eShwKQojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfUHJlTG9hZChwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UHJlTG9hZChwKQojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfR2V0VHlwZShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VHlwZShwKQovKioqIElXaW5lRDNESW5kZXhCdWZmZXIgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9Mb2NrKHAsYSxiLGMsZCkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5Mb2NrKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX1VubG9jayhwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVubG9jayhwKQojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfR2V0RGVzYyhwLGEpICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGVzYyhwLGEpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEQmFzZVRleHR1cmUgaW50ZXJmYWNlCiAqICAgTm90ZSBhdCBkM2Q4IHRoaXMgZG9lcyBOT1QgZXh0ZW5kIFJlc291cmNlLCBidXQgYXQgZDNkOSBpdCBkb2VzCiAqICAgICBzaW5jZSBtb3N0IGZ1bmN0aW9ucyBhcmUgY29tbW9uIGFueXdheSwgaXQgbWFrZXMgc2Vuc2UgdG8gZXh0ZW5kIGl0CiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzREJhc2VUZXh0dXJlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzREJhc2VUZXh0dXJlLElXaW5lRDNEUmVzb3VyY2UpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqIHBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCBDT05TVCB2b2lkICogcERhdGEsIERXT1JEICBTaXplT2ZEYXRhLCBEV09SRCAgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIHZvaWQgKiBwRGF0YSwgRFdPUkQgKiBwU2l6ZU9mRGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRChGcmVlUHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELFNldFByaW9yaXR5KShUSElTXyBEV09SRCAgUHJpb3JpdHlOZXcpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELEdldFByaW9yaXR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFByZUxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RSRVNPVVJDRVRZUEUsR2V0VHlwZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oRFdPUkQsIFNldExPRCkoVEhJU18gRFdPUkQgTE9ETmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0TE9EKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0TGV2ZWxDb3VudCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRBdXRvR2VuRmlsdGVyVHlwZSkoVEhJU18gV0lORUQzRFRFWFRVUkVGSUxURVJUWVBFIEZpbHRlclR5cGUpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RURVhUVVJFRklMVEVSVFlQRSwgR2V0QXV0b0dlbkZpbHRlclR5cGUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsIEdlbmVyYXRlTWlwU3ViTGV2ZWxzKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhCT09MLCBTZXREaXJ0eSkoVEhJU18gQk9PTCkgUFVSRTsKICAgIFNURE1FVEhPRF8oQk9PTCwgR2V0RGlydHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoQmluZFRleHR1cmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoVW5CaW5kVGV4dHVyZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUlOVCwgR2V0VGV4dHVyZURpbWVuc2lvbnMpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsIEFwcGx5U3RhdGVDaGFuZ2VzKShUSElTXyBjb25zdCBEV09SRCB0ZXh0dXJlU3RhdGVzW1dJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFICsgMV0sIGNvbnN0IERXT1JEIHNhbXBsZXJTdGF0ZXNbV0lORUQzRF9ISUdIRVNUX1NBTVBMRVJfU1RBVEUgKyAxXSkgUFVSRTsKCn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzREJhc2VUZXh0dXJlIG1ldGhvZHM6IElXaW5lRDNEUmVzb3VyY2UgKioqLwojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfR2V0RGV2aWNlKHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfR2V0UHJpdmF0ZURhdGEocCxhLGIsYykgICAgKHApLT5scFZ0YmwtPkdldFByaXZhdGVEYXRhKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9GcmVlUHJpdmF0ZURhdGEocCxhKSAgICAgICAocCktPmxwVnRibC0+RnJlZVByaXZhdGVEYXRhKHAsYSkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZXRQcmlvcml0eShwKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UHJpb3JpdHkocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX1ByZUxvYWQocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5QcmVMb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZXRUeXBlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VHlwZShwKQovKioqIElXaW5lRDNEQmFzZVRleHR1cmUgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9TZXRMT0QocCxhKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0TE9EKHAsYSkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dldExPRChwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRMT0QocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dldExldmVsQ291bnQocCkgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRMZXZlbENvdW50KHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9TZXRBdXRvR2VuRmlsdGVyVHlwZShwLGEpICAocCktPmxwVnRibC0+U2V0QXV0b0dlbkZpbHRlclR5cGUocCxhKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfR2V0QXV0b0dlbkZpbHRlclR5cGUocCkgICAgKHApLT5scFZ0YmwtPkdldEF1dG9HZW5GaWx0ZXJUeXBlKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZW5lcmF0ZU1pcFN1YkxldmVscyhwKSAgICAocCktPmxwVnRibC0+R2VuZXJhdGVNaXBTdWJMZXZlbHMocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX1NldERpcnR5KHAsYSkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXREaXJ0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZXREaXJ0eShwKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGlydHkocCkKLyoqKiBpbnRlcm5hbCBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0JpbmRUZXh0dXJlKHApICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5CaW5kVGV4dHVyZShwKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfVW5CaW5kVGV4dHVyZShwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPlVuQmluZFRleHR1cmUocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dldFRleHR1cmVEaW1lbnNpb25zKHApICAgIChwKS0+bHBWdGJsLT5HZXRUZXh0dXJlRGltZW5zaW9ucyhwKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfQXBwbHlTdGF0ZUNoYW5nZXMocCxhLGIpICAgKHApLT5scFZ0YmwtPkFwcGx5U3RhdGVDaGFuZ2VzKHAsYSxiKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFRleHR1cmUgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFRleHR1cmUKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEVGV4dHVyZSxJV2luZUQzREJhc2VUZXh0dXJlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUmVzb3VyY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKiBwcERldmljZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgQ09OU1Qgdm9pZCAqIHBEYXRhLCBEV09SRCAgU2l6ZU9mRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCB2b2lkICogcERhdGEsIERXT1JEICogcFNpemVPZkRhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoRnJlZVByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxTZXRQcmlvcml0eSkoVEhJU18gRFdPUkQgIFByaW9yaXR5TmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxHZXRQcmlvcml0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxQcmVMb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEUkVTT1VSQ0VUWVBFLEdldFR5cGUpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZVRleHR1cmUgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKERXT1JELCBTZXRMT0QpKFRISVNfIERXT1JEIExPRE5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsIEdldExPRCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsIEdldExldmVsQ291bnQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0QXV0b0dlbkZpbHRlclR5cGUpKFRISVNfIFdJTkVEM0RURVhUVVJFRklMVEVSVFlQRSBGaWx0ZXJUeXBlKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEVEVYVFVSRUZJTFRFUlRZUEUsIEdldEF1dG9HZW5GaWx0ZXJUeXBlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBHZW5lcmF0ZU1pcFN1YkxldmVscykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oQk9PTCwgU2V0RGlydHkpKFRISVNfIEJPT0wpIFBVUkU7CiAgICBTVERNRVRIT0RfKEJPT0wsIEdldERpcnR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEJpbmRUZXh0dXJlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFVuQmluZFRleHR1cmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVJTlQsIEdldFRleHR1cmVEaW1lbnNpb25zKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBBcHBseVN0YXRlQ2hhbmdlcykoVEhJU18gY29uc3QgRFdPUkQgdGV4dHVyZVN0YXRlc1tXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURSArIDFdLCBjb25zdCBEV09SRCBzYW1wbGVyU3RhdGVzW1dJTkVEM0RfSElHSEVTVF9TQU1QTEVSX1NUQVRFICsgMV0pIFBVUkU7CiAgICAvKioqIElXaW5lRDNEVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8odm9pZCwgRGVzdHJveSkoVEhJU18gRDNEQ0JfREVTVFJPWVNVUkZBQ0VGTiBwRm4pIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0TGV2ZWxEZXNjKShUSElTXyBVSU5UIExldmVsLCBXSU5FRDNEU1VSRkFDRV9ERVNDKiBwRGVzYykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRTdXJmYWNlTGV2ZWwpKFRISVNfIFVJTlQgTGV2ZWwsIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqKiBwcFN1cmZhY2VMZXZlbCkgUFVSRTsKICAgIFNURE1FVEhPRChMb2NrUmVjdCkoVEhJU18gVUlOVCBMZXZlbCwgV0lORUQzRExPQ0tFRF9SRUNUKiBwTG9ja2VkUmVjdCwgQ09OU1QgUkVDVCogcFJlY3QsIERXT1JEIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKFVubG9ja1JlY3QpKFRISVNfIFVJTlQgTGV2ZWwpIFBVUkU7CiAgICBTVERNRVRIT0QoQWRkRGlydHlSZWN0KShUSElTXyBDT05TVCBSRUNUKiBwRGlydHlSZWN0KSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFRleHR1cmVfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzRFRleHR1cmUgbWV0aG9kczogSVdpbmVEM0RSZXNvdXJjZSAqKiovCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldERldmljZShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAocCktPmxwVnRibC0+R2V0UHJpdmF0ZURhdGEocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfRnJlZVByaXZhdGVEYXRhKHAsYSkgICAgICAgKHApLT5scFZ0YmwtPkZyZWVQcml2YXRlRGF0YShwLGEpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQcmlvcml0eShwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9QcmVMb2FkKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UHJlTG9hZChwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXRUeXBlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VHlwZShwKQovKioqIElXaW5lRDNEVGV4dHVyZSBtZXRob2RzOiBJV2luZUQzREJhc2VUZXh0dXJlICoqKi8KI2RlZmluZSBJV2luZUQzRFRleHR1cmVfU2V0TE9EKHAsYSkgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldExPRChwLGEpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldExPRChwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRMT0QocCkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfR2V0TGV2ZWxDb3VudChwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExldmVsQ291bnQocCkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfU2V0QXV0b0dlbkZpbHRlclR5cGUocCxhKSAgKHApLT5scFZ0YmwtPlNldEF1dG9HZW5GaWx0ZXJUeXBlKHAsYSkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfR2V0QXV0b0dlbkZpbHRlclR5cGUocCkgICAgKHApLT5scFZ0YmwtPkdldEF1dG9HZW5GaWx0ZXJUeXBlKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dlbmVyYXRlTWlwU3ViTGV2ZWxzKHApICAgIChwKS0+bHBWdGJsLT5HZW5lcmF0ZU1pcFN1YkxldmVscyhwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9TZXREaXJ0eShwLGEpICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0RGlydHkocCxhKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXREaXJ0eShwKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGlydHkocCkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfQmluZFRleHR1cmUocCkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX1VuQmluZFRleHR1cmUocCkgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldFRleHR1cmVEaW1lbnNpb25zKHApICAgIChwKS0+bHBWdGJsLT5HZXRUZXh0dXJlRGltZW5zaW9ucyhwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9BcHBseVN0YXRlQ2hhbmdlcyhwLGEsYikgICAocCktPmxwVnRibC0+QXBwbHlTdGF0ZUNoYW5nZXMocCxhLGIpCi8qKiogSVdpbmVEM0RUZXh0dXJlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9EZXN0cm95KHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+RGVzdHJveShwLGEpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldExldmVsRGVzYyhwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5HZXRMZXZlbERlc2MocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldFN1cmZhY2VMZXZlbChwLGEsYikgICAgIChwKS0+bHBWdGJsLT5HZXRTdXJmYWNlTGV2ZWwocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0xvY2tSZWN0KHAsYSxiLGMsZCkgICAgICAgIChwKS0+bHBWdGJsLT5Mb2NrUmVjdChwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX1VubG9ja1JlY3QocCxhKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmxvY2tSZWN0KHAsYSkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfQWRkRGlydHlSZWN0KHAsYSkgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZERpcnR5UmVjdChwLGEpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEQ3ViZVRleHR1cmUgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzREN1YmVUZXh0dXJlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzREN1YmVUZXh0dXJlLElXaW5lRDNEQmFzZVRleHR1cmUpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqIHBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCBDT05TVCB2b2lkICogcERhdGEsIERXT1JEICBTaXplT2ZEYXRhLCBEV09SRCAgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIHZvaWQgKiBwRGF0YSwgRFdPUkQgKiBwU2l6ZU9mRGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRChGcmVlUHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELFNldFByaW9yaXR5KShUSElTXyBEV09SRCAgUHJpb3JpdHlOZXcpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELEdldFByaW9yaXR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFByZUxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RSRVNPVVJDRVRZUEUsR2V0VHlwZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oRFdPUkQsIFNldExPRCkoVEhJU18gRFdPUkQgTE9ETmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0TE9EKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0TGV2ZWxDb3VudCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRBdXRvR2VuRmlsdGVyVHlwZSkoVEhJU18gV0lORUQzRFRFWFRVUkVGSUxURVJUWVBFIEZpbHRlclR5cGUpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RURVhUVVJFRklMVEVSVFlQRSwgR2V0QXV0b0dlbkZpbHRlclR5cGUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsIEdlbmVyYXRlTWlwU3ViTGV2ZWxzKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhCT09MLCBTZXREaXJ0eSkoVEhJU18gQk9PTCkgUFVSRTsKICAgIFNURE1FVEhPRF8oQk9PTCwgR2V0RGlydHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoQmluZFRleHR1cmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoVW5CaW5kVGV4dHVyZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUlOVCwgR2V0VGV4dHVyZURpbWVuc2lvbnMpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsIEFwcGx5U3RhdGVDaGFuZ2VzKShUSElTXyBEV09SRCBjb25zdCB0ZXh0dXJlU3RhdGVzW1dJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFICsgMV0sIGNvbnN0IERXT1JEIHNhbXBsZXJTdGF0ZXNbV0lORUQzRF9ISUdIRVNUX1NBTVBMRVJfU1RBVEUgKyAxXSkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RDdWJlVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRMZXZlbERlc2MpKFRISVNfIFVJTlQgTGV2ZWwsV0lORUQzRFNVUkZBQ0VfREVTQyogcERlc2MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0Q3ViZU1hcFN1cmZhY2UpKFRISVNfIFdJTkVEM0RDVUJFTUFQX0ZBQ0VTIEZhY2VUeXBlLCBVSU5UIExldmVsLCBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiogcHBDdWJlTWFwU3VyZmFjZSkgUFVSRTsKICAgIFNURE1FVEhPRChMb2NrUmVjdCkoVEhJU18gV0lORUQzRENVQkVNQVBfRkFDRVMgRmFjZVR5cGUsIFVJTlQgTGV2ZWwsIFdJTkVEM0RMT0NLRURfUkVDVCogcExvY2tlZFJlY3QsIENPTlNUIFJFQ1QqIHBSZWN0LCBEV09SRCBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2tSZWN0KShUSElTXyBXSU5FRDNEQ1VCRU1BUF9GQUNFUyBGYWNlVHlwZSwgVUlOVCBMZXZlbCkgUFVSRTsKICAgIFNURE1FVEhPRChBZGREaXJ0eVJlY3QpKFRISVNfIFdJTkVEM0RDVUJFTUFQX0ZBQ0VTIEZhY2VUeXBlLCBDT05TVCBSRUNUKiBwRGlydHlSZWN0KSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RDdWJlVGV4dHVyZSBtZXRob2RzOiBJV2luZUQzRFJlc291cmNlICoqKi8KI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldERldmljZShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfU2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKSAgKHApLT5scFZ0YmwtPlNldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldFByaXZhdGVEYXRhKHAsYSxiLGMpICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfRnJlZVByaXZhdGVEYXRhKHAsYSkgICAgICAgKHApLT5scFZ0YmwtPkZyZWVQcml2YXRlRGF0YShwLGEpCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9TZXRQcmlvcml0eShwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+U2V0UHJpb3JpdHkocCxhKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2V0UHJpb3JpdHkocCkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9QcmVMb2FkKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UHJlTG9hZChwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2V0VHlwZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKLyoqKiBJV2luZUQzREN1YmVUZXh0dXJlIG1ldGhvZHM6IElXaW5lRDNEQmFzZVRleHR1cmUgKioqLwojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfU2V0TE9EKHAsYSkgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldExPRChwLGEpCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9HZXRMT0QocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0TE9EKHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9HZXRMZXZlbENvdW50KHApICAgICAgICAgICAocCktPmxwVnRibC0+R2V0TGV2ZWxDb3VudChwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfU2V0QXV0b0dlbkZpbHRlclR5cGUocCxhKSAgKHApLT5scFZ0YmwtPlNldEF1dG9HZW5GaWx0ZXJUeXBlKHAsYSkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldEF1dG9HZW5GaWx0ZXJUeXBlKHApICAgIChwKS0+bHBWdGJsLT5HZXRBdXRvR2VuRmlsdGVyVHlwZShwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2VuZXJhdGVNaXBTdWJMZXZlbHMocCkgICAgKHApLT5scFZ0YmwtPkdlbmVyYXRlTWlwU3ViTGV2ZWxzKHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9TZXREaXJ0eShwLGEpICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0RGlydHkocCxhKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2V0RGlydHkocCkgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERpcnR5KHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9CaW5kVGV4dHVyZShwKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9VbkJpbmRUZXh0dXJlKHApICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVuQmluZFRleHR1cmUocCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldFRleHR1cmVEaW1lbnNpb25zKHApICAgICAocCktPmxwVnRibC0+R2V0VGV4dHVyZURpbWVuc2lvbnMocCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0FwcGx5U3RhdGVDaGFuZ2VzKHAsYSxiKSAgIChwKS0+bHBWdGJsLT5BcHBseVN0YXRlQ2hhbmdlcyhwLGEsYikKLyoqKiBJV2luZUQzREN1YmVUZXh0dXJlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2V0TGV2ZWxEZXNjKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPkdldExldmVsRGVzYyhwLGEsYikKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldEN1YmVNYXBTdXJmYWNlKHAsYSxiLGMpIChwKS0+bHBWdGJsLT5HZXRDdWJlTWFwU3VyZmFjZShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfTG9ja1JlY3QocCxhLGIsYyxkLGUpICAgICAgKHApLT5scFZ0YmwtPkxvY2tSZWN0KHAsYSxiLGMsZCxlKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfVW5sb2NrUmVjdChwLGEsYikgICAgICAgICAgKHApLT5scFZ0YmwtPlVubG9ja1JlY3QocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9BZGREaXJ0eVJlY3QocCxhLGIpICAgICAgICAocCktPmxwVnRibC0+QWRkRGlydHlSZWN0KHAsYSxiKQojZW5kaWYKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogSVdpbmVEM0RWb2x1bWVUZXh0dXJlIGludGVyZmFjZQogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RWb2x1bWVUZXh0dXJlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzRFZvbHVtZVRleHR1cmUsSVdpbmVEM0RCYXNlVGV4dHVyZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldERldmljZSkoVEhJU18gSVdpbmVEM0REZXZpY2UgKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIENPTlNUIHZvaWQgKiBwRGF0YSwgRFdPUkQgIFNpemVPZkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgdm9pZCAqIHBEYXRhLCBEV09SRCAqIHBTaXplT2ZEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKEZyZWVQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsU2V0UHJpb3JpdHkpKFRISVNfIERXT1JEICBQcmlvcml0eU5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UHJpb3JpdHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsUHJlTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFJFU09VUkNFVFlQRSxHZXRUeXBlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2VUZXh0dXJlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhEV09SRCwgU2V0TE9EKShUSElTXyBEV09SRCBMT0ROZXcpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELCBHZXRMT0QpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELCBHZXRMZXZlbENvdW50KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEF1dG9HZW5GaWx0ZXJUeXBlKShUSElTXyBXSU5FRDNEVEVYVFVSRUZJTFRFUlRZUEUgRmlsdGVyVHlwZSkgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFRFWFRVUkVGSUxURVJUWVBFLCBHZXRBdXRvR2VuRmlsdGVyVHlwZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgR2VuZXJhdGVNaXBTdWJMZXZlbHMpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKEJPT0wsIFNldERpcnR5KShUSElTXyBCT09MKSBQVVJFOwogICAgU1RETUVUSE9EXyhCT09MLCBHZXREaXJ0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChCaW5kVGV4dHVyZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChVbkJpbmRUZXh0dXJlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVSU5ULCBHZXRUZXh0dXJlRGltZW5zaW9ucykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgQXBwbHlTdGF0ZUNoYW5nZXMpKFRISVNfIGNvbnN0IERXT1JEIHRleHR1cmVTdGF0ZXNbV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEUgKyAxXSwgY29uc3QgRFdPUkQgc2FtcGxlclN0YXRlc1tXSU5FRDNEX0hJR0hFU1RfU0FNUExFUl9TVEFURSArIDFdKSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFZvbHVtZVRleHR1cmUgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0TGV2ZWxEZXNjKShUSElTXyBVSU5UIExldmVsLCBXSU5FRDNEVk9MVU1FX0RFU0MgKnBEZXNjKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFZvbHVtZUxldmVsKShUSElTXyBVSU5UIExldmVsLCBzdHJ1Y3QgSVdpbmVEM0RWb2x1bWUqKiBwcFZvbHVtZUxldmVsKSBQVVJFOwogICAgU1RETUVUSE9EKExvY2tCb3gpKFRISVNfIFVJTlQgTGV2ZWwsIFdJTkVEM0RMT0NLRURfQk9YKiBwTG9ja2VkVm9sdW1lLCBDT05TVCBXSU5FRDNEQk9YKiBwQm94LCBEV09SRCBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2tCb3gpKFRISVNfIFVJTlQgTGV2ZWwpIFBVUkU7CiAgICBTVERNRVRIT0QoQWRkRGlydHlCb3gpKFRISVNfIENPTlNUIFdJTkVEM0RCT1gqIHBEaXJ0eUJveCkgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RWb2x1bWVUZXh0dXJlIG1ldGhvZHM6IElXaW5lRDNEUmVzb3VyY2UgKioqLwojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfU2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKSAgKHApLT5scFZ0YmwtPlNldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0UHJpdmF0ZURhdGEocCxhLGIsYykgICAgKHApLT5scFZ0YmwtPkdldFByaXZhdGVEYXRhKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0ZyZWVQcml2YXRlRGF0YShwLGEpICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9TZXRQcmlvcml0eShwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+U2V0UHJpb3JpdHkocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXRQcmlvcml0eShwKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UHJpb3JpdHkocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfUHJlTG9hZChwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0VHlwZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKLyoqKiBJV2luZUQzRFZvbHVtZVRleHR1cmUgbWV0aG9kczogSVdpbmVEM0RCYXNlVGV4dHVyZSAqKiovCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1NldExPRChwLGEpICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRMT0QocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXRMT0QocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0TE9EKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0dldExldmVsQ291bnQocCkgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRMZXZlbENvdW50KHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1NldEF1dG9HZW5GaWx0ZXJUeXBlKHAsYSkgIChwKS0+bHBWdGJsLT5TZXRBdXRvR2VuRmlsdGVyVHlwZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0dldEF1dG9HZW5GaWx0ZXJUeXBlKHApICAgIChwKS0+bHBWdGJsLT5HZXRBdXRvR2VuRmlsdGVyVHlwZShwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZW5lcmF0ZU1pcFN1YkxldmVscyhwKSAgICAocCktPmxwVnRibC0+R2VuZXJhdGVNaXBTdWJMZXZlbHMocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfU2V0RGlydHkocCxhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldERpcnR5KHAsYSkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0RGlydHkocCkgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERpcnR5KHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0JpbmRUZXh0dXJlKHApICAgICAgICAgICAgICAocCktPmxwVnRibC0+QmluZFRleHR1cmUocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfVW5CaW5kVGV4dHVyZShwKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0dldFRleHR1cmVEaW1lbnNpb25zKHApICAgICAocCktPmxwVnRibC0+R2V0VGV4dHVyZURpbWVuc2lvbnMocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfQXBwbHlTdGF0ZUNoYW5nZXMocCxhLGIpICAgKHApLT5scFZ0YmwtPkFwcGx5U3RhdGVDaGFuZ2VzKHAsYSxiKQovKioqIElXaW5lRDNEVm9sdW1lVGV4dHVyZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0TGV2ZWxEZXNjKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPkdldExldmVsRGVzYyhwLGEsYikKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0Vm9sdW1lTGV2ZWwocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPkdldFZvbHVtZUxldmVsKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9Mb2NrQm94KHAsYSxiLGMsZCkgICAgICAgICAocCktPmxwVnRibC0+TG9ja0JveChwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1VubG9ja0JveChwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmxvY2tCb3gocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9BZGREaXJ0eUJveChwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+QWRkRGlydHlCb3gocCxhKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFN1cmZhY2UgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFN1cmZhY2UKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEU3VyZmFjZSxJV2luZUQzRFJlc291cmNlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUmVzb3VyY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKiBwcERldmljZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgQ09OU1Qgdm9pZCAqIHBEYXRhLCBEV09SRCAgU2l6ZU9mRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCB2b2lkICogcERhdGEsIERXT1JEICogcFNpemVPZkRhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoRnJlZVByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxTZXRQcmlvcml0eSkoVEhJU18gRFdPUkQgIFByaW9yaXR5TmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxHZXRQcmlvcml0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxQcmVMb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEUkVTT1VSQ0VUWVBFLEdldFR5cGUpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEU3VyZmFjZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRDb250YWluZXJQYXJlbnQpKFRISVNfIElVbmtub3duICoqcHBDb250YWluZXJQYXJlbnQpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0Q29udGFpbmVyKShUSElTXyBSRUZJSUQgIHJpaWQsIHZvaWQgKiogcHBDb250YWluZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVzYykoVEhJU18gV0lORUQzRFNVUkZBQ0VfREVTQyAqIHBEZXNjKSBQVVJFOwogICAgU1RETUVUSE9EKExvY2tSZWN0KShUSElTXyBXSU5FRDNETE9DS0VEX1JFQ1QgKiBwTG9ja2VkUmVjdCwgQ09OU1QgUkVDVCAqIHBSZWN0LERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2tSZWN0KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERDKShUSElTXyBIREMgKnBIZGMpIFBVUkU7CiAgICBTVERNRVRIT0QoUmVsZWFzZURDKShUSElTXyBIREMgaGRjKSBQVVJFOwogICAgU1RETUVUSE9EKEZsaXApKFRISVNfIElXaW5lRDNEU3VyZmFjZSAqT3ZlcnJpZGUsIERXT1JEIEZMQUdTKSBQVVJFOwogICAgU1RETUVUSE9EKEJsdCkoVEhJU18gUkVDVCAqRGVzdFJlY3QsIElXaW5lRDNEU3VyZmFjZSAqU3JjU3VyZmFjZSwgUkVDVCAqU3JjUmVjdCwgRFdPUkQgRmxhZ3MsIEREQkxURlggKkREQmx0RngpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0Qmx0U3RhdHVzKShUSElTXyBEV09SRCBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRGbGlwU3RhdHVzKShUSElTXyBEV09SRCBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChJc0xvc3QpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoUmVzdG9yZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChCbHRGYXN0KShUSElTXyBEV09SRCBkc3R4LCBEV09SRCBkc3R5LCBJV2luZUQzRFN1cmZhY2UgKnNyYywgUkVDVCAqcnNyYywgRFdPUkQgdHJhbnMpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UGFsZXR0ZSkoVEhJU18gc3RydWN0IElXaW5lRDNEUGFsZXR0ZSAqKlBhbGV0dGUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UGFsZXR0ZSkoVEhJU18gc3RydWN0IElXaW5lRDNEUGFsZXR0ZSAqUGFsZXR0ZSkgUFVSRTsKICAgIFNURE1FVEhPRChSZWFsaXplUGFsZXR0ZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRDb2xvcktleSkoVEhJU18gRFdPUkQgRmxhZ3MsIEREQ09MT1JLRVkgKkNLZXkpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELEdldFBpdGNoKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFNldE1lbSkoVEhJU18gdm9pZCAqbWVtKSBQVVJFOwogICAgU1RETUVUSE9EKFNldE92ZXJsYXlQb3NpdGlvbikoVEhJU18gTE9ORyBYLCBMT05HIFkpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0T3ZlcmxheVBvc2l0aW9uKShUSElTXyBMT05HICpYLCBMT05HICpZKSBQVVJFOwogICAgU1RETUVUSE9EKFVwZGF0ZU92ZXJsYXlaT3JkZXIpKFRISVNfIERXT1JEIEZsYWdzLCBJV2luZUQzRFN1cmZhY2UgKlJlZikgUFVSRTsKICAgIFNURE1FVEhPRChVcGRhdGVPdmVybGF5KShUSElTXyBSRUNUICpTcmNSZWN0LCBJV2luZUQzRFN1cmZhY2UgKkRzdFN1cmZhY2UsIFJFQ1QgKkRzdFJlY3QsIERXT1JEIEZsYWdzLCBXSU5FRERPVkVSTEFZRlggKkZYKTsKICAgIC8qIEludGVybmFsbHkgdXNlZCBtZXRob2RzICovCiAgICBTVERNRVRIT0QoQ2xlYW5EaXJ0eVJlY3QpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoQWRkRGlydHlSZWN0KShUSElTXyBDT05TVCBSRUNUKiBwUmVjdCkgUFVSRTsKICAgIFNURE1FVEhPRChMb2FkVGV4dHVyZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChTYXZlU25hcHNob3QpKFRISVNfIGNvbnN0IGNoYXIgKmZpbGVuYW1lKSBQVVJFOwogICAgU1RETUVUSE9EKFNldENvbnRhaW5lcikoVEhJU18gSVdpbmVEM0RCYXNlICpjb250YWluZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UEJ1ZmZlclN0YXRlKShUSElTXyBCT09MIGluUEJ1ZmZlciwgQk9PTCAgaW5UZXh0dXJlKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFNldEdsVGV4dHVyZURlc2MpKFRISVNfIFVJTlQgdGV4dHVyZU5hbWUsIGludCB0YXJnZXQpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsR2V0R2xEZXNjKShUSElTXyBnbERlc2NyaXB0b3IgKipnbERlc2NyaXB0aW9uKSBQVVJFOwogICAgU1RETUVUSE9EXyhDT05TVCB2b2lkICosIEdldERhdGEpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Rm9ybWF0KShUSElTXyBXSU5FRDNERk9STUFUIGZvcm1hdCkgUFVSRTsKICAgIFNURE1FVEhPRChQcml2YXRlU2V0dXApKFRISVMpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0RGV2aWNlKHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKSAgICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9GcmVlUHJpdmF0ZURhdGEocCxhKSAgICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9TZXRQcmlvcml0eShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1ByZUxvYWQocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0VHlwZShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VHlwZShwKQovKioqIElXaW5lRDNEU3VyZmFjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0Q29udGFpbmVyUGFyZW50KHAsYSkgICAgICAocCktPmxwVnRibC0+R2V0Q29udGFpbmVyUGFyZW50KHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0Q29udGFpbmVyKHAsYSxiKSAgICAgICAgICAocCktPmxwVnRibC0+R2V0Q29udGFpbmVyKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9HZXREZXNjKHAsYSkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXNjKHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfTG9ja1JlY3QocCxhLGIsYykgICAgICAgICAgICAocCktPmxwVnRibC0+TG9ja1JlY3QocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfVW5sb2NrUmVjdChwKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VW5sb2NrUmVjdChwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9HZXREQyhwLGEpICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREQyhwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1JlbGVhc2VEQyhwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2VEQyhwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0ZsaXAocCxhLGIpICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkZsaXAocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0JsdChwLGEsYixjLGQsZSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkJsdChwLGEsYixjLGQsZSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0Qmx0U3RhdHVzKHAsYSkgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0Qmx0U3RhdHVzKHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0RmxpcFN0YXR1cyhwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RmxpcFN0YXR1cyhwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0lzTG9zdChwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPklzTG9zdChwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9SZXN0b3JlKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZXN0b3JlKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0JsdEZhc3QocCxhLGIsYyxkLGUpICAgICAgICAgKHApLT5scFZ0YmwtPkJsdEZhc3QocCxhLGIsYyxkLGUpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldFBhbGV0dGUocCwgYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhbGV0dGUocCwgYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0UGFsZXR0ZShwLCBhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0UGFsZXR0ZShwLCBhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9SZWFsaXplUGFsZXR0ZShwKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWFsaXplUGFsZXR0ZShwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9TZXRDb2xvcktleShwLCBhLCBiKSAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRDb2xvcktleShwLCBhLCBiKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9HZXRQaXRjaChwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQaXRjaChwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9TZXRNZW0ocCwgYSkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRNZW0ocCwgYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0T3ZlcmxheVBvc2l0aW9uKHAsIGEsIGIpICAocCktPmxwVnRibC0+U2V0T3ZlcmxheVBvc2l0aW9uKHAsIGEsIGIpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldE92ZXJsYXlQb3NpdGlvbihwLCBhLCBiKSAgKHApLT5scFZ0YmwtPkdldE92ZXJsYXlQb3NpdGlvbihwLCBhLCBiKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9VcGRhdGVPdmVybGF5Wk9yZGVyKHAsIGEsIGIpIChwKS0+bHBWdGJsLT5VcGRhdGVPdmVybGF5Wk9yZGVyKHAsIGEsIGIpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1VwZGF0ZU92ZXJsYXkocCwgYSwgYiwgYywgZCwgZSkgKHApLT5scFZ0YmwtPlVwZGF0ZU92ZXJsYXkocCwgYSwgYiwgYywgZCwgZSkKLyoqKiBJV2luZUQzRFN1cmZhY2UgKEludGVybmFsLCBubyBkM2QgbWFwcGluZykgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0NsZWFuRGlydHlSZWN0KHApICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNsZWFuRGlydHlSZWN0KHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0FkZERpcnR5UmVjdChwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZERpcnR5UmVjdChwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0xvYWRUZXh0dXJlKHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkxvYWRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1NhdmVTbmFwc2hvdChwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNhdmVTbmFwc2hvdChwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1NldENvbnRhaW5lcihwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldENvbnRhaW5lcihwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1NldFBCdWZmZXJTdGF0ZShwLGEsYikgICAgICAgKHApLT5scFZ0YmwtPlNldFBCdWZmZXJTdGF0ZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0R2xUZXh0dXJlRGVzYyhwLGEsYikgICAgICAocCktPmxwVnRibC0+U2V0R2xUZXh0dXJlRGVzYyhwLGEsYikKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0R2xEZXNjKHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0R2xEZXNjKHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0RGF0YShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGF0YShwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9TZXRGb3JtYXQocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRGb3JtYXQocCxhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9Qcml2YXRlU2V0dXAocCkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5Qcml2YXRlU2V0dXAocCkKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogSVdpbmVEM0RWb2x1bWUgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFZvbHVtZQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RWb2x1bWUsSVdpbmVEM0RSZXNvdXJjZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLyAgICAKICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqIHBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCBDT05TVCB2b2lkICogcERhdGEsIERXT1JEICBTaXplT2ZEYXRhLCBEV09SRCAgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIHZvaWQgKiBwRGF0YSwgRFdPUkQgKiBwU2l6ZU9mRGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRChGcmVlUHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELFNldFByaW9yaXR5KShUSElTXyBEV09SRCAgUHJpb3JpdHlOZXcpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELEdldFByaW9yaXR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFByZUxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RSRVNPVVJDRVRZUEUsIEdldFR5cGUpKFRISVMpIFBVUkU7ICAgIAogICAgLyoqKiBJV2luZUQzRFZvbHVtZSBtZXRob2RzICoqKi8gICAgCiAgICBTVERNRVRIT0QoR2V0Q29udGFpbmVyUGFyZW50KShUSElTXyBJVW5rbm93biAqKnBwQ29udGFpbmVyUGFyZW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldENvbnRhaW5lcikoVEhJU18gUkVGSUlEICByaWlkLCB2b2lkICoqIHBwQ29udGFpbmVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERlc2MpKFRISVNfIFdJTkVEM0RWT0xVTUVfREVTQyAqIHBEZXNjKSBQVVJFOwogICAgU1RETUVUSE9EKExvY2tCb3gpKFRISVNfIFdJTkVEM0RMT0NLRURfQk9YKiBwTG9ja2VkVm9sdW1lLCBDT05TVCBXSU5FRDNEQk9YKiBwQm94LCBEV09SRCBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2tCb3gpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoQWRkRGlydHlCb3gpKFRISVNfIENPTlNUIFdJTkVEM0RCT1gqIHBEaXJ0eUJveCkgUFVSRTsKICAgIFNURE1FVEhPRChDbGVhbkRpcnR5Qm94KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKExvYWRUZXh0dXJlKShUSElTXyBVSU5UIGdsX2xldmVsKSBQVVJFOwogICAgU1RETUVUSE9EKFNldENvbnRhaW5lcikoVEhJU18gSVdpbmVEM0RCYXNlICpjb250YWluZXIpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVm9sdW1lX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZvbHVtZV9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0dldFByaXZhdGVEYXRhKHAsYSxiLGMpICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0ZyZWVQcml2YXRlRGF0YShwLGEpICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfR2V0UHJpb3JpdHkocCkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfUHJlTG9hZChwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9HZXRUeXBlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VHlwZShwKQovKioqIElXaW5lRDNEVm9sdW1lIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0dldENvbnRhaW5lclBhcmVudChwLGEpICAgIChwKS0+bHBWdGJsLT5HZXRDb250YWluZXJQYXJlbnQocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0dldENvbnRhaW5lcihwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5HZXRDb250YWluZXIocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfR2V0RGVzYyhwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERlc2MocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0xvY2tCb3gocCxhLGIsYykgICAgICAgICAgIChwKS0+bHBWdGJsLT5Mb2NrQm94KHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfVW5sb2NrQm94KHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVubG9ja0JveChwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0FkZERpcnR5Qm94KHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGREaXJ0eUJveChwLGEpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfQ2xlYW5EaXJ0eUJveChwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPkNsZWFuRGlydHlCb3gocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9Mb2FkVGV4dHVyZShwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+TG9hZFRleHR1cmUocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX1NldENvbnRhaW5lcihwLGEpICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRDb250YWluZXIocCxhKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uIGludGVyZmFjZQogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbixJV2luZUQzREJhc2UpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkICoqcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbiBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVjbGFyYXRpb24pKFRISVNfIFZPSUQgKnBEZWNsLCBEV09SRCAqcFNpemUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0RGVjbGFyYXRpb24pKFRISVNfIFZPSUQgKnBEZWNsKSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb25fR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbiBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX0dldERldmljZShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb25fR2V0RGVjbGFyYXRpb24ocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPkdldERlY2xhcmF0aW9uKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb25fU2V0RGVjbGFyYXRpb24ocCxiKSAgICAgICAgKHApLT5scFZ0YmwtPlNldERlY2xhcmF0aW9uKHAsYikKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogSVdpbmVEM0RTdGF0ZUJsb2NrIGludGVyZmFjZSAKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEU3RhdGVCbG9jawpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RTdGF0ZUJsb2NrLElXaW5lRDNEQmFzZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFN0YXRlQmxvY2sgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKnBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoQ2FwdHVyZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChBcHBseSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChJbml0U3RhcnR1cFN0YXRlQmxvY2spKFRISVMpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEU3RhdGVCbG9ja19RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEU3RhdGVCbG9ja19BZGRSZWYocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEU3RhdGVCbG9ja19SZWxlYXNlKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTdGF0ZUJsb2NrX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzRFN0YXRlQmxvY2sgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTdGF0ZUJsb2NrX0dldERldmljZShwLGEpICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFN0YXRlQmxvY2tfQ2FwdHVyZShwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5DYXB0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RTdGF0ZUJsb2NrX0FwcGx5KHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QXBwbHkocCkKI2RlZmluZSBJV2luZUQzRFN0YXRlQmxvY2tfSW5pdFN0YXJ0dXBTdGF0ZUJsb2NrKHApICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5Jbml0U3RhcnR1cFN0YXRlQmxvY2socCkKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogV2luZUQzRFF1ZXJ5IGludGVyZmFjZSAKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEUXVlcnkKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEUXVlcnksSVdpbmVEM0RCYXNlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCAqKnBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUXVlcnkgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKnBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERhdGEpKFRISVNfICB2b2lkICpwRGF0YSwgRFdPUkQgZHdTaXplLCBEV09SRCBkd0dldERhdGFGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0RGF0YVNpemUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RRVUVSWVRZUEUsIEdldFR5cGUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoSXNzdWUpKFRISVNfIERXT1JEIGR3SXNzdWVGbGFncykgUFVSRTsKICAgIAp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFF1ZXJ5X1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEUXVlcnlfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RRdWVyeV9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUXVlcnlfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzRFF1ZXJ5IG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUXVlcnlfR2V0RGV2aWNlKHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFF1ZXJ5X0dldERhdGEocCxhLGIsYykgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERhdGEocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRFF1ZXJ5X0dldERhdGFTaXplKHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERhdGFTaXplKHApCiNkZWZpbmUgSVdpbmVEM0RRdWVyeV9HZXRUeXBlKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRUeXBlKHApCiNkZWZpbmUgSVdpbmVEM0RRdWVyeV9Jc3N1ZShwLGEpICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5Jc3N1ZShwLGEpCgojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFN3YXBDaGFpbiBpbnRlcmZhY2UKICogVE9ETzogYWRkIGdhbW1hLXJhbXAgc2V0dGluZyBmdW5jdGlvbnMgdG8gbWFrZSBsaWZlIGVhc2llcgogKiAoVGhlcmUga2luZGEgbWlzc2luZyBmcm9tIE1pY3Jvc29mdHMgRGlyZWN0WCEpCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFN3YXBDaGFpbgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RTd2FwQ2hhaW4sSVdpbmVEM0RCYXNlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCAqKnBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElEaXJlY3QzRFN3YXBDaGFpbjkgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKnBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFByZXNlbnQpKFRISVNfIENPTlNUIFJFQ1QgKnBTb3VyY2VSZWN0LCBDT05TVCBSRUNUICpwRGVzdFJlY3QsIEhXTkQgaERlc3RXaW5kb3dPdmVycmlkZSwgQ09OU1QgUkdOREFUQSAqcERpcnR5UmVnaW9uLCBEV09SRCBkd0ZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEZyb250QnVmZmVyRGF0YSkoVEhJU18gSVdpbmVEM0RTdXJmYWNlICpwRGVzdFN1cmZhY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0QmFja0J1ZmZlcikoVEhJU18gVUlOVCBpQmFja0J1ZmZlciwgV0lORUQzREJBQ0tCVUZGRVJfVFlQRSBUeXBlLCBJV2luZUQzRFN1cmZhY2UgKipwcEJhY2tCdWZmZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UmFzdGVyU3RhdHVzKShUSElTXyBXSU5FRDNEUkFTVEVSX1NUQVRVUyAqcFJhc3RlclN0YXR1cykgUFVSRTsKICAgIFNURE1FVEhPRChHZXREaXNwbGF5TW9kZSkoVEhJU18gV0lORUQzRERJU1BMQVlNT0RFICpwTW9kZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcmVzZW50UGFyYW1ldGVycykoVEhJU18gV0lORUQzRFBSRVNFTlRfUEFSQU1FVEVSUyAqcFByZXNlbnRhdGlvblBhcmFtZXRlcnMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0R2FtbWFSYW1wKShUSElTXyBEV09SRCBGbGFncywgY29uc3QgV0lORUQzREdBTU1BUkFNUCAqcFJhbXApIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0R2FtbWFSYW1wKShUSElTXyBXSU5FRDNER0FNTUFSQU1QICpwUmFtcCkgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEU3dhcENoYWluIG1ldGhvZHMgKioqLwoKI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEU3dhcENoYWluX1ByZXNlbnQocCxhLGIsYyxkLGUpICAgICAgICAgKHApLT5scFZ0YmwtPlByZXNlbnQocCxhLGIsYyxkLGUpCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fR2V0RnJvbnRCdWZmZXJEYXRhKHAsYSkgICAgICAocCktPmxwVnRibC0+R2V0RnJvbnRCdWZmZXJEYXRhKHAsYSkKI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXRCYWNrQnVmZmVyKHAsYSxiLGMpICAgICAgIChwKS0+bHBWdGJsLT5HZXRCYWNrQnVmZmVyKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fR2V0UmFzdGVyU3RhdHVzKHAsYSkgICAgICAgICAocCktPmxwVnRibC0+R2V0UmFzdGVyU3RhdHVzKHAsYSkKI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXREaXNwbGF5TW9kZShwLGEpICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREaXNwbGF5TW9kZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fR2V0UHJlc2VudFBhcmFtZXRlcnMocCxhKSAgICAocCktPmxwVnRibC0+R2V0UHJlc2VudFBhcmFtZXRlcnMocCxhKQojZGVmaW5lIElXaW5lRDNEU3dhcENoYWluX1NldEdhbW1hUmFtcChwLGEsYikgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEdhbW1hUmFtcChwLGEsYikKI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXRHYW1tYVJhbXAocCxhKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRHYW1tYVJhbXAocCxhKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzREJhc2VTaGFkZXIgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzREJhc2VTaGFkZXIKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEQmFzZVNoYWRlcixJV2luZUQzREJhc2UpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlU2hhZGVyIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKFNldEZ1bmN0aW9uKShUSElTXyBDT05TVCBEV09SRCAqcEZ1bmN0aW9uKSBQVVJFOwogICAgU1RETUVUSE9EKENvbXBpbGVTaGFkZXIpKFRISVMpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQmFzZVNoYWRlcl9RdWVyeUludGVyZmFjZShwLGEsYikgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzREJhc2VTaGFkZXJfQWRkUmVmKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlU2hhZGVyX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlU2hhZGVyX0dldFBhcmVudChwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RCYXNlU2hhZGVyIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQmFzZVNoYWRlcl9TZXRGdW5jdGlvbihwLGEpICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRGdW5jdGlvbihwLGEpCiNkZWZpbmUgSVdpbmVEM0RCYXNlU2hhZGVyX0NvbXBpbGVTaGFkZXIocCkgICAgICAgICAgKHApLT5scFZ0YmwtPkNvbXBpbGVTaGFkZXIocCkKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogSVdpbmVEM0RWZXJ0ZXhTaGFkZXIgaW50ZXJmYWNlIAogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RWZXJ0ZXhTaGFkZXIKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEVmVydGV4U2hhZGVyLElXaW5lRDNEQmFzZVNoYWRlcikKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2VTaGFkZXIgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoU2V0RnVuY3Rpb24pKFRISVNfIENPTlNUIERXT1JEICpwRnVuY3Rpb24pIFBVUkU7CiAgICBTVERNRVRIT0QoQ29tcGlsZVNoYWRlcikoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RWZXJ0ZXhTaGFkZXIgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSoqIHBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEZ1bmN0aW9uKShUSElTXyBWT0lEICpwRGF0YSwgVUlOVCAqcFNpemVPZkRhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q29uc3RhbnRCKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIENPTlNUIEJPT0wqICBwQ29uc3RhbnREYXRhLCBVSU5UIEJvb2xDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRDb25zdGFudEkpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgQ09OU1QgSU5UKiAgIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGlDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRDb25zdGFudEYpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgQ09OU1QgRkxPQVQqIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGZDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRDb25zdGFudEIpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgQk9PTCogIHBDb25zdGFudERhdGEsIFVJTlQgQm9vbENvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldENvbnN0YW50SSkoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBJTlQqICAgcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0aUNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldENvbnN0YW50RikoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBGTE9BVCogcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0ZkNvdW50KSBQVVJFOwogICAgLyogSW50ZXJuYWwgSW50ZXJmYWNlcyAqLwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0VmVyc2lvbikoVEhJUykgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfQWRkUmVmKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleFNoYWRlcl9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEQmFzZVNoYWRlciBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleFNoYWRlcl9TZXRGdW5jdGlvbihwLGEpICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRGdW5jdGlvbihwLGEpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfQ29tcGlsZVNoYWRlcihwKSAgICAgICAgICAocCktPmxwVnRibC0+Q29tcGlsZVNoYWRlcihwKQovKioqIElXaW5lRDNEVmVydGV4U2hhZGVyIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4U2hhZGVyX0dldERldmljZShwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfR2V0RnVuY3Rpb24ocCxhLGIpICAgICAgICAocCktPmxwVnRibC0+R2V0RnVuY3Rpb24ocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfU2V0Q29uc3RhbnRCKHAsYSxiLGMpICAgICAocCktPmxwVnRibC0+U2V0Q29uc3RhbnRCKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfU2V0Q29uc3RhbnRJKHAsYSxiLGMpICAgICAocCktPmxwVnRibC0+U2V0Q29uc3RhbnRJKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfU2V0Q29uc3RhbnRGKHAsYSxiLGMpICAgICAocCktPmxwVnRibC0+U2V0Q29uc3RhbnRGKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfR2V0Q29uc3RhbnRCKHAsYSxiLGMpICAgICAocCktPmxwVnRibC0+R2V0Q29uc3RhbnRCKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfR2V0Q29uc3RhbnRJKHAsYSxiLGMpICAgICAocCktPmxwVnRibC0+R2V0Q29uc3RhbnRJKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfR2V0Q29uc3RhbnRGKHAsYSxiLGMpICAgICAocCktPmxwVnRibC0+R2V0Q29uc3RhbnRGKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfR2V0VmVyc2lvbihwKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0VmVyc2lvbihwKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFBpeGVsU2hhZGVyIGludGVyZmFjZQogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RQaXhlbFNoYWRlcgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RQaXhlbFNoYWRlcixJV2luZUQzREJhc2VTaGFkZXIpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlU2hhZGVyIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKFNldEZ1bmN0aW9uKShUSElTXyBDT05TVCBEV09SRCAqcEZ1bmN0aW9uKSBQVVJFOwogICAgU1RETUVUSE9EKENvbXBpbGVTaGFkZXIpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUGl4ZWxTaGFkZXIgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSoqIHBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEZ1bmN0aW9uKShUSElTXyBWT0lEKiBwRGF0YSwgVUlOVCogcFNpemVPZkRhdGEpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUGl4ZWxTaGFkZXJfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEUGl4ZWxTaGFkZXJfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEUGl4ZWxTaGFkZXJfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzREJhc2VTaGFkZXIgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9TZXRGdW5jdGlvbihwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+U2V0RnVuY3Rpb24ocCxhKQojZGVmaW5lIElXaW5lRDNEUGl4ZWxTaGFkZXJfQ29tcGlsZVNoYWRlcihwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPkNvbXBpbGVTaGFkZXIocCkKLyoqKiBJV2luZUQzRFBpeGVsU2hhZGVyIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUGl4ZWxTaGFkZXJfR2V0RGV2aWNlKHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9HZXRGdW5jdGlvbihwLGEsYikgICAgICAgICAocCktPmxwVnRibC0+R2V0RnVuY3Rpb24ocCxhLGIpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEUGFsZXR0ZSBpbnRlcmZhY2UKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEUGFsZXR0ZQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RQYWxldHRlLElVbmtub3duKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFBhbGV0dGUgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKlBhcmVudCk7CiAgICBTVERNRVRIT0RfKEhSRVNVTFQsR2V0RW50cmllcykoVEhJU18gRFdPUkQgRmxhZ3MsIERXT1JEIFN0YXJ0LCBEV09SRCBDb3VudCwgUEFMRVRURUVOVFJZICpQYWxFbnQpOwogICAgU1RETUVUSE9EXyhIUkVTVUxULEdldENhcHMpKFRISVNfIERXT1JEICpDYXBzKTsKICAgIFNURE1FVEhPRF8oSFJFU1VMVCxTZXRFbnRyaWVzKShUSElTXyBEV09SRCBGbGFncywgRFdPUkQgU3RhcnQsIERXT1JEIENvdW50LCBQQUxFVFRFRU5UUlkgKlBhbEVudCk7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUGFsZXR0ZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RQYWxldHRlX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzRFBhbGV0dGVfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzRFBhbGV0dGUgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RQYWxldHRlX0dldFBhcmVudChwLCBhKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCwgYSkKI2RlZmluZSBJV2luZUQzRFBhbGV0dGVfR2V0RW50cmllcyhwLCBhLCBiLCBjLCBkKSAgKHApLT5scFZ0YmwtPkdldEVudHJpZXMocCwgYSwgYiwgYywgZCkKI2RlZmluZSBJV2luZUQzRFBhbGV0dGVfR2V0Q2FwcyhwLCBhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldENhcHMocCwgYSkKI2RlZmluZSBJV2luZUQzRFBhbGV0dGVfU2V0RW50cmllcyhwLCBhLCBiLCBjLCBkKSAgKHApLT5scFZ0YmwtPlNldEVudHJpZXMocCwgYSwgYiwgYywgZCkKI2VuZGlmCgojaWYgMCAvKiBGSVhNRTogRHVyaW5nIHBvcnRpbmcgaW4gZnJvbSBkM2Q4IC0gdGhlIGZvbGxvd2luZyB3aWxsIGJlIHVzZWQgKi8KZXh0ZXJuIEhSRVNVTFQgV0lOQVBJIElEaXJlY3QzRFZlcnRleFNoYWRlckltcGxfUGFyc2VQcm9ncmFtKElEaXJlY3QzRFZlcnRleFNoYWRlckltcGwqIFRoaXMsIENPTlNUIERXT1JEKiBwRnVuY3Rpb24pOwovKiBpbnRlcm5hbCBJbnRlcmZhY2VzICovCmV4dGVybiBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXJJbXBsX0V4ZWN1dGVTVyhJRGlyZWN0M0RWZXJ0ZXhTaGFkZXJJbXBsKiBUaGlzLCBWU0hBREVSSU5QVVREQVRBKiBpbnB1dCwgVlNIQURFUk9VVFBVVERBVEEqIG91dHB1dCk7CiNlbmRpZiAvKiBUZW1wb3JhcnkgI2lmIDAgKi8KCgojZW5kaWYK