LyoKICogRGlyZWN0M0Qgd2luZSBpbnRlcm5hbCBwdWJsaWMgaW50ZXJmYWNlIGZpbGUKICoKICogQ29weXJpZ2h0IDIwMDItMjAwMyBUaGUgd2luZS1kM2QgdGVhbQogKiBDb3B5cmlnaHQgMjAwMi0yMDAzIFJhcGhhZWwgSnVucXVlaXJhCiAqIENvcHlyaWdodCAyMDA1IE9saXZlciBTdGllYmVyCiAqIENvcHlyaWdodCAyMDA2IFN0ZWZhbiBE9nNpbmdlciBmb3IgQ29kZVdlYXZlcnMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2lmbmRlZiBfX1dJTkVfV0lORUQzRF9JTlRFUkZBQ0VfSAojZGVmaW5lIF9fV0lORV9XSU5FRDNEX0lOVEVSRkFDRV9ICgojaWYgIWRlZmluZWQoIF9fV0lORV9DT05GSUdfSCApCiMgZXJyb3IgWW91IG11c3QgaW5jbHVkZSBjb25maWcuaCB0byB1c2UgdGhpcyBoZWFkZXIKI2VuZGlmCgojZGVmaW5lIENPTV9OT19XSU5ET1dTX0gKI2luY2x1ZGUgPG9iamJhc2UuaD4KCi8qIFN0dXBpZCBERHJhdyBTdHJ1Y3QgcmVmZXJlbmNlcyBzdXJmYWNlcyAqLwpzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlOwoKI2luY2x1ZGUgIndpbmVkM2RfdHlwZXMuaCIKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFRISVMgRklMRSBNVVNUIE5PVCBDT05UQUlOIFgxMSBvciBNRVNBIERFRklORVMgCiAqIFBMRUFTRSBVU0Ugd2luZS93aW5lZDNkX2dsLmggSU5TVEVBRAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAjZGVmaW5lcyBhbmQgZXJyb3IgY29kZXMKICovCiNkZWZpbmUgX0ZBQ1dJTkVEM0QgIDB4ODc2CiNkZWZpbmUgTUFLRV9XSU5FRDNESFJFU1VMVCggY29kZSApICAgICAgICAgICAgICAgICBNQUtFX0hSRVNVTFQoIDEsIF9GQUNXSU5FRDNELCBjb2RlICkKI2RlZmluZSBNQUtFX1dJTkVEM0RTVEFUVVMoIGNvZGUgKSAgICAgICAgICAgICAgICAgIE1BS0VfSFJFU1VMVCggMCwgX0ZBQ1dJTkVEM0QsIGNvZGUgKQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIERpcmVjdDNEIEVycm9ycwogKi8KI2RlZmluZSBXSU5FRDNEX09LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNfT0sKI2RlZmluZSBXSU5FRDNERVJSX1dST05HVEVYVFVSRUZPUk1BVCAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3MikKI2RlZmluZSBXSU5FRDNERVJSX1VOU1VQUE9SVEVEQ09MT1JPUEVSQVRJT04gICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3MykKI2RlZmluZSBXSU5FRDNERVJSX1VOU1VQUE9SVEVEQ09MT1JBUkcgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3NCkKI2RlZmluZSBXSU5FRDNERVJSX1VOU1VQUE9SVEVEQUxQSEFPUEVSQVRJT04gICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3NSkKI2RlZmluZSBXSU5FRDNERVJSX1VOU1VQUE9SVEVEQUxQSEFBUkcgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3NikKI2RlZmluZSBXSU5FRDNERVJSX1RPT01BTllPUEVSQVRJT05TICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3NykKI2RlZmluZSBXSU5FRDNERVJSX0NPTkZMSUNUSU5HVEVYVFVSRUZJTFRFUiAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3OCkKI2RlZmluZSBXSU5FRDNERVJSX1VOU1VQUE9SVEVERkFDVE9SVkFMVUUgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA3OSkKI2RlZmluZSBXSU5FRDNERVJSX0NPTkZMSUNUSU5HUkVOREVSU1RBVEUgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA4MSkKI2RlZmluZSBXSU5FRDNERVJSX1VOU1VQUE9SVEVEVEVYVFVSRUZJTFRFUiAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA4MikKI2RlZmluZSBXSU5FRDNERVJSX0NPTkZMSUNUSU5HVEVYVFVSRVBBTEVUVEUgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA4NikKI2RlZmluZSBXSU5FRDNERVJSX0RSSVZFUklOVEVSTkFMRVJST1IgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjA4NykKI2RlZmluZSBXSU5FRDNERVJSX05PVEZPVU5EICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1MCkKI2RlZmluZSBXSU5FRDNERVJSX01PUkVEQVRBICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1MSkKI2RlZmluZSBXSU5FRDNERVJSX0RFVklDRUxPU1QgICAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1MikKI2RlZmluZSBXSU5FRDNERVJSX0RFVklDRU5PVFJFU0VUICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1MykKI2RlZmluZSBXSU5FRDNERVJSX05PVEFWQUlMQUJMRSAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMjE1NCkKI2RlZmluZSBXSU5FRDNERVJSX09VVE9GVklERU9NRU1PUlkgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoMzgwKQojZGVmaW5lIFdJTkVEM0RFUlJfSU5WQUxJRERFVklDRSAgICAgICAgICAgICAgICAgICAgTUFLRV9XSU5FRDNESFJFU1VMVCgyMTU1KQojZGVmaW5lIFdJTkVEM0RFUlJfSU5WQUxJRENBTEwgICAgICAgICAgICAgICAgICAgICAgTUFLRV9XSU5FRDNESFJFU1VMVCgyMTU2KQojZGVmaW5lIFdJTkVEM0RFUlJfRFJJVkVSSU5WQUxJRENBTEwgICAgICAgICAgICAgICAgTUFLRV9XSU5FRDNESFJFU1VMVCgyMTU3KQojZGVmaW5lIFdJTkVEM0RFUlJfV0FTU1RJTExEUkFXSU5HICAgICAgICAgICAgICAgICAgTUFLRV9XSU5FRDNESFJFU1VMVCg1NDApCiNkZWZpbmUgV0lORURERVJSX05PVEFPVkVSTEFZU1VSRkFDRSAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDU4MCkKI2RlZmluZSBXSU5FRERFUlJfTk9EQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoNTg2KQojZGVmaW5lIFdJTkVEREVSUl9EQ0FMUkVBRFlDUkVBVEVEICAgICAgICAgICAgICAgICAgTUFLRV9XSU5FRDNESFJFU1VMVCg2MjApCiNkZWZpbmUgV0lORURERVJSX05PVEZMSVBQQUJMRSAgICAgICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDU4MikKI2RlZmluZSBXSU5FRERFUlJfU1VSRkFDRUJVU1kgICAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzREhSRVNVTFQoNDMwKQojZGVmaW5lIFdJTkVEREVSUl9JTlZBTElEUkVDVCAgICAgICAgICAgICAgICAgICAgICAgTUFLRV9XSU5FRDNESFJFU1VMVCgxNTApCiNkZWZpbmUgV0lORURERVJSX05PQ0xJUExJU1QgICAgICAgICAgICAgICAgICAgICAgICBNQUtFX1dJTkVEM0RIUkVTVUxUKDIwNSkKI2RlZmluZSBXSU5FRDNET0tfTk9BVVRPR0VOICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VfV0lORUQzRFNUQVRVUygyMTU5KQoKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBQcmVkZWNsYXJlIHRoZSBpbnRlcmZhY2VzCiAqLwoKc3RydWN0IElXaW5lRDNEOwpzdHJ1Y3QgSVdpbmVEM0RCYXNlOwpzdHJ1Y3QgSVdpbmVEM0REZXZpY2U7CnN0cnVjdCBJV2luZUQzRFBhbGV0dGU7CnN0cnVjdCBJV2luZUQzRFJlc291cmNlOwpzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhCdWZmZXI7CnN0cnVjdCBJV2luZUQzREluZGV4QnVmZmVyOwpzdHJ1Y3QgSVdpbmVEM0RCYXNlVGV4dHVyZTsKc3RydWN0IElXaW5lRDNEVGV4dHVyZTsKc3RydWN0IElXaW5lRDNEQ3ViZVRleHR1cmU7CnN0cnVjdCBJV2luZUQzRFZvbHVtZVRleHR1cmU7CnN0cnVjdCBJV2luZUQzRFN0YXRlQmxvY2s7CnN0cnVjdCBJV2luZUQzRFZvbHVtZTsKc3RydWN0IElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb247CnN0cnVjdCBJV2luZUQzREJhc2VTaGFkZXI7CnN0cnVjdCBJV2luZUQzRFZlcnRleFNoYWRlcjsKc3RydWN0IElXaW5lRDNEUGl4ZWxTaGFkZXI7CnN0cnVjdCBJV2luZUQzRFF1ZXJ5OwpzdHJ1Y3QgSVdpbmVEM0RTd2FwQ2hhaW47CnN0cnVjdCBJV2luZUQzRENsaXBwZXI7CgoKLyogezEwOEY5QzQ0LTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNELCAKMHgxMDhmOWM0NCwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCkRFRklORV9HVUlEKElJRF9JV2luZUQzREJhc2UsCjB4NDY3OTkzMTEsIDB4OGUwZSwgMHg0MGNlLCAweGIyLCAweGVjLCAweGRkLCAweGI5LCAweDlmLCAweDE4LCAweGZjLCAweGI0KTsKCi8qIHsxMDhGOUM0NC02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRERldmljZSwgCjB4MTA4ZjljNDQsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7Zjc1NjcyMGMtMzJiOS00NDM5LWI1YTMtMWQ2Yzk3MDM3ZDllfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RQYWxldHRlLAoweGY3NTY3MjBjLCAweDMyYjksIDB4NDQzOSwgMHhiNSwgMHhhMywgMHgxZCwgMHg2YywgMHg5NywgMHgwMywgMHg3ZCwgMHg5ZSk7CgovKiB7MUYzQkZCMzQtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RSZXNvdXJjZSwgCjB4MWYzYmZiMzQsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7MjE3RjY3MUUtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RWZXJ0ZXhCdWZmZXIsIAoweDIxN2Y2NzFlLCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyogezI0NzY5RUQ4LTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEVm9sdW1lLCAKMHgyNDc2OWVkOCwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCgovKiB7MzREMDFCMTAtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RTd2FwQ2hhaW4sIAoweDM0ZDAxYjEwLCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyogezM3Q0Q1NTI2LTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEU3VyZmFjZSwgCjB4MzdjZDU1MjYsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgoKLyogezNBMDJBNTRFLTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNESW5kZXhCdWZmZXIsIAoweDNhMDJhNTRlLCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyogezNDMkFFQkY2LTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEQmFzZVRleHR1cmUsIAoweDNjMmFlYmY2LCAweDZmMzAsIDB4MTFkOSwgMHhjNiwgMHg4NywgMHgwLCAweDQsIDB4NjEsIDB4NDIsIDB4YzEsIDB4NGYpOwoKLyogezNFNzJDQzFDLTZGMzAtMTFkOS1DNjg3LTAwMDQ2MTQyQzE0Rn0gKi8KREVGSU5FX0dVSUQoSUlEX0lXaW5lRDNEVGV4dHVyZSwgCjB4M2U3MmNjMWMsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7NDE3NTI5MDAtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RDdWJlVGV4dHVyZSwgCjB4NDE3NTI5MDAsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7N0IzOTQ3MEMtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RWb2x1bWVUZXh0dXJlLCAKMHg3YjM5NDcwYywgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHs3Q0Q1NUJFNi02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFZlcnRleERlY2xhcmF0aW9uLCAKMHg3Y2Q1NWJlNiwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHtFQUM5MzA2NS1BNERGLTQ0NkYtODZBMS05RUYyQkNBNDBBM0N9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzREJhc2VTaGFkZXIsCjB4ZWFjOTMwNjUsIDB4YTRkZiwgMHg0NDZmLCAweDg2LCAweGExLCAweDllLCAweGYyLCAweGJjLCAweGE0LCAweDBhLCAweDNjKTsKCi8qIHs3RjdBMkI2MC02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFZlcnRleFNoYWRlciwgCjB4N2Y3YTJiNjAsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7ODE4NTAzREEtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RQaXhlbFNoYWRlciwgCjB4ODE4NTAzZGEsIDB4NmYzMCwgMHgxMWQ5LCAweGM2LCAweDg3LCAweDAsIDB4NCwgMHg2MSwgMHg0MiwgMHhjMSwgMHg0Zik7CgovKiB7ODNCMDczQ0UtNkYzMC0xMWQ5LUM2ODctMDAwNDYxNDJDMTRGfSAqLwpERUZJTkVfR1VJRChJSURfSVdpbmVEM0RTdGF0ZUJsb2NrLCAKMHg4M2IwNzNjZSwgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHs5MDVEREJBQy02RjMwLTExZDktQzY4Ny0wMDA0NjE0MkMxNEZ9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRFF1ZXJ5LCAKMHg5MDVkZGJhYywgMHg2ZjMwLCAweDExZDksIDB4YzYsIDB4ODcsIDB4MCwgMHg0LCAweDYxLCAweDQyLCAweGMxLCAweDRmKTsKCi8qIHs4ZjJiY2ViMS1kMzM4LTQ4OGMtYWI3Zi0wZWM5ODBiZjVkMmR9ICovCkRFRklORV9HVUlEKElJRF9JV2luZUQzRENsaXBwZXIsCjB4OGYyYmNlYjEsIDB4ZDMzOCwgMHg0ODhjLCAweGFiLCAweDdmLCAweDBlLCAweGM5LCAweDgwLCAweGJmLCAweDVkLCAweDJkKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBDYWxsYmFjayBmdW5jdGlvbnMgcmVxdWlyZWQgZm9yIHByZWRlZmluaW5nIHN1cmZhY2VzIC8gc3RlbmNpbHMKICovCnR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEM0RDQl9DUkVBVEVSRU5ERVJUQVJHRVRGTikgKElVbmtub3duICpwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElVbmtub3duICAgKnBTdXBlcmlvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgICAgICAgSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RGT1JNQVQgIEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNETVVMVElTQU1QTEVfVFlQRSBNdWx0aVNhbXBsZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgICAgICBNdWx0aXNhbXBsZVF1YWxpdHksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgICAgICAgTG9ja2FibGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKipwcFN1cmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFICAgICpwU2hhcmVkSGFuZGxlKTsKCnR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEM0RDQl9DUkVBVEVTVVJGQUNFRk4pIChJVW5rbm93biAqcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVW5rbm93biAgICpwU3VwZXJpb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICBXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNERk9STUFUIEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCAgICAgIFVzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RQT09MIFBvb2wsICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICBMZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNEQ1VCRU1BUF9GQUNFUyBGYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKipwcFN1cmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFICAgICpwU2hhcmVkSGFuZGxlKTsKCnR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpEM0RDQl9DUkVBVEVERVBUSFNURU5DSUxTVVJGQUNFRk4pIChJVW5rbm93biAqcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVW5rbm93biAgICpwU3VwZXJpb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICBXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSU5FRDNERk9STUFUICBGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRE1VTFRJU0FNUExFX1RZUEUgTXVsdGlTYW1wbGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEICAgICAgTXVsdGlzYW1wbGVRdWFsaXR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICAgICAgIERpc2NhcmQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKipwcFN1cmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFICAgICpwU2hhcmVkSGFuZGxlKTsKCgp0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRDNEQ0JfQ1JFQVRFVk9MVU1FRk4pIChJVW5rbm93biAqcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJVW5rbm93biAgICpwU3VwZXJpb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICBXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIEhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UICAgICAgIERlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RGT1JNQVQgIEZvcm1hdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORUQzRFBPT0wgUG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCAgICAgIFVzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFZvbHVtZSAqKnBwVm9sdW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRSAgICAqcFNoYXJlZEhhbmRsZSk7Cgp0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSAqRDNEQ0JfQ1JFQVRFQURESVRJT05BTFNXQVBDSEFJTikgKElVbmtub3duICpwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJTkVEM0RQUkVTRU5UX1BBUkFNRVRFUlMgKnBQcmVzZW50YXRpb25QYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBJV2luZUQzRFN3YXBDaGFpbiAqKnBTd2FwQ2hhaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKdHlwZWRlZiBIUkVTVUxUIChXSU5BUEkgKkQzRENCX0VOVU1SRVNPVVJDRVMpIChzdHJ1Y3QgSVdpbmVEM0RSZXNvdXJjZSAqcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcERhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgY3VzdG9tIGltcGxpY2l0IG9iamVjdCBkZXN0cnVjdGlvbi4KICovCnR5cGVkZWYgVUxPTkcgKFdJTkFQSSAqRDNEQ0JfREVTVFJPWVNXQVBDSEFJTkZOKSAoc3RydWN0IElXaW5lRDNEU3dhcENoYWluICpwU3dhcENoYWluKTsKCnR5cGVkZWYgVUxPTkcgKFdJTkFQSSAqRDNEQ0JfREVTVFJPWVNVUkZBQ0VGTikgKHN0cnVjdCBJV2luZUQzRFN1cmZhY2UgKnBTdXJmYWNlKTsKCnR5cGVkZWYgVUxPTkcgKFdJTkFQSSAqRDNEQ0JfREVTVFJPWVZPTFVNRUZOKSAoc3RydWN0IElXaW5lRDNEVm9sdW1lICpwVm9sdW1lKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzREJhc2UgaW50ZXJmYWNlCiAqLwoKI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RCYXNlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzREJhc2UsIElVbmtub3duKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCAqKnBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQmFzZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzREJhc2VfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEIGludGVyZmFjZSAKICovCgojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRApERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0QsIElXaW5lRDNEQmFzZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQgKipwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRCBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oVUlOVCxHZXRBZGFwdGVyQ291bnQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoUmVnaXN0ZXJTb2Z0d2FyZURldmljZSkoVEhJU18gdm9pZCAqIHBJbml0aWFsaXplRnVuY3Rpb24pIFBVUkU7CiAgICBTVERNRVRIT0RfKEhNT05JVE9SLEdldEFkYXB0ZXJNb25pdG9yKShUSElTXyBVSU5UIEFkYXB0ZXIpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVJTlQsR2V0QWRhcHRlck1vZGVDb3VudCkoVEhJU18gVUlOVCBBZGFwdGVyLCBXSU5FRDNERk9STUFUIEZvcm1hdCkgUFVSRTsKICAgIFNURE1FVEhPRChFbnVtQWRhcHRlck1vZGVzKShUSElTXyBVSU5UICBBZGFwdGVyLCBVSU5UICBNb2RlLCBXSU5FRDNERk9STUFUIEZvcm1hdCwgV0lORUQzRERJU1BMQVlNT0RFICogcE1vZGUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0QWRhcHRlckRpc3BsYXlNb2RlKShUSElTXyBVSU5UICBBZGFwdGVyLCBXSU5FRDNERElTUExBWU1PREUgKnBNb2RlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEFkYXB0ZXJJZGVudGlmaWVyKShUSElTXyBVSU5UIEFkYXB0ZXIsIERXT1JEIEZsYWdzLCBXSU5FRDNEQURBUFRFUl9JREVOVElGSUVSKiBwSWRlbnRpZmllcikgUFVSRTsKICAgIFNURE1FVEhPRChDaGVja0RldmljZU11bHRpU2FtcGxlVHlwZSkoVEhJU18gVUlOVCAgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgIERldmljZVR5cGUsIFdJTkVEM0RGT1JNQVQgIFN1cmZhY2VGb3JtYXQsIEJPT0wgIFdpbmRvd2VkLCBXSU5FRDNETVVMVElTQU1QTEVfVFlQRSAgTXVsdGlTYW1wbGVUeXBlLCBEV09SRCAqcFF1YWxpdHkpIFBVUkU7CiAgICBTVERNRVRIT0QoQ2hlY2tEZXB0aFN0ZW5jaWxNYXRjaCkoVEhJU18gVUlOVCAgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgIERldmljZVR5cGUsIFdJTkVEM0RGT1JNQVQgIEFkYXB0ZXJGb3JtYXQsIFdJTkVEM0RGT1JNQVQgIFJlbmRlclRhcmdldEZvcm1hdCwgV0lORUQzREZPUk1BVCAgRGVwdGhTdGVuY2lsRm9ybWF0KSBQVVJFOwogICAgU1RETUVUSE9EKENoZWNrRGV2aWNlVHlwZSkoVEhJU18gVUlOVCAgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgIENoZWNrVHlwZSwgV0lORUQzREZPUk1BVCAgRGlzcGxheUZvcm1hdCwgV0lORUQzREZPUk1BVCAgQmFja0J1ZmZlckZvcm1hdCwgQk9PTCAgV2luZG93ZWQpIFBVUkU7CiAgICBTVERNRVRIT0QoQ2hlY2tEZXZpY2VGb3JtYXQpKFRISVNfIFVJTlQgIEFkYXB0ZXIsIFdJTkVEM0RERVZUWVBFICBEZXZpY2VUeXBlLCBXSU5FRDNERk9STUFUICBBZGFwdGVyRm9ybWF0LCBEV09SRCAgVXNhZ2UsIFdJTkVEM0RSRVNPVVJDRVRZUEUgIFJUeXBlLCBXSU5FRDNERk9STUFUICBDaGVja0Zvcm1hdCkgUFVSRTsKICAgIFNURE1FVEhPRChDaGVja0RldmljZUZvcm1hdENvbnZlcnNpb24pKFRISVNfIFVJTlQgQWRhcHRlciwgV0lORUQzRERFVlRZUEUgRGV2aWNlVHlwZSwgV0lORUQzREZPUk1BVCBTb3VyY2VGb3JtYXQsIFdJTkVEM0RGT1JNQVQgVGFyZ2V0Rm9ybWF0KSBQVVJFOwogICAgU1RETUVUSE9EKEdldERldmljZUNhcHMpKFRISVNfIFVJTlQgIEFkYXB0ZXIsIFdJTkVEM0RERVZUWVBFICBEZXZpY2VUeXBlLCBXSU5FRDNEQ0FQUyAqcENhcHMpIFBVUkU7CiAgICBTVERNRVRIT0QoQ3JlYXRlRGV2aWNlKShUSElTXyBVSU5UICBBZGFwdGVyLCBXSU5FRDNEREVWVFlQRSAgRGV2aWNlVHlwZSxIV05EICBoRm9jdXNXaW5kb3csIERXT1JEICBCZWhhdmlvckZsYWdzLCBzdHJ1Y3QgSVdpbmVEM0REZXZpY2UgKipwcFJldHVybmVkRGV2aWNlSW50ZXJmYWNlLCBJVW5rbm93biAqcGFyZW50KSBQVVJFOwoKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRF9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEX0dldEFkYXB0ZXJDb3VudChwKSAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEFkYXB0ZXJDb3VudChwKQojZGVmaW5lIElXaW5lRDNEX1JlZ2lzdGVyU29mdHdhcmVEZXZpY2UocCxhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlZ2lzdGVyU29mdHdhcmVEZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEX0dldEFkYXB0ZXJNb25pdG9yKHAsYSkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEFkYXB0ZXJNb25pdG9yKHAsYSkKI2RlZmluZSBJV2luZUQzRF9HZXRBZGFwdGVyTW9kZUNvdW50KHAsYSxiKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRBZGFwdGVyTW9kZUNvdW50KHAsYSxiKQojZGVmaW5lIElXaW5lRDNEX0VudW1BZGFwdGVyTW9kZXMocCxhLGIsYyxkKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkVudW1BZGFwdGVyTW9kZXMocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEX0dldEFkYXB0ZXJEaXNwbGF5TW9kZShwLGEsYikgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShwLGEsYikKI2RlZmluZSBJV2luZUQzRF9HZXRBZGFwdGVySWRlbnRpZmllcihwLGEsYixjKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRBZGFwdGVySWRlbnRpZmllcihwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEX0NoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKHAsYSxiLGMsZCxlLGYpIChwKS0+bHBWdGJsLT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShwLGEsYixjLGQsZSxmKQojZGVmaW5lIElXaW5lRDNEX0NoZWNrRGVwdGhTdGVuY2lsTWF0Y2gocCxhLGIsYyxkLGUpICAgICAgKHApLT5scFZ0YmwtPkNoZWNrRGVwdGhTdGVuY2lsTWF0Y2gocCxhLGIsYyxkLGUpCiNkZWZpbmUgSVdpbmVEM0RfQ2hlY2tEZXZpY2VUeXBlKHAsYSxiLGMsZCxlKSAgICAgICAgICAgICAocCktPmxwVnRibC0+Q2hlY2tEZXZpY2VUeXBlKHAsYSxiLGMsZCxlKQojZGVmaW5lIElXaW5lRDNEX0NoZWNrRGV2aWNlRm9ybWF0KHAsYSxiLGMsZCxlLGYpICAgICAgICAgKHApLT5scFZ0YmwtPkNoZWNrRGV2aWNlRm9ybWF0KHAsYSxiLGMsZCxlLGYpCiNkZWZpbmUgSVdpbmVEM0RfQ2hlY2tEZXZpY2VGb3JtYXRDb252ZXJzaW9uKHAsYSxiLGMsZCkgICAocCktPmxwVnRibC0+Q2hlY2tEZXZpY2VGb3JtYXRDb252ZXJzaW9uKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRF9HZXREZXZpY2VDYXBzKHAsYSxiLGMpICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2VDYXBzKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RfQ3JlYXRlRGV2aWNlKHAsYSxiLGMsZCxlLGYpICAgICAgICAgICAgICAocCktPmxwVnRibC0+Q3JlYXRlRGV2aWNlKHAsYSxiLGMsZCxlLGYpCiNlbmRpZgoKLyogRGVmaW5lIHRoZSBtYWluIFdpbmVEM0QgZW50cnlwb2ludCAqLwpJV2luZUQzRCogV0lOQVBJIFdpbmVEaXJlY3QzRENyZWF0ZShVSU5UIFNES1ZlcnNpb24sIFVJTlQgZHhWZXJzaW9uLCBJVW5rbm93biAqcGFyZW50KTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRERldmljZSBpbnRlcmZhY2UgCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRERldmljZQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0REZXZpY2UsSVdpbmVEM0RCYXNlKSAKeyAKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0REZXZpY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoQ3JlYXRlVmVydGV4QnVmZmVyKShUSElTXyBVSU5UICBMZW5ndGgsRFdPUkQgIFVzYWdlLERXT1JEICBGVkYsV0lORUQzRFBPT0wgIFBvb2wsc3RydWN0IElXaW5lRDNEVmVydGV4QnVmZmVyICoqcHBWZXJ0ZXhCdWZmZXIsIEhBTkRMRSAqc2hhcmVkSGFuZGxlLCBJVW5rbm93biAqcGFyZW50KSBQVVJFOwogICAgU1RETUVUSE9EKENyZWF0ZUluZGV4QnVmZmVyKShUSElTXyBVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIFdJTkVEM0RGT1JNQVQgRm9ybWF0LCBXSU5FRDNEUE9PTCBQb29sLCBzdHJ1Y3QgSVdpbmVEM0RJbmRleEJ1ZmZlcioqIHBwSW5kZXhCdWZmZXIsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVTdGF0ZUJsb2NrKShUSElTXyBXSU5FRDNEU1RBVEVCTE9DS1RZUEUgVHlwZSwgc3RydWN0IElXaW5lRDNEU3RhdGVCbG9jayAqKnBwU3RhdGVCbG9jaywgSVVua25vd24gKnBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVTdXJmYWNlKShUSElTXyBVSU5UIFdpZHRoLCBVSU5UIEhlaWdodCwgV0lORUQzREZPUk1BVCBGb3JtYXQsICBCT09MIExvY2thYmxlLCBCT09MIERpc2NhcmQsIFVJTlQgTGV2ZWwsICBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiogcHBTdXJmYWNlLCBXSU5FRDNEUkVTT1VSQ0VUWVBFIFR5cGUsIERXT1JEIFVzYWdlLCBXSU5FRDNEUE9PTCBQb29sLCBXSU5FRDNETVVMVElTQU1QTEVfVFlQRSBNdWx0aVNhbXBsZSAsRFdPUkQgTXVsdGlzYW1wbGVRdWFsaXR5LCAgSEFORExFKiBwU2hhcmVkSGFuZGxlLCBXSU5FRDNEU1VSRlRZUEUgSW1wbCwgSVVua25vd24gKnBhcmVudCkgUFVSRTsgICAgCiAgICBTVERNRVRIT0QoQ3JlYXRlVGV4dHVyZSkoVEhJU18gVUlOVCBXaWR0aCwgVUlOVCBIZWlnaHQsIFVJTlQgTGV2ZWxzLCBEV09SRCBVc2FnZSwgV0lORUQzREZPUk1BVCBGb3JtYXQsIFdJTkVEM0RQT09MIFBvb2wsIHN0cnVjdCBJV2luZUQzRFRleHR1cmUqKiBwcFRleHR1cmUsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCwgRDNEQ0JfQ1JFQVRFU1VSRkFDRUZOIHBGbikgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVWb2x1bWVUZXh0dXJlKShUSElTXyBVSU5UIFdpZHRoLCBVSU5UIEhlaWdodCwgVUlOVCBEZXB0aCwgVUlOVCBMZXZlbHMsIERXT1JEIFVzYWdlLCBXSU5FRDNERk9STUFUIEZvcm1hdCwgV0lORUQzRFBPT0wgUG9vbCwgc3RydWN0IElXaW5lRDNEVm9sdW1lVGV4dHVyZSoqIHBwVm9sdW1lVGV4dHVyZSwgSEFORExFKiBwU2hhcmVkSGFuZGxlLCBJVW5rbm93biAqcGFyZW50LCBEM0RDQl9DUkVBVEVWT0xVTUVGTiBwRm4pIFBVUkU7CiAgICBTVERNRVRIT0QoQ3JlYXRlVm9sdW1lKShUSElTXyBVSU5UIFdpZHRoLCBVSU5UIEhlaWdodCwgVUlOVCBEZXB0aCwgRFdPUkQgVXNhZ2UsIFdJTkVEM0RGT1JNQVQgRm9ybWF0LCBXSU5FRDNEUE9PTCBQb29sLCBzdHJ1Y3QgSVdpbmVEM0RWb2x1bWUqKiBwcFZvbHVtZVRleHR1cmUsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCkgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVDdWJlVGV4dHVyZSkoVEhJU18gVUlOVCBFZGdlTGVuZ3RoLCBVSU5UIExldmVscywgRFdPUkQgVXNhZ2UsIFdJTkVEM0RGT1JNQVQgRm9ybWF0LCBXSU5FRDNEUE9PTCBQb29sLCBzdHJ1Y3QgSVdpbmVEM0RDdWJlVGV4dHVyZSoqIHBwQ3ViZVRleHR1cmUsIEhBTkRMRSogcFNoYXJlZEhhbmRsZSwgSVVua25vd24gKnBhcmVudCwgRDNEQ0JfQ1JFQVRFU1VSRkFDRUZOIHBGbikgUFVSRTsKICAgIFNURE1FVEhPRChDcmVhdGVRdWVyeSkoVEhJU18gV0lORUQzRFFVRVJZVFlQRSBUeXBlLCBzdHJ1Y3QgSVdpbmVEM0RRdWVyeSAqKnBwUXVlcnksIElVbmtub3duICpwUGFyZW50KTsKICAgIFNURE1FVEhPRChDcmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKShUSElTXyBXSU5FRDNEUFJFU0VOVF9QQVJBTUVURVJTICpwUHJlc2VudGF0aW9uUGFyYW1ldGVycywgc3RydWN0IElXaW5lRDNEU3dhcENoYWluICoqcFN3YXBDaGFpbiwgSVVua25vd24gKnBQYXJlbnQsIEQzRENCX0NSRUFURVJFTkRFUlRBUkdFVEZOIHBGbiwgRDNEQ0JfQ1JFQVRFREVQVEhTVEVOQ0lMU1VSRkFDRUZOIHBGbjIpOwogICAgU1RETUVUSE9EKENyZWF0ZVZlcnRleERlY2xhcmF0aW9uKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbioqIHBwRGVjbCwgSVVua25vd24qIHBQYXJlbnQsIGNvbnN0IFdJTkVEM0RWRVJURVhFTEVNRU5UICplbGVtZW50cywgVUlOVCBlbGVtZW50X2NvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKENyZWF0ZVZlcnRleERlY2xhcmF0aW9uRnJvbUZWRikoVEhJU18gc3RydWN0IElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb24qKiBwcERlY2wsIElVbmtub3duKiBwUGFyZW50LCBEV09SRCBGdmYpIFBVUkU7CiAgICBTVERNRVRIT0QoQ3JlYXRlVmVydGV4U2hhZGVyKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbiAqdmVydGV4X2RlY2xhcmF0aW9uLCBDT05TVCBEV09SRCogcEZ1bmN0aW9uLCBzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhTaGFkZXIqKiBwcFNoYWRlciwgSVVua25vd24gKnBQYXJlbnQpIFBVUkU7CiAgICBTVERNRVRIT0QoQ3JlYXRlUGl4ZWxTaGFkZXIpKFRISVNfIENPTlNUIERXT1JEKiBwRnVuY3Rpb24sIHN0cnVjdCBJV2luZUQzRFBpeGVsU2hhZGVyKiogcHBTaGFkZXIsIElVbmtub3duICpwUGFyZW50KSBQVVJFOwogICAgU1RETUVUSE9EXyhIUkVTVUxULENyZWF0ZVBhbGV0dGUpKFRISVNfIERXT1JEIEZsYWdzLCBQQUxFVFRFRU5UUlkgKlBhbEVudCwgc3RydWN0IElXaW5lRDNEUGFsZXR0ZSAqKlBhbGV0dGUsIElVbmtub3duICpQYXJlbnQpOwogICAgU1RETUVUSE9EKEluaXQzRCkoVEhJU18gV0lORUQzRFBSRVNFTlRfUEFSQU1FVEVSUyogcFByZXNlbnRhdGlvblBhcmFtZXRlcnMsIEQzRENCX0NSRUFURUFERElUSU9OQUxTV0FQQ0hBSU4gRDNEQ0JfQ3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbik7CiAgICBTVERNRVRIT0QoVW5pbml0M0QpKFRISVMsIEQzRENCX0RFU1RST1lTVVJGQUNFRk4gcEZuLCBEM0RDQl9ERVNUUk9ZU1dBUENIQUlORk4gcEZuMik7CiAgICBTVERNRVRIT0RfKHZvaWQsIFNldEZ1bGxzY3JlZW4pKFRISVNfIEJPT0wgZnVsbHNjcmVlbik7CiAgICBTVERNRVRIT0RfKHZvaWQsIFNldE11bHRpdGhyZWFkZWQpKFRISVMpOwogICAgU1RETUVUSE9EKEV2aWN0TWFuYWdlZFJlc291cmNlcykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUlOVCwgR2V0QXZhaWxhYmxlVGV4dHVyZU1lbSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRCYWNrQnVmZmVyKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIFVJTlQgQmFja0J1ZmZlciwgV0lORUQzREJBQ0tCVUZGRVJfVFlQRSwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSoqIHBwQmFja0J1ZmZlcikgUFVSRTsKICAgIFNURE1FVEhPRChHZXRDcmVhdGlvblBhcmFtZXRlcnMpKFRISVNfIFdJTkVEM0RERVZJQ0VfQ1JFQVRJT05fUEFSQU1FVEVSUyAqcFBhcmFtZXRlcnMpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGV2aWNlQ2FwcykoVEhJU18gV0lORUQzRENBUFMqIHBDYXBzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERpcmVjdDNEKShUSElTXyBJV2luZUQzRCoqIHBwRDNEKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERpc3BsYXlNb2RlKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIFdJTkVEM0RESVNQTEFZTU9ERSogcE1vZGUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0RGlzcGxheU1vZGUpKFRISVNfIFVJTlQgaVN3YXBDaGFpbiwgV0lORUQzRERJU1BMQVlNT0RFKiBwTW9kZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRIV05EKShUSElTXyBIV05EICpod25kKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEhXTkQpKFRISVNfIEhXTkQgaHduZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUlOVCwgR2V0TnVtYmVyT2ZTd2FwQ2hhaW5zKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFJhc3RlclN0YXR1cykoVEhJU18gVUlOVCBpU3dhcENoYWluLCBXSU5FRDNEUkFTVEVSX1NUQVRVUyogcFJhc3RlclN0YXR1cykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRTd2FwQ2hhaW4pKFRISVNfIFVJTlQgaVN3YXBDaGFpbiwgc3RydWN0IElXaW5lRDNEU3dhcENoYWluICoqcFN3YXBDaGFpbikgUFVSRTsKICAgIFNURE1FVEhPRChSZXNldCkoVEhJU18gV0lORUQzRFBSRVNFTlRfUEFSQU1FVEVSUyogcFByZXNlbnRhdGlvblBhcmFtZXRlcnMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0RGlhbG9nQm94TW9kZSkoVEhJU18gQk9PTCBiRW5hYmxlRGlhbG9ncykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRDdXJzb3JQcm9wZXJ0aWVzKShUSElTXyBVSU5UIFhIb3RTcG90LCBVSU5UIFlIb3RTcG90LCBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiBwQ3Vyc29yQml0bWFwKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBTZXRDdXJzb3JQb3NpdGlvbikoVEhJU18gaW50IFhTY3JlZW5TcGFjZSwgaW50IFlTY3JlZW5TcGFjZSwgRFdPUkQgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0RfKEJPT0wsIFNob3dDdXJzb3IpKFRISVNfIEJPT0wgYlNob3cpIFBVUkU7CiAgICBTVERNRVRIT0QoVGVzdENvb3BlcmF0aXZlTGV2ZWwpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q2xpcFBsYW5lKShUSElTXyBEV09SRCAgSW5kZXgsQ09OU1QgZmxvYXQgKiBwUGxhbmUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0Q2xpcFBsYW5lKShUSElTXyBEV09SRCAgSW5kZXgsZmxvYXQgKiBwUGxhbmUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q2xpcFN0YXR1cykoVEhJU18gQ09OU1QgV0lORUQzRENMSVBTVEFUVVMgKiBwQ2xpcFN0YXR1cykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRDbGlwU3RhdHVzKShUSElTXyBXSU5FRDNEQ0xJUFNUQVRVUyAqIHBDbGlwU3RhdHVzKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEN1cnJlbnRUZXh0dXJlUGFsZXR0ZSkoVEhJU18gVUlOVCBQYWxldHRlTnVtYmVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEN1cnJlbnRUZXh0dXJlUGFsZXR0ZSkoVEhJU18gVUlOVCAqUGFsZXR0ZU51bWJlcikgUFVSRTsKICAgIFNURE1FVEhPRChTZXREZXB0aFN0ZW5jaWxTdXJmYWNlKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiBwTmV3WlN0ZW5jaWwpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVwdGhTdGVuY2lsU3VyZmFjZSkoVEhJU18gc3RydWN0IElXaW5lRDNEU3VyZmFjZSoqIHBwWlN0ZW5jaWxTdXJmYWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEZWRikoVEhJU18gRFdPUkQgIGZ2ZikgUFVSRTsKICAgIFNURE1FVEhPRChHZXRGVkYpKFRISVNfIERXT1JEICogcGZ2ZikgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgU2V0R2FtbWFSYW1wKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIERXT1JEIEZsYWdzLCBDT05TVCBXSU5FRDNER0FNTUFSQU1QKiBwUmFtcCkgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgR2V0R2FtbWFSYW1wKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sIFdJTkVEM0RHQU1NQVJBTVAqIHBSYW1wKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEluZGljZXMpKFRISVNfIHN0cnVjdCBJV2luZUQzREluZGV4QnVmZmVyICogcEluZGV4RGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRJbmRpY2VzKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RJbmRleEJ1ZmZlciAqKiBwcEluZGV4RGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRCYXNlVmVydGV4SW5kZXgpKFRISVNfIElOVCBiYXNlSW5kZXgpOwogICAgU1RETUVUSE9EKEdldEJhc2VWZXJ0ZXhJbmRleCkoVEhJU18gSU5UICpiYXNlSW5kZXgpOwogICAgU1RETUVUSE9EKFNldExpZ2h0KShUSElTXyBEV09SRCAgSW5kZXgsQ09OU1QgV0lORUQzRExJR0hUICogcExpZ2h0KSBQVVJFOwogICAgU1RETUVUSE9EKEdldExpZ2h0KShUSElTXyBEV09SRCAgSW5kZXgsV0lORUQzRExJR0hUICogcExpZ2h0KSBQVVJFOwogICAgU1RETUVUSE9EKFNldExpZ2h0RW5hYmxlKShUSElTXyBEV09SRCAgSW5kZXgsQk9PTCAgRW5hYmxlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldExpZ2h0RW5hYmxlKShUSElTXyBEV09SRCAgSW5kZXgsQk9PTCAqIHBFbmFibGUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0TWF0ZXJpYWwpKFRISVNfIENPTlNUIFdJTkVEM0RNQVRFUklBTCAqIHBNYXRlcmlhbCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRNYXRlcmlhbCkoVEhJU18gV0lORUQzRE1BVEVSSUFMICpwTWF0ZXJpYWwpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0TlBhdGNoTW9kZSkoVEhJU18gZmxvYXQgblNlZ21lbnRzKSBQVVJFOwogICAgU1RETUVUSE9EXyhmbG9hdCwgR2V0TlBhdGNoTW9kZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQYWxldHRlRW50cmllcykoVEhJU18gVUlOVCBQYWxldHRlTnVtYmVyLCBDT05TVCBQQUxFVFRFRU5UUlkqIHBFbnRyaWVzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFBhbGV0dGVFbnRyaWVzKShUSElTXyBVSU5UIFBhbGV0dGVOdW1iZXIsUEFMRVRURUVOVFJZKiBwRW50cmllcykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQaXhlbFNoYWRlcikoVEhJU18gc3RydWN0IElXaW5lRDNEUGl4ZWxTaGFkZXIgICpwU2hhZGVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFBpeGVsU2hhZGVyKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RQaXhlbFNoYWRlciAqKnBwU2hhZGVyKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFBpeGVsU2hhZGVyQ29uc3RhbnRCKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIENPTlNUIEJPT0wqIHBDb25zdGFudERhdGEsIFVJTlQgIEJvb2xDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQaXhlbFNoYWRlckNvbnN0YW50QikoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBCT09MKiBwQ29uc3RhbnREYXRhLCBVSU5UIEJvb2xDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQaXhlbFNoYWRlckNvbnN0YW50SSkoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBDT05TVCBpbnQqIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGlDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQaXhlbFNoYWRlckNvbnN0YW50SSkoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBpbnQqIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGlDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQaXhlbFNoYWRlckNvbnN0YW50RikoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBDT05TVCBmbG9hdCogcENvbnN0YW50RGF0YSwgVUlOVCBWZWN0b3I0ZkNvdW50KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFBpeGVsU2hhZGVyQ29uc3RhbnRGKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIGZsb2F0KiBwQ29uc3RhbnREYXRhLCBVSU5UIFZlY3RvcjRmQ291bnQpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UmVuZGVyU3RhdGUpKFRISVNfIFdJTkVEM0RSRU5ERVJTVEFURVRZUEUgIFN0YXRlLCBEV09SRCAgVmFsdWUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UmVuZGVyU3RhdGUpKFRISVNfIFdJTkVEM0RSRU5ERVJTVEFURVRZUEUgIFN0YXRlLCBEV09SRCAqIHBWYWx1ZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRSZW5kZXJUYXJnZXQpKFRISVNfIERXT1JEIFJlbmRlclRhcmdldEluZGV4LCBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlKiBwUmVuZGVyVGFyZ2V0KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFJlbmRlclRhcmdldCkoVEhJU18gRFdPUkQgUmVuZGVyVGFyZ2V0SW5kZXgsIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqKiBwcFJlbmRlclRhcmdldCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRGcm9udEJhY2tCdWZmZXJzKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RTdXJmYWNlICpGcm9udCwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSAqQmFjaykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRTYW1wbGVyU3RhdGUpKFRISVNfIERXT1JEIFNhbXBsZXIsIFdJTkVEM0RTQU1QTEVSU1RBVEVUWVBFIFR5cGUsIERXT1JEIFZhbHVlKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFNhbXBsZXJTdGF0ZSkoVEhJU18gRFdPUkQgU2FtcGxlciwgV0lORUQzRFNBTVBMRVJTVEFURVRZUEUgVHlwZSwgRFdPUkQqIFZhbHVlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFNjaXNzb3JSZWN0KShUSElTXyBDT05TVCBSRUNUKiBwUmVjdCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRTY2lzc29yUmVjdCkoVEhJU18gUkVDVCogcFJlY3QpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0U29mdHdhcmVWZXJ0ZXhQcm9jZXNzaW5nKShUSElTXyBCT09MIGJTb2Z0d2FyZSkgUFVSRTsKICAgIFNURE1FVEhPRF8oQk9PTCwgR2V0U29mdHdhcmVWZXJ0ZXhQcm9jZXNzaW5nKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFN0cmVhbVNvdXJjZSkoVEhJU18gVUlOVCAgU3RyZWFtTnVtYmVyLHN0cnVjdCBJV2luZUQzRFZlcnRleEJ1ZmZlciAqIHBTdHJlYW1EYXRhLFVJTlQgT2Zmc2V0LFVJTlQgIFN0cmlkZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRTdHJlYW1Tb3VyY2UpKFRISVNfIFVJTlQgIFN0cmVhbU51bWJlcixzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhCdWZmZXIgKiogcHBTdHJlYW1EYXRhLFVJTlQgKnBPZmZzZXQsIFVJTlQgKiBwU3RyaWRlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFN0cmVhbVNvdXJjZUZyZXEpKFRISVNfIFVJTlQgU3RyZWFtTnVtYmVyLCBVSU5UIERpdmlkZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0U3RyZWFtU291cmNlRnJlcSkoVEhJU18gVUlOVCBTdHJlYW1OdW1iZXIsIFVJTlQqIERpdmlkZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0VGV4dHVyZSkoVEhJU18gRFdPUkQgU3RhZ2UsIHN0cnVjdCBJV2luZUQzREJhc2VUZXh0dXJlKiBwVGV4dHVyZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRUZXh0dXJlKShUSElTXyBEV09SRCBTdGFnZSwgc3RydWN0IElXaW5lRDNEQmFzZVRleHR1cmUqKiBwcFRleHR1cmUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0VGV4dHVyZVN0YWdlU3RhdGUpKFRISVNfIERXT1JEIFN0YWdlLCBXSU5FRDNEVEVYVFVSRVNUQUdFU1RBVEVUWVBFIFR5cGUsRFdPUkQgVmFsdWUpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0VGV4dHVyZVN0YWdlU3RhdGUpKFRISVNfIERXT1JEIFN0YWdlLCBXSU5FRDNEVEVYVFVSRVNUQUdFU1RBVEVUWVBFIFR5cGUsRFdPUkQgKnBWYWx1ZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRUcmFuc2Zvcm0pKFRISVNfIFdJTkVEM0RUUkFOU0ZPUk1TVEFURVRZUEUgIFN0YXRlLCBDT05TVCBXSU5FRDNETUFUUklYICogcE1hdHJpeCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRUcmFuc2Zvcm0pKFRISVNfIFdJTkVEM0RUUkFOU0ZPUk1TVEFURVRZUEUgIFN0YXRlLCBXSU5FRDNETUFUUklYICogcE1hdHJpeCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRWZXJ0ZXhEZWNsYXJhdGlvbikoVEhJU18gc3RydWN0IElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb24qIHBEZWNsKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFZlcnRleERlY2xhcmF0aW9uKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbioqIHBwRGVjbCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRWZXJ0ZXhTaGFkZXIpKFRISVNfIHN0cnVjdCBJV2luZUQzRFZlcnRleFNoYWRlciogcFNoYWRlcikgUFVSRTsKICAgIFNURE1FVEhPRChHZXRWZXJ0ZXhTaGFkZXIpKFRISVNfIHN0cnVjdCBJV2luZUQzRFZlcnRleFNoYWRlcioqIHBwU2hhZGVyKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFZlcnRleFNoYWRlckNvbnN0YW50QikoVEhJU18gVUlOVCBTdGFydFJlZ2lzdGVyLCBDT05TVCBCT09MKiAgcENvbnN0YW50RGF0YSwgVUlOVCBCb29sQ291bnQpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0VmVydGV4U2hhZGVyQ29uc3RhbnRCKShUSElTXyBVSU5UIFN0YXJ0UmVnaXN0ZXIsIEJPT0wqICAgICAgICBwQ29uc3RhbnREYXRhLCBVSU5UIEJvb2xDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEkpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgQ09OU1QgaW50KiAgIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGlDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEkpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgaW50KiAgICAgICAgIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGlDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgQ09OU1QgZmxvYXQqIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGZDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYpKFRISVNfIFVJTlQgU3RhcnRSZWdpc3RlciwgZmxvYXQqICAgICAgIHBDb25zdGFudERhdGEsIFVJTlQgVmVjdG9yNGZDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRWaWV3cG9ydCkoVEhJU18gQ09OU1QgV0lORUQzRFZJRVdQT1JUICogcFZpZXdwb3J0KSBQVVJFOwogICAgU1RETUVUSE9EKEdldFZpZXdwb3J0KShUSElTXyBXSU5FRDNEVklFV1BPUlQgKiBwVmlld3BvcnQpIFBVUkU7CiAgICBTVERNRVRIT0QoTXVsdGlwbHlUcmFuc2Zvcm0pKFRISVNfIFdJTkVEM0RUUkFOU0ZPUk1TVEFURVRZUEUgIFN0YXRlLCBDT05TVCBXSU5FRDNETUFUUklYICogcE1hdHJpeCkgUFVSRTsKICAgIFNURE1FVEhPRChWYWxpZGF0ZURldmljZSkoVEhJU18gRFdPUkQqIHBOdW1QYXNzZXMpIFBVUkU7CiAgICBTVERNRVRIT0QoUHJvY2Vzc1ZlcnRpY2VzKShUSElTXyBVSU5UIFNyY1N0YXJ0SW5kZXgsIFVJTlQgRGVzdEluZGV4LCBVSU5UIFZlcnRleENvdW50LCBzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhCdWZmZXIqIHBEZXN0QnVmZmVyLCBzdHJ1Y3QgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbiogcFZlcnRleERlY2wsIERXT1JEIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEJlZ2luU3RhdGVCbG9jaykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChFbmRTdGF0ZUJsb2NrKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RTdGF0ZUJsb2NrKiogcHBTdGF0ZUJsb2NrKSBQVVJFOwogICAgU1RETUVUSE9EKEJlZ2luU2NlbmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoRW5kU2NlbmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoUHJlc2VudCkoVEhJU18gQ09OU1QgUkVDVCAqIHBTb3VyY2VSZWN0LENPTlNUIFJFQ1QgKiBwRGVzdFJlY3QsSFdORCAgaERlc3RXaW5kb3dPdmVycmlkZSxDT05TVCBSR05EQVRBICogcERpcnR5UmVnaW9uKSBQVVJFOwogICAgU1RETUVUSE9EKENsZWFyKShUSElTXyBEV09SRCBDb3VudCwgQ09OU1QgV0lORUQzRFJFQ1QgKiBwUmVjdHMsIERXT1JEIEZsYWdzLCBXSU5FRDNEQ09MT1IgQ29sb3IsIGZsb2F0IFosIERXT1JEIFN0ZW5jaWwpIFBVUkU7CiAgICBTVERNRVRIT0QoRHJhd1ByaW1pdGl2ZSkoVEhJU18gV0lORUQzRFBSSU1JVElWRVRZUEUgUHJpbWl0aXZlVHlwZSwgVUlOVCBTdGFydFZlcnRleCwgVUlOVCBQcmltaXRpdmVDb3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChEcmF3SW5kZXhlZFByaW1pdGl2ZSkoVEhJU18gV0lORUQzRFBSSU1JVElWRVRZUEUgUHJpbWl0aXZlVHlwZSwgVUlOVCBtaW5JbmRleCwgVUlOVCBOdW1WZXJ0aWNlcywgVUlOVCBzdGFydEluZGV4LCBVSU5UIHByaW1Db3VudCkgUFVSRTsKICAgIFNURE1FVEhPRChEcmF3UHJpbWl0aXZlVVApKFRISVNfIFdJTkVEM0RQUklNSVRJVkVUWVBFIFByaW1pdGl2ZVR5cGUsIFVJTlQgUHJpbWl0aXZlQ291bnQsIENPTlNUIHZvaWQgKiBwVmVydGV4U3RyZWFtWmVyb0RhdGEsIFVJTlQgVmVydGV4U3RyZWFtWmVyb1N0cmlkZSkgUFVSRTsKICAgIFNURE1FVEhPRChEcmF3SW5kZXhlZFByaW1pdGl2ZVVQKShUSElTXyBXSU5FRDNEUFJJTUlUSVZFVFlQRSBQcmltaXRpdmVUeXBlLCBVSU5UIE1pblZlcnRleEluZGV4LCBVSU5UIE51bVZlcnRleEluZGljZXMsIFVJTlQgUHJpbWl0aXZlQ291bnQsIENPTlNUIHZvaWQgKiBwSW5kZXhEYXRhLCBXSU5FRDNERk9STUFUIEluZGV4RGF0YUZvcm1hdCwgQ09OU1Qgdm9pZCAqIHBWZXJ0ZXhTdHJlYW1aZXJvRGF0YSwgVUlOVCBWZXJ0ZXhTdHJlYW1aZXJvU3RyaWRlKSBQVVJFOwogICAgU1RETUVUSE9EKERyYXdQcmltaXRpdmVTdHJpZGVkKShUSElTXyBXSU5FRDNEUFJJTUlUSVZFVFlQRSBQcmltaXRpdmVUeXBlLCBVSU5UIFByaW1pdGl2ZUNvdW50LCBXaW5lRGlyZWN0M0RWZXJ0ZXhTdHJpZGVkRGF0YSAqRHJhd1ByaW1TdHJpZGVEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKERyYXdJbmRleGVkUHJpbWl0aXZlU3RyaWRlZCkoVEhJU18gV0lORUQzRFBSSU1JVElWRVRZUEUgUHJpbWl0aXZlVHlwZSwgVUlOVCBQcmltaXRpdmVDb3VudCwgV2luZURpcmVjdDNEVmVydGV4U3RyaWRlZERhdGEgKkRyYXdQcmltU3RyaWRlRGF0YSwgVUlOVCBOdW1WZXJ0aWNlcywgQ09OU1Qgdm9pZCAqcEluZGV4RGF0YSwgV0lORUQzREZPUk1BVCBJbmRleERhdGFGb3JtYXQpIFBVUkU7CiAgICBTVERNRVRIT0QoRHJhd1JlY3RQYXRjaCkoVEhJU18gVUlOVCBIYW5kbGUsIENPTlNUIGZsb2F0KiBwTnVtU2VncywgQ09OU1QgV0lORUQzRFJFQ1RQQVRDSF9JTkZPKiBwUmVjdFBhdGNoSW5mbykgUFVSRTsKICAgIFNURE1FVEhPRChEcmF3VHJpUGF0Y2gpKFRISVNfIFVJTlQgSGFuZGxlLCBDT05TVCBmbG9hdCogcE51bVNlZ3MsIENPTlNUIFdJTkVEM0RUUklQQVRDSF9JTkZPKiBwVHJpUGF0Y2hJbmZvKSBQVVJFOwogICAgU1RETUVUSE9EKERlbGV0ZVBhdGNoKShUSElTXyBVSU5UIEhhbmRsZSkgUFVSRTsKICAgIFNURE1FVEhPRChDb2xvckZpbGwpKFRISVNfIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBTdXJmYWNlLCBDT05TVCBXSU5FRDNEUkVDVCogcFJlY3QsIFdJTkVEM0RDT0xPUiBjb2xvcikgUFVSRTsKICAgIFNURE1FVEhPRChVcGRhdGVUZXh0dXJlKShUSElTXyBzdHJ1Y3QgSVdpbmVEM0RCYXNlVGV4dHVyZSAqcFNvdXJjZVRleHR1cmUsIHN0cnVjdCBJV2luZUQzREJhc2VUZXh0dXJlICpwRGVzdGluYXRpb25UZXh0dXJlKSBQVVJFOwogICAgU1RETUVUSE9EKFVwZGF0ZVN1cmZhY2UpKFRISVNfIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqIHBTb3VyY2VTdXJmYWNlLCBDT05TVCBSRUNUKiBwU291cmNlUmVjdCwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSogcERlc3RpbmF0aW9uU3VyZmFjZSwgQ09OU1QgUE9JTlQqIHBEZXN0UG9pbnQpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RnJvbnRCdWZmZXJEYXRhKShUSElTXyBVSU5UIGlTd2FwQ2hhaW4sc3RydWN0IElXaW5lRDNEU3VyZmFjZSogcFN1cmZhY2UpIFBVUkU7CiAgICAvKioqIG9iamVjdCB0cmFja2luZyAqKiovCiAgICBTVERNRVRIT0RfKHZvaWQsIFJlc291cmNlUmVsZWFzZWQpKFRISVNfIHN0cnVjdCBJV2luZUQzRFJlc291cmNlICpyZXNvdXJjZSk7CiAgICBTVERNRVRIT0QoRW51bVJlc291cmNlcykoVEhJU18gRDNEQ0JfRU5VTVJFU09VUkNFUyBwQ2FsbGJhY2ssIHZvaWQgKnBEYXRhKTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNERGV2aWNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVZlcnRleEJ1ZmZlcihwLGEsYixjLGQsZSxmLGcpICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVZlcnRleEJ1ZmZlcihwLGEsYixjLGQsZSxmLGcpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfQ3JlYXRlSW5kZXhCdWZmZXIocCxhLGIsYyxkLGUsZixnKSAgICAgICAocCktPmxwVnRibC0+Q3JlYXRlSW5kZXhCdWZmZXIocCxhLGIsYyxkLGUsZixnKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVN0YXRlQmxvY2socCxhLGIsYykgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVN0YXRlQmxvY2socCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVTdXJmYWNlKHAsYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8pICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVN1cmZhY2UocCxhLGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbykKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVUZXh0dXJlKHAsYSxiLGMsZCxlLGYsZyxoLGksaikgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVUZXh0dXJlKHAsYSxiLGMsZCxlLGYsZyxoLGksaikKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVWb2x1bWVUZXh0dXJlKHAsYSxiLGMsZCxlLGYsZyxoLGksaixrKSAgICAocCktPmxwVnRibC0+Q3JlYXRlVm9sdW1lVGV4dHVyZShwLGEsYixjLGQsZSxmLGcsaCxpLGosaykKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVWb2x1bWUocCxhLGIsYyxkLGUsZixnLGgsaSkgICAgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVWb2x1bWUocCxhLGIsYyxkLGUsZixnLGgsaSkKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVDdWJlVGV4dHVyZShwLGEsYixjLGQsZSxmLGcsaCxpKSAgIChwKS0+bHBWdGJsLT5DcmVhdGVDdWJlVGV4dHVyZShwLGEsYixjLGQsZSxmLGcsaCxpKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVF1ZXJ5KHAsYSxiLGMpICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVF1ZXJ5KHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfQ3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbihwLGEsYixjLGQsZSkgICAocCktPmxwVnRibC0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbihwLGEsYixjLGQsZSkKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihwLGEsYixjLGQpICAgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfQ3JlYXRlVmVydGV4RGVjbGFyYXRpb25Gcm9tRlZGKHAsYSxiLGMpICAocCktPmxwVnRibC0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb25Gcm9tRlZGKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfQ3JlYXRlVmVydGV4U2hhZGVyKHAsYSxiLGMsZCkgICAgICAgICAgICAocCktPmxwVnRibC0+Q3JlYXRlVmVydGV4U2hhZGVyKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRERldmljZV9DcmVhdGVQaXhlbFNoYWRlcihwLGEsYixjKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5DcmVhdGVQaXhlbFNoYWRlcihwLGEsYixjKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NyZWF0ZVBhbGV0dGUocCwgYSwgYiwgYywgZCkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNyZWF0ZVBhbGV0dGUocCwgYSwgYiwgYywgZCkKI2RlZmluZSBJV2luZUQzRERldmljZV9Jbml0M0QocCwgYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5Jbml0M0QocCwgYSwgYikKI2RlZmluZSBJV2luZUQzRERldmljZV9VbmluaXQzRChwLCBhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmluaXQzRChwLCBhLCBiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldEZ1bGxzY3JlZW4ocCwgYSkgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEZ1bGxzY3JlZW4ocCwgYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRNdWx0aXRocmVhZGVkKHApICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRNdWx0aXRocmVhZGVkKHApCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRXZpY3RNYW5hZ2VkUmVzb3VyY2VzKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+RXZpY3RNYW5hZ2VkUmVzb3VyY2VzKHApCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0QXZhaWxhYmxlVGV4dHVyZU1lbShwKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0QXZhaWxhYmxlVGV4dHVyZU1lbShwKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldEJhY2tCdWZmZXIocCxhLGIsYyxkKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEJhY2tCdWZmZXIocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldENyZWF0aW9uUGFyYW1ldGVycyhwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldENyZWF0aW9uUGFyYW1ldGVycyhwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0RGV2aWNlQ2FwcyhwLGEpICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlQ2FwcyhwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0RGlyZWN0M0QocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGlyZWN0M0QocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldERpc3BsYXlNb2RlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERpc3BsYXlNb2RlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldERpc3BsYXlNb2RlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldERpc3BsYXlNb2RlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldEhXTkQocCwgYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEhXTkQocCwgYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRIV05EKHAsIGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRIV05EKHAsIGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0TnVtYmVyT2ZTd2FwQ2hhaW5zKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0TnVtYmVyT2ZTd2FwQ2hhaW5zKHApCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfUmVzZXQocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVzZXQocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldERpYWxvZ0JveE1vZGUocCxhKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldERpYWxvZ0JveE1vZGUocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldEN1cnNvclByb3BlcnRpZXMocCxhLGIsYykgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEN1cnNvclByb3BlcnRpZXMocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRDdXJzb3JQb3NpdGlvbihwLGEsYixjKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRDdXJzb3JQb3NpdGlvbihwLGEsYixjKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1Nob3dDdXJzb3IocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNob3dDdXJzb3IocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1Rlc3RDb29wZXJhdGl2ZUxldmVsKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlRlc3RDb29wZXJhdGl2ZUxldmVsKHApCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0RlZGKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0RlZGKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRGVkYocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRGVkYocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldENsaXBQbGFuZShwLGEsYikgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldENsaXBQbGFuZShwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRDbGlwUGxhbmUocCxhLGIpICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRDbGlwUGxhbmUocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0Q2xpcFN0YXR1cyhwLGEpICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0Q2xpcFN0YXR1cyhwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0Q2xpcFN0YXR1cyhwLGEpICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0Q2xpcFN0YXR1cyhwLGEpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfU2V0Q3VycmVudFRleHR1cmVQYWxldHRlKHAsYSkgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0Q3VycmVudFRleHR1cmVQYWxldHRlKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRDdXJyZW50VGV4dHVyZVBhbGV0dGUocCxhKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRDdXJyZW50VGV4dHVyZVBhbGV0dGUocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldERlcHRoU3RlbmNpbFN1cmZhY2UocCxhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldERlcHRoU3RlbmNpbFN1cmZhY2UocCxhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERlcHRoU3RlbmNpbFN1cmZhY2UocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldEdhbW1hUmFtcChwLGEsYixjKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEdhbW1hUmFtcChwLGEsYixjKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldEdhbW1hUmFtcChwLGEsYikgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEdhbW1hUmFtcChwLGEsYikKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRJbmRpY2VzKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRJbmRpY2VzKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRJbmRpY2VzKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRJbmRpY2VzKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9TZXRCYXNlVmVydGV4SW5kZXgocCwgYSkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRCYXNlVmVydGV4SW5kZXgocCwgYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRCYXNlVmVydGV4SW5kZXgocCxhKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRCYXNlVmVydGV4SW5kZXgocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldExpZ2h0KHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldExpZ2h0KHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldExpZ2h0KHAsYSxiKSAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExpZ2h0KHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldExpZ2h0RW5hYmxlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldExpZ2h0RW5hYmxlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0dldExpZ2h0RW5hYmxlKHAsYSxiKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExpZ2h0RW5hYmxlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1NldE1hdGVyaWFsKHAsYSkgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldE1hdGVyaWFsKHAsYSkKI2RlZmluZSBJV2luZUQzRERldmljZV9HZXRNYXRlcmlhbChwLGEpICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+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+bHBWdGJsLT5DbGVhcihwLGEsYixjLGQsZSxmKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0RyYXdQcmltaXRpdmUocCxhLGIsYykgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkRyYXdQcmltaXRpdmUocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRERldmljZV9EcmF3SW5kZXhlZFByaW1pdGl2ZShwLGEsYixjLGQsZSkgICAgICAgIChwKS0+bHBWdGJsLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwLGEsYixjLGQsZSkKI2RlZmluZSBJV2luZUQzRERldmljZV9EcmF3UHJpbWl0aXZlVVAocCxhLGIsYyxkKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5EcmF3UHJpbWl0aXZlVVAocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0RyYXdJbmRleGVkUHJpbWl0aXZlVVAocCxhLGIsYyxkLGUsZixnLGgpIChwKS0+bHBWdGJsLT5EcmF3SW5kZXhlZFByaW1pdGl2ZVVQKHAsYSxiLGMsZCxlLGYsZyxoKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0RyYXdQcmltaXRpdmVTdHJpZGVkKHAsYSxiLGMpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkRyYXdQcmltaXRpdmVTdHJpZGVkKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRHJhd0luZGV4ZWRQcmltaXRpdmVTdHJpZGVkKHAsYSxiLGMsZCxlLGYpIChwKS0+bHBWdGJsLT5EcmF3SW5kZXhlZFByaW1pdGl2ZVN0cmlkZWQocCxhLGIsYyxkLGUsZikKI2RlZmluZSBJV2luZUQzRERldmljZV9EcmF3UmVjdFBhdGNoKHAsYSxiLGMpICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5EcmF3UmVjdFBhdGNoKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRHJhd1RyaVBhdGNoKHAsYSxiLGMpICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+RHJhd1RyaVBhdGNoKHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfRGVsZXRlUGF0Y2gocCxhKSAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+RGVsZXRlUGF0Y2gocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0NvbG9yRmlsbChwLGEsYixjKSAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNvbG9yRmlsbChwLGEsYixjKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1VwZGF0ZVRleHR1cmUocCxhLGIpICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVwZGF0ZVRleHR1cmUocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfVXBkYXRlU3VyZmFjZShwLGEsYixjLGQpICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VXBkYXRlU3VyZmFjZShwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0REZXZpY2VfR2V0RnJvbnRCdWZmZXJEYXRhKHAsYSxiKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RnJvbnRCdWZmZXJEYXRhKHAsYSxiKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX1Jlc291cmNlUmVsZWFzZWQocCxhKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlc291cmNlUmVsZWFzZWQocCxhKQojZGVmaW5lIElXaW5lRDNERGV2aWNlX0VudW1SZXNvdXJjZXMocCxhLGIpICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkVudW1SZXNvdXJjZXMocCxhLGIpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFdpbmVEM0RSZXNvdXJjZSBpbnRlcmZhY2UgCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFJlc291cmNlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzRFJlc291cmNlLElXaW5lRDNEQmFzZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldERldmljZSkoVEhJU18gSVdpbmVEM0REZXZpY2UgKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIENPTlNUIHZvaWQgKiBwRGF0YSwgRFdPUkQgIFNpemVPZkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgdm9pZCAqIHBEYXRhLCBEV09SRCAqIHBTaXplT2ZEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKEZyZWVQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsU2V0UHJpb3JpdHkpKFRISVNfIERXT1JEICBQcmlvcml0eU5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UHJpb3JpdHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsUHJlTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxVbkxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RSRVNPVVJDRVRZUEUsR2V0VHlwZSkoVEhJUykgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RSZXNvdXJjZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEUmVzb3VyY2VfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFJlc291cmNlX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFJlc291cmNlX0dldERldmljZShwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RSZXNvdXJjZV9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAgIChwKS0+bHBWdGJsLT5TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RSZXNvdXJjZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEUmVzb3VyY2VfRnJlZVByaXZhdGVEYXRhKHAsYSkgICAgICAgICAocCktPmxwVnRibC0+RnJlZVByaXZhdGVEYXRhKHAsYSkKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFByaW9yaXR5KHAsYSkKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RSZXNvdXJjZV9QcmVMb2FkKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5QcmVMb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RSZXNvdXJjZV9VbkxvYWQocCkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbkxvYWQocCkKI2RlZmluZSBJV2luZUQzRFJlc291cmNlX0dldFR5cGUocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogV2luZUQzRFZlcnRleEJ1ZmZlciBpbnRlcmZhY2UgCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFZlcnRleEJ1ZmZlcgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RWZXJ0ZXhCdWZmZXIsSVdpbmVEM0RSZXNvdXJjZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldERldmljZSkoVEhJU18gSVdpbmVEM0REZXZpY2UgKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIENPTlNUIHZvaWQgKiBwRGF0YSwgRFdPUkQgIFNpemVPZkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgdm9pZCAqIHBEYXRhLCBEV09SRCAqIHBTaXplT2ZEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKEZyZWVQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsU2V0UHJpb3JpdHkpKFRISVNfIERXT1JEICBQcmlvcml0eU5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UHJpb3JpdHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsUHJlTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxVbkxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RSRVNPVVJDRVRZUEUsR2V0VHlwZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RWZXJ0ZXhCdWZmZXIgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoTG9jaykoVEhJU18gVUlOVCAgT2Zmc2V0VG9Mb2NrLCBVSU5UICBTaXplVG9Mb2NrLCBCWVRFICoqIHBwYkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2spKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVzYykoVEhJU18gV0lORUQzRFZFUlRFWEJVRkZFUl9ERVNDICAqIHBEZXNjKSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX1NldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkgICAgKHApLT5scFZ0YmwtPlNldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0ZyZWVQcml2YXRlRGF0YShwLGEpICAgICAgICAgKHApLT5scFZ0YmwtPkZyZWVQcml2YXRlRGF0YShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhCdWZmZXJfU2V0UHJpb3JpdHkocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0UHJpb3JpdHkocCxhKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0dldFByaW9yaXR5KHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhCdWZmZXJfUHJlTG9hZChwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UHJlTG9hZChwKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX1VuTG9hZChwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVuTG9hZChwKQojZGVmaW5lIElXaW5lRDNEVmVydGV4QnVmZmVyX0dldFR5cGUocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKLyoqKiBJV2luZUQzRFZlcnRleEJ1ZmZlciBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9Mb2NrKHAsYSxiLGMsZCkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5Mb2NrKHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9VbmxvY2socCkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmxvY2socCkKI2RlZmluZSBJV2luZUQzRFZlcnRleEJ1ZmZlcl9HZXREZXNjKHAsYSkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXNjKHAsYSkKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogV2luZUQzREluZGV4QnVmZmVyIGludGVyZmFjZSAKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNESW5kZXhCdWZmZXIKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNESW5kZXhCdWZmZXIsSVdpbmVEM0RSZXNvdXJjZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldERldmljZSkoVEhJU18gSVdpbmVEM0REZXZpY2UgKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIENPTlNUIHZvaWQgKiBwRGF0YSwgRFdPUkQgIFNpemVPZkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgdm9pZCAqIHBEYXRhLCBEV09SRCAqIHBTaXplT2ZEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKEZyZWVQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsU2V0UHJpb3JpdHkpKFRISVNfIERXT1JEICBQcmlvcml0eU5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UHJpb3JpdHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsUHJlTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxVbkxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RSRVNPVVJDRVRZUEUsR2V0VHlwZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RJbmRleEJ1ZmZlciBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChMb2NrKShUSElTXyBVSU5UICBPZmZzZXRUb0xvY2ssIFVJTlQgIFNpemVUb0xvY2ssIEJZVEUgKiogcHBiRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKFVubG9jaykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChHZXREZXNjKShUSElTXyBXSU5FRDNESU5ERVhCVUZGRVJfREVTQyAgKiBwRGVzYykgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX0dldERldmljZShwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAgIChwKS0+bHBWdGJsLT5TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfRnJlZVByaXZhdGVEYXRhKHAsYSkgICAgICAgICAocCktPmxwVnRibC0+RnJlZVByaXZhdGVEYXRhKHAsYSkKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFByaW9yaXR5KHAsYSkKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX0dldFByaW9yaXR5KHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9QcmVMb2FkKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5QcmVMb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9VbkxvYWQocCkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbkxvYWQocCkKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX0dldFR5cGUocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKLyoqKiBJV2luZUQzREluZGV4QnVmZmVyIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNESW5kZXhCdWZmZXJfTG9jayhwLGEsYixjLGQpICAgICAgICAgICAgICAocCktPmxwVnRibC0+TG9jayhwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RJbmRleEJ1ZmZlcl9VbmxvY2socCkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmxvY2socCkKI2RlZmluZSBJV2luZUQzREluZGV4QnVmZmVyX0dldERlc2MocCxhKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERlc2MocCxhKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzREJhc2VUZXh0dXJlIGludGVyZmFjZQogKiAgIE5vdGUgYXQgZDNkOCB0aGlzIGRvZXMgTk9UIGV4dGVuZCBSZXNvdXJjZSwgYnV0IGF0IGQzZDkgaXQgZG9lcwogKiAgICAgc2luY2UgbW9zdCBmdW5jdGlvbnMgYXJlIGNvbW1vbiBhbnl3YXksIGl0IG1ha2VzIHNlbnNlIHRvIGV4dGVuZCBpdAogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RCYXNlVGV4dHVyZQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RCYXNlVGV4dHVyZSxJV2luZUQzRFJlc291cmNlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUmVzb3VyY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKiBwcERldmljZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgQ09OU1Qgdm9pZCAqIHBEYXRhLCBEV09SRCAgU2l6ZU9mRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCB2b2lkICogcERhdGEsIERXT1JEICogcFNpemVPZkRhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoRnJlZVByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxTZXRQcmlvcml0eSkoVEhJU18gRFdPUkQgIFByaW9yaXR5TmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxHZXRQcmlvcml0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxQcmVMb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFVuTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFJFU09VUkNFVFlQRSxHZXRUeXBlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2VUZXh0dXJlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhEV09SRCwgU2V0TE9EKShUSElTXyBEV09SRCBMT0ROZXcpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELCBHZXRMT0QpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELCBHZXRMZXZlbENvdW50KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEF1dG9HZW5GaWx0ZXJUeXBlKShUSElTXyBXSU5FRDNEVEVYVFVSRUZJTFRFUlRZUEUgRmlsdGVyVHlwZSkgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFRFWFRVUkVGSUxURVJUWVBFLCBHZXRBdXRvR2VuRmlsdGVyVHlwZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgR2VuZXJhdGVNaXBTdWJMZXZlbHMpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKEJPT0wsIFNldERpcnR5KShUSElTXyBCT09MKSBQVVJFOwogICAgU1RETUVUSE9EXyhCT09MLCBHZXREaXJ0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChCaW5kVGV4dHVyZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChVbkJpbmRUZXh0dXJlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVSU5ULCBHZXRUZXh0dXJlRGltZW5zaW9ucykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgQXBwbHlTdGF0ZUNoYW5nZXMpKFRISVNfIGNvbnN0IERXT1JEIHRleHR1cmVTdGF0ZXNbV0lORUQzRF9ISUdIRVNUX1RFWFRVUkVfU1RBVEUgKyAxXSwgY29uc3QgRFdPUkQgc2FtcGxlclN0YXRlc1tXSU5FRDNEX0hJR0hFU1RfU0FNUExFUl9TVEFURSArIDFdKSBQVVJFOwoKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dldFBhcmVudChwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEQmFzZVRleHR1cmUgbWV0aG9kczogSVdpbmVEM0RSZXNvdXJjZSAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX1NldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkgIChwKS0+bHBWdGJsLT5TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAocCktPmxwVnRibC0+R2V0UHJpdmF0ZURhdGEocCxhLGIsYykKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0ZyZWVQcml2YXRlRGF0YShwLGEpICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfU2V0UHJpb3JpdHkocCxhKSAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFByaW9yaXR5KHAsYSkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQcmlvcml0eShwKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfUHJlTG9hZChwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX1VuTG9hZChwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbkxvYWQocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dldFR5cGUocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRUeXBlKHApCi8qKiogSVdpbmVEM0RCYXNlVGV4dHVyZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX1NldExPRChwLGEpICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRMT0QocCxhKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfR2V0TE9EKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExPRChwKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfR2V0TGV2ZWxDb3VudChwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExldmVsQ291bnQocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX1NldEF1dG9HZW5GaWx0ZXJUeXBlKHAsYSkgIChwKS0+bHBWdGJsLT5TZXRBdXRvR2VuRmlsdGVyVHlwZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9HZXRBdXRvR2VuRmlsdGVyVHlwZShwKSAgICAocCktPmxwVnRibC0+R2V0QXV0b0dlbkZpbHRlclR5cGUocCkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dlbmVyYXRlTWlwU3ViTGV2ZWxzKHApICAgIChwKS0+bHBWdGJsLT5HZW5lcmF0ZU1pcFN1YkxldmVscyhwKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfU2V0RGlydHkocCxhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldERpcnR5KHAsYSkKI2RlZmluZSBJV2luZUQzREJhc2VUZXh0dXJlX0dldERpcnR5KHApICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREaXJ0eShwKQovKioqIGludGVybmFsIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfQmluZFRleHR1cmUocCkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9VbkJpbmRUZXh0dXJlKHApICAgICAgICAgICAocCktPmxwVnRibC0+VW5CaW5kVGV4dHVyZShwKQojZGVmaW5lIElXaW5lRDNEQmFzZVRleHR1cmVfR2V0VGV4dHVyZURpbWVuc2lvbnMocCkgICAgKHApLT5scFZ0YmwtPkdldFRleHR1cmVEaW1lbnNpb25zKHApCiNkZWZpbmUgSVdpbmVEM0RCYXNlVGV4dHVyZV9BcHBseVN0YXRlQ2hhbmdlcyhwLGEsYikgICAocCktPmxwVnRibC0+QXBwbHlTdGF0ZUNoYW5nZXMocCxhLGIpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEVGV4dHVyZSBpbnRlcmZhY2UKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEVGV4dHVyZQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RUZXh0dXJlLElXaW5lRDNEQmFzZVRleHR1cmUpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqIHBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCBDT05TVCB2b2lkICogcERhdGEsIERXT1JEICBTaXplT2ZEYXRhLCBEV09SRCAgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIHZvaWQgKiBwRGF0YSwgRFdPUkQgKiBwU2l6ZU9mRGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRChGcmVlUHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELFNldFByaW9yaXR5KShUSElTXyBEV09SRCAgUHJpb3JpdHlOZXcpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELEdldFByaW9yaXR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFByZUxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsVW5Mb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEUkVTT1VSQ0VUWVBFLEdldFR5cGUpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZVRleHR1cmUgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKERXT1JELCBTZXRMT0QpKFRISVNfIERXT1JEIExPRE5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsIEdldExPRCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsIEdldExldmVsQ291bnQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0QXV0b0dlbkZpbHRlclR5cGUpKFRISVNfIFdJTkVEM0RURVhUVVJFRklMVEVSVFlQRSBGaWx0ZXJUeXBlKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEVEVYVFVSRUZJTFRFUlRZUEUsIEdldEF1dG9HZW5GaWx0ZXJUeXBlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBHZW5lcmF0ZU1pcFN1YkxldmVscykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oQk9PTCwgU2V0RGlydHkpKFRISVNfIEJPT0wpIFBVUkU7CiAgICBTVERNRVRIT0RfKEJPT0wsIEdldERpcnR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEJpbmRUZXh0dXJlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFVuQmluZFRleHR1cmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVJTlQsIEdldFRleHR1cmVEaW1lbnNpb25zKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBBcHBseVN0YXRlQ2hhbmdlcykoVEhJU18gY29uc3QgRFdPUkQgdGV4dHVyZVN0YXRlc1tXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURSArIDFdLCBjb25zdCBEV09SRCBzYW1wbGVyU3RhdGVzW1dJTkVEM0RfSElHSEVTVF9TQU1QTEVSX1NUQVRFICsgMV0pIFBVUkU7CiAgICAvKioqIElXaW5lRDNEVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8odm9pZCwgRGVzdHJveSkoVEhJU18gRDNEQ0JfREVTVFJPWVNVUkZBQ0VGTiBwRm4pIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0TGV2ZWxEZXNjKShUSElTXyBVSU5UIExldmVsLCBXSU5FRDNEU1VSRkFDRV9ERVNDKiBwRGVzYykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRTdXJmYWNlTGV2ZWwpKFRISVNfIFVJTlQgTGV2ZWwsIHN0cnVjdCBJV2luZUQzRFN1cmZhY2UqKiBwcFN1cmZhY2VMZXZlbCkgUFVSRTsKICAgIFNURE1FVEhPRChMb2NrUmVjdCkoVEhJU18gVUlOVCBMZXZlbCwgV0lORUQzRExPQ0tFRF9SRUNUKiBwTG9ja2VkUmVjdCwgQ09OU1QgUkVDVCogcFJlY3QsIERXT1JEIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKFVubG9ja1JlY3QpKFRISVNfIFVJTlQgTGV2ZWwpIFBVUkU7CiAgICBTVERNRVRIT0QoQWRkRGlydHlSZWN0KShUSElTXyBDT05TVCBSRUNUKiBwRGlydHlSZWN0KSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFRleHR1cmVfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzRFRleHR1cmUgbWV0aG9kczogSVdpbmVEM0RSZXNvdXJjZSAqKiovCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldERldmljZShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAocCktPmxwVnRibC0+R2V0UHJpdmF0ZURhdGEocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfRnJlZVByaXZhdGVEYXRhKHAsYSkgICAgICAgKHApLT5scFZ0YmwtPkZyZWVQcml2YXRlRGF0YShwLGEpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQcmlvcml0eShwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9QcmVMb2FkKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UHJlTG9hZChwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9VbkxvYWQocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VW5Mb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldFR5cGUocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRUeXBlKHApCi8qKiogSVdpbmVEM0RUZXh0dXJlIG1ldGhvZHM6IElXaW5lRDNEQmFzZVRleHR1cmUgKioqLwojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9TZXRMT0QocCxhKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0TE9EKHAsYSkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfR2V0TE9EKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExPRChwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXRMZXZlbENvdW50KHApICAgICAgICAgICAocCktPmxwVnRibC0+R2V0TGV2ZWxDb3VudChwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9TZXRBdXRvR2VuRmlsdGVyVHlwZShwLGEpICAocCktPmxwVnRibC0+U2V0QXV0b0dlbkZpbHRlclR5cGUocCxhKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9HZXRBdXRvR2VuRmlsdGVyVHlwZShwKSAgICAocCktPmxwVnRibC0+R2V0QXV0b0dlbkZpbHRlclR5cGUocCkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfR2VuZXJhdGVNaXBTdWJMZXZlbHMocCkgICAgKHApLT5scFZ0YmwtPkdlbmVyYXRlTWlwU3ViTGV2ZWxzKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX1NldERpcnR5KHAsYSkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXREaXJ0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0dldERpcnR5KHApICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREaXJ0eShwKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9CaW5kVGV4dHVyZShwKSAgICAgICAgICAgICAocCktPmxwVnRibC0+QmluZFRleHR1cmUocCkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfVW5CaW5kVGV4dHVyZShwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPlVuQmluZFRleHR1cmUocCkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfR2V0VGV4dHVyZURpbWVuc2lvbnMocCkgICAgKHApLT5scFZ0YmwtPkdldFRleHR1cmVEaW1lbnNpb25zKHApCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0FwcGx5U3RhdGVDaGFuZ2VzKHAsYSxiKSAgIChwKS0+bHBWdGJsLT5BcHBseVN0YXRlQ2hhbmdlcyhwLGEsYikKLyoqKiBJV2luZUQzRFRleHR1cmUgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RUZXh0dXJlX0Rlc3Ryb3kocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5EZXN0cm95KHAsYSkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfR2V0TGV2ZWxEZXNjKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPkdldExldmVsRGVzYyhwLGEsYikKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfR2V0U3VyZmFjZUxldmVsKHAsYSxiKSAgICAgKHApLT5scFZ0YmwtPkdldFN1cmZhY2VMZXZlbChwLGEsYikKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfTG9ja1JlY3QocCxhLGIsYyxkKSAgICAgICAgKHApLT5scFZ0YmwtPkxvY2tSZWN0KHAsYSxiLGMsZCkKI2RlZmluZSBJV2luZUQzRFRleHR1cmVfVW5sb2NrUmVjdChwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVubG9ja1JlY3QocCxhKQojZGVmaW5lIElXaW5lRDNEVGV4dHVyZV9BZGREaXJ0eVJlY3QocCxhKSAgICAgICAgICAocCktPmxwVnRibC0+QWRkRGlydHlSZWN0KHAsYSkKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogSVdpbmVEM0RDdWJlVGV4dHVyZSBpbnRlcmZhY2UKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEQ3ViZVRleHR1cmUKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEQ3ViZVRleHR1cmUsSVdpbmVEM0RCYXNlVGV4dHVyZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFJlc291cmNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldERldmljZSkoVEhJU18gSVdpbmVEM0REZXZpY2UgKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIENPTlNUIHZvaWQgKiBwRGF0YSwgRFdPUkQgIFNpemVPZkRhdGEsIERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgdm9pZCAqIHBEYXRhLCBEV09SRCAqIHBTaXplT2ZEYXRhKSBQVVJFOwogICAgU1RETUVUSE9EKEZyZWVQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsU2V0UHJpb3JpdHkpKFRISVNfIERXT1JEICBQcmlvcml0eU5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UHJpb3JpdHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsUHJlTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxVbkxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RSRVNPVVJDRVRZUEUsR2V0VHlwZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oRFdPUkQsIFNldExPRCkoVEhJU18gRFdPUkQgTE9ETmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0TE9EKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0TGV2ZWxDb3VudCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChTZXRBdXRvR2VuRmlsdGVyVHlwZSkoVEhJU18gV0lORUQzRFRFWFRVUkVGSUxURVJUWVBFIEZpbHRlclR5cGUpIFBVUkU7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RURVhUVVJFRklMVEVSVFlQRSwgR2V0QXV0b0dlbkZpbHRlclR5cGUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsIEdlbmVyYXRlTWlwU3ViTGV2ZWxzKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhCT09MLCBTZXREaXJ0eSkoVEhJU18gQk9PTCkgUFVSRTsKICAgIFNURE1FVEhPRF8oQk9PTCwgR2V0RGlydHkpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoQmluZFRleHR1cmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoVW5CaW5kVGV4dHVyZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUlOVCwgR2V0VGV4dHVyZURpbWVuc2lvbnMpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsIEFwcGx5U3RhdGVDaGFuZ2VzKShUSElTXyBEV09SRCBjb25zdCB0ZXh0dXJlU3RhdGVzW1dJTkVEM0RfSElHSEVTVF9URVhUVVJFX1NUQVRFICsgMV0sIGNvbnN0IERXT1JEIHNhbXBsZXJTdGF0ZXNbV0lORUQzRF9ISUdIRVNUX1NBTVBMRVJfU1RBVEUgKyAxXSkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RDdWJlVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8odm9pZCwgRGVzdHJveSkoVEhJU18gRDNEQ0JfREVTVFJPWVNVUkZBQ0VGTiBwRm4pIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0TGV2ZWxEZXNjKShUSElTXyBVSU5UIExldmVsLFdJTkVEM0RTVVJGQUNFX0RFU0MqIHBEZXNjKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEN1YmVNYXBTdXJmYWNlKShUSElTXyBXSU5FRDNEQ1VCRU1BUF9GQUNFUyBGYWNlVHlwZSwgVUlOVCBMZXZlbCwgc3RydWN0IElXaW5lRDNEU3VyZmFjZSoqIHBwQ3ViZU1hcFN1cmZhY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoTG9ja1JlY3QpKFRISVNfIFdJTkVEM0RDVUJFTUFQX0ZBQ0VTIEZhY2VUeXBlLCBVSU5UIExldmVsLCBXSU5FRDNETE9DS0VEX1JFQ1QqIHBMb2NrZWRSZWN0LCBDT05TVCBSRUNUKiBwUmVjdCwgRFdPUkQgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoVW5sb2NrUmVjdCkoVEhJU18gV0lORUQzRENVQkVNQVBfRkFDRVMgRmFjZVR5cGUsIFVJTlQgTGV2ZWwpIFBVUkU7CiAgICBTVERNRVRIT0QoQWRkRGlydHlSZWN0KShUSElTXyBXSU5FRDNEQ1VCRU1BUF9GQUNFUyBGYWNlVHlwZSwgQ09OU1QgUkVDVCogcERpcnR5UmVjdCkgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldFBhcmVudChwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEQ3ViZVRleHR1cmUgbWV0aG9kczogSVdpbmVEM0RSZXNvdXJjZSAqKiovCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX1NldFByaXZhdGVEYXRhKHAsYSxiLGMsZCkgIChwKS0+bHBWdGJsLT5TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAocCktPmxwVnRibC0+R2V0UHJpdmF0ZURhdGEocCxhLGIsYykKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0ZyZWVQcml2YXRlRGF0YShwLGEpICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfU2V0UHJpb3JpdHkocCxhKSAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldFByaW9yaXR5KHAsYSkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQcmlvcml0eShwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfUHJlTG9hZChwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX1VuTG9hZChwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbkxvYWQocCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldFR5cGUocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRUeXBlKHApCi8qKiogSVdpbmVEM0RDdWJlVGV4dHVyZSBtZXRob2RzOiBJV2luZUQzREJhc2VUZXh0dXJlICoqKi8KI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX1NldExPRChwLGEpICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRMT0QocCxhKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2V0TE9EKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExPRChwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfR2V0TGV2ZWxDb3VudChwKSAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExldmVsQ291bnQocCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX1NldEF1dG9HZW5GaWx0ZXJUeXBlKHAsYSkgIChwKS0+bHBWdGJsLT5TZXRBdXRvR2VuRmlsdGVyVHlwZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9HZXRBdXRvR2VuRmlsdGVyVHlwZShwKSAgICAocCktPmxwVnRibC0+R2V0QXV0b0dlbkZpbHRlclR5cGUocCkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dlbmVyYXRlTWlwU3ViTGV2ZWxzKHApICAgIChwKS0+bHBWdGJsLT5HZW5lcmF0ZU1pcFN1YkxldmVscyhwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfU2V0RGlydHkocCxhKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldERpcnR5KHAsYSkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldERpcnR5KHApICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREaXJ0eShwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfQmluZFRleHR1cmUocCkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5CaW5kVGV4dHVyZShwKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfVW5CaW5kVGV4dHVyZShwKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9HZXRUZXh0dXJlRGltZW5zaW9ucyhwKSAgICAgKHApLT5scFZ0YmwtPkdldFRleHR1cmVEaW1lbnNpb25zKHApCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9BcHBseVN0YXRlQ2hhbmdlcyhwLGEsYikgICAocCktPmxwVnRibC0+QXBwbHlTdGF0ZUNoYW5nZXMocCxhLGIpCi8qKiogSVdpbmVEM0RDdWJlVGV4dHVyZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0Rlc3Ryb3kocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5EZXN0cm95KHAsYSkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0dldExldmVsRGVzYyhwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5HZXRMZXZlbERlc2MocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RDdWJlVGV4dHVyZV9HZXRDdWJlTWFwU3VyZmFjZShwLGEsYixjKSAocCktPmxwVnRibC0+R2V0Q3ViZU1hcFN1cmZhY2UocCxhLGIsYykKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX0xvY2tSZWN0KHAsYSxiLGMsZCxlKSAgICAgIChwKS0+bHBWdGJsLT5Mb2NrUmVjdChwLGEsYixjLGQsZSkKI2RlZmluZSBJV2luZUQzREN1YmVUZXh0dXJlX1VubG9ja1JlY3QocCxhLGIpICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmxvY2tSZWN0KHAsYSxiKQojZGVmaW5lIElXaW5lRDNEQ3ViZVRleHR1cmVfQWRkRGlydHlSZWN0KHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPkFkZERpcnR5UmVjdChwLGEsYikKI2VuZGlmCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEVm9sdW1lVGV4dHVyZSBpbnRlcmZhY2UKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEVm9sdW1lVGV4dHVyZQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RWb2x1bWVUZXh0dXJlLElXaW5lRDNEQmFzZVRleHR1cmUpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqIHBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCBDT05TVCB2b2lkICogcERhdGEsIERXT1JEICBTaXplT2ZEYXRhLCBEV09SRCAgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQsIHZvaWQgKiBwRGF0YSwgRFdPUkQgKiBwU2l6ZU9mRGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRChGcmVlUHJpdmF0ZURhdGEpKFRISVNfIFJFRkdVSUQgIHJlZmd1aWQpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELFNldFByaW9yaXR5KShUSElTXyBEV09SRCAgUHJpb3JpdHlOZXcpIFBVUkU7CiAgICBTVERNRVRIT0RfKERXT1JELEdldFByaW9yaXR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFByZUxvYWQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsVW5Mb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEUkVTT1VSQ0VUWVBFLEdldFR5cGUpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZVRleHR1cmUgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKERXT1JELCBTZXRMT0QpKFRISVNfIERXT1JEIExPRE5ldykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsIEdldExPRCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsIEdldExldmVsQ291bnQpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0QXV0b0dlbkZpbHRlclR5cGUpKFRISVNfIFdJTkVEM0RURVhUVVJFRklMVEVSVFlQRSBGaWx0ZXJUeXBlKSBQVVJFOwogICAgU1RETUVUSE9EXyhXSU5FRDNEVEVYVFVSRUZJTFRFUlRZUEUsIEdldEF1dG9HZW5GaWx0ZXJUeXBlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBHZW5lcmF0ZU1pcFN1YkxldmVscykoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oQk9PTCwgU2V0RGlydHkpKFRISVNfIEJPT0wpIFBVUkU7CiAgICBTVERNRVRIT0RfKEJPT0wsIEdldERpcnR5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEJpbmRUZXh0dXJlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFVuQmluZFRleHR1cmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVJTlQsIEdldFRleHR1cmVEaW1lbnNpb25zKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLCBBcHBseVN0YXRlQ2hhbmdlcykoVEhJU18gY29uc3QgRFdPUkQgdGV4dHVyZVN0YXRlc1tXSU5FRDNEX0hJR0hFU1RfVEVYVFVSRV9TVEFURSArIDFdLCBjb25zdCBEV09SRCBzYW1wbGVyU3RhdGVzW1dJTkVEM0RfSElHSEVTVF9TQU1QTEVSX1NUQVRFICsgMV0pIFBVUkU7CiAgICAvKioqIElXaW5lRDNEVm9sdW1lVGV4dHVyZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8odm9pZCwgRGVzdHJveSkoVEhJU18gRDNEQ0JfREVTVFJPWVZPTFVNRUZOIHBGbikgUFVSRTsKICAgIFNURE1FVEhPRChHZXRMZXZlbERlc2MpKFRISVNfIFVJTlQgTGV2ZWwsIFdJTkVEM0RWT0xVTUVfREVTQyAqcERlc2MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0Vm9sdW1lTGV2ZWwpKFRISVNfIFVJTlQgTGV2ZWwsIHN0cnVjdCBJV2luZUQzRFZvbHVtZSoqIHBwVm9sdW1lTGV2ZWwpIFBVUkU7CiAgICBTVERNRVRIT0QoTG9ja0JveCkoVEhJU18gVUlOVCBMZXZlbCwgV0lORUQzRExPQ0tFRF9CT1gqIHBMb2NrZWRWb2x1bWUsIENPTlNUIFdJTkVEM0RCT1gqIHBCb3gsIERXT1JEIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKFVubG9ja0JveCkoVEhJU18gVUlOVCBMZXZlbCkgUFVSRTsKICAgIFNURE1FVEhPRChBZGREaXJ0eUJveCkoVEhJU18gQ09OU1QgV0lORUQzREJPWCogcERpcnR5Qm94KSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzRFZvbHVtZVRleHR1cmUgbWV0aG9kczogSVdpbmVEM0RSZXNvdXJjZSAqKiovCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0dldERldmljZShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAocCktPmxwVnRibC0+R2V0UHJpdmF0ZURhdGEocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfRnJlZVByaXZhdGVEYXRhKHAsYSkgICAgICAgKHApLT5scFZ0YmwtPkZyZWVQcml2YXRlRGF0YShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQcmlvcml0eShwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9QcmVMb2FkKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UHJlTG9hZChwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9VbkxvYWQocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VW5Mb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0dldFR5cGUocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRUeXBlKHApCi8qKiogSVdpbmVEM0RWb2x1bWVUZXh0dXJlIG1ldGhvZHM6IElXaW5lRDNEQmFzZVRleHR1cmUgKioqLwojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9TZXRMT0QocCxhKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0TE9EKHAsYSkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0TE9EKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldExPRChwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXRMZXZlbENvdW50KHApICAgICAgICAgICAocCktPmxwVnRibC0+R2V0TGV2ZWxDb3VudChwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9TZXRBdXRvR2VuRmlsdGVyVHlwZShwLGEpICAocCktPmxwVnRibC0+U2V0QXV0b0dlbkZpbHRlclR5cGUocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXRBdXRvR2VuRmlsdGVyVHlwZShwKSAgICAocCktPmxwVnRibC0+R2V0QXV0b0dlbkZpbHRlclR5cGUocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2VuZXJhdGVNaXBTdWJMZXZlbHMocCkgICAgKHApLT5scFZ0YmwtPkdlbmVyYXRlTWlwU3ViTGV2ZWxzKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1NldERpcnR5KHAsYSkgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXREaXJ0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0dldERpcnR5KHApICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREaXJ0eShwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9CaW5kVGV4dHVyZShwKSAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1VuQmluZFRleHR1cmUocCkgICAgICAgICAgICAocCktPmxwVnRibC0+VW5CaW5kVGV4dHVyZShwKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9HZXRUZXh0dXJlRGltZW5zaW9ucyhwKSAgICAgKHApLT5scFZ0YmwtPkdldFRleHR1cmVEaW1lbnNpb25zKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0FwcGx5U3RhdGVDaGFuZ2VzKHAsYSxiKSAgIChwKS0+bHBWdGJsLT5BcHBseVN0YXRlQ2hhbmdlcyhwLGEsYikKLyoqKiBJV2luZUQzRFZvbHVtZVRleHR1cmUgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX0Rlc3Ryb3kocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5EZXN0cm95KHAsYSkKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0TGV2ZWxEZXNjKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPkdldExldmVsRGVzYyhwLGEsYikKI2RlZmluZSBJV2luZUQzRFZvbHVtZVRleHR1cmVfR2V0Vm9sdW1lTGV2ZWwocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPkdldFZvbHVtZUxldmVsKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9Mb2NrQm94KHAsYSxiLGMsZCkgICAgICAgICAocCktPmxwVnRibC0+TG9ja0JveChwLGEsYixjLGQpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVUZXh0dXJlX1VubG9ja0JveChwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmxvY2tCb3gocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lVGV4dHVyZV9BZGREaXJ0eUJveChwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+QWRkRGlydHlCb3gocCxhKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFN1cmZhY2UgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFN1cmZhY2UKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEU3VyZmFjZSxJV2luZUQzRFJlc291cmNlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUmVzb3VyY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKiBwcERldmljZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgQ09OU1Qgdm9pZCAqIHBEYXRhLCBEV09SRCAgU2l6ZU9mRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCB2b2lkICogcERhdGEsIERXT1JEICogcFNpemVPZkRhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoRnJlZVByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxTZXRQcmlvcml0eSkoVEhJU18gRFdPUkQgIFByaW9yaXR5TmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxHZXRQcmlvcml0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxQcmVMb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFVuTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFJFU09VUkNFVFlQRSxHZXRUeXBlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFN1cmZhY2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0Q29udGFpbmVyKShUSElTXyBSRUZJSUQgIHJpaWQsIHZvaWQgKiogcHBDb250YWluZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVzYykoVEhJU18gV0lORUQzRFNVUkZBQ0VfREVTQyAqIHBEZXNjKSBQVVJFOwogICAgU1RETUVUSE9EKExvY2tSZWN0KShUSElTXyBXSU5FRDNETE9DS0VEX1JFQ1QgKiBwTG9ja2VkUmVjdCwgQ09OU1QgUkVDVCAqIHBSZWN0LERXT1JEICBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2tSZWN0KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERDKShUSElTXyBIREMgKnBIZGMpIFBVUkU7CiAgICBTVERNRVRIT0QoUmVsZWFzZURDKShUSElTXyBIREMgaGRjKSBQVVJFOwogICAgU1RETUVUSE9EKEZsaXApKFRISVNfIElXaW5lRDNEU3VyZmFjZSAqT3ZlcnJpZGUsIERXT1JEIEZMQUdTKSBQVVJFOwogICAgU1RETUVUSE9EKEJsdCkoVEhJU18gUkVDVCAqRGVzdFJlY3QsIElXaW5lRDNEU3VyZmFjZSAqU3JjU3VyZmFjZSwgUkVDVCAqU3JjUmVjdCwgRFdPUkQgRmxhZ3MsIFdJTkVEREJMVEZYICpEREJsdEZ4LCBXSU5FRDNEVEVYVFVSRUZJTFRFUlRZUEUgRmlsdGVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEJsdFN0YXR1cykoVEhJU18gRFdPUkQgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RmxpcFN0YXR1cykoVEhJU18gRFdPUkQgRmxhZ3MpIFBVUkU7CiAgICBTVERNRVRIT0QoSXNMb3N0KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFJlc3RvcmUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoQmx0RmFzdCkoVEhJU18gRFdPUkQgZHN0eCwgRFdPUkQgZHN0eSwgSVdpbmVEM0RTdXJmYWNlICpzcmMsIFJFQ1QgKnJzcmMsIERXT1JEIHRyYW5zKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFBhbGV0dGUpKFRISVNfIHN0cnVjdCBJV2luZUQzRFBhbGV0dGUgKipQYWxldHRlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldFBhbGV0dGUpKFRISVNfIHN0cnVjdCBJV2luZUQzRFBhbGV0dGUgKlBhbGV0dGUpIFBVUkU7CiAgICBTVERNRVRIT0QoUmVhbGl6ZVBhbGV0dGUpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q29sb3JLZXkpKFRISVNfIERXT1JEIEZsYWdzLCBXSU5FRERDT0xPUktFWSAqQ0tleSkgUFVSRTsKICAgIFNURE1FVEhPRF8oRFdPUkQsR2V0UGl0Y2gpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0TWVtKShUSElTXyB2b2lkICptZW0pIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0T3ZlcmxheVBvc2l0aW9uKShUSElTXyBMT05HIFgsIExPTkcgWSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRPdmVybGF5UG9zaXRpb24pKFRISVNfIExPTkcgKlgsIExPTkcgKlkpIFBVUkU7CiAgICBTVERNRVRIT0QoVXBkYXRlT3ZlcmxheVpPcmRlcikoVEhJU18gRFdPUkQgRmxhZ3MsIElXaW5lRDNEU3VyZmFjZSAqUmVmKSBQVVJFOwogICAgU1RETUVUSE9EKFVwZGF0ZU92ZXJsYXkpKFRISVNfIFJFQ1QgKlNyY1JlY3QsIElXaW5lRDNEU3VyZmFjZSAqRHN0U3VyZmFjZSwgUkVDVCAqRHN0UmVjdCwgRFdPUkQgRmxhZ3MsIFdJTkVERE9WRVJMQVlGWCAqRlgpOwogICAgU1RETUVUSE9EKFNldENsaXBwZXIpKFRISVNfIHN0cnVjdCBJV2luZUQzRENsaXBwZXIgKmNsaXBwZXIpOwogICAgU1RETUVUSE9EKEdldENsaXBwZXIpKFRISVNfIHN0cnVjdCBJV2luZUQzRENsaXBwZXIgKipjbGlwcGVyKTsKICAgIC8qIEludGVybmFsbHkgdXNlZCBtZXRob2RzICovCiAgICBTVERNRVRIT0QoQWRkRGlydHlSZWN0KShUSElTXyBDT05TVCBSRUNUKiBwUmVjdCkgUFVSRTsKICAgIFNURE1FVEhPRChMb2FkVGV4dHVyZSkoVEhJUywgQk9PTCBzcmdiX21vZGUpIFBVUkU7CiAgICBTVERNRVRIT0RfKHZvaWQsIEJpbmRUZXh0dXJlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFNhdmVTbmFwc2hvdCkoVEhJU18gY29uc3QgY2hhciAqZmlsZW5hbWUpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q29udGFpbmVyKShUSElTXyBJV2luZUQzREJhc2UgKmNvbnRhaW5lcikgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxTZXRHbFRleHR1cmVEZXNjKShUSElTXyBVSU5UIHRleHR1cmVOYW1lLCBpbnQgdGFyZ2V0KSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLEdldEdsRGVzYykoVEhJU18gZ2xEZXNjcmlwdG9yICoqZ2xEZXNjcmlwdGlvbikgUFVSRTsKICAgIFNURE1FVEhPRF8oQ09OU1Qgdm9pZCAqLCBHZXREYXRhKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEZvcm1hdCkoVEhJU18gV0lORUQzREZPUk1BVCBmb3JtYXQpIFBVUkU7CiAgICBTVERNRVRIT0QoUHJpdmF0ZVNldHVwKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLE1vZGlmeUxvY2F0aW9uKShUSElTXyBEV09SRCBmbGFnLCBCT09MIHBlcnNpc3RlbnQpOwogICAgU1RETUVUSE9EKExvYWRMb2NhdGlvbikoVEhJU18gRFdPUkQgZmxhZywgY29uc3QgUkVDVCAqcmVjdCk7CiAgICBTVERNRVRIT0RfKFdJTkVEM0RTVVJGVFlQRSxHZXRJbXBsVHlwZSkoVEhJUyk7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldFBhcmVudChwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0RGV2aWNlKHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKSAgICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9HZXRQcml2YXRlRGF0YShwLGEsYixjKSAgICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9GcmVlUHJpdmF0ZURhdGEocCxhKSAgICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9TZXRQcmlvcml0eShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldFByaW9yaXR5KHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1ByZUxvYWQocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfVW5Mb2FkKHApICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VW5Mb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldFR5cGUocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKLyoqKiBJV2luZUQzRFN1cmZhY2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldENvbnRhaW5lcihwLGEsYikgICAgICAgICAgKHApLT5scFZ0YmwtPkdldENvbnRhaW5lcihwLGEsYikKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0RGVzYyhwLGEpICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGVzYyhwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0xvY2tSZWN0KHAsYSxiLGMpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkxvY2tSZWN0KHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1VubG9ja1JlY3QocCkgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlVubG9ja1JlY3QocCkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0REMocCxhKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0REMocCxhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9SZWxlYXNlREMocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlREMocCxhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9GbGlwKHAsYSxiKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5GbGlwKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9CbHQocCxhLGIsYyxkLGUsZikgICAgICAgICAgIChwKS0+bHBWdGJsLT5CbHQocCxhLGIsYyxkLGUsZikKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0Qmx0U3RhdHVzKHAsYSkgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0Qmx0U3RhdHVzKHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfR2V0RmxpcFN0YXR1cyhwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RmxpcFN0YXR1cyhwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0lzTG9zdChwKSAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPklzTG9zdChwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9SZXN0b3JlKHApICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZXN0b3JlKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0JsdEZhc3QocCxhLGIsYyxkLGUpICAgICAgICAgKHApLT5scFZ0YmwtPkJsdEZhc3QocCxhLGIsYyxkLGUpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldFBhbGV0dGUocCwgYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhbGV0dGUocCwgYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0UGFsZXR0ZShwLCBhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0UGFsZXR0ZShwLCBhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9SZWFsaXplUGFsZXR0ZShwKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWFsaXplUGFsZXR0ZShwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9TZXRDb2xvcktleShwLCBhLCBiKSAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRDb2xvcktleShwLCBhLCBiKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9HZXRQaXRjaChwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQaXRjaChwKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9TZXRNZW0ocCwgYSkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRNZW0ocCwgYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0T3ZlcmxheVBvc2l0aW9uKHAsIGEsIGIpICAocCktPmxwVnRibC0+U2V0T3ZlcmxheVBvc2l0aW9uKHAsIGEsIGIpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldE92ZXJsYXlQb3NpdGlvbihwLCBhLCBiKSAgKHApLT5scFZ0YmwtPkdldE92ZXJsYXlQb3NpdGlvbihwLCBhLCBiKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9VcGRhdGVPdmVybGF5Wk9yZGVyKHAsIGEsIGIpIChwKS0+bHBWdGJsLT5VcGRhdGVPdmVybGF5Wk9yZGVyKHAsIGEsIGIpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1VwZGF0ZU92ZXJsYXkocCwgYSwgYiwgYywgZCwgZSkgKHApLT5scFZ0YmwtPlVwZGF0ZU92ZXJsYXkocCwgYSwgYiwgYywgZCwgZSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0Q2xpcHBlcihwLCBhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0Q2xpcHBlcihwLCBhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9HZXRDbGlwcGVyKHAsIGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRDbGlwcGVyKHAsIGEpCi8qKiogSVdpbmVEM0RTdXJmYWNlIChJbnRlcm5hbCwgbm8gZDNkIG1hcHBpbmcpIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9BZGREaXJ0eVJlY3QocCxhKSAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGREaXJ0eVJlY3QocCxhKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9Mb2FkVGV4dHVyZShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5Mb2FkVGV4dHVyZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0JpbmRUZXh0dXJlKHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkJpbmRUZXh0dXJlKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1NhdmVTbmFwc2hvdChwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNhdmVTbmFwc2hvdChwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1NldENvbnRhaW5lcihwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldENvbnRhaW5lcihwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX1NldEdsVGV4dHVyZURlc2MocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPlNldEdsVGV4dHVyZURlc2MocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldEdsRGVzYyhwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEdsRGVzYyhwLGEpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldERhdGEocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERhdGEocCkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfU2V0Rm9ybWF0KHAsYSkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0Rm9ybWF0KHAsYSkKI2RlZmluZSBJV2luZUQzRFN1cmZhY2VfUHJpdmF0ZVNldHVwKHApICAgICAgICAgICAgICAocCktPmxwVnRibC0+UHJpdmF0ZVNldHVwKHApCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX01vZGlmeUxvY2F0aW9uKHAsYSxiKSAgICAgICAgKHApLT5scFZ0YmwtPk1vZGlmeUxvY2F0aW9uKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEU3VyZmFjZV9Mb2FkTG9jYXRpb24ocCxhLGIpICAgICAgICAgIChwKS0+bHBWdGJsLT5Mb2FkTG9jYXRpb24ocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RTdXJmYWNlX0dldEltcGxUeXBlKHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEltcGxUeXBlKHApCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEVm9sdW1lIGludGVyZmFjZQogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RWb2x1bWUKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEVm9sdW1lLElXaW5lRDNEUmVzb3VyY2UpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8gICAgCiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKiBwcERldmljZSkgUFVSRTsKICAgIFNURE1FVEhPRChTZXRQcml2YXRlRGF0YSkoVEhJU18gUkVGR1VJRCAgcmVmZ3VpZCwgQ09OU1Qgdm9pZCAqIHBEYXRhLCBEV09SRCAgU2l6ZU9mRGF0YSwgRFdPUkQgIEZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldFByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkLCB2b2lkICogcERhdGEsIERXT1JEICogcFNpemVPZkRhdGEpIFBVUkU7CiAgICBTVERNRVRIT0QoRnJlZVByaXZhdGVEYXRhKShUSElTXyBSRUZHVUlEICByZWZndWlkKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxTZXRQcmlvcml0eSkoVEhJU18gRFdPUkQgIFByaW9yaXR5TmV3KSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxHZXRQcmlvcml0eSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCxQcmVMb2FkKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyh2b2lkLFVuTG9hZCkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFJFU09VUkNFVFlQRSwgR2V0VHlwZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RWb2x1bWUgbWV0aG9kcyAqKiovICAgIAogICAgU1RETUVUSE9EKEdldENvbnRhaW5lcikoVEhJU18gUkVGSUlEICByaWlkLCB2b2lkICoqIHBwQ29udGFpbmVyKSBQVVJFOwogICAgU1RETUVUSE9EKEdldERlc2MpKFRISVNfIFdJTkVEM0RWT0xVTUVfREVTQyAqIHBEZXNjKSBQVVJFOwogICAgU1RETUVUSE9EKExvY2tCb3gpKFRISVNfIFdJTkVEM0RMT0NLRURfQk9YKiBwTG9ja2VkVm9sdW1lLCBDT05TVCBXSU5FRDNEQk9YKiBwQm94LCBEV09SRCBGbGFncykgUFVSRTsKICAgIFNURE1FVEhPRChVbmxvY2tCb3gpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0QoQWRkRGlydHlCb3gpKFRISVNfIENPTlNUIFdJTkVEM0RCT1gqIHBEaXJ0eUJveCkgUFVSRTsKICAgIFNURE1FVEhPRChDbGVhbkRpcnR5Qm94KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKExvYWRUZXh0dXJlKShUSElTXyBpbnQgZ2xfbGV2ZWwsIEJPT0wgc3JnYl9tb2RlKSBQVVJFOwogICAgU1RETUVUSE9EKFNldENvbnRhaW5lcikoVEhJU18gSVdpbmVEM0RCYXNlICpjb250YWluZXIpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVm9sdW1lX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RSZXNvdXJjZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZvbHVtZV9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9TZXRQcml2YXRlRGF0YShwLGEsYixjLGQpICAocCktPmxwVnRibC0+U2V0UHJpdmF0ZURhdGEocCxhLGIsYyxkKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0dldFByaXZhdGVEYXRhKHAsYSxiLGMpICAgIChwKS0+bHBWdGJsLT5HZXRQcml2YXRlRGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0ZyZWVQcml2YXRlRGF0YShwLGEpICAgICAgIChwKS0+bHBWdGJsLT5GcmVlUHJpdmF0ZURhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX1NldFByaW9yaXR5KHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRQcmlvcml0eShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfR2V0UHJpb3JpdHkocCkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFByaW9yaXR5KHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfUHJlTG9hZChwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlByZUxvYWQocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9VbkxvYWQocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+VW5Mb2FkKHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfR2V0VHlwZShwKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKLyoqKiBJV2luZUQzRFZvbHVtZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZvbHVtZV9HZXRDb250YWluZXIocCxhLGIpICAgICAgICAocCktPmxwVnRibC0+R2V0Q29udGFpbmVyKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0dldERlc2MocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXNjKHAsYSkKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9Mb2NrQm94KHAsYSxiLGMpICAgICAgICAgICAocCktPmxwVnRibC0+TG9ja0JveChwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX1VubG9ja0JveChwKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5VbmxvY2tCb3gocCkKI2RlZmluZSBJV2luZUQzRFZvbHVtZV9BZGREaXJ0eUJveChwLGEpICAgICAgICAgICAocCktPmxwVnRibC0+QWRkRGlydHlCb3gocCxhKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX0NsZWFuRGlydHlCb3gocCkgICAgICAgICAgIChwKS0+bHBWdGJsLT5DbGVhbkRpcnR5Qm94KHApCiNkZWZpbmUgSVdpbmVEM0RWb2x1bWVfTG9hZFRleHR1cmUocCxhLGIpICAgICAgICAgKHApLT5scFZ0YmwtPkxvYWRUZXh0dXJlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVm9sdW1lX1NldENvbnRhaW5lcihwLGEpICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRDb250YWluZXIocCxhKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uIGludGVyZmFjZQogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbixJV2luZUQzREJhc2UpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkICoqcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbiBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGVjbGFyYXRpb24pKFRISVNfIFdJTkVEM0RWRVJURVhFTEVNRU5UICplbGVtZW50cywgVUlOVCAqZWxlbWVudHNfY291bnQpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0RGVjbGFyYXRpb24pKFRISVNfIGNvbnN0IFdJTkVEM0RWRVJURVhFTEVNRU5UICplbGVtZW50cywgVUlOVCBlbGVtZW50X2NvdW50KSBQVVJFOwp9OwojdW5kZWYgSU5URVJGQUNFCgojaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoQ0lOVEVSRkFDRSkKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5SZWxlYXNlKHApCi8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb25fR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLGEpCi8qKiogSVdpbmVEM0RWZXJ0ZXhEZWNsYXJhdGlvbiBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleERlY2xhcmF0aW9uX0dldERldmljZShwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb25fR2V0RGVjbGFyYXRpb24ocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPkdldERlY2xhcmF0aW9uKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb25fU2V0RGVjbGFyYXRpb24ocCxhLGIpICAgICAgKHApLT5scFZ0YmwtPlNldERlY2xhcmF0aW9uKHAsYSxiKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFN0YXRlQmxvY2sgaW50ZXJmYWNlIAogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RTdGF0ZUJsb2NrCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzRFN0YXRlQmxvY2ssSVdpbmVEM0RCYXNlKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEU3RhdGVCbG9jayBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqcERldmljZSkgUFVSRTsKICAgIFNURE1FVEhPRChDYXB0dXJlKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEFwcGx5KShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EKEluaXRTdGFydHVwU3RhdGVCbG9jaykoVEhJUykgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTdGF0ZUJsb2NrX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RTdGF0ZUJsb2NrX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RTdGF0ZUJsb2NrX1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFN0YXRlQmxvY2tfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEU3RhdGVCbG9jayBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFN0YXRlQmxvY2tfR2V0RGV2aWNlKHAsYSkgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEU3RhdGVCbG9ja19DYXB0dXJlKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNhcHR1cmUocCkKI2RlZmluZSBJV2luZUQzRFN0YXRlQmxvY2tfQXBwbHkocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BcHBseShwKQojZGVmaW5lIElXaW5lRDNEU3RhdGVCbG9ja19Jbml0U3RhcnR1cFN0YXRlQmxvY2socCkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkluaXRTdGFydHVwU3RhdGVCbG9jayhwKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBXaW5lRDNEUXVlcnkgaW50ZXJmYWNlIAogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RRdWVyeQpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RRdWVyeSxJV2luZUQzREJhc2UpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkICoqcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RRdWVyeSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlICoqcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGF0YSkoVEhJU18gIHZvaWQgKnBEYXRhLCBEV09SRCBkd1NpemUsIERXT1JEIGR3R2V0RGF0YUZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EXyhEV09SRCxHZXREYXRhU2l6ZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oV0lORUQzRFFVRVJZVFlQRSwgR2V0VHlwZSkoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRChJc3N1ZSkoVEhJU18gRFdPUkQgZHdJc3N1ZUZsYWdzKSBQVVJFOwogICAgCn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEUXVlcnlfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RRdWVyeV9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzRFF1ZXJ5X1JlbGVhc2UocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RRdWVyeV9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEUXVlcnkgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RRdWVyeV9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXREZXZpY2UocCxhKQojZGVmaW5lIElXaW5lRDNEUXVlcnlfR2V0RGF0YShwLGEsYixjKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGF0YShwLGEsYixjKQojZGVmaW5lIElXaW5lRDNEUXVlcnlfR2V0RGF0YVNpemUocCkgICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGF0YVNpemUocCkKI2RlZmluZSBJV2luZUQzRFF1ZXJ5X0dldFR5cGUocCkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFR5cGUocCkKI2RlZmluZSBJV2luZUQzRFF1ZXJ5X0lzc3VlKHAsYSkgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPklzc3VlKHAsYSkKCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEU3dhcENoYWluIGludGVyZmFjZQogKiBUT0RPOiBhZGQgZ2FtbWEtcmFtcCBzZXR0aW5nIGZ1bmN0aW9ucyB0byBtYWtlIGxpZmUgZWFzaWVyCiAqIChUaGVyZSBraW5kYSBtaXNzaW5nIGZyb20gTWljcm9zb2Z0cyBEaXJlY3RYISkKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEU3dhcENoYWluCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzRFN3YXBDaGFpbixJV2luZUQzREJhc2UpCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkICoqcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqcFBhcmVudCkgUFVSRTsKICAgIC8qKiogSURpcmVjdDNEU3dhcENoYWluOSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8odm9pZCwgRGVzdHJveSkoVEhJU18gRDNEQ0JfREVTVFJPWVNVUkZBQ0VGTiBwRm4pIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RGV2aWNlKShUSElTXyBJV2luZUQzRERldmljZSAqKnBwRGV2aWNlKSBQVVJFOwogICAgU1RETUVUSE9EKFByZXNlbnQpKFRISVNfIENPTlNUIFJFQ1QgKnBTb3VyY2VSZWN0LCBDT05TVCBSRUNUICpwRGVzdFJlY3QsIEhXTkQgaERlc3RXaW5kb3dPdmVycmlkZSwgQ09OU1QgUkdOREFUQSAqcERpcnR5UmVnaW9uLCBEV09SRCBkd0ZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKEdldEZyb250QnVmZmVyRGF0YSkoVEhJU18gSVdpbmVEM0RTdXJmYWNlICpwRGVzdFN1cmZhY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0QmFja0J1ZmZlcikoVEhJU18gVUlOVCBpQmFja0J1ZmZlciwgV0lORUQzREJBQ0tCVUZGRVJfVFlQRSBUeXBlLCBJV2luZUQzRFN1cmZhY2UgKipwcEJhY2tCdWZmZXIpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0UmFzdGVyU3RhdHVzKShUSElTXyBXSU5FRDNEUkFTVEVSX1NUQVRVUyAqcFJhc3RlclN0YXR1cykgUFVSRTsKICAgIFNURE1FVEhPRChHZXREaXNwbGF5TW9kZSkoVEhJU18gV0lORUQzRERJU1BMQVlNT0RFICpwTW9kZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRQcmVzZW50UGFyYW1ldGVycykoVEhJU18gV0lORUQzRFBSRVNFTlRfUEFSQU1FVEVSUyAqcFByZXNlbnRhdGlvblBhcmFtZXRlcnMpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0R2FtbWFSYW1wKShUSElTXyBEV09SRCBGbGFncywgY29uc3QgV0lORUQzREdBTU1BUkFNUCAqcFJhbXApIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0R2FtbWFSYW1wKShUSElTXyBXSU5FRDNER0FNTUFSQU1QICpwUmFtcCkgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXRQYXJlbnQocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEU3dhcENoYWluIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEU3dhcENoYWluX0Rlc3Ryb3kocCxhKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkRlc3Ryb3kocCxhKQojZGVmaW5lIElXaW5lRDNEU3dhcENoYWluX0dldERldmljZShwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fUHJlc2VudChwLGEsYixjLGQsZSkgICAgICAgICAocCktPmxwVnRibC0+UHJlc2VudChwLGEsYixjLGQsZSkKI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXRGcm9udEJ1ZmZlckRhdGEocCxhKSAgICAgIChwKS0+bHBWdGJsLT5HZXRGcm9udEJ1ZmZlckRhdGEocCxhKQojZGVmaW5lIElXaW5lRDNEU3dhcENoYWluX0dldEJhY2tCdWZmZXIocCxhLGIsYykgICAgICAgKHApLT5scFZ0YmwtPkdldEJhY2tCdWZmZXIocCxhLGIsYykKI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXRSYXN0ZXJTdGF0dXMocCxhKSAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRSYXN0ZXJTdGF0dXMocCxhKQojZGVmaW5lIElXaW5lRDNEU3dhcENoYWluX0dldERpc3BsYXlNb2RlKHAsYSkgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERpc3BsYXlNb2RlKHAsYSkKI2RlZmluZSBJV2luZUQzRFN3YXBDaGFpbl9HZXRQcmVzZW50UGFyYW1ldGVycyhwLGEpICAgIChwKS0+bHBWdGJsLT5HZXRQcmVzZW50UGFyYW1ldGVycyhwLGEpCiNkZWZpbmUgSVdpbmVEM0RTd2FwQ2hhaW5fU2V0R2FtbWFSYW1wKHAsYSxiKSAgICAgICAgICAocCktPmxwVnRibC0+U2V0R2FtbWFSYW1wKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEU3dhcENoYWluX0dldEdhbW1hUmFtcChwLGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldEdhbW1hUmFtcChwLGEpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEQmFzZVNoYWRlciBpbnRlcmZhY2UKICovCiNkZWZpbmUgSU5URVJGQUNFIElXaW5lRDNEQmFzZVNoYWRlcgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RCYXNlU2hhZGVyLElXaW5lRDNEQmFzZSkKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2VTaGFkZXIgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoU2V0RnVuY3Rpb24pKFRISVNfIENPTlNUIERXT1JEICpwRnVuY3Rpb24pIFBVUkU7CiAgICBTVERNRVRIT0QoQ29tcGlsZVNoYWRlcikoVEhJUykgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlU2hhZGVyX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgKHApLT5scFZ0YmwtPlF1ZXJ5SW50ZXJmYWNlKHAsYSxiKQojZGVmaW5lIElXaW5lRDNEQmFzZVNoYWRlcl9BZGRSZWYocCkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzREJhc2VTaGFkZXJfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzREJhc2VTaGFkZXJfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0UGFyZW50KHAsYSkKLyoqKiBJV2luZUQzREJhc2VTaGFkZXIgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RCYXNlU2hhZGVyX1NldEZ1bmN0aW9uKHAsYSkgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEZ1bmN0aW9uKHAsYSkKI2RlZmluZSBJV2luZUQzREJhc2VTaGFkZXJfQ29tcGlsZVNoYWRlcihwKSAgICAgICAgICAocCktPmxwVnRibC0+Q29tcGlsZVNoYWRlcihwKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJV2luZUQzRFZlcnRleFNoYWRlciBpbnRlcmZhY2UgCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFZlcnRleFNoYWRlcgpERUNMQVJFX0lOVEVSRkFDRV8oSVdpbmVEM0RWZXJ0ZXhTaGFkZXIsSVdpbmVEM0RCYXNlU2hhZGVyKQp7CiAgICAvKioqIElVbmtub3duIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EXyhIUkVTVUxULFF1ZXJ5SW50ZXJmYWNlKShUSElTXyBSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKShUSElTKSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBQYXJlbnQpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEQmFzZVNoYWRlciBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChTZXRGdW5jdGlvbikoVEhJU18gQ09OU1QgRFdPUkQgKnBGdW5jdGlvbikgUFVSRTsKICAgIFNURE1FVEhPRChDb21waWxlU2hhZGVyKShUSElTKSBQVVJFOwogICAgLyoqKiBJV2luZUQzRFZlcnRleFNoYWRlciBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RnVuY3Rpb24pKFRISVNfIFZPSUQgKnBEYXRhLCBVSU5UICpwU2l6ZU9mRGF0YSkgUFVSRTsKICAgIFNURE1FVEhPRF8odm9pZCwgRmFrZVNlbWFudGljcykoVEhJU18gc3RydWN0IElXaW5lRDNEVmVydGV4RGVjbGFyYXRpb24gKnZlcnRleF9kZWNsYXJhdGlvbikgUFVSRTsKICAgIFNURE1FVEhPRChTZXRMb2NhbENvbnN0YW50c0YpKFRISVNfIFVJTlQgc3RhcnRfaWR4LCBjb25zdCBmbG9hdCAqc3JjX2RhdGEsIFVJTlQgY291bnQpIFBVUkU7Cn07CiN1bmRlZiBJTlRFUkZBQ0UKCiNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChDSU5URVJGQUNFKQovKioqIElVbmtub3duIG1ldGhvZHMgKioqLwojZGVmaW5lIElXaW5lRDNEVmVydGV4U2hhZGVyX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5BZGRSZWYocCkKI2RlZmluZSBJV2luZUQzRFZlcnRleFNoYWRlcl9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlJlbGVhc2UocCkKLyoqKiBJV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfR2V0UGFyZW50KHAsYSkgICAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEQmFzZVNoYWRlciBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleFNoYWRlcl9TZXRGdW5jdGlvbihwLGEpICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPlNldEZ1bmN0aW9uKHAsYSkKI2RlZmluZSBJV2luZUQzRFZlcnRleFNoYWRlcl9Db21waWxlU2hhZGVyKHApICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkNvbXBpbGVTaGFkZXIocCkKLyoqKiBJV2luZUQzRFZlcnRleFNoYWRlciBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFZlcnRleFNoYWRlcl9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldERldmljZShwLGEpCiNkZWZpbmUgSVdpbmVEM0RWZXJ0ZXhTaGFkZXJfR2V0RnVuY3Rpb24ocCxhLGIpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRGdW5jdGlvbihwLGEsYikKI2RlZmluZSBJV2luZUQzRFZlcnRleFNoYWRlcl9GYWtlU2VtYW50aWNzKHAsYSkgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkZha2VTZW1hbnRpY3MocCxhKQojZGVmaW5lIElXaW5lRDNEVmVydGV4U2hhZGVyX1NldExvY2FsQ29uc3RhbnRzRihwLGEsYixjKSAgICAocCktPmxwVnRibC0+U2V0TG9jYWxDb25zdGFudHNGKHAsYSxiLGMpCiNlbmRpZgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIElXaW5lRDNEUGl4ZWxTaGFkZXIgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRFBpeGVsU2hhZGVyCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzRFBpeGVsU2hhZGVyLElXaW5lRDNEQmFzZVNoYWRlcikKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RCYXNlIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldFBhcmVudCkoVEhJU18gSVVua25vd24gKipwUGFyZW50KSBQVVJFOwogICAgLyoqKiBJV2luZUQzREJhc2VTaGFkZXIgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0QoU2V0RnVuY3Rpb24pKFRISVNfIENPTlNUIERXT1JEICpwRnVuY3Rpb24pIFBVUkU7CiAgICBTVERNRVRIT0QoQ29tcGlsZVNoYWRlcikoVEhJUykgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RQaXhlbFNoYWRlciBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRChHZXREZXZpY2UpKFRISVNfIElXaW5lRDNERGV2aWNlKiogcHBEZXZpY2UpIFBVUkU7CiAgICBTVERNRVRIT0QoR2V0RnVuY3Rpb24pKFRISVNfIFZPSUQqIHBEYXRhLCBVSU5UKiBwU2l6ZU9mRGF0YSkgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9RdWVyeUludGVyZmFjZShwLGEsYikgICAgICAocCktPmxwVnRibC0+UXVlcnlJbnRlcmZhY2UocCxhLGIpCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9BZGRSZWYocCkgICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+QWRkUmVmKHApCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQmFzZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFBpeGVsU2hhZGVyX0dldFBhcmVudChwLGEpICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRQYXJlbnQocCxhKQovKioqIElXaW5lRDNEQmFzZVNoYWRlciBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFBpeGVsU2hhZGVyX1NldEZ1bmN0aW9uKHAsYSkgICAgICAgICAgIChwKS0+bHBWdGJsLT5TZXRGdW5jdGlvbihwLGEpCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9Db21waWxlU2hhZGVyKHApICAgICAgICAgICAocCktPmxwVnRibC0+Q29tcGlsZVNoYWRlcihwKQovKioqIElXaW5lRDNEUGl4ZWxTaGFkZXIgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RQaXhlbFNoYWRlcl9HZXREZXZpY2UocCxhKSAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0RGV2aWNlKHAsYSkKI2RlZmluZSBJV2luZUQzRFBpeGVsU2hhZGVyX0dldEZ1bmN0aW9uKHAsYSxiKSAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRGdW5jdGlvbihwLGEsYikKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogSVdpbmVEM0RQYWxldHRlIGludGVyZmFjZQogKi8KI2RlZmluZSBJTlRFUkZBQ0UgSVdpbmVEM0RQYWxldHRlCkRFQ0xBUkVfSU5URVJGQUNFXyhJV2luZUQzRFBhbGV0dGUsSVVua25vd24pCnsKICAgIC8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsUXVlcnlJbnRlcmZhY2UpKFRISVNfIFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KSBQVVJFOwogICAgU1RETUVUSE9EXyhVTE9ORyxBZGRSZWYpKFRISVMpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLFJlbGVhc2UpKFRISVMpIFBVUkU7CiAgICAvKioqIElXaW5lRDNEUGFsZXR0ZSBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxHZXRQYXJlbnQpKFRISVNfIElVbmtub3duICoqUGFyZW50KTsKICAgIFNURE1FVEhPRF8oSFJFU1VMVCxHZXRFbnRyaWVzKShUSElTXyBEV09SRCBGbGFncywgRFdPUkQgU3RhcnQsIERXT1JEIENvdW50LCBQQUxFVFRFRU5UUlkgKlBhbEVudCk7CiAgICBTVERNRVRIT0RfKEhSRVNVTFQsR2V0Q2FwcykoVEhJU18gRFdPUkQgKkNhcHMpOwogICAgU1RETUVUSE9EXyhIUkVTVUxULFNldEVudHJpZXMpKFRISVNfIERXT1JEIEZsYWdzLCBEV09SRCBTdGFydCwgRFdPUkQgQ291bnQsIFBBTEVUVEVFTlRSWSAqUGFsRW50KTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RQYWxldHRlX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRFBhbGV0dGVfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEUGFsZXR0ZV9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEUGFsZXR0ZSBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRFBhbGV0dGVfR2V0UGFyZW50KHAsIGEpICAgICAgICAgICAgKHApLT5scFZ0YmwtPkdldFBhcmVudChwLCBhKQojZGVmaW5lIElXaW5lRDNEUGFsZXR0ZV9HZXRFbnRyaWVzKHAsIGEsIGIsIGMsIGQpICAocCktPmxwVnRibC0+R2V0RW50cmllcyhwLCBhLCBiLCBjLCBkKQojZGVmaW5lIElXaW5lRDNEUGFsZXR0ZV9HZXRDYXBzKHAsIGEpICAgICAgICAgICAgICAocCktPmxwVnRibC0+R2V0Q2FwcyhwLCBhKQojZGVmaW5lIElXaW5lRDNEUGFsZXR0ZV9TZXRFbnRyaWVzKHAsIGEsIGIsIGMsIGQpICAocCktPmxwVnRibC0+U2V0RW50cmllcyhwLCBhLCBiLCBjLCBkKQojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBJRGlyZWN0RHJhd0NsaXBwZXIgaW50ZXJmYWNlCiAqLwojZGVmaW5lIElOVEVSRkFDRSBJV2luZUQzRENsaXBwZXIKREVDTEFSRV9JTlRFUkZBQ0VfKElXaW5lRDNEQ2xpcHBlcixJVW5rbm93bikKewogICAgLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KICAgIFNURE1FVEhPRF8oSFJFU1VMVCxRdWVyeUludGVyZmFjZSkoVEhJU18gUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpIFBVUkU7CiAgICBTVERNRVRIT0RfKFVMT05HLEFkZFJlZikoVEhJUykgUFVSRTsKICAgIFNURE1FVEhPRF8oVUxPTkcsUmVsZWFzZSkoVEhJUykgUFVSRTsKICAgIC8qKiogV2luZUQzREJhc2UgbWV0aG9kcyAqKiovCiAgICBTVERNRVRIT0RfKEhSRVNVTFQsR2V0UGFyZW50KShUSElTXyBJVW5rbm93biAqKnBhcmVudCkgUFVSRTsKICAgIC8qKiogSVdpbmVEM0RDbGlwcGVyIG1ldGhvZHMgKioqLwogICAgU1RETUVUSE9EKEdldENsaXBMaXN0KShUSElTXyBMUFJFQ1QgbHBSZWN0LCBMUFJHTkRBVEEgbHBDbGlwTGlzdCwgTFBEV09SRCBscGR3U2l6ZSkgUFVSRTsKICAgIFNURE1FVEhPRChHZXRIV25kKShUSElTXyBIV05EICpscGhXbmQpIFBVUkU7CiAgICBTVERNRVRIT0QoSXNDbGlwTGlzdENoYW5nZWQpKFRISVNfIEJPT0wgKmxwYkNoYW5nZWQpIFBVUkU7CiAgICBTVERNRVRIT0QoU2V0Q2xpcExpc3QpKFRISVNfIExQUkdOREFUQSBscENsaXBMaXN0LCBEV09SRCBkd0ZsYWdzKSBQVVJFOwogICAgU1RETUVUSE9EKFNldEhXbmQpKFRISVNfIERXT1JEIGR3RmxhZ3MsIEhXTkQgaFduZCkgUFVSRTsKfTsKI3VuZGVmIElOVEVSRkFDRQoKI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKENJTlRFUkZBQ0UpCi8qKiogSVVua25vd24gbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RDbGlwcGVyX1F1ZXJ5SW50ZXJmYWNlKHAsYSxiKSAgICAgIChwKS0+bHBWdGJsLT5RdWVyeUludGVyZmFjZShwLGEsYikKI2RlZmluZSBJV2luZUQzRENsaXBwZXJfQWRkUmVmKHApICAgICAgICAgICAgICAgICAgKHApLT5scFZ0YmwtPkFkZFJlZihwKQojZGVmaW5lIElXaW5lRDNEQ2xpcHBlcl9SZWxlYXNlKHApICAgICAgICAgICAgICAgICAocCktPmxwVnRibC0+UmVsZWFzZShwKQovKioqIElXaW5lRDNEQ2xpcHBlciBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRENsaXBwZXJfR2V0Q2xpcExpc3QocCxhLGIsYykgICAgICAgKHApLT5scFZ0YmwtPkdldENsaXBMaXN0KHAsYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RDbGlwcGVyX0dldEhXbmQocCxhKSAgICAgICAgICAgICAgIChwKS0+bHBWdGJsLT5HZXRIV25kKHAsYSkKI2RlZmluZSBJV2luZUQzRENsaXBwZXJfSXNDbGlwTGlzdENoYW5nZWQocCxhKSAgICAgKHApLT5scFZ0YmwtPklzQ2xpcExpc3RDaGFuZ2VkKHAsYSkKI2RlZmluZSBJV2luZUQzRENsaXBwZXJfU2V0Q2xpcExpc3QocCxhLGIpICAgICAgICAgKHApLT5scFZ0YmwtPlNldENsaXBMaXN0KHAsYSxiKQojZGVmaW5lIElXaW5lRDNEQ2xpcHBlcl9TZXRIV25kKHAsYSxiKSAgICAgICAgICAgICAocCktPmxwVnRibC0+U2V0SFduZChwLGEsYikKI2Vsc2UKLyoqKiBJVW5rbm93biBtZXRob2RzICoqKi8KI2RlZmluZSBJV2luZUQzRENsaXBwZXJfUXVlcnlJbnRlcmZhY2UocCxhLGIpICAgICAgKHApLT5RdWVyeUludGVyZmFjZShhLGIpCiNkZWZpbmUgSVdpbmVEM0RDbGlwcGVyX0FkZFJlZihwKSAgICAgICAgICAgICAgICAgIChwKS0+QWRkUmVmKCkKI2RlZmluZSBJV2luZUQzRENsaXBwZXJfUmVsZWFzZShwKSAgICAgICAgICAgICAgICAgKHApLT5SZWxlYXNlKCkKLyoqKiBJV2luZUQzRENsaXBwZXIgbWV0aG9kcyAqKiovCiNkZWZpbmUgSVdpbmVEM0RDbGlwcGVyX0dldENsaXBMaXN0KHAsYSxiLGMpICAgICAgIChwKS0+R2V0Q2xpcExpc3QoYSxiLGMpCiNkZWZpbmUgSVdpbmVEM0RDbGlwcGVyX0dldEhXbmQocCxhKSAgICAgICAgICAgICAgIChwKS0+R2V0SFduZChhKQojZGVmaW5lIElXaW5lRDNEQ2xpcHBlcl9Jc0NsaXBMaXN0Q2hhbmdlZChwLGEpICAgICAocCktPklzQ2xpcExpc3RDaGFuZ2VkKGEpCiNkZWZpbmUgSVdpbmVEM0RDbGlwcGVyX1NldENsaXBMaXN0KHAsYSxiKSAgICAgICAgIChwKS0+U2V0Q2xpcExpc3QoYSxiKQojZGVmaW5lIElXaW5lRDNEQ2xpcHBlcl9TZXRIV25kKHAsYSxiKSAgICAgICAgICAgICAocCktPlNldEhXbmQoYSxiKQojZW5kaWYKCi8qIEREcmF3IENsaXBwZXJzIGFyZSBub3QgY3JlYXRlZCBmcm9tIEREcmF3IG9iamVjdHMsIHRoZXkgaGF2ZSBhIHNlcGFyYXRlIGNyZWF0aW9uIGZ1bmN0aW9uICovCklXaW5lRDNEQ2xpcHBlciogV0lOQVBJIFdpbmVEaXJlY3QzRENyZWF0ZUNsaXBwZXIoSVVua25vd24gKnBhcmVudCk7CgojaWYgMCAvKiBGSVhNRTogRHVyaW5nIHBvcnRpbmcgaW4gZnJvbSBkM2Q4IC0gdGhlIGZvbGxvd2luZyB3aWxsIGJlIHVzZWQgKi8KZXh0ZXJuIEhSRVNVTFQgV0lOQVBJIElEaXJlY3QzRFZlcnRleFNoYWRlckltcGxfUGFyc2VQcm9ncmFtKElEaXJlY3QzRFZlcnRleFNoYWRlckltcGwqIFRoaXMsIENPTlNUIERXT1JEKiBwRnVuY3Rpb24pOwovKiBpbnRlcm5hbCBJbnRlcmZhY2VzICovCmV4dGVybiBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXJJbXBsX0V4ZWN1dGVTVyhJRGlyZWN0M0RWZXJ0ZXhTaGFkZXJJbXBsKiBUaGlzLCBWU0hBREVSSU5QVVREQVRBKiBpbnB1dCwgVlNIQURFUk9VVFBVVERBVEEqIG91dHB1dCk7CiNlbmRpZiAvKiBUZW1wb3JhcnkgI2lmIDAgKi8KCgojZW5kaWYK