Ci8vICAgdmltOnR3PTExMDp0cz00OgojaWZuZGVmIEhDRkNGR19ICiNkZWZpbmUgSENGQ0ZHX0ggMQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZJTEUJIDogaGNmY2ZnLnRwbCAvLyBoY2ZjZmcuaAoqCiogREFURSAgIDogJERhdGU6IDIwMDQvMDgvMDUgMTE6NDc6MTAgJCAgICRSZXZpc2lvbjogMS42ICQKKiBPcmlnaW5hbDogMjAwNC8wNC8wOCAxNToxODoxNiAgICBSZXZpc2lvbjogMS40MCAgICAgIFRhZzogdDIwMDQwNDA4XzAxCiogT3JpZ2luYWw6IDIwMDQvMDQvMDEgMTU6MzI6NTUgICAgUmV2aXNpb246IDEuMzggICAgICBUYWc6IHQ3XzIwMDQwNDAxXzAxCiogT3JpZ2luYWw6IDIwMDQvMDMvMTAgMTU6Mzk6MjggICAgUmV2aXNpb246IDEuMzQgICAgICBUYWc6IHQyMDA0MDMxMF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAzLzAzIDE0OjEwOjEyICAgIFJldmlzaW9uOiAxLjMyICAgICAgVGFnOiB0MjAwNDAzMDRfMDEKKiBPcmlnaW5hbDogMjAwNC8wMy8wMiAwOToyNzoxMiAgICBSZXZpc2lvbjogMS4zMCAgICAgIFRhZzogdDIwMDQwMzAyXzAzCiogT3JpZ2luYWw6IDIwMDQvMDIvMjQgMTM6MDA6MjggICAgUmV2aXNpb246IDEuMjUgICAgICBUYWc6IHQyMDA0MDIyNF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAyLzE4IDE3OjEzOjU3ICAgIFJldmlzaW9uOiAxLjIzICAgICAgVGFnOiB0MjAwNDAyMTlfMDEKKgoqIEFVVEhPUiA6IE5pY28gVmFsc3RlcgoqCiogREVTQyAgIDogSENGIEN1c3RvbWl6YXRpb24gTWFjcm9zCiogaGNmY2ZnLnRwbCBsaXN0IGFsbCAjZGVmaW5lcyB3aGljaCBtdXN0IGJlIHNwZWNpZmllZCB0bzoKKiAgIGFkanVzdCB0aGUgSENGIGZ1bmN0aW9ucyBkZWZpbmVkIGluIEhDRi5DIHRvIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzcGVjaWZpYyBlbnZpcm9ubWVudAoqCQlvIG1heGltdW0gc2l6ZXMgZm9yIG1lc3NhZ2VzCioJCW8gRW5kaWFuZXNzCioJQ29tcGlsZXIgc3BlY2lmaWMgbWFjcm9zCioJCW8gcG9ydCBJL08gbWFjcm9zCioJCW8gdHlwZSBkZWZpbml0aW9ucwoqCiogQnkgY29weWluZyBIQ0ZDRkcuVFBMIHRvIEhDRkNGRy5IIGFuZCAtaWYgbmVlZGVkLSBtb2RpZnlpbmcgdGhlICNkZWZpbmVzIHRoZSBXQ0kgZnVuY3Rpb25hbGl0eSBjYW4gYmUKKiB0YWlsb3JlZAoqCiogU3VwcG9ydGVkIGVudmlyb25tZW50czoKKiBXVkxBTl80MQlNaW5pcG9ydAkJCQkJCQkJTkRJUyAzLjEKKiBXVkxBTl80MglQYWNrZXQJCQkJCQkJCQlNaWNyb3NvZnQgVmlzdWFsIEMgMS41CiogV1ZMQU5fNDMJMTYgYml0cyBET1MgT0RJCQkJCQkJCU1pY3Jvc29mdCBWaXN1YWwgQyAxLjUKKiBXVkxBTl80NAkzMiBiaXRzIE9ESSAoX19ORVRXQVJFXzM4Nl9fKQkJCVdBVENPTQoqIFdWTEFOXzQ1CU1BQ19PUwkJCQkJCQkJCU1QVz8sIFN5bWFudGVjPwoqIFdWTEFOXzQ2CVdpbmRvd3MgQ0UgKF9XSU4zMl9XQ0UpCQkJCQlNaWNyb3NvZnQgPwoqIFdWTEFOXzQ3CUxJTlVYICAoX19MSU5VWF9fKQkJCQkJCUdDQywgZGlzY2FyZGVkLCBiYXNlZCBvbiBHUEwnZWQgSENGLWxpZ2h0CiogV1ZMQU5fNDgJTWluaXBvcnQJCQkJCQkJCU5ESVMgNQoqIFdWTEFOXzQ5CUxJTlVYICAoX19MSU5VWF9fKQkJCQkJCUdDQywgb3JpZ2luYWxseSBiYXNlZCBvbiBwcmUtY29tcGlsZWQgSENGX2xpYnJhcnkKKiAJCQkJCQkJCQkJCQkJbWlncmF0ZWQgdG8gdXNlIHRoZSBIQ0Ygc291cmNlcyB3aGVuIEx1Y2VudCBUZWNobm9sb2dpZXMKKiAJCQkJCQkJCQkJCQkJYnJvdWdodCB0aGUgSENGIG1vZHVsZSB1bmRlciBHUEwKKiBXVkxBTl81MQlNaW5pcG9ydCBVU0IJCQkJCQkJTkRJUyA1CiogV1ZMQU5fNTIJTWluaXBvcnQJCQkJCQkJCU5ESVMgNAoqIFdWTEFOXzUzCVZ4V29ya3MgRU5EIFN0YXRpb24gZHJpdmVyCiogV1ZMQU5fNTQJVnhXb3JrcyBFTkQgQWNjZXNzIFBvaW50IGRyaXZlcgoqIFdWTEFOXzgxCVdhdmVQb2ludAkJCQkJCQkJQk9STEFORCBDCiogV0NJVFNUCUluaG91c2UgdGVzdCB0b29sCQkJCQkJTWljcm9zb2Z0IFZpc3VhbCBDIDEuNQoqIFdTVQkJV2F2ZUxBTiBTdGF0aW9uIFVwZGF0ZQkJCQkJTWljcm9zb2Z0IFZpc3VhbCBDID8/CiogU0NPIFVOSVgJbm90IHlldCBhY3R1YWxseSB1c2VkID8JCQkJCT8KKiBfX3BwYwkJT0VNIHN1cHBsaWVkCQkJCQkJCT8KKiBfQU0yOUsJT0VNIHN1cHBsaWVkCQkJCQkJCT8KKiA/CQkJT0VNIHN1cHBsaWVkCQkJCQkJCU1pY3JvdGVjIFJlc2VhcmNoIDgwWDg2IENvbXBpbGVyCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqCiogU09GVFdBUkUgTElDRU5TRQoqCiogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCiogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwoqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCioKKiBDT1BZUklHSFQgqSAxOTk0IC0gMTk5NQlieSBBVCZULgkJCQlBbGwgUmlnaHRzIFJlc2VydmVkCiogQ09QWVJJR0hUIKkgMTk5NiAtIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcy4JQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIENPUFlSSUdIVCCpIDIwMDEgLSAyMDA0CWJ5IEFnZXJlIFN5c3RlbXMgSW5jLglBbGwgUmlnaHRzIFJlc2VydmVkCiogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKgoqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoqCiogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwoqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQoqICAgIGRpc3RyaWJ1dGlvbi4KKgoqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAoqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKgoqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCiogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCioKKiBEaXNjbGFpbWVyCioKKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQoqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCiogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQoqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwoqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAoqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAoqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCiogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKiBEQU1BR0UuCioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoJQWxpZ25tZW50CioJU29tZSBwbGF0Zm9ybXMgY2FuIGFjY2VzcyB3b3JkcyBvbiBvZGQgYm91bmRhcmllcyAod2l0aCBwb3NzaWJseSBhbiBwZXJmb3JtYW5jZSBpbXBhY3QpLCBhdCBvdGhlcgoqCXBsYXRmb3JtcyBzdWNoIGFuIGFjY2VzcyBtYXkgcmVzdWx0IGluIGEgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb24uCioJSXQgaXMgYXNzdW1lZCB0aGF0IGV2ZXJ5d2hlcmUgd2hlcmUgdGhlIEhDRiBjYXN0cyBhIGNoYXIgcG9pbnRlciBpbnRvIGEgd29yZCBwb2ludGVyLCB0aGUgYWxpZ25tZW50CioJY3JpdGVyaWEgYXJlIG1ldC4gVGhpcyBwdXQgc29tZSByZXN0cmljdGlvbnMgb24gdGhlIE1TRiwgd2hpY2ggYXJlIGFzc3VtZWQgdG8gYmUgImF1dG9tYXRpY2FsbHkiIGZ1bGZpbGxlZAoqCWF0IHRoZSBhcHBsaWNhYmxlIHBsYXRmb3JtcwoqCVRvIGFzc2VydCB0aGlzIGFzc3VtcHRpb24sIHRoZSBtYWNybyBIQ0ZfQUxJR04gY2FuIGJlIGRlZmluZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEsIG1lYW5pbmcgYnl0ZQoqCWFsaWdubWVudCAob3Igbm8gYWxpZ25tZW50KSwgYSB2YWx1ZSBvZiAyIG1lYW5zIHdvcmQgYWxpZ25tZW50LCBhIHZhbHVlIG9mIDQgbWVhbnMgZG91YmxlIHdvcmQgYWxpZ25tZW50CiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgSU5fUE9SVF9TVFJJTkdfOF8xNiAgUyBhIG0gcCBsIGUgcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKCQkvLyBDIGltcGxlbWVudGF0aW9uIHdoaWNoIGxldCB0aGUgcHJvY2Vzc29yIGhhbmRsZSB0aGUgd29yZC1hdC1ieXRlLWJvdW5kYXJ5IHByb2JsZW0KI2RlZmluZSBJTl9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKSB3aGlsZSAoIG4tLSApIAlcCgl7ICooaGNmXzE2IEZBUiopYWRkciA9IElOX1BPUlRfV09SRCggcG9ydCApOyAoKGhjZl84IEZBUiopYWRkcikrPTI7IH0KCgkJLy8gQyBpbXBsZW1lbnRhdGlvbiB3aGljaCBoYW5kbGVzIHRoZSB3b3JkLWF0LWJ5dGUtYm91bmRhcnkgcHJvYmxlbQojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzhfMTYoIHBvcnQsIGFkZHIsIG4pCXdoaWxlICggbi0tICkJIFwKCXsgaGNmXzE2IGkgPSBJTl9QT1JUX1dPUkQocG9ydCk7ICooKGhjZl84IEZBUiopYWRkcikrKyA9IChoY2ZfOClpOyAqKChoY2ZfOCBGQVIqKWFkZHIpKysgPSAoaGNmXzgpKGk+PjgpO30KCgkJLy8gQXNzZW1ibGVyIGltcGxlbWVudGF0aW9uCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfOF8xNiggcG9ydCwgYWRkciwgbGVuKSBfX2FzbQkJXAp7CQkJCQkJCQkJCQkJCQlcCglfX2FzbSBwdXNoIGRpCQkJCQkJCQkJCVwKCV9fYXNtIHB1c2ggZXMJCQkJCQkJCQkJXAoJX19hc20gbW92IGN4LGxlbgkJCQkJCQkJCVwKCV9fYXNtIGxlcyBkaSxhZGRyCQkJCQkJCQkJXAoJX19hc20gbW92IGR4LHBvcnQJCQkJCQkJCQlcCglfX2FzbSByZXAgaW5zdwkJCQkJCQkJCQlcCglfX2FzbSBwb3AgZXMJCQkJCQkJCQkJXAoJX19hc20gcG9wIGRpCQkJCQkJCQkJCVwKfQoKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgT1VUX1BPUlRfU1RSSU5HXzhfMTYgIFMgYSBtIHAgbCBlIHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoJCS8vIEMgaW1wbGVtZW50YXRpb24gd2hpY2ggbGV0IHRoZSBwcm9jZXNzb3IgaGFuZGxlIHRoZSB3b3JkLWF0LWJ5dGUtYm91bmRhcnkgcHJvYmxlbQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKQl3aGlsZSAoIG4tLSApIFwKCXsgT1VUX1BPUlRfV09SRCggcG9ydCwgKihoY2ZfMTYgRkFSKilhZGRyICkgOyAoKGhjZl84IEZBUiopYWRkcikrPTI7IH0KCgkJLy8gQyBpbXBsZW1lbnRhdGlvbiB3aGljaCBoYW5kbGVzIHRoZSB3b3JkLWF0LWJ5dGUtYm91bmRhcnkgcHJvYmxlbQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKQl3aGlsZSAoIG4tLSApIFwKCXsgT1VUX1BPUlRfV09SRCggcG9ydCwgKigoaGNmXzggRkFSKilhZGRyKSB8ICooKChoY2ZfOCBGQVIqKWFkZHIpKzEpPDw4ICApOyAoaGNmXzggRkFSKilhZGRyKz0yOyB9CgoJCS8vIEFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBsZW4pIF9fYXNtCVwKewkJCQkJCQkJCQkJCQkJXAoJX19hc20gcHVzaCBzaQkJCQkJCQkJCQlcCglfX2FzbSBwdXNoIGRzCQkJCQkJCQkJCVwKCV9fYXNtIG1vdiBjeCxsZW4JCQkJCQkJCQlcCglfX2FzbSBsZHMgc2ksYWRkcgkJCQkJCQkJCVwKCV9fYXNtIG1vdiBkeCxwb3J0CQkJCQkJCQkJXAoJX19hc20gcmVwIG91dHN3CQkJCQkJCQkJCVwKCV9fYXNtIHBvcCBkcwkJCQkJCQkJCQlcCglfX2FzbSBwb3Agc2kJCQkJCQkJCQkJXAp9CgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKiogIEMgTyBNIFAgSSBMIEUgUiAgIFMgUCBFIEMgSSBGIEkgQyAgIE0gQSBDIFIgTyBTICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKgkJCSEhISEhISEhISEhISEhISEhISEhISEhISEgTm90ZSB0byB0aGUgSENGLWltcGxlbWVudG9yICEhISEhISEhISEhISEhISEhISEhISEhISEKKgkJCSEhISEgRG8gbm90IGNhbGwgdGhlc2UgbWFjcm9zIHdpdGggcGFyYW1ldGVycyB3aGljaCBpbnRyb2R1Y2Ugc2lkZSBlZmZlY3RzICEhISEKKgkJCSEhISEhISEhISEhISEhISEhISEhISEhISEgTm90ZSB0byB0aGUgSENGLWltcGxlbWVudG9yICEhISEhISEhISEhISEhISEhISEhISEhISEKKgoqCiogQnkgc2VsZWN0aW5nIHRoZSBhcHByb3ByaWF0ZSBNYWNybyBkZWZpbml0aW9ucyBieSBtZWFucyBvZiBtb2RpZnlpbmcgdGhlICIjaWZkZWYgMC8xIiBsaW5lcywgdGhlIEhDRiBjYW4gYmUKKiBhZGp1c3RlZCBmb3IgdGhlIEkvTyBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzcGVjaWZpYyBjb21waWxlcgoqCiogSWYgbmVlZGVkIHRoZSBtYWNyb3MgY2FuIGJlIG1vZGlmaWVkIG9yIHJlcGxhY2VkIHdpdGggZGVmaW5pdGlvbnMgYXBwcm9wcmlhdGUgZm9yIHlvdXIgcGVyc29uYWwgcGxhdGZvcm0uCiogSWYgeW91IG5lZWQgdG8gbWFrZSBzdWNoIGNoYW5nZXMgaXQgaXMgYXBwcmVjaWF0ZWQgaWYgeW91IGluZm9ybSBBZ2VyZSBTeXN0ZW1zCiogVGhhdCB3YXkgdGhlIGNoYW5nZXMgY2FuIGJlY29tZSBwYXJ0IG9mIHRoZSBuZXh0IHJlbGVhc2Ugb2YgdGhlIFdDSQoqCiogRm9yIGNvbnZlbmllbmNlIG9mIHRoZSBNU0YtcHJvZ3JhbW1lciwgYWxsIG1hY3JvcyBhcmUgYWxsb3dlZCB0byBtb2RpZnkgdGhlaXIgcGFyYW1ldGVycyAoYWx0aG91Z2ggc29tZQoqIG1pZ2h0IGFyZ3VlIHRoYXQgdGhpcyB3b3VsZCBjb25zdGl0dXRlIGJhZCBjb2RpbmcgcHJhY3RpY2UpLiBUaGlzIGhhcyBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBIQ0YsIGUuZy4gYXMgYQoqIGNvbnNlcXVlbmNlIHRoZXNlIG1hY3JvcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgd2hpY2ggaGF2ZSBzaWRlIGVmZmVjdHMsIGUuZyBhdXRvLWluY3JlbWVudC4KKgoqIGluIHRoZSBNaWNyb3NvZnQgaW1wbGVtZW50YXRpb24gb2YgaW5saW5lIGFzc2VtYmx5IGl0IGlzIE8uSy4gdG8gY29ycnVwdCBhbGwgZmxhZ3MgZXhjZXB0IHRoZSBkaXJlY3Rpb24gZmxhZwoqIGFuZCB0byBjb3JydXB0IGFsbCByZWdpc3RlcnMgZXhjZXB0IHRoZSBzZWdtZW50IHJlZ2lzdGVycyBhbmQgRURJLCBFU0ksIEVTUCBhbmQgRUJQIChvciB0aGVpciAxNiBiaXRzCiogZXF1aXZhbGVudHMpLiAgT3RoZXIgZW52aXJvbm1lbnRzIG1heSBoYXZlIG90aGVyIGNvbnN0cmFpbnRzCioKKiBpbiB0aGUgSW50ZWwgZW52aXJvbm1lbnQgaXQgaXMgTy5LIHRvIGhhdmUgYSB3b3JkIChhcyBhIDE2IGJpdHMgcXVhbnRpdHkpIGF0IGEgYnl0ZSBib3VuZGFyeSwgaGVuY2UKKiBJTl8vT1VUX1BPUlRfU1RSSU5HXzhfMTYgY2FuIG1vdmUgd29yZHMgYmV0d2VlbiBQQy1tZW1vcnkgYW5kIE5JQy1tZW1vcnkgd2l0aCBhcyBvbmx5IGNvbnN0cmFpbnQgdGhhdCB0aGUKKiB3b3JkcyBhcmUgb24gYSB3b3JkIGJvdW5kYXJ5IGluIE5JQy1tZW1vcnkuIFRoaXMgZG9lcyBub3QgaG9sZCB0cnVlIGZvciBhbGwgY29uY2VpdmFibGUgZW52aXJvbm1lbnRzLCBlLmcuCiogYW4gTW90b3JvbGEgNjh4eHggZG9lcyBub3QgYWxsb3cgdGhpcy4gUHJvYmFibHkvaG9wZWZ1bGx5IHRoZSBib3VuZGFyeSBjb25kaXRpb25zIGltcG9zZWQgYnkgdGhlc2UgdHlwZSBvZgoqIHBsYXRmb3JtcyBwcmV2ZW50IHRoaXMgY2FzZSBmcm9tIG1hdGVyaWFsaXppbmcuICBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgT1VUX1BPUlRfU1RSSU5HXzhfMTYgbXVzdCBiZSBjb2RlZAoqIGJ5IGNvbWJpbmluZyB0d28gSG9zdCBtZW1vcnkgaGNmXzggdmFsdWVzIGF0IGEgdGltZSB0byBhIHNpbmdsZSBoY2ZfMTYgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIHRoZSBOSUMgYW5kCiogSU5fUE9SVF9TVFJJTkdfOF8xNiB0aGUgc2luZ2xlIGhjZl8xNiByZXRyaWV2ZWQgZnJvbSB0aGUgTklDIG11c3QgYmUgc3BsaXQgaW4gdHdvIGhjZl84IHZhbHVlcyB0byBiZSBzdG9yZWQKKiBpbiBIb3N0IG1lbW9yeSAoc2VlIHRoZSBzYW1wbGUgY29kZSBhYm92ZSkKKgoqCVRoZSBwcm90b3R5cGVzIGFuZCBmdW5jdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBtYWNyb3MgYXJlOgoqCioJaGNmXzE2CUlOX1BPUlRfV09SRCggaGNmXzE2IHBvcnQgKQoqCQkJUmVhZHMgYSB3b3JkICgxNiBiaXRzKSBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydAoqCioJdm9pZAlPVVRfUE9SVF9XT1JEKCBoY2ZfMTYgcG9ydCwgaGNmXzE2IHZhbHVlKQoqCQkJV3JpdGVzIGEgd29yZCAoMTYgYml0cykgdG8gdGhlIHNwZWNpZmllZCBwb3J0CioKKgloY2ZfMTYJSU5fUE9SVF9EV09SRCggaGNmXzE2IHBvcnQgKQoqCQkJUmVhZHMgYSBkd29yZCAoMzIgYml0cykgZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQKKgoqCXZvaWQJT1VUX1BPUlRfRFdPUkQoIGhjZl8xNiBwb3J0LCBoY2ZfMzIgdmFsdWUpCioJCQlXcml0ZXMgYSBkd29yZCAoMzIgYml0cykgdG8gdGhlIHNwZWNpZmllZCBwb3J0CioKKgl2b2lkCUlOX1BPUlRfU1RSSU5HXzhfMTYoIHBvcnQsIGFkZHIsIGxlbikKKgkJCVJlYWRzIGxlbiBudW1iZXIgb2Ygd29yZHMgKDE2IGJpdHMpIGZyb20gTklDIG1lbW9yeSB2aWEgdGhlIHNwZWNpZmllZCBwb3J0IHRvIHRoZSAoRkFSKQoqCQkJYnl0ZS1wb2ludGVyIGFkZHIgaW4gUEMtUkFNCioJCQlOb3RlIHRoYXQgbGVuIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHdvcmRzLCBOT1QgdGhlIG51bWJlciBvZiBieXRlcwoqCQkJISEhTk9URSwgYWx0aG91Z2ggbGVuIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHdvcmRzLCBhZGRyIE1VU1QgYmUgYSBjaGFyIHBvaW50ZXIgTk9URSEhIQoqCQkJU2VlIGFsc28gdGhlIGNvbW1vbiBub3RlcyBmb3IgSU5fUE9SVF9TVFJJTkdfOF8xNiBhbmQgT1VUX1BPUlRfU1RSSU5HXzhfMTYKKgoqCXZvaWQJT1VUX1BPUlRfU1RSSU5HXzhfMTYoIHBvcnQsIGFkZHIsIGxlbikKKgkJCVdyaXRlcyBsZW4gbnVtYmVyIG9mIHdvcmRzICgxNiBiaXRzKSBmcm9tIHRoZSAoRkFSKSBieXRlLXBvaW50ZXIgYWRkciBpbiBQQy1SQU0gdmlhIHRoZSBzcGVjaWZpZWQKKgkJCXBvcnQgdG8gTklDIG1lbW9yeQoqCQkJTm90ZSB0aGF0IGxlbiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB3b3JkcywgTk9UIHRoZSBudW1iZXIgb2YgYnl0ZXMuCioJCQkhISFOT1RFLCBhbHRob3VnaCBsZW4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygd29yZHMsIGFkZHIgTVVTVCBiZSBhIGNoYXIgcG9pbnRlciBOT1RFISEhCioKKgkJCVRoZSBwZWN1bGlhciBjb21iaW5hdGlvbiBvZiB3b3JkLWxlbmd0aCBhbmQgY2hhciBwb2ludGVycyBmb3IgSU5fUE9SVF9TVFJJTkdfOF8xNiBhcyB3ZWxsIGFzCioJCQlPVVRfUE9SVF9TVFJJTkdfOF8xNiBpcyBqdXN0aWZpZWQgYnkgdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBvZmZlcnMgYSBtb3JlIG9wdGltYWwgYWxnb3JpdGhtCioKKgl2b2lkCUlOX1BPUlRfU1RSSU5HXzMyKCBwb3J0LCBhZGRyLCBsZW4pCioJCQlSZWFkcyBsZW4gbnVtYmVyIG9mIGRvdWJsZS13b3JkcyAoMzIgYml0cykgZnJvbSBOSUMgbWVtb3J5IHZpYSB0aGUgc3BlY2lmaWVkIHBvcnQgdG8gdGhlIChGQVIpCioJCQlkb3VibGUtd29yZCBhZGRyZXNzIGFkZHIgaW4gUEMtUkFNCioKKgl2b2lkCU9VVF9QT1JUX1NUUklOR18zMiggcG9ydCwgYWRkciwgbGVuKQoqCQkJV3JpdGVzIGxlbiBudW1iZXIgb2YgZG91YmxlLXdvcmRzICgzMiBiaXRzKSBmcm9tIHRoZSAoRkFSKSBkb3VibGUtd29yZCBhZGRyZXNzIGFkZHIgaW4gUEMtUkFNIHZpYQoqCQkJdGhlIHNwZWNpZmllZCBwb3J0IHRvIE5JQyBtZW1vcnkKKgoqCQkJISEhISEhISEhISEhISEhISEhISEhISEhISBOb3RlIHRvIHRoZSBIQ0YtaW1wbGVtZW50b3IgISEhISEhISEhISEhISEhISEhISEhISEhIQoqCQkJISEhISBEbyBub3QgY2FsbCB0aGVzZSBtYWNyb3Mgd2l0aCBwYXJhbWV0ZXJzIHdoaWNoIGludHJvZHVjZSBzaWRlIGVmZmVjdHMgISEhIQoqCQkJISEhISEhISEhISEhISEhISEhISEhISEhISBOb3RlIHRvIHRoZSBIQ0YtaW1wbGVtZW50b3IgISEhISEhISEhISEhISEhISEhISEhISEhIQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgZGVmaW5lIElOVCBUeXBlcyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCQloY2ZfODsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJCWhjZl8xNjsKdHlwZWRlZiB1bnNpZ25lZCBsb25nCQkJaGNmXzMyOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogIGRlZmluZSBJL08gVHlwZXMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBIQ0ZfSU9fTUVNICAgICAJCQkweDAwMDEJLy8gbWVtb3J5IG1hcHBlZCBJL08JKCAwOiBQb3J0IEkvTyApCiNkZWZpbmUgSENGX0lPXzMyQklUUyAgIAkgIAkweDAwMDIgCS8vIDMyQml0cyBzdXBwb3J0CQkoIDA6IG9ubHkgMTYgQml0cyBJL08pCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICNkZWZpbmUgSENGX1RZUEUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgSENGX1RZUEVfTk9ORQkJCTB4MDAwMAkvLyBObyB0eXBlCiNkZWZpbmUgSENGX1RZUEVfV1BBCQkJMHgwMDAxCS8vIFdQQSBzdXBwb3J0CiNkZWZpbmUgSENGX1RZUEVfVVNCCQkJMHgwMDAyCS8vIHJlc2VydmVkIChVU0IgRG9uZ2xlIGRyaXZlciBzdXBwb3J0KQovLyNkZWZpbmUgSENGX1RZUEVfSElJCQkJMHgwMDA0CS8vIEhlcm1lcy1JSSwgdG8gZGlzY3JpbWluYXRlIEgtSSBhbmQgSC1JSSBDRkdfSENGX09QVF9TVFJDVAojZGVmaW5lIEhDRl9UWVBFX1dBUlAJCQkweDAwMDgJLy8gV0FSUCBGL1cKI2RlZmluZSBIQ0ZfVFlQRV9QUkVMT0FERUQJCTB4MDA0MAkvLyBwcmUtbG9hZGVkIEYvVwojZGVmaW5lIEhDRl9UWVBFX0hJSTUJCQkweDAwODAJLy8gSGVybWVzLTIuNSBIL1cKI2RlZmluZSBIQ0ZfVFlQRV9DQ1gJCQkweDAxMDAJLy8gQ0tJUAojZGVmaW5lIEhDRl9UWVBFX0JFQUdMRV9ISUk1CTB4MDIwMAkvLyBCZWFnbGUgSGVybWVzLTIuNSBIL1cKI2RlZmluZSBIQ0ZfVFlQRV9UWF9ERUxBWQkJMHg0MDAwCS8vIERlbGF5ZWQgdHJhbnNtaXNzaW9uICggbm9uLURNQSBvbmx5KQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjZGVmaW5lIEhDRl9BU1NFUlQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIEhDRl9BU1NFUlRfTk9ORQkJCTB4MDAwMAkvLyBObyBhc3NlcnQgc3VwcG9ydAojZGVmaW5lIEhDRl9BU1NFUlRfUFJJTlRGCQkweDAwMDEJLy8gSGVybWVzIGdlbmVyYXRlZCBkZWJ1ZyBpbmZvCiNkZWZpbmUgSENGX0FTU0VSVF9TV19TVVAJCTB4MDAwMgkvLyBsb2dnaW5nIHZpYSBIZXJtZXMgc3VwcG9ydCByZWdpc3RlcgojZGVmaW5lIEhDRl9BU1NFUlRfTUIJCQkweDAwMDQJLy8gbG9nZ2luZyB2aWEgTWFpbGJveAojZGVmaW5lIEhDRl9BU1NFUlRfUlRfTVNGX1JUTgkweDQwMDAJLy8gZHluYW1pY2FsbHkgYmluZGluZyBvZiBtc2ZfYXNzZXJ0IHJvdXRpbmUKI2RlZmluZSBIQ0ZfQVNTRVJUX0xOS19NU0ZfUlROCTB4ODAwMAkvLyBzdGF0aWNhbGx5IGJpbmRpbmcgb2YgbXNmX2Fzc2VydCByb3V0aW5lCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICNkZWZpbmUgSENGX0VOQ0FQICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgSENGX0VOQ19OT05FCQkJMHgwMDAwCS8vIE5vIGVuY2Fwc3VsYXRpb24gc3VwcG9ydAojZGVmaW5lIEhDRl9FTkMJCQkJCTB4MDAwMQkvLyBIQ0YgaGFuZGxlcyBFbi0vRGVjYXBzdWxhdGlvbgojZGVmaW5lIEhDRl9FTkNfU1VQCQkJCTB4MDAwMgkvLyBIQ0Ygc3VwcG9ydHMgTVNGIHRvIGhhbmRsZSBFbi0vRGVjYXBzdWxhdGlvbgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjZGVmaW5lIEhDRl9FWFQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIEhDRl9FWFRfTk9ORQkJCTB4MDAwMAkvLyBObyBleHBhbmRlZCBmZWF0dXJlcwojZGVmaW5lIEhDRl9FWFRfSU5GT19MT0cJCTB4MDAwMQkvLyBsb2dnaW5nIG9mIEhlcm1lcyBJbmZvIGZyYW1lcwovLyNkZWZpbmUgSENGX0VYVF9JTlRfVFhfT0sJCTB4MDAwMgkvLyBSRVNFUlZFRCEhISBtb25pdG9yaW5nIHN1Y2Nlc3NmdWwgVHggbWVzc2FnZQojZGVmaW5lIEhDRl9FWFRfSU5UX1RYX0VYCQkweDAwMDQJLy8gbW9uaXRvcmluZyB1bnN1Y2Nlc3NmdWwgVHggbWVzc2FnZQovLyNkZWZpbmUgSENGX0VYVF9NT05fTU9ERQkJMHgwMDA4CS8vIExFR0FDWQojZGVmaW5lIEhDRl9FWFRfVEFMTElFU19GVwkJMHgwMDEwCS8vIHN1cHBvcnQgZm9yIHVwIHRvIDMyIEhlcm1lcyBFbmdpbmVlcmluZyB0YWxsaWVzCiNkZWZpbmUgSENGX0VYVF9UQUxMSUVTX0hDRgkJMHgwMDIwCS8vIHN1cHBvcnQgZm9yIHVwIHRvIDggSENGIEVuZ2luZWVyaW5nIHRhbGxpZXMKI2RlZmluZSBIQ0ZfRVhUX05JQ19BQ0NFU1MJCTB4MDA0MAkvLyBkaXJlY3QgYWNjZXNzIHZpYSBBdXgtcG9ydHMgYW5kIHRvIEhlcm1lcyByZWdpc3RlcnMgYW5kIGNvbW1hbmRzCiNkZWZpbmUgSENGX0VYVF9NQgkJCQkweDAwODAJLy8gTWFpbEJveCBjb2RlIGV4cGFuZGVkCiNkZWZpbmUgSENGX0VYVF9JRkJfU1RSQ1QgCQkweDAxMDAJLy8gTVNGIGN1c3RvbSBwb2ludGVyIGluIElGQgojZGVmaW5lIEhDRl9FWFRfREVTQ19TVFJDVCAJCTB4MDIwMAkvLyBNU0YgY3VzdG9tIHBvaW50ZXIgaW4gRGVzY3JpcHRvcgojZGVmaW5lIEhDRl9FWFRfVFhfQ09OVAkJCTB4NDAwMAkvLyBDb250aW51b3VzIHRyYW5zbWl0IHRlc3QKI2RlZmluZSBIQ0ZfRVhUX0lOVF9USUNLCQkweDgwMDAJLy8gZW5hYmxlcyBUaW1lclRpY2sgaW50ZXJydXB0IGdlbmVyYXRpb24KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogI2RlZmluZSBIQ0ZfU0xFRVAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBIQ0ZfRERTCQkJCQkweDAwMDEJLy8gRGlzY29ubmVjdGVkIERlZXAgU2xlZXAKI2RlZmluZSBIQ0ZfQ0RTCQkJCQkweDAwMDIJLy8gQ29ubmVjdGVkIERlZXAgU2xlZXAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogI2RlZmluZSBIQ0ZfVEFMTElFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgSENGX1RBTExJRVNfTk9ORQkJMHgwMDAwCS8vIE5vIHRhbGx5IHN1cHBvcnQKI2RlZmluZSBIQ0ZfVEFMTElFU19OSUMJCQkweDAwMDEJLy8gSGVybWVzIFRhbGxpZXMgYWNjdW11bGF0ZWQgaW4gSUZCCiNkZWZpbmUgSENGX1RBTExJRVNfSENGCQkJMHgwMDAyCS8vIEhDRiBUYWxsaWVzIGFjY3VtdWxhdGVkIGluIElGQgojZGVmaW5lIEhDRl9UQUxMSUVTX1JFU0VUCQkweDgwMDAJLy8gVGFsbGllcyBpbiBJRkIgYXJlIHJlc2V0IHdoZW4gcmVwb3J0ZWQgdmlhIGhjZl9nZXRfaW5mbwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIE0gSSBOIEkgUCBPIFIgVCAgICBOIEQgSSBTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWYgZGVmaW5lZCBXVkxBTl80MSB8fCBkZWZpbmVkIFdWTEFOXzQ4IHx8IGRlZmluZWQgV1ZMQU5fNTIgfHwgZGVmaW5lZCBfV0lOMzJfV0NFCgojaWZuZGVmIFdWTEFOXzQ2CiNkZWZpbmUgSENGX0VYVCAgIChIQ0ZfRVhUX0lORk9fTE9HIHwgSENGX0VYVF9NQiB8IEhDRl9FWFRfTklDX0FDQ0VTUyApCiNlbHNlCiNkZWZpbmUgSENGX0VYVCAoIEhDRl9FWFRfVFhfQ09OVCB8IEhDRl9FWFRfSU5GT19MT0cgfCBIQ0ZfRVhUX01CIHwgSENGX0VYVF9OSUNfQUNDRVNTICkKI2VuZGlmCiNkZWZpbmUgSENGX0RMViAxCQkJLy9ILUkgbGVnYWN5LCBzdXBlcmZsdW91cyBmb3IgSC1JSQoKI2lmZGVmIF9XSU4zMl9XQ0UKI2RlZmluZSBIQ0ZfSU8gICAgIEhDRl9JT19NRU0KI2RlZmluZSBIQ0ZfRE1BCQkwCQkJLy8gVG8gZW5hYmxlIERNQQojZW5kaWYKCiNpZiBfVkFSSUFOVCA9PSA3CiNkZWZpbmUgSENGX1NMRUVQIEhDRl9DRFMKI2VuZGlmIC8vIF9WQVJJQU5UID09IDcKCiNpZiBfVkFSSUFOVCA9PSA1IHx8IF9WQVJJQU5UID09IDYKI2RlZmluZSBfV0FSUAojZGVmaW5lIF9BRVMKI2RlZmluZSBIQ0ZfU0xFRVAgSENGX0NEUwojaWYgX1ZBUklBTlQgPT0gNgovLyEgI2RlZmluZSBfUlNOCiNlbmRpZiAvLyBfVkFSSUFOVCA9PSA2CiNpZm5kZWYgX1dJTjMyX1dDRQojZGVmaW5lIEhDRl9JTyAgICAgSENGX0lPXzMyQklUUwojZGVmaW5lIEhDRl9ETUEJCTEJCQkvLyBUbyBlbmFibGUgRE1BCiNlbmRpZgojZW5kaWYgLy8gX1ZBUklBTlQgPT0gNSB8fCBfVkFSSUFOVCA9PSA2CgoKLy9IV2kgZm9yIG1pZ3JhdGlvbiBwdXJwb3NlcyBJIGRlZmluZWQgYSBkZWZpbmUgd2hpY2ggd2lsbCBiZSBUUlVFIGZvciBBTEwgZHJpdmVycwovL01lYW5pbmcgdGhhdCBfQ0NYIGRlZmluZWQgY29kZSB3aGljaCB3ZSB0aGluayB3aWxsIGdldCBhIGFsbCBkcml2ZXIgT0sgZmxhZyBjYW4gYmUgZGVmaW5lZCBmcm9tIF9DQ1ggdG8gX0NDWF9PSwojaWYgZGVmaW5lZCBXVkxBTl80OCAvLyAmJiAhZGVmaW5lZCBfV0lOMzJfV0NFCiNpZiBfVkFSSUFOVCA9PSA0IHx8IF9WQVJJQU5UID09IDYKI2RlZmluZSBfQ0NYX09LCQkxCiNlbmRpZiAvLyBfVkFSSUFOVCA9PSA0IHx8IF9WQVJJQU5UID09IDYKI2VuZGlmIC8vIFdWTEFOXzQ4CgovLyNpZiAhZGVmaW5lZCBXVkxBTl80NgojaWYgZGVmaW5lZCBXVkxBTl80OAojaWYgX1ZBUklBTlQgPT0gNCB8fCBfVkFSSUFOVCA9PSA2CiNkZWZpbmUgX0NDWAojZGVmaW5lIEhDRl9NQVhfTVNHX0NLSVBfUEFERElORyAgICA4NiAvLywgdXNlIDg2IGZvciByeCBmcmFnbWVudGF0aW9uLiAyOCBpcyBlbnVmIGZvciBNSUMrUFBLIGVuY2Fwc3VsYXRpb24KI2RlZmluZSBIQ0ZfTUFYX01TRwkJCQkJKCAxNTE0ICsgSENGX01BWF9NU0dfQ0tJUF9QQURESU5HICApIC8vIG5lZWQgZXh0cmEgcGFkZGluZyBmb3IgQ0tJUCAobmVlZCB0byBzdWJ0cmFjdCAyOCBmb3IgTkRJUykKI2VuZGlmIC8vIF9WQVJJQU5UID09IDQgfHwgX1ZBUklBTlQgPT0gNgojZW5kaWYgLy8gV1ZMQU5fNDgKLy8jZW5kaWYgLy8gV1ZMQU5fNDYKCiNpZiAhZGVmaW5lZCBXVkxBTl80NgojZGVmaW5lIF9QRUVLCiNlbmRpZgoKI2lmbmRlZiBfV0lOMzJfV0NFCi8vIEFTU0VSVCBhbHJlYWR5IHVzZWQgYnkgV2luQ0UuLi4KI2lmZGVmIEFTU0VSVAojdW5kZWYgQVNTRVJUCiNkZWZpbmUgIEFTU0VSVCh4KSBBU1NFUlRERUJVR01TRygoeCksIChURVhUKCJTSU1VTEFURSBBU1NFUlQ6IikpKQojZW5kaWYKI2VuZGlmCgoKI2lmIGRlZmluZWQgV1ZMQU5fNDEKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX0lECQkJQ09NUF9JRF9NSU5JUE9SVF9ORElTXzMxCiNlbmRpZiAvLyBXVkxBTl80MQojaWYgZGVmaW5lZCBXVkxBTl80OCAmJiAhZGVmaW5lZCBfV0lOMzJfV0NFCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRAkJCUNPTVBfSURfTUlOSVBPUlRfTkRJU181MAojZW5kaWYgLy8gV1ZMQU5fNDggLyBfV0lOMzJfV0NFCiNpZiBkZWZpbmVkIFdWTEFOXzUyICYmICFkZWZpbmVkIF9XSU4zMl9XQ0UKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX0lECQkJQ09NUF9JRF9NSU5JUE9SVF9ORElTXzQwCiNlbmRpZiAvLyBXVkxBTl81MiAvIF9XSU4zMl9XQ0UKI2lmIGRlZmluZWQgV1ZMQU5fNDYKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX0lECQkJQ09NUF9JRF9XSU5fQ0UKI2VuZGlmIC8vIF9XSU4zMl9XQ0UKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9WQVIJCQlfVkFSSUFOVAoKI2RlZmluZQlUMV9fSENGX1RZUEUJCQkJCShIQ0ZfVFlQRV9OT05FKQoKI2RlZmluZSBUMl9fSENGX1RZUEUJCQkJCShUMV9fSENGX1RZUEUpCgojaWZkZWYgX1dBUlAKI2RlZmluZSBUM19fSENGX1RZUEUJCQkJCShUMl9fSENGX1RZUEUgfCBIQ0ZfVFlQRV9ISUk1IHwgSENGX1RZUEVfV0FSUCApCiNlbHNlCiNpZiBfVkFSSUFOVCA9PSA3CiNkZWZpbmUgVDNfX0hDRl9UWVBFCQkJCQkoVDJfX0hDRl9UWVBFIHwgSENGX1RZUEVfSElJNSkKI2Vsc2UgLy8gX1ZBUklBTlQgPT0gNwojZGVmaW5lIFQzX19IQ0ZfVFlQRQkJCQkJKFQyX19IQ0ZfVFlQRSkKI2VuZGlmIC8vIF9WQVJJQU5UID09IDcKI2VuZGlmIC8vIF9XQVJQCgojaWZkZWYgX0NDWF9PSwojZGVmaW5lIFQ0X19IQ0ZfVFlQRQkJCQkJKFQzX19IQ0ZfVFlQRSB8IEhDRl9UWVBFX0NDWCkKI2Vsc2UKI2RlZmluZSBUNF9fSENGX1RZUEUJCQkJCShUM19fSENGX1RZUEUpCiNlbmRpZiAvLyBfQ0NYX09LCgovL25vdCBzdWl0YWJsZSBmb3IgSC1JSSAjZGVmaW5lIEhDRl9DRkdfU1RBXzFfQk9UVE9NICAgICAgICAJMTYKCi8vIERlZmF1bHQgV1BBIGluIE9OIGZvciBhbGwgZHJpdmVycyBleGNlcHQgZm9yIFdBUlAgZHJpdmVyCiNpZmRlZiBfV0FSUAojZGVmaW5lIFQ1X19IQ0ZfVFlQRQkJCQkJKFQ0X19IQ0ZfVFlQRSkKI2Vsc2UgLy8gX1dBUlAKI2RlZmluZSBUNV9fSENGX1RZUEUJCQkJCShUNF9fSENGX1RZUEUgfCBIQ0ZfVFlQRV9XUEEpCiNlbmRpZiAvLyBfV0FSUAoKI2RlZmluZSBIQ0ZfVFlQRQkJCQkJCShUNV9fSENGX1RZUEUpCgovLyBUaGlzIGlzIG5lZWRlZCB0byBnZXQgYXV4X2N0cmwoKSBmcm9tIHRoZSBIQ0YgZm9yIFdsRnJlZXplQW5kRHVtcCgpCiNpZiAoZGVmaW5lZCBEQkcgJiYgREJHICE9IDApCiNpZm5kZWYgU1RBVElDCiNkZWZpbmUgU1RBVElDCiNlbmRpZgojZW5kaWYKCiNpZiAhZGVmaW5lZCBTT0ZUUk9OSUNTX0NPREUgJiYgIWRlZmluZWQgX0FQSURMTCAmJiAhZGVmaW5lZCBfV0lOMzJfV0NFCiNpbmNsdWRlIDxuZGlzLmg+CiNlbmRpZiAvLyBTT0ZUUk9OSUNTX0NPREUgLyBfQVBJRExMIC8gX1dJTjMyX1dDRQojaWYgZGVmaW5lZCBfV0lOMzJfV0NFCiNpbmNsdWRlIDx3aW5kb3dzLmg+CiNpbmNsdWRlIDx3aW5udC5oPgojZW5kaWYgIC8vIF9XSU4zMl9XQ0UKI2luY2x1ZGUgInZlcnNpb24uaCIKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NQUpPUl9WRVIJCVRQSV9NQUpPUl9WRVJTSU9OCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJCVRQSV9NSU5PUl9WRVJTSU9OCgojaWYgIWRlZmluZWQgX0FQSURMTCAmJiAhZGVmaW5lZCBfV0lOMzJfV0NFCgpfX2lubGluZSBVQ0hBUiBORElTX0lOX0JZVEUoIFVMT05HIHBvcnQgKQp7CiAgICBVQ0hBUiB2YWx1ZTsKICAgIE5kaXNSYXdSZWFkUG9ydFVjaGFyKHBvcnQgLCAmdmFsdWUpOwogICAgcmV0dXJuICh2YWx1ZSk7Cn0KCl9faW5saW5lIFVMT05HIE5ESVNfSU5fTE9ORyggVUxPTkcgcG9ydCApCnsKICAgIFVMT05HIHZhbHVlOwogICAgTmRpc1Jhd1JlYWRQb3J0VWxvbmcocG9ydCAsICZ2YWx1ZSk7CiAgICByZXR1cm4gKHZhbHVlKTsKfQpfX2lubGluZSBVU0hPUlQgTkRJU19JTl9XT1JEKCBVTE9ORyBwb3J0ICkKewogICAgVVNIT1JUIHZhbHVlOwogICAgTmRpc1Jhd1JlYWRQb3J0VXNob3J0KHBvcnQgLCAmdmFsdWUpOwogICAgcmV0dXJuICh2YWx1ZSk7Cn0KCiNkZWZpbmUgSU5fUE9SVF9EV09SRChwb3J0KQkJCU5ESVNfSU5fTE9ORyggKFVMT05HKSAocG9ydCkgKQojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KQkJCU5ESVNfSU5fV09SRCggKFVMT05HKSAocG9ydCkgKQojZGVmaW5lIE9VVF9QT1JUX0RXT1JEKHBvcnQsIHZhbHVlKQlOZGlzUmF3V3JpdGVQb3J0VWxvbmcoKFVMT05HKSAocG9ydCkgLCB2YWx1ZSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKQlOZGlzUmF3V3JpdGVQb3J0VXNob3J0KChVTE9ORykgKHBvcnQpICwgKFVTSE9SVCkgKHZhbHVlKSkKCiNkZWZpbmUgIElOX1BPUlRfU1RSSU5HXzhfMTYocG9ydCwgYWRkciwgbGVuKQlJTl9QT1JUX1NUUklOR18xNihwb3J0LCBhZGRyLCBsZW4pCiNkZWZpbmUgIE9VVF9QT1JUX1NUUklOR184XzE2KHBvcnQsIGFkZHIsIGxlbikJT1VUX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGFkZHIsIGxlbikKCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMzIocG9ydCwgYWRkciwgbGVuKQkJewkJCQkJXAoJTmRpc1Jhd1JlYWRQb3J0QnVmZmVyVWxvbmcocG9ydCwgYWRkciwgKGxlbikpOwkJCQkJXAp9CgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18zMihwb3J0LCBhZGRyLCBsZW4pCXsJCQkJCQlcCglOZGlzUmF3V3JpdGVQb3J0QnVmZmVyVWxvbmcocG9ydCwgYWRkciwgKGxlbikpOwkJCQkJXAp9CgojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGFkZHIsIGxlbikJTmRpc1Jhd1JlYWRQb3J0QnVmZmVyVXNob3J0KHBvcnQsIGFkZHIsIChsZW4pKTsKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYocG9ydCwgYWRkciwgbGVuKQlOZGlzUmF3V3JpdGVQb3J0QnVmZmVyVXNob3J0KHBvcnQsIGFkZHIsIChsZW4pKTsKCiNlbmRpZiAvLyAgX0FQSURMTCAvIF9XSU4zMl9XQ0UKCiNpZiBkZWZpbmVkIF9XSU4zMl9XQ0UKCiNkZWZpbmUgSENGX0FMSUdOIDIKI2RlZmluZSBIQ0ZfTUVNX0lPCQkJCQkxIC8vIG92ZXJydWxlIHN0YW5kYXJkIFBvcnQgSS9PIHdpdGggTWVtb3J5IG1hcHBlZCBJL08KI2RlZmluZSBIQ0ZfUFJPVF9USU1FCQkJCTQ5CgojZGVmaW5lICAJCUlOX1BPUlRfQllURQkJCUNFX0lOX1BPUlRfQllURQojZGVmaW5lICAJCU9VVF9QT1JUX0JZVEUJCQlDRV9PVVRfUE9SVF9CWVRFCiNkZWZpbmUgIAkJSU5fUE9SVF9XT1JECQkJQ0VfSU5fUE9SVF9XT1JECiNkZWZpbmUgIAkJT1VUX1BPUlRfV09SRAkJCUNFX09VVF9QT1JUX1dPUkQKI2RlZmluZSAgCQlJTl9QT1JUX1NUUklOR18xNgkJQ0VfSU5fUE9SVF9TVFJJTkcKI2RlZmluZSAgCQlPVVRfUE9SVF9TVFJJTkdfMTYJCUNFX09VVF9QT1JUX1NUUklORwoKZXh0ZXJuIGhjZl84ICBDRV9JTl9QT1JUX0JZVEUoaGNmXzMyIHBvcnQpOwpleHRlcm4gdm9pZCAgIENFX09VVF9QT1JUX0JZVEUoaGNmXzMyIHBvcnQsIGhjZl84IHZhbHVlKTsKZXh0ZXJuIGhjZl8xNiBDRV9JTl9QT1JUX1dPUkQoaGNmXzMyIHBvcnQpOwpleHRlcm4gdm9pZCAgIENFX09VVF9QT1JUX1dPUkQoaGNmXzMyIHBvcnQsIGhjZl8xNiB2YWx1ZSk7CmV4dGVybiB2b2lkICAgQ0VfSU5fUE9SVF9TVFJJTkcoaGNmXzMyIHBvcnQsIHZvaWQgKmFkZHIsIGhjZl8xNiBsZW4pOwpleHRlcm4gdm9pZCAgIENFX09VVF9QT1JUX1NUUklORyhoY2ZfMzIgcG9ydCwgdm9pZCAqYWRkciwgaGNmXzE2IGxlbik7CgoKI2VuZGlmCgojaWYgZGVmaW5lZCBfREVCVUcgfHwgKGRlZmluZWQgREJHICYmIERCRyAhPSAwKQojZGVmaW5lIEhDRl9BU1NFUlQgKCBIQ0ZfQVNTRVJUX0xOS19NU0ZfUlROIHwgSENGX0FTU0VSVF9SVF9NU0ZfUlROIHwgSENGX0FTU0VSVF9QUklOVEYgKSAvLzB4QzAwMQovLyNkZWZpbmUgSENGX0FTU0VSVCAoIEhDRl9BU1NFUlRfTE5LX01TRl9SVE4gfCBIQ0ZfQVNTRVJUX1JUX01TRl9SVE4gfCBIQ0ZfQVNTRVJUX1BSSU5URiB8IEhDRl9BU1NFUlRfTUIgKSAvL2p1c3QgdG8gdGVzdAojZW5kaWYgLy8gX0RFQlVHIHx8IERCRwoKI2lmIGRlZmluZWQgREVCVUcgfHwgZGVmaW5lZCBfREVCVUcgfHwgKGRlZmluZWQgREJHICYmIERCRyAhPSAwKQojaWZkZWYgX1dJTjMyX1dDRQojZGVmaW5lIERCR0EyVyhEQkdTVFIpCUNlQ29udmVydEFuc2lUb1VuaWNvZGVMZW4oKGNoYXIqKURCR1NUUikKI2RlZmluZSBPVVRQVVRERUJVR01TRyhkcHJpbnRmX2V4cCkJCQkoKHZvaWQpKCghIFpPTkVfREVCVUcpID8gMDpjZV9kZWJ1Z19vdXQgZHByaW50Zl9leHApKQojZGVmaW5lIEFTU0VSVERFQlVHTVNHKGNvbmQsIGRwcmludGZfZXhwKQkJCSgodm9pZCkoKGNvbmQpID8gMDpjZV9kZWJ1Z19vdXQgZHByaW50Zl9leHApKQoKI2RlZmluZSBaT05FX0VSUk9SICAgICAgREVCVUdaT05FKDApCiNkZWZpbmUgWk9ORV9XQVJOICAgICAgIERFQlVHWk9ORSgxKQojZGVmaW5lIFpPTkVfRlVOQ1RJT04gICBERUJVR1pPTkUoMikKI2RlZmluZSBaT05FX0lOSVQgICAgICAgREVCVUdaT05FKDMpCiNkZWZpbmUgWk9ORV9JTlRSICAgICAgIERFQlVHWk9ORSg0KQojZGVmaW5lIFpPTkVfUkNWICAgICAgICBERUJVR1pPTkUoNSkKI2RlZmluZSBaT05FX1hNSVQJCURFQlVHWk9ORSg2KQojZGVmaW5lIFpPTkVfQVNTRVJUIAlERUJVR1pPTkUoNykKI2RlZmluZSBaT05FX0RFQlVHIAkJREVCVUdaT05FKDgpCiNkZWZpbmUgWk9ORV9PRU0gCQlERUJVR1pPTkUoOSkKI2RlZmluZSBaT05FX0hDRgkJREVCVUdaT05FKDEwKQojZGVmaW5lIFpPTkVfUE9SVElPCQlERUJVR1pPTkUoMTEpCiNkZWZpbmUgWk9ORV9MT0dUT0ZJTEUJREVCVUdaT05FKDE1KQoKI2Vsc2UgLy8gIShfV0lOMzJfV0NFKQoKI2RlZmluZSBPVVRQVVRERUJVR01TRyhkcHJpbnRmX2V4cCkJCQkJCSgodm9pZCkgKERiZ1ByaW50IGRwcmludGZfZXhwKSkKLy8gdGhlIGFzc2VydGRlYnVnbXNnIG1hY3JvIHdpbGwgcHJpbnQgZmlsZW5hbWUsIGxpbmUgZm9sbG93ZWQgYnkgYSBjYWxsZXItZGVmaW5lZCB0ZXh0LCB3aGVuIGNvbmQgPT0gMAojZGVmaW5lIEFTU0VSVERFQlVHTVNHKGNvbmQsIHByaW50KQkoKHZvaWQpKChjb25kKSA/IDA6IChEYmdQcmludCgiJXMgJXM6JWQgLSAiLCBwcmludCwgX19GSUxFX18sIF9fTElORV9fKSkpKQoKI2RlZmluZSBaT05FX0VSUk9SICAgICAgMQojZGVmaW5lIFpPTkVfV0FSTiAgICAgICAxCiNkZWZpbmUgWk9ORV9GVU5DVElPTiAgIDEKI2RlZmluZSBaT05FX0lOSVQgICAgICAgMQojZGVmaW5lIFpPTkVfSU5UUiAgICAgICAxCiNkZWZpbmUgWk9ORV9SQ1YgICAgICAgIDEKI2RlZmluZSBaT05FX1hNSVQJCTEKI2RlZmluZSBaT05FX0FTU0VSVCAJMQojZGVmaW5lIFpPTkVfREVCVUcgCQkxCiNkZWZpbmUgWk9ORV9PRU0gCQkxCiNkZWZpbmUgWk9ORV9IQ0YJCTEKI2RlZmluZSBaT05FX1BPUlRJTwkJMQojZGVmaW5lIFpPTkVfTE9HVE9GSUxFCTEKCiNlbmRpZiAvLyBfV0lOMzJfV0NFCiNpZm5kZWYgREJHQTJXCiNkZWZpbmUgREJHQTJXCiNlbmRpZgkvLyBEQkdBMlcKCiNlbHNlIC8vICEoZGVmaW5lZCBERUJVRyB8fCBkZWZpbmVkIF9ERUJVRyB8fCAoZGVmaW5lZCBEQkcgJiYgREJHICE9IDApICkKI2RlZmluZSBPVVRQVVRERUJVR01TRyhkcHJpbnRmX2V4cCkKI2RlZmluZSBBU1NFUlRERUJVR01TRyhjb25kLCBkcHJpbnRmX2V4cCkKI2VuZGlmIC8vIERFQlVHIC8gREJHCgojaWYgIWRlZmluZWQgSENGX01BWF9NU0dfQ0tJUF9QQURESU5HCiNkZWZpbmUgSENGX01BWF9NU0dfQ0tJUF9QQURESU5HIDAKI2VuZGlmIC8vIAkJSENGX01BWF9NU0dfQ0tJUF9QQURESU5HCgojaWYgIWRlZmluZWQJSENGX01BWF9NU0cKI2RlZmluZQkJCUhDRl9NQVhfTVNHCQkJCTE1MTQKI2VuZGlmIC8vIAkJSENGX01BWF9NU0cKCiNkZWZpbmUJCQlIQ0ZfTEVHQUNZCQkJMQkvLzs/bnYgamUgbW9ldCB3YXQKCiNlbmRpZiAvL1dWTEFOXzQxIC8gV1ZMQU5fNDggLyBXVkxBTl81MiAvIF9XSU4zMl9XQ0UKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgUCBBIEMgSyBFIFQgICBEIFIgSSBWIEUgUiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgRCBPIFMgICBPIEQgSSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmIGRlZmluZWQgV1ZMQU5fNDIgfHwgZGVmaW5lZCBXVkxBTl80MwoKI3ByYWdtYSB3YXJuaW5nICggZGlzYWJsZTogNDAwMSApCiNkZWZpbmUgRkFSICBfX2ZhcgkJCQkJCQkJCQkvL3NlZ21lbnRlZCAxNiBiaXRzIG1vZGUKI2RlZmluZSBCQVNFRCBfX2Jhc2VkKF9fc2VnbmFtZSgiX0NPREUiKSkJCQkJLy9mb3JjZSBhbGwgdGhlICJjb25zdCIgc3RydWN0dXJlcyBpbiB0aGUgQ09ERSBzZWdtZW50CgovLyNkZWZpbmUgSENGX0lPICAgICAwCQkJCQkJCQkJLy9ubyBETUEsIG5vIDMyIGJpdHMKCi8vfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IFRvIGVhc2UgdGVzdGluZyB0aGUgZGlmZmVyZW50IG9wdGlvbnMgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CgojZGVmaW5lCUhDRl9FWFQJCQkJCQlIQ0ZfRVhUX01CCiNkZWZpbmUgSENGX1BST1RfVElNRQkJCQk0OQkJCQkJLy80OSoxMDI0MCBtaWNyb3NlY29uZHMgSC9XIGZhaWx1cmUgcHJvdGVjdGlvbiB0aW1lcgoKLy9+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4gVG8gZWFzZSB0ZXN0aW5nIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgQ09ORklHVVJBVElPTiBNQU5BR0VNRU5UICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaWZkZWYgV1ZMQU5fNDIKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX0lECQkJQ09NUF9JRF9QQUNLRVQKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX1ZBUgkJCTEKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX01BSk9SX1ZFUgkJNgojZGVmaW5lCU1TRl9DT01QT05FTlRfTUlOT1JfVkVSCQkxMgojZW5kaWYgLy8gV1ZMQU5fNDIKCiNpZmRlZiBXVkxBTl80MwojZGVmaW5lCU1TRl9DT01QT05FTlRfSUQJCQlDT01QX0lEX09ESV8xNgojZGVmaW5lCU1TRl9DT01QT05FTlRfVkFSCQkJMQojZGVmaW5lCU1TRl9DT01QT05FTlRfTUFKT1JfVkVSCQk2CiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJCTEwCiNlbmRpZiAvLyBXVkxBTl80MwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBJTlBVVCAvIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaWZuZGVmIEhfMl9JTkMKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjb25pby5oPgojaWYgMSAvL3RlbW9yYXJ5IHVzZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiBoY2YuYwojaWZuZGVmIF9ERUJVRwojcHJhZ21hIGludHJpbnNpYyggX2lucCwgX2lucHcsIF9vdXRwLCBfb3V0cHcgKQojZW5kaWYgLy8gX0RFQlVHCgojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KQkJCSgoaGNmXzE2KV9pbnB3KCAoaGNmX2lvKShwb3J0KSApKQojZGVmaW5lIE9VVF9QT1JUX1dPUkQocG9ydCwgdmFsdWUpCSgodm9pZClfb3V0cHcoIChoY2ZfaW8pKHBvcnQpLCB2YWx1ZSApKQoKI2lmIDEJCS8vIEMgaW1wbGVtZW50YXRpb24gd2hpY2ggbGV0IHRoZSBwcm9jZXNzb3IgaGFuZGxlIHRoZSB3b3JkLWF0LWJ5dGUtYm91bmRhcnkgcHJvYmxlbQojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzhfMTYoIHBvcnQsIGFkZHIsIG4pCQl3aGlsZSAobi0tKSBcCgl7ICooaGNmXzE2IEZBUiopYWRkciA9IElOX1BPUlRfV09SRCggcG9ydCApOyAoKGhjZl84IEZBUiopYWRkcikrPTI7IH0KI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfOF8xNiggcG9ydCwgYWRkciwgbikJd2hpbGUgKG4tLSkgXAoJeyBPVVRfUE9SVF9XT1JEKCBwb3J0LCAqKGhjZl8xNiBGQVIqKWFkZHIgKSA7ICgoaGNmXzggRkFSKilhZGRyKSs9MjsgfQojZWxpZiAwCQkvLyBDIGltcGxlbWVudGF0aW9uIHdoaWNoIGhhbmRsZXMgdGhlIHdvcmQtYXQtYnl0ZS1ib3VuZGFyeSBwcm9ibGVtCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfOF8xNiggcG9ydCwgYWRkciwgbikJCXdoaWxlICggbi0tICkgXAoJeyBoY2ZfMTYgaSA9IElOX1BPUlRfV09SRChwb3J0KTsgKigoaGNmXzggRkFSKilhZGRyKSsrID0gKGhjZl84KWk7ICooKGhjZl84IEZBUiopYWRkcikrKyA9IChoY2ZfOCkoaT4+OCk7fQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKQl3aGlsZSAoIG4tLSApIFwKCXsgT1VUX1BPUlRfV09SRCggcG9ydCwgKigoaGNmXzggRkFSKilhZGRyKSB8ICooKChoY2ZfOCBGQVIqKWFkZHIpKzEpPDw4ICApOyAoaGNmXzggRkFSKilhZGRyKz0yOyB9CiNlbHNlCQkJCQkJCQkJCQkJLy8gQXNzZW1ibGVyIGltcGxlbWVudGF0aW9uCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfOF8xNiggcG9ydCwgYWRkciwgbikgX19hc20JXAp7CQkJCQkJCQkJCQkJCVwKCV9fYXNtIHB1c2ggZGkJCQkJCQkJCQlcCglfX2FzbSBwdXNoIGVzCQkJCQkJCQkJXAoJX19hc20gbW92IGN4LG4JCQkJCQkJCQlcCglfX2FzbSBsZXMgZGksYWRkcgkJCQkJCQkJXAoJX19hc20gbW92IGR4LHBvcnQJCQkJCQkJCVwKCV9fYXNtIHJlcCBpbnN3CQkJCQkJCQkJXAoJX19hc20gcG9wIGVzCQkJCQkJCQkJXAoJX19hc20gcG9wIGRpCQkJCQkJCQkJXAp9CgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKSBfX2FzbQlcCnsJCQkJCQkJCQkJCQkJXAoJX19hc20gcHVzaCBzaQkJCQkJCQkJCVwKCV9fYXNtIHB1c2ggZHMJCQkJCQkJCQlcCglfX2FzbSBtb3YgY3gsbgkJCQkJCQkJCVwKCV9fYXNtIGxkcyBzaSxhZGRyCQkJCQkJCQlcCglfX2FzbSBtb3YgZHgscG9ydAkJCQkJCQkJXAoJX19hc20gcmVwIG91dHN3CQkJCQkJCQkJXAoJX19hc20gcG9wIGRzCQkJCQkJCQkJXAoJX19hc20gcG9wIHNpCQkJCQkJCQkJXAp9CgojZW5kaWYgLy8gQXNtIG9yIEMgaW1wbGVtZW50YXRpb24KI2RlZmluZSBJTl9QT1JUX1NUUklOR18zMiggcG9ydCwgYWRkciwgbikJeyBpbnQgbjIgPSAyKm47IElOX1BPUlRfU1RSSU5HXzhfMTYocG9ydCwgYWRkciwgbjIpIH0KI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMzIoIHBvcnQsIGFkZHIsIG4pCXsgaW50IG4yID0gMipuOyBPVVRfUE9SVF9TVFJJTkdfOF8xNihwb3J0LCBhZGRyLCBuMikgfQojZW5kaWYgLy8gMCAvL3RlbW9yYXJ5IHVzZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiBoY2YuYwojZW5kaWYgLy8gSF8yX0lOQwoKI2VuZGlmCS8vIFdWTEFOXzQyIC8gV1ZMQU5fNDMKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogIEQgTyBTICBIIC0gSSAvIElJICBMIE8gQSBEIEUgUiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZiBkZWZpbmVkIEgwX0xEUiB8fCBkZWZpbmVkIEgxX0xEUiB8fCBkZWZpbmVkIEgyX0xEUiB8fCBkZWZpbmVkIEg1X0xEUgoKI2lmIGRlZmluZWQgSDBfTERSCQkJCS8vaW1wbGllcyBILUkKI2RlZmluZSBIQ0ZfRExWCQkwCQkJLy9ILUkgbGVnYWN5LCBtZWFuaW5nbGVzcyB1bmRlciBILUlJCiNkZWZpbmUgSENGX0RMTlYJMQkJCS8vSC1JIGxlZ2FjeSwgbWVhbmluZ2xlc3MgdW5kZXIgSC1JSQojZW5kaWYgLy8gSDBfTERSCgojaWYgZGVmaW5lZCBIMV9MRFIgCQkJCS8vaW1wbGllcyBILUkKI2RlZmluZSBIQ0ZfRExWCQkxCQkJLy9ILUkgbGVnYWN5LCBtZWFuaW5nbGVzcyB1bmRlciBILUlJCiNkZWZpbmUgSENGX0RMTlYJMAkJCS8vSC1JIGxlZ2FjeSwgbWVhbmluZ2xlc3MgdW5kZXIgSC1JSQojZW5kaWYgLy8gSDFfTERSIC8gSDJfTERSCgovLyNpZiBkZWZpbmVkIEgyX0xEUiA6IG5vdCBuZWVkZWQsIEgtSUkgZGVmYXVsdHMgYXJlIE8uSyBmb3IgSDJfTERSCgojaWZkZWYgSDVfTERSCiNkZWZpbmUgSENGX1RZUEUJCQkoSENGX1RZUEVfSElJNSB8IEhDRl9UWVBFX1dBUlAgKQovLzs/IHdoeSBkb2VzIG9ubHkgdGhpcyBzdWJzZXQgb2YgdGhlIEhfTERScyBuZWVkIEhDRl9UWVBFIHRvIGJlIGRlZmluZWQgaGVyZQojZW5kaWYKCiNkZWZpbmUgSENGX0FTU0VSVAkJCUhDRl9BU1NFUlRfTE5LX01TRl9SVE4JLy9zdXBwb3J0IGR5bmFtaWMgbGlua2luZyBvZiBtc2ZfYXNzZXJ0IHJvdXRpbmUKI2RlZmluZSBIQ0ZfRU5DQVAJCQkwCiNkZWZpbmUgSENGX0lOVF9PTgkJCTAKI2RlZmluZSBIQ0ZfVEFMTElFUwkJCTAKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRAkJCUNPTVBfSURfT0RJXzE2IC8vOz9CeSBsYWNrIG9mIGFueSBiZXR0ZXIKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX1ZBUgkJCTEKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX01BSk9SX1ZFUgkJMAojZGVmaW5lCU1TRl9DT01QT05FTlRfTUlOT1JfVkVSCQkwCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGNvbmlvLmg+CiNpZiBkZWZpbmVkIE5ERUJVRwojcHJhZ21hIGludHJpbnNpYyggX2lucCwgX2lucHcsIF9vdXRwLCBfb3V0cHcgKQojZW5kaWYgLy8gTkRFQlVHCgojaWYgMAkJCQkJCS8vdXNlIDAgdG8gcmVwbGFjZSBJL08gTWFjcm9zIHdpdGggbG9nZ2luZyBmYWNpbGl0eQojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KQkJCSgoaGNmXzE2KV9pbnB3KCAoaGNmX2lvKShwb3J0KSApKQojZGVmaW5lIE9VVF9QT1JUX1dPUkQocG9ydCwgdmFsdWUpCSgodm9pZClfb3V0cHcoIChoY2ZfaW8pKHBvcnQpLCB2YWx1ZSApKQojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KCBwb3J0LCBhZGRyLCBuKQlcCgkJd2hpbGUgKCBuLS0gKSB7ICooaGNmXzE2IEZBUiopYWRkciA9IElOX1BPUlRfV09SRCggcG9ydCApOyAoY2FzdClhZGRyICs9IDI7IH0KI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pCVwKCQl3aGlsZSAoIG4tLSApIHsgT1VUX1BPUlRfV09SRCggcG9ydCwgKihoY2ZfMTYgRkFSKilhZGRyICkgOyAoY2FzdClhZGRyICArPSAyOyB9CiNlbmRpZgkJCQkJCS8vdXNlIDAgdG8gcmVwbGFjZSBJL08gTWFjcm9zIHdpdGggbG9nZ2luZyBmYWNpbGl0eQoKI2VuZGlmCS8vIEgwX0xEUiAvIEgxX0xEUiAvIEgyX0xEUgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgSCBDIEYgIEQgRSBNIE8gIFAgUiBPIEcgUiBBIE0gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmIGRlZmluZWQgSENGX0RFTU8KCiNkZWZpbmUgSENGX0RMVgkJMQkJCQkvLzs/c2hvdWxkIGJlY29tZSB0aGUgZGVmYXVsdCAhZGVmYXVsdHMgdG8gMSBhbnl3YXkgZm9yIEgtSUkKLy8jZGVmaW5lIEhDRl9ETE5WCTAJCQkJLy9kZWZhdWx0cyB0byAwIGFueXdheSBmb3IgSC1JSQoKI2RlZmluZSBIQ0ZfQVNTRVJUCUhDRl9BU1NFUlRfTE5LX01TRl9SVE4JCQkvL3N1cHBvcnQgZHluYW1pYyBsaW5raW5nIG9mIG1zZl9hc3NlcnQgcm91dGluZQoKI2RlZmluZSBIQ0ZfRU5DQVAJCQkwCiNkZWZpbmUgSENGX0lOVF9PTgkJCTAKI2RlZmluZSBIQ0ZfVEFMTElFUwkJCSggSENGX1RBTExJRVNfTklDIHwgSENGX1RBTExJRVNfSENGICkKCi8vI2RlZmluZQlNU0ZfQ09NUE9ORU5UX0lECQlOTyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8Y29uaW8uaD4KI2lmIGRlZmluZWQgTkRFQlVHCiNwcmFnbWEgaW50cmluc2ljKCBfaW5wLCBfaW5wdywgX291dHAsIF9vdXRwdyApCiNlbmRpZiAvLyBOREVCVUcKCiNpZiAwCQkJCQkJLy91c2UgMCB0byByZXBsYWNlIEkvTyBNYWNyb3Mgd2l0aCBsb2dnaW5nIGZhY2lsaXR5CiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJKChoY2ZfMTYpX2lucHcoIChoY2ZfaW8pKHBvcnQpICkpCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkJKCh2b2lkKV9vdXRwdyggKGhjZl9pbykocG9ydCksIHZhbHVlICkpCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pCVwKCQl3aGlsZSAoIG4tLSApIHsgKihoY2ZfMTYgRkFSKilhZGRyID0gSU5fUE9SVF9XT1JEKCBwb3J0ICk7IChjYXN0KWFkZHIgKz0gMjsgfQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbikJXAoJCXdoaWxlICggbi0tICkgeyBPVVRfUE9SVF9XT1JEKCBwb3J0LCAqKGhjZl8xNiBGQVIqKWFkZHIgKSA7IChjYXN0KWFkZHIgICs9IDI7IH0KI2VuZGlmCQkJCQkJLy91c2UgMCB0byByZXBsYWNlIEkvTyBNYWNyb3Mgd2l0aCBsb2dnaW5nIGZhY2lsaXR5CgojZW5kaWYJLy8gSENGX0RFTU8KCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBNIEEgQyAgTyBTICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZiBkZWZpbmVkIFdWTEFOXzQ1CgojaW5jbHVkZSAiVmVyc2lvbi5oIgoKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX0lEICAgICAgICAgICAgQ09NUF9JRF9NQUNfT1MKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX1ZBUiAgICAgICAgICAgVkFSSUFOVAojZGVmaW5lIE1TRl9DT01QT05FTlRfTUFKT1JfVkVSICAgICBWRVJTSU9OX01BSk9SCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIgICAgIFZFUlNJT05fTUlOT1IKCiNkZWZpbmUgTUFDX09TICAgICAgICAgICAgICAgICAgICAgIDEKCiNkZWZpbmUgSENGX0JJR19FTkRJQU4gMSAgICAgICAJCS8vIHNlbGVjdHMgQmlnIEVuZGlhbiAoYS5rLmEuIE1vdG9yb2xhKSwgbW9zdCBzaWduaWZpY2FudCBieXRlIGZpcnN0CgojaWYgZGVmaW5lZCBERUJVRwojZGVmaW5lIEhDRl9BU1NFUlQJSENGX0FTU0VSVF9NQgkvLyBsb2dnaW5nIHZpYSBNYWlsYm94CiNlbmRpZiAvLyBERUJVRwoKI2lmZGVmICBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmIC8vIF9fY3BsdXNwbHVzCmV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpNYWNJT2FkZHI7CmV4dGVybiBoY2ZfMTYgSU5fUE9SVF9XT1JEKGhjZl8xNiBwb3J0KTsKZXh0ZXJuIHZvaWQgICBPVVRfUE9SVF9XT1JEKGhjZl8xNiBwb3J0LCBoY2ZfMTYgdmFsdWUpOwpleHRlcm4gdm9pZCAgIElOX1BPUlRfU1RSSU5HXzE2KGhjZl8xNiBwb3J0LCB2b2lkICphZGRyLCBoY2ZfMTYgbGVuKTsKZXh0ZXJuIHZvaWQgICBPVVRfUE9SVF9TVFJJTkdfMTYoaGNmXzE2IHBvcnQsIHZvaWQgKmFkZHIsIGhjZl8xNiBsZW4pOwoKI2RlZmluZSBTd2FwQnl0ZXModCkgICAgKCgodCkgPj4gOCkgKyAoKCh0KSAmIDB4ZmYpIDw8IDgpKQoKI2lmZGVmICBfX2NwbHVzcGx1cwp9CiNlbmRpZiAvLyBfX2NwbHVzcGx1cwoKI2VuZGlmICAvLyBXVkxBTl80NQoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBMIEkgTiBVIFggICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmZGVmIFdWTEFOXzQ5CiNpbmNsdWRlIDxhc20vaW8uaD4KLy8jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDx3bF92ZXJzaW9uLmg+CgovKiBUaGUgZm9sbG93aW5nIG1hY3JvIGVuc3VyZXMgdGhhdCBubyBzeW1ib2xzIGFyZSBleHBvcnRlZCwgbWluaW1pemluZyB0aGUgY2hhbmNlIG9mIGEgc3ltYm9sCiAgIGNvbGxpc2lvbiBpbiB0aGUga2VybmVsICovCi8vRVhQT1JUX05PX1NZTUJPTFM7ICAvLzs/dGhpcyBwbGFjZSBzZWVtcyBub3QgYXBwcm9wcmlhdGVseSB0byBtZQoKLy8jZGVmaW5lIEhDRl9TTEVFUCAoSENGX0NEUyB8IEhDRl9ERFMgKQojZGVmaW5lIEhDRl9TTEVFUCAoSENGX0NEUykKCi8vI2RlZmluZSBIQ0ZfVFlQRSAgICAoSENGX1RZUEVfSElJNXxIQ0ZfVFlQRV9TVEF8SENGX1RZUEVfQVApCiNpZmRlZiBIRVJNRVMyNQojaWZkZWYgV0FSUAojZGVmaW5lIEhDRl9UWVBFICAgICggSENGX1RZUEVfV0FSUCB8IEhDRl9UWVBFX0hJSTUgKQojZWxzZQojZGVmaW5lIEhDRl9UWVBFICAgIEhDRl9UWVBFX0hJSTUKI2VuZGlmIC8vIFdBUlAKI2Vsc2UKI2RlZmluZSBIQ0ZfVFlQRSAgICBIQ0ZfVFlQRV9OT05FCiNlbmRpZiAvLyBIRVJNRVMyNQoKI2lmZGVmIEVOQUJMRV9ETUEKI2RlZmluZSBIQ0ZfRE1BCQkxCiNlbmRpZiAvLyBFTkFCTEVfRE1BCgovKiBXZSBub3cgbmVlZCBhIHN3aXRjaCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBNYWlsYm94IGFuZCBvdGhlciBuZWNlc3NhcnkgZXh0ZW5zaW9ucyAqLwojZGVmaW5lIEhDRl9FWFQgKCBIQ0ZfRVhUX01CIHwgSENGX0VYVF9JTkZPX0xPRyB8IEhDRl9FWFRfSU5UX1RJQ0sgKS8vZ2V0IGRlZXBzbGVlcCBleGVyY2lzZSBnb2luZwoKLyogOz8gVGhlIExpbnV4IE1TRiBzdGlsbCB1c2VzIHRoZXNlIGRlZmluaXRpb25zOyBkZWZpbmUgaXQgaGVyZSB1bnRpbCBpdCdzIHJlbW92ZWQgKi8KI2lmbmRlZiBIQ0ZfVFlQRV9ISUkKI2RlZmluZSBIQ0ZfVFlQRV9ISUkgMHgwMDA0CiNlbmRpZgoKI2lmbmRlZiBIQ0ZfVFlQRV9BUAojZGVmaW5lIEhDRl9UWVBFX0FQICAweDAwMTAKI2VuZGlmCgojaWZuZGVmIEhDRl9UWVBFX1NUQQojZGVmaW5lIEhDRl9UWVBFX1NUQSAweDAwMjAKI2VuZGlmICAvLyBIQ0ZfVFlQRV9TVEEKCi8qIEd1YXJhbnRlZXMgd29yZCBhbGlnbm1lbnQgKi8KI2RlZmluZSBIQ0ZfQUxJR04JCTIKCi8qIEVuZGlhbiBtYWNyb3MgQ05WX0lOVF9UT19MSVRUTEUoKSBhbmQgQ05WX0xJVFRMRV9UT19JTlQoKSB3ZXJlIHJlbmFtZWQgdG8KICAgQ05WX1NIT1JUX1RPX0xJVFRMRSgpIGFuZCBDTlZfTElUVExFX1RPX1NIT1JUKCkgKi8KI2lmbmRlZiBDTlZfSU5UX1RPX0xJVFRMRQojZGVmaW5lIENOVl9JTlRfVE9fTElUVExFICAgQ05WX1NIT1JUX1RPX0xJVFRMRQojZW5kaWYKCiNpZm5kZWYgQ05WX0xJVFRMRV9UT19JTlQKI2RlZmluZSBDTlZfTElUVExFX1RPX0lOVCAgIENOVl9MSVRUTEVfVE9fU0hPUlQKI2VuZGlmCgojZGVmaW5lCUhDRl9FUlJfQlVTWQkJCTB4MDYKCi8qIFVJTCBkZWZpbmVzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBIQ0YgKi8KI2RlZmluZSBVSUxfU1VDQ0VTUwkJCQkJSENGX1NVQ0NFU1MKI2RlZmluZSBVSUxfRVJSX1RJTUVfT1VUCQkJSENGX0VSUl9USU1FX09VVAojZGVmaW5lIFVJTF9FUlJfTk9fTklDCQkJCUhDRl9FUlJfTk9fTklDCiNkZWZpbmUgVUlMX0VSUl9MRU4JCQkJCUhDRl9FUlJfTEVOCiNkZWZpbmUgVUlMX0VSUl9NSU4JCQkJCUhDRl9FUlJfTUFYCS8qZW5kIG9mIEhDRiBlcnJvcnMgd2hpY2ggYXJlIHBhc3NlZCB0aHJvdWdoIHRvIFVJTAoJCQkJCQkJCQkJCQkgICoqKiAqKiAqKiogKioqKioqICoqKioqICoqKiAqKioqKiogKioqKioqKiAqKiAqKiogICovCiNkZWZpbmUgVUlMX0VSUl9JTl9VU0UJCQkJMHg0NAojZGVmaW5lIFVJTF9FUlJfV1JPTkdfSUZCCQkJMHg0NgojZGVmaW5lIFVJTF9FUlJfTUFYCQkJCQkweDdGCQkvKnVwcGVyIGJvdW5kYXJ5IG9mIFVJTCBlcnJvcnMgd2l0aG91dCBIQ0YtcGVuZGFudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqICoqKioqKioqICoqICoqKiAqKioqKiogKioqKioqKiAqKiogKioqKioqKiAgKi8KI2RlZmluZSBVSUxfRVJSX0JVU1kJCQkgICAgSENGX0VSUl9CVVNZCiNkZWZpbmUgVUlMX0VSUl9ESUFHXzEJCQkgICAgSENGX0VSUl9ESUFHXzEKI2RlZmluZSBVSUxfRkFJTFVSRQkJCQkJMHhGRgkvKiAyMDAxMDcwNSBudiB0aGlzIHJlbGljayBzaG91bGQgYmUgZXJpZGljYXRlZCAqLwojZGVmaW5lIFVJTF9FUlJfUElGX0NPTkZMSUNUCQkweDQwCS8vb2Jzb2xldGUKI2RlZmluZSBVSUxfRVJSX0lOQ09NUF9EUlYJCQkweDQxCS8vb2Jzb2xldGUKI2RlZmluZSBVSUxfRVJSX0RPU19DQUxMCQkJMHg0MwkvL29ic29sZXRlCiNkZWZpbmUgVUlMX0VSUl9OT19EUlYJCQkJMHg0MgkvL29ic29sZXRlCiNkZWZpbmUgVUlMX0VSUl9OU1RMCQkJCTB4NDUJLy9vYnNvbGV0ZQoKCgojaWYgMCAgLy87PyAjaWZkZWYgZ2V0IHRoaXMgZ29pbmcgTEFURVIgSEVSTUVTMjUKI2RlZmluZSBIQ0ZfSU8gICAgICAgICAgICAgIEhDRl9JT18zMkJJVFMKI2RlZmluZSBIQ0ZfRE1BICAgICAgICAgICAgIDEKI2RlZmluZSBIQ0ZfREVTQ19TVFJDVF9FWFQgIDQKCi8qIFN3aXRjaCBmb3IgQnVzTWFzdGVyIERNQSBzdXBwb3J0LiBOb3RlIHRoYXQgdGhlIGFib3ZlIGRlZmluZSBpbmNsdWRlcyB0aGUgRE1BLXNwZWNpZmljIEhDRgogICBjb2RlIGluIHRoZSBidWlsZC4gVGhpcyBkZWZpbmUgc2V0cyB0aGUgTVNGIHRvIHVzZSBETUE7IGlmIEVOQUJMRV9ETUEgaXMgbm90IGRlZmluZWQsIHRoZW4KICAgcG9ydCBJL08gd2lsbCBiZSB1c2VkIGluIHRoZSBidWlsZCAqLwojaWZuZGVmIEJVU19QQ01DSUEKI2RlZmluZSBFTkFCTEVfRE1BCiNlbmRpZiAgLy8gVVNFX1BDTUNJQQoKI2VuZGlmICAvLyBIRVJNRVMyNQoKCi8qIE92ZXJydWxlIHN0YW5kYXJkIFdhdmVMQU4gUGFja2V0IFNpemUgd2hlbiBpbiBETUEgbW9kZSAqLwojaWZkZWYgRU5BQkxFX0RNQQojZGVmaW5lIEhDRl9NQVhfUEFDS0VUX1NJWkUgMjMwNAojZWxzZQojZGVmaW5lIEhDRl9NQVhfUEFDS0VUX1NJWkUgMTUxNAojZW5kaWYgIC8vIEVOQUJMRV9ETUEKCi8qIFRoZSBmb2xsb3dpbmcgc2V0cyB0aGUgY29tcG9uZW50IElELCBhcyB3ZWxsIGFzIHRoZSB2ZXJzaW9uaW5nLiBTZWUgYWxzbyB3bF92ZXJzaW9uLmggKi8KI2RlZmluZQlNU0ZfQ09NUE9ORU5UX0lECUNPTVBfSURfTElOVVgKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9WQVIJCQlEUlZfVkFSSUFOVAojZGVmaW5lIE1TRl9DT01QT05FTlRfTUFKT1JfVkVSICAgICBEUlZfTUFKT1JfVkVSU0lPTgojZGVmaW5lIE1TRl9DT01QT05FTlRfTUlOT1JfVkVSICAgICBEUlZfTUlOT1JfVkVSU0lPTgoKLyogRGVmaW5lIHRoZSBmb2xsb3dpbmcgdG8gdHVybiBvbiBhc3NlcnRpb25zIGluIHRoZSBIQ0YgKi8KLy8jZGVmaW5lIEhDRl9BU1NFUlQgIDB4ODAwMAojZGVmaW5lIEhDRl9BU1NFUlQJCQlIQ0ZfQVNTRVJUX0xOS19NU0ZfUlROCS8vIHN0YXRpY2FsbHkgYmluZGluZyBvZiBtc2ZfYXNzZXJ0IHJvdXRpbmUKCiNpZmRlZiBVU0VfQklHX0VORElBTgojZGVmaW5lIEhDRl9CSUdfRU5ESUFOICAxCiNlbHNlCiNkZWZpbmUgSENGX0JJR19FTkRJQU4gIDAKI2VuZGlmICAvKiBVU0VfQklHX0VORElBTiAqLwoKLyogRGVmaW5lIHRoZSBmb2xsb3dpbmcgaWYgeW91ciBzeXN0ZW0gdXNlcyBtZW1vcnktbWFwcGVkIElPICovCi8vI2RlZmluZSBIQ0ZfTUVNX0lPCgovKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgdGhlIHN0YW5kYXJkIG1hY3JvcyByZXF1aXJlZCBieSB0aGUgSENGIHRvIG1vdmUgZGF0YSB0by9mcm9tIHRoZSBjYXJkICovCiNkZWZpbmUgSU5fUE9SVF9CWVRFKHBvcnQpCQkJKChoY2ZfOClpbmIoIChoY2ZfaW8pKHBvcnQpICkpCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJKChoY2ZfMTYpaW53KCAoaGNmX2lvKShwb3J0KSApKQojZGVmaW5lIE9VVF9QT1JUX0JZVEUocG9ydCwgdmFsdWUpCShvdXRiKCAoaGNmXzgpICh2YWx1ZSksIChoY2ZfaW8pKHBvcnQpICkpCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkJKG91dHcoKGhjZl8xNikgKHZhbHVlKSwgKGhjZl9pbykocG9ydCkgKSkKCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYocG9ydCwgZHN0LCBuKSAgICBpbnN3KChoY2ZfaW8pKHBvcnQpLCBkc3QsIG4pCiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KHBvcnQsIHNyYywgbikgICBvdXRzdygoaGNmX2lvKShwb3J0KSwgc3JjLCBuKQovLyNkZWZpbmUgSU5fUE9SVF9TVFJJTkdMKHBvcnQsIGRzdCwgbikgICBpbnNsKChwb3J0KSwgKGRzdCksIChuKSkKLy8jZGVmaW5lIE9VVF9QT1JUX1NUUklOR0wocG9ydCwgc3JjLCBuKSAgb3V0c2woKHBvcnQpLCAoc3JjKSwgKG4pKQojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzMyKHBvcnQsIGRzdCwgbikgICBpbnNsKChwb3J0KSwgKGRzdCksIChuKSkKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMzIocG9ydCwgc3JjLCBuKSAgb3V0c2woKHBvcnQpLCAoc3JjKSwgKG4pKQojZGVmaW5lIElOX1BPUlRfSENGMzIocG9ydCkgICAgICAgICAgaW5sKCAoaGNmX2lvKShwb3J0KSApCiNkZWZpbmUgT1VUX1BPUlRfSENGMzIocG9ydCwgdmFsdWUpICBvdXRsKChoY2ZfMzIpKHZhbHVlKSwgKGhjZl9pbykocG9ydCkgKQoKI2RlZmluZSBJTl9QT1JUX0RXT1JEKHBvcnQpICAgICAgICAgIElOX1BPUlRfSENGMzIocG9ydCkKI2RlZmluZSBPVVRfUE9SVF9EV09SRChwb3J0LCB2YWx1ZSkgIE9VVF9QT1JUX0hDRjMyKHBvcnQsIHZhbHVlKQoKI2RlZmluZSAgSU5fUE9SVF9TVFJJTkdfOF8xNihwb3J0LCBhZGRyLCBsZW4pCUlOX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGFkZHIsIGxlbikKI2RlZmluZSAgT1VUX1BPUlRfU1RSSU5HXzhfMTYocG9ydCwgYWRkciwgbGVuKQlPVVRfUE9SVF9TVFJJTkdfMTYocG9ydCwgYWRkciwgbGVuKQoKCiNpZm5kZWYgT1VUUFVUREVCVUdNU0cKI2RlZmluZSBPVVRQVVRERUJVR01TRyhkcHJpbnRmX2V4cCkKI2VuZGlmCgoKI2lmbmRlZiBBU1NFUlRERUJVR01TRwojZGVmaW5lIEFTU0VSVERFQlVHTVNHKGNvbmQsIGRwcmludGZfZXhwKQojZW5kaWYKCiNpZm5kZWYgQ0ZHX1NDQU5fQ0hBTk5FTFNfMkdIWgojZGVmaW5lIENGR19TQ0FOX0NIQU5ORUxTXzJHSFogMHhGQ0MyCiNlbmRpZiAvKiBDRkdfU0NBTl9DSEFOTkVMU18yR0haICovCgojZGVmaW5lIEhDRl9NQVhfTVNHIDE2MDAgLy9nZXQgZ29pbmcgOz8KI2VuZGlmCS8vIFdWTEFOXzQ5CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIFEgTiBYICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWYgZGVmaW5lZCAgX19RTlhfXyB8fCBkZWZpbmVkIFdWTEFOXzUwCgojZGVmaW5lIE1TRl9DT01QT05FTlRfSUQJCTAgICAvL0FsdGhvdWdoIHRoZXJlIGlzIG5vIERVSSBzdXBwb3J0LCB3ZSBuZWVkIHRoaXMgdG8gZ2V0IC4uLgojZGVmaW5lIE1TRl9DT01QT05FTlRfVkFSCQkwCS8vLi4uY29tcGF0aWJpbHR5IGNoZWNrIHRvIGZ1bmN0aW9uCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9NQUpPUl9WRVIJMAkvLy4uLjs/dGhpcyBpcyB3b3J0aCBsb29raW5nIGludG8gdG8gbWFrZSB0aGlzIGEgbW9yZQojZGVmaW5lIE1TRl9DT01QT05FTlRfTUlOT1JfVkVSCTAJLy8uLi4iZGVmaW5lZCIgSS9GIHNvIE9FTWVycyBjYW4gZmlndXJlIG91dCB3aGF0IHRvIGRvCgojaW5jbHVkZSA8Y29uaW8uaD4KCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJKChoY2ZfMTYpaW5wdyggKGhjZl9pbykocG9ydCkgKSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKQkob3V0cHcoIChoY2ZfaW8pKHBvcnQpLCAoaGNmXzE2KSAodmFsdWUpICkpCi8qCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pCVwKCQl3aGlsZSAoIG4tLSApIHsgKihoY2ZfMTYqKWFkZHIgPSBJTl9QT1JUX1dPUkQoIHBvcnQgKTsgKGNhc3QpYWRkciArPSAyOyB9CiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KCBwb3J0LCBhZGRyLCBuKQlcCgkJd2hpbGUgKCBuLS0gKSB7IE9VVF9QT1JUX1dPUkQoIHBvcnQsICooaGNmXzE2KilhZGRyICkgOyAoY2FzdClhZGRyICArPSAyOyB9CiovCgojZW5kaWYJLy8gUU5YIC8gV1ZMQU5fNTAKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgQiBFIE8gUyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZiBkZWZpbmVkICBfX0JFT1NfXwoKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX0lECQkwICAgLy9BbHRob3VnaCB0aGVyZSBpcyBubyBEVUkgc3VwcG9ydCwgd2UgbmVlZCB0aGlzIHRvIGdldCAuLi4KI2RlZmluZSBNU0ZfQ09NUE9ORU5UX1ZBUgkJMAkvLy4uLmNvbXBhdGliaWx0eSBjaGVjayB0byBmdW5jdGlvbgojZGVmaW5lIE1TRl9DT01QT05FTlRfTUFKT1JfVkVSCTAJLy8uLi47P3RoaXMgaXMgd29ydGggbG9va2luZyBpbnRvIHRvIG1ha2UgdGhpcyBhIG1vcmUKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX01JTk9SX1ZFUgkwCS8vLi4uImRlZmluZWQiIEkvRiBzbyBPRU1lcnMgY2FuIGZpZ3VyZSBvdXQgd2hhdCB0byBkbwoKI2luY2x1ZGUgPGRyaXZlcnMvRHJpdmVycy5oPgojaW5jbHVkZSA8ZHJpdmVycy9LZXJuZWxFeHBvcnQuaD4KCnVpbnQ4IHJlYWRfaW9fOCAoaW50KTsKdm9pZCB3cml0ZV9pb184IChpbnQsIHVpbnQ4KTsKdWludDE2IHJlYWRfaW9fMTYgKGludCk7CnZvaWQgd3JpdGVfaW9fMTYgKGludCwgdWludDE2KTsKCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJKChoY2ZfMTYpcmVhZF9pb18xNiggKGhjZl9pbykocG9ydCkgKSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKQkod3JpdGVfaW9fMTYoIChoY2ZfaW8pKHBvcnQpLCAoaGNmXzE2KSAodmFsdWUpICkpCi8qCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pCVwKCQl3aGlsZSAoIG4tLSApIHsgKihoY2ZfMTYqKWFkZHIgPSBJTl9QT1JUX1dPUkQoIHBvcnQgKTsgKGNhc3QpYWRkciArPSAyOyB9CiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KCBwb3J0LCBhZGRyLCBuKQlcCgkJd2hpbGUgKCBuLS0gKSB7IE9VVF9QT1JUX1dPUkQoIHBvcnQsICooaGNmXzE2KilhZGRyICkgOyAoY2FzdClhZGRyICArPSAyOyB9CiovCiNlbmRpZgkvLyBfX0JFT1NfXwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIFUgUyBCICAgRCBPIE4gRyBMIEUgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmIGRlZmluZWQgVVNCCiNpbmNsdWRlICJncGlmLmgiCgojZGVmaW5lCU1TRl9DT01QT05FTlRfTUFKT1JfVkVSCQkwCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJCTEKCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJKEhlcm1lc19JT19SZWFkKCAoaGNmXzgpKHBvcnQpKSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKQkoSGVybWVzX0lPX1dyaXRlKCAoaGNmXzgpcG9ydCwgLyooaGNmXzE2KSovKHZhbHVlKSApICkKLyogISEhISBOT1RFIFVTQiBzdXBwb3J0cyBvbmx5IDE2LWJpdHMgSS9PIGFuZCBubyA4LWJpdHMgSS9PCiAqIGFzIGEgY29uc2VxdWVuY2UgdGhlIElOXy9PVVRfUE9SVF9TVFJJTkdfMTYgbWFjcm9zIHVzZSBoY2ZfMTYqIHJhdGhlciB0aGFuIGhjZl84IHBvaW50ZXJzCiAqIHRvIGdldCBtb3JlIG9wdGltYWwgY29kZQogKiB0aGVyZWZvcmUgdGhlIHBvaW50ZXJzIGFyZSBpbmNyZW1lbnRlZCBieSAxICh3aGljaCBtZWFucyB0d28gImJ5dGVzIikgcmF0aGVyIHRoYW4gYnkgMgogKi8KLy8jZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KCBwb3J0LCBhZGRyLCBuKQl3aGlsZSAoIG4tLSApIHsgKigoaGNmXzE2KilhZGRyKSsrID0gSU5fUE9SVF9XT1JEKCBwb3J0ICk7IH0KLy8jZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbikJd2hpbGUgKCBuLS0gKSB7IE9VVF9QT1JUX1dPUkQoIHBvcnQsICooKGhjZl8xNiopYWRkcikrKyApOyB9CiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGRzdCwgbikJd2hpbGUgKCBuLS0gKSB7ICpkc3QrKyA9IElOX1BPUlRfV09SRCggcG9ydCApOyB9CiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KCBwb3J0LCBzcmMsIG4pCXdoaWxlICggbi0tICkgeyBPVVRfUE9SVF9XT1JEKCBwb3J0LCAqc3JjKysgKTsgfQoKLy8jZGVmaW5lIEhDRl9UWVBFCSggSENGX1RZUEVfQVAgfCBIQ0ZfVFlQRV9XUEEgKQojZGVmaW5lIEhDRl9UWVBFCUhDRl9UWVBFX1dQQQoKI2VuZGlmCS8vIFVTQgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIEZyZWVCU0QgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWYgZGVmaW5lZCBfX0ZSRUVfQlNEX18KCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRAkJCUNPTVBfSURfRnJlZUJTRAojZGVmaW5lCU1TRl9DT01QT05FTlRfVkFSCQkJMQojZGVmaW5lCU1TRl9DT01QT05FTlRfTUFKT1JfVkVSCQkxCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJCTAKCiNkZWZpbmUgSENGX0lPIAkJCQkJCUhDRl9JT19NRU0JCS8vIG92ZXJydWxlIHN0YW5kYXJkIFBvcnQgSS9PIHdpdGggTWVtb3J5IG1hcHBlZCBJL08KCiNpbmNsdWRlIDxtYWNoaW5lL2NwdWZ1bmMuaD4KCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJKChoY2ZfMTYpaW53KCAoaGNmX2lvKShwb3J0KSApKQojZGVmaW5lIE9VVF9QT1JUX1dPUkQocG9ydCwgdmFsdWUpCShvdXR3KChoY2ZfaW8pKHBvcnQpLCAoaGNmXzE2KSh2YWx1ZSkpKQoKLyoKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbikJXAoJCXdoaWxlICggbi0tICkgeyAqKGhjZl8xNiopYWRkciA9IElOX1BPUlRfV09SRCggcG9ydCApOyAoY2FzdClhZGRyICs9IDI7IH0KI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pCVwKCQl3aGlsZSAoIG4tLSApIHsgT1VUX1BPUlRfV09SRCggcG9ydCwgKihoY2ZfMTYqKWFkZHIgKSA7IChjYXN0KWFkZHIgICs9IDI7IH0KKi8KI2VuZGlmCS8vIF9fRlJFRV9CU0RfXwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBXIEEgViBFIFAgTyBJIE4gVCAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmIGRlZmluZWQgV1ZMQU5fODEJLyogQk9STEFOREMgKi8KCiNkZWZpbmUgRVhURVJOX0MgIGV4dGVybgkvLyBuZWVkZWQgYmVjYXVzZSBESEYgdXNlcyB0aGlzIGluc3RlYWQgb2YgJ2V4dGVybicKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRAlDT01QX0lEX0FQMQojZGVmaW5lCU1TRl9DT01QT05FTlRfVkFSCQkJMQojZGVmaW5lCU1TRl9DT01QT05FTlRfTUFKT1JfVkVSCQk0CiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJCTAKCiNkZWZpbmUgSENGX1BST1RfVElNRQkJCQk0OQkvLzQ5KjEwMjQwIG1pY3Jvc2Vjb25kcyBIL1cgZmFpbHVyZSBwcm90ZWN0aW9uIHRpbWVyCgovLyNkZWZpbmUgSENGX0FTU0VSVAlIQ0ZfQVNTRVJUX01CCS8vIGxvZ2dpbmcgdmlhIE1haWxib3gJLyogZGVidWcgYnVpbGQgb25seSAqLwoKI2lmICFkZWZpbmVkIEZBUgojZGVmaW5lIEZBUiAgZmFyCQkJCQkJLy8gc2VnbWVudGVkIDE2IGJpdHMgbW9kZQojZW5kaWYgLy8gRkFSCgojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KQkJCQkJKGlucG9ydCggKGhjZl9pbykocG9ydCkgKSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKQkJCShvdXRwb3J0KCAoaGNmX2lvKShwb3J0KSwgdmFsdWUgKSkKCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYocG9ydCwgYWRkciwgbGVuKQlcCglhc20geyBwdXNoIGRpOyBwdXNoIGVzOyBtb3YgY3gsbGVuOyBsZXMgZGksYWRkcjsgbW92IGR4LHBvcnQ7IHJlcCBpbnN3OyBwb3AgZXM7IHBvcCBkaSB9CgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNihwb3J0LCBhZGRyLCBsZW4pCVwKCWFzbSB7IHB1c2ggc2k7IHB1c2ggZHM7IG1vdiBjeCxsZW47IGxkcyBzaSxhZGRyOyBtb3YgZHgscG9ydDsgcmVwIG91dHN3OyBwb3AgZHM7IHBvcCBzaSB9CgojZW5kaWYgLy8gV1ZMQU5fODEKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIFcgQSBWIEUgTCBBIFUgTiBDIEggICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmIGRlZmluZWQgV1ZMQVVOQ0gKCiNpbmNsdWRlICJEcml2ZXJYLmgiCmV4dGVybiBIV0RFVklDRSoJZ19wRGV2aWNlOwoKLy8jZGVmaW5lCU1TRl9DT01QT05FTlRfSUQJCQkwICAvLzs/IHRvIGdldCBhcm91bmQgYnJvd3NlciBwcm9ibGVtCgojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KQlId0lucHcoIGdfcERldmljZSwgcG9ydCApCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkJSHdPdXRwdyggZ19wRGV2aWNlLCBwb3J0LCB2YWx1ZSApCgoKLy8gQyBpbXBsZW1lbnRhdGlvbiB3aGljaCBsZXQgdGhlIHByb2Nlc3NvciBoYW5kbGUgdGhlIHdvcmQtYXQtYnl0ZS1ib3VuZGFyeSBwcm9ibGVtCi8qCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pCVwKCQl3aGlsZSAoIG4tLSApIHsgKihoY2ZfMTYgRkFSKilhZGRyID0gSU5fUE9SVF9XT1JEKCBwb3J0ICk7IChjYXN0KWFkZHIgKz0gMjsgfQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbikJXAoJCXdoaWxlICggbi0tICkgeyBPVVRfUE9SVF9XT1JEKCBwb3J0LCAqKGhjZl8xNiBGQVIqKWFkZHIgKSA7IChjYXN0KWFkZHIgICs9IDI7IH0KKi8KI2VuZGlmIC8vIFdWTEFVTkNICgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBXIEMgSSBUIFMgVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWYgZGVmaW5lZCBXQ0lUU1QKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX0lECQkwICAgLy9BbHRob3VnaCB0aGVyZSBpcyBubyBEVUkgc3VwcG9ydCwgd2UgbmVlZCB0aGlzIHRvIGdldCAuLi4KI2RlZmluZSBNU0ZfQ09NUE9ORU5UX1ZBUgkJMAkvLy4uLmNvbXBhdGliaWx0eSBjaGVjayB0byBmdW5jdGlvbgojZGVmaW5lIE1TRl9DT01QT05FTlRfTUFKT1JfVkVSCTAJLy8uLi47P3RoaXMgaXMgd29ydGggbG9va2luZyBpbnRvIHRvIG1ha2UgdGhpcyBhIG1vcmUKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX01JTk9SX1ZFUgkwCS8vLi4uImRlZmluZWQiIEkvRiBzbyBPRU1lcnMgY2FuIGZpZ3VyZSBvdXQgd2hhdCB0byBkbwoKLy8jZGVmaW5lIEhDRl9FTkNBUAkJCQlIQ0ZfRU5DX05PTkUJLy90byBnZXQgZ29pbmcKLy9+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4gVG8gZWFzZSB0ZXN0aW5nIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KI2RlZmluZSBIQ0ZfVFlQRSAoSENGX1RZUEVfV1BBIHwgSENGX1RZUEVfUFJFTE9BREVEKSAvLyBIZXJtZXMtSSBmb3IgSENGNiwgSUkgZm9yIEhDRjcKI2RlZmluZSAJCUhDRl9ETUEJCQkJMQovLyNkZWZpbmUgTExCCS8vISEhIU1JQyBEZWJ1ZyBPbmx5CiNpZiBkZWZpbmVkIExMQiAmJiAhKChIQ0ZfVFlQRSkgJiBIQ0ZfVFlQRV9XUEEpCmVycjogbm8gTExCIHVubGVzcyBTU047CiNlbmRpZiAvLyBMTEIgLyBIQ0ZfVFlQRV9XUEEKLy8jZGVmaW5lIEhDRl9BTElHTiAyCiNkZWZpbmUgSENGX0RMVgkJMQkJCS8vanVzdCB0byBjaGFuZ2UgbWVtb3J5IGxheW91dCA/Pz8/Oz8KLy9+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4gVG8gZWFzZSB0ZXN0aW5nIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KCiNkZWZpbmUgSENGX0FTU0VSVAlIQ0ZfQVNTRVJUX1NXX1NVUAkvLyBsb2dnaW5nIHZpYSBIZXJtZXMgc3VwcG9ydCByZWdpc3RlcnIKLy8jZGVmaW5lIEhDRl9BU1NFUlQJCUhDRl9BU1NFUlRfTUIJCS8vIGxvZ2dpbmcgdmlhIE1haWxib3gKCiNpZiBkZWZpbmVkIF9fR05VQ19fCiNpbmNsdWRlICJzdGRpby5oIgovLyNpbmNsdWRlICJ1bmlzdGQuaCIJLy9pb3Blcm0gICBsaWJjNQojaW5jbHVkZSAic3lzL2lvLmgiCS8vaW9wZXJtICAgZ2xpYmMKI2RlZmluZSBleHRlcm4JCS8vc2VlIElPIFBvcnQgUHJvZ3JhbW1pbmcgbWluaS1IT1dUTwovLyNpbmNsdWRlICJhc20vaW8uaCIJLy8KI2RlZmluZSBJTl9QT1JUX1dPUkQocG9ydCkJCQlpbncoIChoY2ZfaW8pKHBvcnQpICkKI2RlZmluZSBJTl9QT1JUX0RXT1JEKHBvcnQpCQkJaW5sKCAoaGNmX2lvKShwb3J0KSApCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkJb3V0dyggKGhjZl9pbykocG9ydCksIChoY2ZfMTYpKHZhbHVlKSApCiNkZWZpbmUgT1VUX1BPUlRfRFdPUkQocG9ydCwgdmFsdWUpCW91dGwoIChoY2ZfaW8pKHBvcnQpLCAoaGNmXzE2KSh2YWx1ZSkgKQojZWxzZQojcHJhZ21hIHdhcm5pbmcgKCBkaXNhYmxlOiA0MDAxICkKI2RlZmluZSBGQVIgIF9fZmFyCQkJCQkvLyBzZWdtZW50ZWQgMTYgYml0cyBtb2RlCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGNvbmlvLmg+CiNpZm5kZWYgX0RFQlVHCiNwcmFnbWEgaW50cmluc2ljKCBfaW5wLCBfaW5wdywgX291dHAsIF9vdXRwdyApCiNlbmRpZiAvLyBfREVCVUcKCiNpZmRlZiBMT0cKZXh0ZXJuIEZJTEUqIHV0bV9sb2dmaWxlOwpoY2ZfMTYJaXB3KCBoY2ZfMTYgcG9ydCApOwpoY2ZfOAlpcGIoIGhjZl8xNiBwb3J0ICk7CnZvaWQJb3B3KCBoY2ZfMTYgcG9ydCwgaGNmXzE2IHZhbHVlICk7CnZvaWQJb3BiKCBoY2ZfMTYgcG9ydCwgaGNmXzggdmFsdWUgKTsKCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJaXB3KCAoaGNmX2lvKShwb3J0KSApCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkJb3B3KCAoaGNmX2lvKShwb3J0KSwgKGhjZl8xNikodmFsdWUpICkKI2Vsc2UgLy8gTE9HCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpCQkJKChoY2ZfMTYpX2lucHcoIChoY2ZfaW8pKHBvcnQpICkpCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkJKCh2b2lkKV9vdXRwdyggKGhjZl9pbykocG9ydCksIHZhbHVlICkpCiNlbmRpZiAvLyBMT0cKCiNpZiAxIC8vQVNNIGV4YW1wbGUKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbGVuKSBfX2FzbQkJXAp7CQkJCQkJCQkJCQkJCQlcCglfX2FzbSBwdXNoIGRpCQkJCQkJCQkJCVwKCV9fYXNtIHB1c2ggZXMJCQkJCQkJCQkJXAoJX19hc20gbW92IGN4LGxlbgkJCQkJCQkJCVwKCV9fYXNtIGxlcyBkaSxhZGRyCQkJCQkJCQkJXAoJX19hc20gbW92IGR4LHBvcnQJCQkJCQkJCQlcCglfX2FzbSByZXAgaW5zdwkJCQkJCQkJCQlcCglfX2FzbSBwb3AgZXMJCQkJCQkJCQkJXAoJX19hc20gcG9wIGRpCQkJCQkJCQkJCVwKfQoKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIGxlbikgX19hc20JCVwKewkJCQkJCQkJCQkJCQkJXAoJX19hc20gcHVzaCBzaQkJCQkJCQkJCQlcCglfX2FzbSBwdXNoIGRzCQkJCQkJCQkJCVwKCV9fYXNtIG1vdiBjeCxsZW4JCQkJCQkJCQlcCglfX2FzbSBsZHMgc2ksYWRkcgkJCQkJCQkJCVwKCV9fYXNtIG1vdiBkeCxwb3J0CQkJCQkJCQkJXAoJX19hc20gcmVwIG91dHN3CQkJCQkJCQkJCVwKCV9fYXNtIHBvcCBkcwkJCQkJCQkJCQlcCglfX2FzbSBwb3Agc2kJCQkJCQkJCQkJXAp9CgojZW5kaWYJLy8gYXNtIGV4YW1wbGUKCiNlbmRpZiAvLyBfX0dDQ19fCgojaWYgISBkZWZpbmVkIElOX1BPUlRfU1RSSU5HXzE2CiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pICB3aGlsZSAobi0tKSBcCgl7ICooaGNmXzE2IEZBUiopYWRkciA9IElOX1BPUlRfV09SRCggcG9ydCApOyAoKGhjZl8xNiBGQVIqKWFkZHIpKys7IH0KI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIG4pIHdoaWxlIChuLS0pIFwKCXsgT1VUX1BPUlRfV09SRCggcG9ydCwgKihoY2ZfMTYgRkFSKilhZGRyICk7ICgoaGNmXzE2IEZBUiopYWRkcikrKzsgfQojZW5kaWYgLy8gSU5fUE9SVF9TVFJJTkdfMTYKCiNlbmRpZgkvLyBXQ0lUU1QKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgTW90b3JvbGEgUG93ZXIgUEMgODAwIGZhbWlseSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBrbm93biB1c2VyczogTEhASQogKi8KCiNpZiBkZWZpbmVkIElfTVBDOFhYCgojZGVmaW5lIE1TRl9DT01QT05FTlRfVkFSCQkwCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9JRAkJMAojZGVmaW5lIE1TRl9DT01QT05FTlRfTUFKT1JfVkVSCTEKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX01JTk9SX1ZFUgkwCgojZGVmaW5lIEhDRl9IU0lfVkFSCQkJCTEKCiNkZWZpbmUgSENGX0JJR19FTkRJQU4JCQkxCiNkZWZpbmUgSENGX0lPIAkJCQkJSENGX0lPX01FTQkJLy8gb3ZlcnJ1bGUgc3RhbmRhcmQgUG9ydCBJL08gd2l0aCBNZW1vcnkgbWFwcGVkIEkvTwoKI2luY2x1ZGUgIm9fcG9ydGJsLmgiCiNpbmNsdWRlICJpcGNtY2lhLmgiCnR5cGVkZWYgb191aW50OF90ICBoY2ZfODsKdHlwZWRlZiBvX3VpbnQxNl90IGhjZl8xNjsKdHlwZWRlZiBvX3VpbnQzMl90IGhjZl8zMjsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKI2lmZGVmIF9saW50CiNlbHNlCmFzbSBoY2ZfMTYgSU5fUE9SVF9XT1JEKGludCBwb3J0KQp7CiUgcmVnIHBvcnQKICAgIGxoYnJ4IHIzLHIwLHBvcnQKICAgIGVpZWlvCn0KI2VuZGlmIC8vIF9saW50CgoKI2lmZGVmIF9saW50CiNlbHNlCmFzbSB2b2lkIE9VVF9QT1JUX1dPUkQoaW50IHBvcnQsIGhjZl8xNiB2YWx1ZSkKewolIHJlZyBwb3J0LCB2YWx1ZQogICAgc3RoYnJ4IHZhbHVlLHIwLHBvcnQKICAgIGVpZWlvCn0KI2VuZGlmIC8vIF9saW50CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNihwb3J0LCBhZGRyLCBsZW4pICAgICAgICAgICAgICAgXAogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHVuc2lnbmVkIGwgPSAobGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgaGNmXzE2ICpkID0gKHZvbGF0aWxlIGhjZl8xNiAqKShhZGRyKTsgICAgICAgICAgXAogICAgICB3aGlsZSAobC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKmQrKyA9ICoodm9sYXRpbGUgaGNmXzE2ICopKHBvcnQpOyAgICAgICAgICAgXAogICAgICAgICBFSUVJTygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfQoKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYocG9ydCwgYWRkciwgbGVuKSAgICAgICAgICAgXAogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHVuc2lnbmVkIGwgPSAobGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgaGNmXzE2ICpzID0gKHZvbGF0aWxlIGhjZl8xNiAqKShhZGRyKTsgICAgICAgICAgXAogICAgICB3aGlsZSAobC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKih2b2xhdGlsZSBoY2ZfMTYgKikocG9ydCkgPSAqcysrOyAgICAgICAgICAgXAogICAgICAgICBFSUVJTygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfQoKI2VuZGlmCS8vIElfTVBDOFhYCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgRGlhYiBvciBIaWdoIEMgMjlLICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIGtub3duIHVzZXJzOiBHS0BDCiAqLwoKI2lmIGRlZmluZWQgX0FNMjlLCgojZGVmaW5lIE1TRl9DT01QT05FTlRfVkFSCQkwCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9JRAkJQ09NUF9JRF9BUDEKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX01BSk9SX1ZFUgkxCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJMAoKI2RlZmluZSBIQ0ZfQklHX0VORElBTgkJCTEKI2RlZmluZSBIQ0ZfSU8gCQkJCQlIQ0ZfSU9fTUVNCQkvLyBvdmVycnVsZSBzdGFuZGFyZCBQb3J0IEkvTyB3aXRoIE1lbW9yeSBtYXBwZWQgSS9PCgojZGVmaW5lIFN3YXBCeXRlcyh0KSAgICAvKmxpbnQgLWU1NzIqLygoKHQpID4+IDgpICsgKCgodCkgJiAweGZmKSA8PCA4KSkvKmxpbnQgK2U1NzIqLwoKI2lmIGRlZmluZWQgX19wcGMKICAgICNpZm5kZWYgX19HTlVDX18KICAgICAgICAjZGVmaW5lIF9fYXNtX18gICAgIGFzbQogICAgI2VuZGlmCgogICAgI2lmICEgZGVmaW5lZCBfbGludAogICAgICAgICNkZWZpbmUgRUlFSU8oKSAgICAgX19hc21fXygiIGVpZWlvIikKICAgICNlbHNlCiAgICAgICAgI2RlZmluZSBFSUVJTygpCiAgICAjZW5kaWYKCiAgICBzdGF0aWMgaGNmXzE2IElOX1BPUlRfV09SRChpbnQgcG9ydCkgewogICAgICAgIGhjZl8xNiB2YWx1ZSA9ICoodm9sYXRpbGUgaGNmXzE2ICopKHBvcnQpOyBFSUVJTygpOwogICAgICAgIHZhbHVlID0gU3dhcEJ5dGVzKHZhbHVlKTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKSAgICAgIFwKICAgICAgICAgICAgeyAqKHZvbGF0aWxlIGhjZl8xNiAqKShwb3J0KSA9IFN3YXBCeXRlcyh2YWx1ZSk7IEVJRUlPKCk7IH0KI2Vsc2UKICAgICNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpICgqKHZvbGF0aWxlIGhjZl8xNiAqKShwb3J0KSkKICAgICNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkgKCoodm9sYXRpbGUgaGNmXzE2ICopKHBvcnQpID0gKHZhbHVlKSkKI2VuZGlmIC8vIF9fcHBjCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbGVuKSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsID0gKGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIGhjZl8xNiB0LCAqZCA9ICh2b2xhdGlsZSBoY2ZfMTYgKikoYWRkcik7ICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGwtLSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IElOX1BPUlRfV09SRChwb3J0KTsgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZCsrID0gU3dhcEJ5dGVzKHQpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbGVuKSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsID0gKGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIGhjZl8xNiB0LCAqcyA9ICh2b2xhdGlsZSBoY2ZfMTYgKikoYWRkcik7ICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsLS0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAqcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUX1BPUlRfV09SRChwb3J0LCBTd2FwQnl0ZXModCkpOyAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKI2lmIFBST0RVQ1QgPT0gOTE1MAogICAgI2RlZmluZSBIQ0ZfQVNTRVJUCUhDRl9BU1NFUlRfTUIJLy8gbG9nZ2luZyB2aWEgTWFpbGJveAogICAgI3VuZGVmIE1TRl9DT01QT05FTlRfSUQKI2VuZGlmIC8vIDkxNTAKCiNlbmRpZgkvLyBfQU0yOUsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBNUEM4NjAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoga25vd24gdXNlcnM6IFJSCiAqLwoKI2lmIGRlZmluZWQgQ1BVCiNpZiBDUFUgPT0gUFBDODYwCgojZGVmaW5lIE1TRl9DT01QT05FTlRfVkFSCQkwCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9JRAkJMAojZGVmaW5lIE1TRl9DT01QT05FTlRfTUFKT1JfVkVSCTEKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX01JTk9SX1ZFUgkwCgojZGVmaW5lIEhDRl9CSUdfRU5ESUFOCQkJMQojZGVmaW5lIEhDRl9JTyAJCQkJCUhDRl9JT19NRU0JCS8vIG92ZXJydWxlIHN0YW5kYXJkIFBvcnQgSS9PIHdpdGggTWVtb3J5IG1hcHBlZCBJL08KCiNkZWZpbmUgU3dhcEJ5dGVzKHQpICAgIC8qbGludCAtZTU3MiovKCgodCkgPj4gOCkgKyAoKCh0KSAmIDB4ZmYpIDw8IDgpKS8qbGludCArZTU3MiovCgojaWZuZGVmIF9fR05VQ19fCiAgICAjZGVmaW5lIF9fYXNtX18gICAgIGFzbQojZW5kaWYKCiNpZiAhIGRlZmluZWQgX2xpbnQKICAgICNkZWZpbmUgRUlFSU8oKSAgICAgX19hc21fXygiIGVpZWlvIikKI2Vsc2UKICAgICNkZWZpbmUgRUlFSU8oKQojZW5kaWYKCnN0YXRpYyBoY2ZfMTYgSU5fUE9SVF9XT1JEKGludCBwb3J0KSB7CiAgICBoY2ZfMTYgdmFsdWUgPSAqKHZvbGF0aWxlIGhjZl8xNiAqKShwb3J0KTsgRUlFSU8oKTsKICAgIHZhbHVlID0gU3dhcEJ5dGVzKHZhbHVlKTsKICAgIHJldHVybiB2YWx1ZTsKICAgICNpZmRlZiBfX0dOVUNfXwogICAgICAgIC8qIHRoZSBmb2xsb3dpbmcgc2VydmVzIHRvIGF2b2lkIHRoZSBjb21waWxlciB3YXJuaW5ncyB0aGF0CiAgICAgICAgICogSU5fUE9SVF9XT1JEKCkgaXMgbm90IHVzZWQgaW4gc29tZSBmaWxlcyAqLwogICAgICAgICh2b2lkKUlOX1BPUlRfV09SRDsKICAgICNlbmRpZgp9CgojZGVmaW5lIE9VVF9QT1JUX1dPUkQocG9ydCwgdmFsdWUpICAgICAgXAogICAgICAgIHsgKih2b2xhdGlsZSBoY2ZfMTYgKikocG9ydCkgPSBTd2FwQnl0ZXModmFsdWUpOyBFSUVJTygpOyB9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbGVuKSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsID0gKGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIGhjZl8xNiB0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgaGNmXzE2ICpkID0gKHZvbGF0aWxlIGhjZl8xNiAqKShhZGRyKTsgXAogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobC0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gSU5fUE9SVF9XT1JEKHBvcnQpOyAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkKysgPSBTd2FwQnl0ZXModCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KCBwb3J0LCBhZGRyLCBsZW4pICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGwgPSAobGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgaGNmXzE2IHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBoY2ZfMTYgKnMgPSAodm9sYXRpbGUgaGNmXzE2ICopKGFkZHIpOyAgXAogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobC0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKnMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVF9QT1JUX1dPUkQocG9ydCwgU3dhcEJ5dGVzKHQpKTsgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiNpZiBQUk9EVUNUID09IDkxNTAKICAgICNkZWZpbmUgSENGX0FTU0VSVAlIQ0ZfQVNTRVJUX01CCS8vIGxvZ2dpbmcgdmlhIE1haWxib3gKICAgICN1bmRlZiBNU0ZfQ09NUE9ORU5UX0lECiNlbmRpZgoKI2VuZGlmCS8qIFBQQzg2MCAqLwojZW5kaWYJLyogQ1BVICovCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqICBNaWNyb3RlYyBSZXNlYXJjaCA4MFg4NiBDb21waWxlciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWYgMAoKLy8jdW5kZWYgSENGX1RZUEUJCQkJCQkJCQkvLyBIZXJtZXMtSSBTdGF0aW9uIEYvVyB3aXRob3V0IFNTTiBzdXBwb3J0CgojZGVmaW5lIE1TRl9DT01QT05FTlRfVkFSICAgICAgIDAKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX0lEICAgICAgICAwCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9NQUpPUl9WRVIgMQojZGVmaW5lIE1TRl9DT01QT05FTlRfTUlOT1JfVkVSIDAKCmV4dGVybiBpbnQgZmFyIGlucCggaW50ICk7CmV4dGVybiB2b2lkIGZhciBvdXRwKCBpbnQsIGludCApOwpleHRlcm4gaW50IGZhciBpbnB3KCBpbnQgKTsKZXh0ZXJuIHZvaWQgZmFyIG91dHB3KCBpbnQsIGludCApOwoKI2RlZmluZSBJTl9QT1JUX1dPUkQocG9ydCkJCSgoaGNmXzE2KWlucHcoIChoY2ZfaW8pKHBvcnQpICkpCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LCB2YWx1ZSkJKCh2b2lkKW91dHB3KCAoaGNmX2lvKShwb3J0KSwgdmFsdWUgKSkKCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIGxlbikgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbCA9IChsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICBoY2ZfMTYgKmQgPSAoaGNmXzE2ICopKGFkZHIpOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsLS0pICpkKysgPSAgSU5fUE9SVF9XT1JEKHBvcnQpOyAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYoIHBvcnQsIGFkZHIsIGxlbikgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbCA9IChsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICBoY2ZfMTYgKnMgPSAoaGNmXzE2ICopKGFkZHIpOyAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobC0tKSBPVVRfUE9SVF9XT1JEKHBvcnQsICpzKyspOyAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KI2VuZGlmCS8qIE1pY3JvdGVjIDgwWDg2IEMgQ29tcGlsZXIgKi8KCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgVyBBIFYgRSBMIEEgTiAgRSBDICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoga25vd24gdXNlcnM6IEtNCiAqLwoKI2lmZGVmIG1jNjgzMDIKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRAkJCUNPTVBfSURfRUMKCiNpbmNsdWRlIDx2ZXJzaW9uLmg+CgojZGVmaW5lCU1TRl9DT01QT05FTlRfVkFSCQkJMQojZGVmaW5lCU1TRl9DT01QT05FTlRfTUFKT1JfVkVSCQlNQUpPUl9WRVJTSU9OCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJCU1JTk9SX1ZFUlNJT04KCiNkZWZpbmUgSENGX0JJR19FTkRJQU4JCQkJMQojZGVmaW5lIEhDRl9JTyAJCQkJCQlIQ0ZfSU9fTUVNCQkvLyBvdmVycnVsZSBzdGFuZGFyZCBQb3J0IEkvTyB3aXRoIE1lbW9yeSBtYXBwZWQgSS9PCgojZGVmaW5lIFN3YXBCeXRlcyh0KQkvKmxpbnQgLWU1NzIqLygoKHQpID4+IDgpICsgKCgodCkgJiAweGZmKSA8PCA4KSkvKmxpbnQgK2U1NzIqLwoKI2RlZmluZSBQQ01DSUFfQUREUkVTUyAweGM4MDAwMFVMCgojZGVmaW5lIElOX1BPUlRfMkJZVEVTKHBvcnQpCQkJICgqKGhjZl8xNiAqKShwb3J0KSkKI2lmIDAKc3RhdGljIGhjZl8xNiBJTl9QT1JUX1dPUkQoaGNmXzMyIHBvcnQpIC8vIHNob3VsZCBiZSBoY2ZfaW8sIG5vdCBoY2ZfMzIKewogIGhjZl8xNiB3b3JkID0gSU5fUE9SVF8yQllURVMocG9ydCk7CiAgcmV0dXJuIFN3YXBCeXRlcyh3b3JkKTsKfQojZWxzZQpzdGF0aWMgaGNmXzE2IHN3YXBfdmFyOwojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KSBcCiAgKCgoc3dhcF92YXIgPSBJTl9QT1JUXzJCWVRFUyhwb3J0KSkgPj4gOCkgKyAoKChzd2FwX3ZhcikgJiAweGZmKSA8PCA4KSkKI2VuZGlmCiNkZWZpbmUgT1VUX1BPUlRfMkJZVEVTKHBvcnQsIHZhbHVlKQkgKCooaGNmXzE2ICopKHBvcnQpID0gKGhjZl8xNikodmFsdWUpKQojZGVmaW5lIE9VVF9QT1JUX1dPUkQocG9ydCwgdmFsdWUpCQkgT1VUX1BPUlRfMkJZVEVTKHBvcnQsIFN3YXBCeXRlcyh2YWx1ZSkpCgovKgojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGFkZHIsIGxlbikJICBcCgl3aGlsZSAoKGxlbiktLSkgeyooaGNmXzE2ICopKGFkZHIpID0gSU5fUE9SVF8yQllURVMocG9ydCk7ICgoY2FzdClhZGRyKSArPSAyOyB9CiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGFkZHIsIGxlbikJICBcCgl3aGlsZSAoKGxlbiktLSkge09VVF9QT1JUXzJCWVRFUygocG9ydCksICooaGNmXzE2ICopKGFkZHIpKSA7ICgoY2FzdClhZGRyKSAgKz0gMjsgfQoqLwoKI2VuZGlmCS8qIG1jNjgzMDIgKi8KCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgTkdBUCAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZiBkZWZpbmVkIF9fVlhfV09SS1NfXwkvKiBWeFdvcmtzICovCgojaWYgZGVmaW5lZCBXTENfU1RBVElPTgovLyN1bmRlZiBIQ0ZfVFlQRSAJCQkJLyogSGVybWVzLUkgU3RhdGlvbiBGL1cgd2l0aG91dCBTU04gc3VwcG9ydCAqLwojZGVmaW5lIE1TRl9DT01QT05FTlRfSUQJQ09NUF9JRF9WWF9XT1JLU19FTkRTVEEKI2Vsc2UKI2RlZmluZSBNU0ZfQ09NUE9ORU5UX0lECUNPTVBfSURfVlhfV09SS1NfRU5EQVAKI2VuZGlmCS8vIFdMQ19TVEFUSU9OCgojZGVmaW5lIEhDRl9ZSUVMRCAodGFza0RlbGF5KDApID09IDApCgojZGVmaW5lICAgIE1TRl9DT01QT05FTlRfVkFSICAgICAgICAgICAgICAxCiNkZWZpbmUgICAgTVNGX0NPTVBPTkVOVF9NQUpPUl9WRVIgICAgICAgIDEKI2RlZmluZSAgICBNU0ZfQ09NUE9ORU5UX01JTk9SX1ZFUiAgICAgICAgMAoKLy8gI2RlZmluZSBIQ0ZfQVNTRVJUCUhDRl9BU1NFUlRfTUIJLy8gbG9nZ2luZyB2aWEgTWFpbGJveAoKI2lmIGRlZmluZWQgUEM0ODZCU1AKCiNkZWZpbmUgSU5fUE9SVF9XT1JEKHBvcnQpICAgICAgICAgICAgKHN5c0luV29yZCAoKGhjZl9pbykocG9ydCkpKQojZGVmaW5lIE9VVF9QT1JUX1dPUkQocG9ydCwgdmFsdWUpICAgICAgICAoc3lzT3V0V29yZCAoKGhjZl9pbykocG9ydCksIChoY2ZfMTYpICh2YWx1ZSkpKQojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGFkZHIsIG4pICAgICAgICAoc3lzSW5Xb3JkU3RyaW5nICgoaGNmX2lvKShwb3J0KSwgYWRkciwgbikpCiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGFkZHIsIG4pICAgICAgICAoc3lzT3V0V29yZFN0cmluZyAoKGhjZl9pbykocG9ydCksIGFkZHIsIG4pKQoKI2VsaWYgZGVmaW5lZCBBUzIwMDBCU1AKCiNkZWZpbmUgSENGX0lPIAkJCQkJCUhDRl9JT19NRU0JCS8vIG92ZXJydWxlIHN0YW5kYXJkIFBvcnQgSS9PIHdpdGggTWVtb3J5IG1hcHBlZCBJL08KCi8qIERlZmluZSBQQ0kgc3R1ZmYgaGVyZS4gKi8KdW5zaWduZWQgc2hvcnQgc3lzUmVhZDE2KCB1bnNpZ25lZCBzaG9ydCAqcG9ydCApOwp2b2lkIHN5c1dyaXRlMTYoIHVuc2lnbmVkIHNob3J0ICpwb3J0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSApOwoKI2RlZmluZSBQQ0lfSU5fQllURSggcG9ydCApIFwKCSoodW5zaWduZWQgY2hhciAqKSggcG9ydCApCgojZGVmaW5lIFBDSV9JTl9XT1JEKCBwb3J0ICkgXAoJc3lzUmVhZDE2KCAodW5zaWduZWQgc2hvcnQgKikoIHBvcnQgKSApCgojZGVmaW5lIFBDSV9PVVRfQllURSggcG9ydCwgdmFsdWUgKSBcCgkqKHVuc2lnbmVkIGNoYXIgKikoIHBvcnQgKSA9ICh1bnNpZ25lZCBjaGFyKSggdmFsdWUgKQoKI2RlZmluZSBQQ0lfT1VUX1dPUkQoIHBvcnQsIHZhbHVlICkgXAoJc3lzV3JpdGUxNiggKHVuc2lnbmVkIHNob3J0ICopKCBwb3J0ICksICh1bnNpZ25lZCBzaG9ydCkoIHZhbHVlICkgKQoKI2RlZmluZSBJTl9QT1JUX1dPUkQoIHBvcnQgKSBcCglQQ0lfSU5fV09SRCggcG9ydCApCgojZGVmaW5lIE9VVF9QT1JUX1dPUkQoIHBvcnQsIHZhbHVlICkgXAoJUENJX09VVF9XT1JEKCBwb3J0LCB2YWx1ZSApCgojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KCBwb3J0LCBidWYsIGxlbiApIFwKCWRvIHsgXAoJCWhjZl8xNiAqcDsgXAoJIFwKCSAJZm9yICggcCA9IChoY2ZfMTYgKikoYnVmKTsgcCA8ICYoIChoY2ZfMTYgKikoYnVmKSApWyAoaW50KWxlbiBdOyBwKysgKSB7IFwKCQkJKnAgPSBQQ0lfSU5fV09SRCggcG9ydCApOyBcCgkJfSBcCgl9IHdoaWxlICggMCApCgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNiggcG9ydCwgYnVmLCBsZW4gKSBcCglkbyB7IFwKCQljb25zdCBoY2ZfMTYgKnA7IFwKCSBcCgkgCWZvciAoIHAgPSAoY29uc3QgaGNmXzE2ICopKCBidWYgKTsgcCA8ICYoIChjb25zdCBoY2ZfMTYgKikoYnVmKSApWyAoaW50KWxlbiBdOyBwKysgKSB7IFwKCQkJUENJX09VVF9XT1JEKCBwb3J0LCAqcCApOyBcCgkJfSBcCgl9IHdoaWxlICggMCApCgojZWxpZiBkZWZpbmVkIEZBRFM4NjBCU1AgLyogZWxpZiBkZWZpbmVkIEFTMjAwMEJTUCAqLwoKI2RlZmluZSBIQ0ZfQklHX0VORElBTiAxCgojZGVmaW5lIEhDRl9JTyAJCQkJCQlIQ0ZfSU9fTUVNCQkvLyBvdmVycnVsZSBzdGFuZGFyZCBQb3J0IEkvTyB3aXRoIE1lbW9yeSBtYXBwZWQgSS9PCgojaWZuZGVmIF9fR05VQ19fCiAgICAjZGVmaW5lIF9fYXNtX18gICAgIGFzbQojZW5kaWYKCiNpZiAhIGRlZmluZWQgX2xpbnQKICAgICNkZWZpbmUgRUlFSU8oKSAgICAgX19hc21fXygiIGVpZWlvIikKI2Vsc2UKICAgICNkZWZpbmUgRUlFSU8oKQojZW5kaWYKCnN0YXRpYyBoY2ZfMTYgSU5fUE9SVF9XT1JEKGludCBwb3J0KSB7CiAgICBoY2ZfMTYgdmFsdWUgPSAqKHZvbGF0aWxlIGhjZl8xNiAqKShwb3J0KTsgRUlFSU8oKTsKICAgIHZhbHVlID0gKCh2YWx1ZSAmIDB4ZmYwMCkgPj4gOCkgKyAoKHZhbHVlICYgMHgwMGZmKSA8PCA4KTsKLyogIHZhbHVlID0gQ05WX0xJVFRMRV9UT19TSE9SVCh2YWx1ZSk7ICovCiAgICByZXR1cm4gdmFsdWU7CiAgICAjaWZkZWYgX19HTlVDX18KICAgICAgICAvKiB0aGUgZm9sbG93aW5nIHNlcnZlcyB0byBhdm9pZCB0aGUgY29tcGlsZXIgd2FybmluZ3MgdGhhdAogICAgICAgICAqIElOX1BPUlRfV09SRCgpIGlzIG5vdCB1c2VkIGluIHNvbWUgZmlsZXMgKi8KICAgICAgICAodm9pZClJTl9QT1JUX1dPUkQ7CiAgICAjZW5kaWYKfQoKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIHsgKih2b2xhdGlsZSBoY2ZfMTYgKikocG9ydCkgPSBDTlZfU0hPUlRfVE9fTElUVExFKHZhbHVlKTsgRUlFSU8oKTsgfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbGVuKSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsID0gKGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIGhjZl8xNiAqZCA9ICh2b2xhdGlsZSBoY2ZfMTYgKikoYWRkcik7IFwKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGwtLSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9ICoodm9sYXRpbGUgaGNmXzE2ICopKHBvcnQpOyAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFSUVJTygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNiggcG9ydCwgYWRkciwgbGVuKSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsID0gKGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIGhjZl8xNiAqcyA9ICh2b2xhdGlsZSBoY2ZfMTYgKikoYWRkcik7ICBcCiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsLS0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICoodm9sYXRpbGUgaGNmXzE2ICopKHBvcnQpID0gKnMrKzsgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRUlFSU8oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKI2VsaWYgZGVmaW5lZCBEQVlUT05BQlNQCgojZGVmaW5lIEhDRl9CSUdfRU5ESUFOIDEKCiNkZWZpbmUgSENGX0lPIAkJCQkJCUhDRl9JT19NRU0JCS8vIG92ZXJydWxlIHN0YW5kYXJkIFBvcnQgSS9PIHdpdGggTWVtb3J5IG1hcHBlZCBJL08KCiNpZm5kZWYgX19HTlVDX18KICAgICNkZWZpbmUgX19hc21fXyAgICAgYXNtCiNlbmRpZgoKI2RlZmluZSBJTl9QT1JUX1dPUkQocG9ydCkgICAgICAgICAgICAgIChzeXNPcmlub2NvSW5Xb3JkKCh1bnNpZ25lZCBsb25nKShwb3J0KSkpCiNkZWZpbmUgT1VUX1BPUlRfV09SRChwb3J0LHZhbHVlKSAgICAgICAoc3lzT3Jpbm9jb091dFdvcmQoKHVuc2lnbmVkIGxvbmcpKHBvcnQpLCAodW5zaWduZWQgc2hvcnQpKHZhbHVlKSkpCgojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KHBvcnQsYWRkcixsZW4pICAgKHN5c09yaW5vY29JblN0cmluZygocG9ydCksIChhZGRyKSwgKGxlbikpKQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNihwb3J0LGFkZHIsbGVuKSAgIChzeXNPcmlub2NvT3V0U3RyaW5nKChwb3J0KSwgKGFkZHIpLCAobGVuKSkpCgpleHRlcm4gdW5zaWduZWQgY2hhciAgICBzeXNPcmlub2NvSW5CeXRlICAgICh1bnNpZ25lZCBsb25nIHBvcnQpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgICBzeXNPcmlub2NvSW5Xb3JkICAgICh1bnNpZ25lZCBsb25nIHBvcnQpOwpleHRlcm4gdm9pZCAgICAgICAgICAgICBzeXNPcmlub2NvSW5TdHJpbmcgICh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbik7CgpleHRlcm4gdm9pZCAgICAgICAgICAgICBzeXNPcmlub2NvT3V0Qnl0ZSAgICh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgdmFsdWUpOwpleHRlcm4gdm9pZCAgICAgICAgICAgICBzeXNPcmlub2NvT3V0V29yZCAgICh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKZXh0ZXJuIHZvaWQgICAgICAgICAgICAgc3lzT3Jpbm9jb091dFN0cmluZyAodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4pOwoKI2VsaWYgZGVmaW5lZCBBTFBIQV9CU1AKCiNkZWZpbmUgSENGX0JJR19FTkRJQU4gMQoKI2RlZmluZSBIQ0ZfSU8gCQkJCQkJSENGX0lPX01FTQkJLy8gb3ZlcnJ1bGUgc3RhbmRhcmQgUG9ydCBJL08gd2l0aCBNZW1vcnkgbWFwcGVkIEkvTwoKI2lmbmRlZiBfX0dOVUNfXwogICAgI2RlZmluZSBfX2FzbV9fICAgICBhc20KI2VuZGlmCgojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KSAgICAgICAgICAgICAgKHN5c09yaW5vY29JbldvcmQoKHVuc2lnbmVkIGxvbmcpKHBvcnQpKSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsdmFsdWUpICAgICAgIChzeXNPcmlub2NvT3V0V29yZCgodW5zaWduZWQgbG9uZykocG9ydCksICh1bnNpZ25lZCBzaG9ydCkodmFsdWUpKSkKCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMTYocG9ydCxhZGRyLGxlbikgICAoc3lzT3Jpbm9jb0luU3RyaW5nKChwb3J0KSwgKGFkZHIpLCAobGVuKSkpCiNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HXzE2KHBvcnQsYWRkcixsZW4pICAgKHN5c09yaW5vY29PdXRTdHJpbmcoKHBvcnQpLCAoYWRkciksIChsZW4pKSkKCmV4dGVybiB1bnNpZ25lZCBjaGFyICAgIHN5c09yaW5vY29JbkJ5dGUgICAgKHVuc2lnbmVkIGxvbmcgcG9ydCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAgIHN5c09yaW5vY29JbldvcmQgICAgKHVuc2lnbmVkIGxvbmcgcG9ydCk7CmV4dGVybiB2b2lkICAgICAgICAgICAgIHN5c09yaW5vY29JblN0cmluZyAgKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuKTsKCmV4dGVybiB2b2lkICAgICAgICAgICAgIHN5c09yaW5vY29PdXRCeXRlICAgKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciB2YWx1ZSk7CmV4dGVybiB2b2lkICAgICAgICAgICAgIHN5c09yaW5vY29PdXRXb3JkICAgKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpOwpleHRlcm4gdm9pZCAgICAgICAgICAgICBzeXNPcmlub2NvT3V0U3RyaW5nICh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbik7CgojZWxzZQoKZXJyOiAvKiBjb21tZW50ZWQgaGVyZSAqLyAvKgkiQlNQIGlzIG5vdCBkZWZpbmVkLi4uIiAqLwoKI2VuZGlmCS8qIGVsc2UgUEM0ODZCU1AgKi8KCiNlbmRpZgkvLyBfX1ZYX1dPUktTX18KCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgVlhXT1JLUy4gTW90b3JvbGEgU2FuZHBvaW50IFBvd2VyUEMgODI0WCAqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmZGVmIF9fVlhfV09SS1NfU0FORFBPSU5UXzgyNFhfXwoKI2luY2x1ZGUgPHZ4V29ya3MuaD4KI2luY2x1ZGUgPHN5c0xpYi5oPgojaW5jbHVkZSA8dGFza0xpYi5oPgoKI2lmZGVmIFdWTEFOXzUzCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRCAgICAgICAgICAgIENPTVBfSURfVlhfV09SS1NfRU5EU1RBCiNlbmRpZiAvKiBXVkxBTl81MyAqLwoKI2lmZGVmIFdWTEFOXzU0CiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRCAgICAgICAgICAgIENPTVBfSURfVlhfV09SS1NfRU5EQVAKI2VuZGlmIC8qIFdWTEFOXzU0ICovCgojaWZkZWYgV1ZMQU5fNTYKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX0lEICAgICAgICAgICAgQ09NUF9JRF9WWF9XT1JLU19FTkQKI2VuZGlmIC8qIFdWTEFOXzU2ICovCgojaWYgIWRlZmluZWQgTVNGX0NPTVBPTkVOVF9JRAojZXJyb3IgInlvdSBtdXN0IGRlZmluZSBhbiBNU0YgY29tcG9uZW50IElEOiBXVkxBTl81MywgV1ZMQU5fNTQsIFdWTEFOXzU2IgojZW5kaWYKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9WQVIJCQkxCgojZGVmaW5lIEhDRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgSENGX0VYVF9JTkZPX0xPRwojZGVmaW5lIEhDRl9TTEVFUCAgICAgICAgICAgICAgICAgICAgICAgKCBIQ0ZfQ0RTIHwgSENGX0REUyApCi8vI2RlZmluZSBIQ0ZfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICggSENGX0REUyApCgojaWZuZGVmIEhDRl9BQ1RfV0FLRVVQCiNkZWZpbmUgSENGX0FDVF9XQUtFVVAgICAgICAgICAgICAgICAgICAweDFECiNlbmRpZiAvLyBIQ0ZfQUNUX1dBS0VVUAoKI2lmIGRlZmluZWQgRkFUTklDIHwgZGVmaW5lZCBCRUFHTEVfSDI1MwojZGVmaW5lIFQxX19IQ0ZfVFlQRSAgICAgICAgICAgICAgICAgICAgSENGX1RZUEVfU1RBCiNlbHNlCiNkZWZpbmUgVDFfX0hDRl9UWVBFICAgICAgICAgICAgICAgICAgICBIQ0ZfVFlQRV9BUCB8IEhDRl9UWVBFX1NUQQojZW5kaWYKCiNpZmRlZiBIRVJNRVNfVVNCCiNkZWZpbmUgVDJfX0hDRl9UWVBFCQkJCQkoVDFfX0hDRl9UWVBFIHwgSENGX1RZUEVfVVNCKQojZWxzZSAvLyBIRVJNRVNfVVNCCiNkZWZpbmUgVDJfX0hDRl9UWVBFCQkJCQkoVDFfX0hDRl9UWVBFKQojZW5kaWYgLy8gSEVSTUVTX1VTQgoKI2lmZGVmIF9XQVJQCiNkZWZpbmUgVDNfX0hDRl9UWVBFCQkJCQkoVDJfX0hDRl9UWVBFIHwgSENGX1RZUEVfSElJNSkKI2Vsc2UgLy8gX1dBUlAKI2RlZmluZSBUM19fSENGX1RZUEUJCQkJCShUMl9fSENGX1RZUEUgfCBIQ0ZfVFlQRV9XUEEgfCBIQ0ZfVFlQRV9ISUkpCiNlbmRpZiAvLyBXQVJQCgojaWZkZWYgX0NDWAojZGVmaW5lIFQ0X19IQ0ZfVFlQRQkJCQkJKFQzX19IQ0ZfVFlQRSB8IEhDRl9UWVBFX0NDWCkKI2Vsc2UgLy8gX1dBUlAKI2RlZmluZSBUNF9fSENGX1RZUEUJCQkJCShUM19fSENGX1RZUEUpCiNlbmRpZiAvLyBfQ0NYCgojZGVmaW5lIFQ1X19IQ0ZfVFlQRQkJCQkJKFQ0X19IQ0ZfVFlQRSkKCi8vIERlZmF1bHQgdG8gVFlQRV9BUCArIFNTTiEKI2RlZmluZSBIQ0ZfVFlQRQkJCQkJCShUNV9fSENGX1RZUEUgKQoKCgojZGVmaW5lCU1TRl9DT01QT05FTlRfTUFKT1JfVkVSCQkyCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIJCTAKCiNkZWZpbmUgSENGX0lPICAgICAgICAgICAgICAgICAgICAgIEhDRl9JT19NRU0KI2RlZmluZSBIQ0ZfRE1BICAgICAgICAgICAgICAgICAgICAgMAojZGVmaW5lIEhDRl9NRU1fSU8gICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgSENGX0JJR19FTkRJQU4gICAgICAgICAgICAgIDEKCi8vI2RlZmluZSBzdXBwb3J0XzMyYml0cyAxCgojZGVmaW5lIElOX1BPUlRfV09SRChwb3J0KQkJCSAgICAgICAgKHN5c0luV29yZCggKGhjZl9pbykocG9ydCkgKSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKQkgICAgICAgIChzeXNPdXRXb3JkKCAoaGNmX2lvKShwb3J0KSwgKGhjZl8xNikodmFsdWUpICkpCiNkZWZpbmUgSU5fUE9SVF9EV09SRChwb3J0KQkJCSAgICAgICAgKHN5c0luTG9uZyggKGhjZl9pbykocG9ydCkgKSkKI2RlZmluZSBPVVRfUE9SVF9EV09SRChwb3J0LCB2YWx1ZSkJICAgICAgICAoc3lzT3V0TG9uZyggKGhjZl9pbykocG9ydCksIChoY2ZfMTYpKHZhbHVlKSApKQojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzE2KHBvcnQsIGRzdCwgbikJICAgIChzeXNJbldvcmRTdHJpbmcoKGhjZl9pbykocG9ydCksIChoY2ZfMTYgKilkc3QsIG4pKQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18xNihwb3J0LCBzcmMsIG4pICAgIChzeXNPdXRXb3JkU3RyaW5nKChoY2ZfaW8pKHBvcnQpLCAoaGNmXzE2ICopc3JjLCBuKSkKCiNpZmRlZiBXVkxBTl9ERUJVRwojZGVmaW5lIERCRyAgICAgICAgICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgX0RFQlVHICAgICAgICAgICAgICAgICAgICAgIDEKI2VuZGlmCgovKiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVzZSBwcmludHMgc29tZWRheSAqLwojZGVmaW5lIE9VVFBVVERFQlVHTVNHKGRwcmludGZfZXhwKQojZGVmaW5lIEFTU0VSVERFQlVHTVNHKGNvbmQsIGRwcmludGZfZXhwKQoKI2RlZmluZSBIQ0ZfSU5URVJGQUNFX0NPTk5FQ1QoaWZicCkKI2RlZmluZSBIQ0ZfSU5URVJGQUNFX0RJU0NPTk5FQ1QoaWZicCkKI2RlZmluZSBIQ0ZfRU5URVJfSU5URVJGQUNFX0ZVTkNUKGliZmIpCiNkZWZpbmUgSENGX0xFQVZFX0lOVEVSRkFDRV9GVU5DVChpZmJwKQoKI2RlZmluZSBDTlZfRU5EX0lOVCh3KSAgICAoICgoaGNmXzE2KSh3KSAmIDB4MDBGRikgPDwgOCB8ICgoaGNmXzE2KSh3KSAmIDB4RkYwMCkgPj4gOCApCiNkZWZpbmUgQ05WX0xJVFRMRV9UT19JTlQodykJQ05WX0VORF9JTlQodykKI2RlZmluZSBDTlZfSU5UX1RPX0xJVFRMRSh3KQlDTlZfTElUVExFX1RPX0lOVCh3KQoKI2VuZGlmIC8qIF9fVlhfV09SS1NfU0FORFBPSU5UXzgyNFhfXyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIFZYV09SS1MuIEFSTSBUODMwMCBJUFBob25lICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmIGRlZmluZWQoIElQVF9UODMwMCApIHx8IGRlZmluZWQoIElQVF9UODMwNyApCgojaW5jbHVkZSA8dnhXb3Jrcy5oPgojaW5jbHVkZSA8c3lzTGliLmg+CiNpbmNsdWRlIDx0YXNrTGliLmg+CgojZGVmaW5lIEhDRl9BTElHTiAgICAgICAgICAgICAgICAgICA0ICAgICAgIC8qIGRlZmF1bHQgdG8gNCBieXRlIGFsaWdubWVudCAqLwoKI2RlZmluZSBCRUFHTEVfSDI1MwkvKiBIZXJtZXMgMi41LjMgYnVpbGQsIGJldHRlciB0byBiZSBpbiB0aGUgcHJvamVjdCBmaWxlICovCiNkZWZpbmUgT09SX0REUwkJLyogSGVybWVzIDIuNS4zIGJ1aWxkLCBiZXR0ZXIgdG8gYmUgaW4gdGhlIHByb2plY3QgZmlsZSAqLwojZGVmaW5lIEZBVE5JQwoKCiNpZmRlZiBXVkxBTl81MwojZGVmaW5lCU1TRl9DT01QT05FTlRfSUQgICAgICAgICAgICBDT01QX0lEX1ZYX1dPUktTX0VORFNUQQojZW5kaWYgLyogV1ZMQU5fNTMgKi8KCiNpZmRlZiBXVkxBTl81NAojZGVmaW5lCU1TRl9DT01QT05FTlRfSUQgICAgICAgICAgICBDT01QX0lEX1ZYX1dPUktTX0VOREFQCiNlbmRpZiAvKiBXVkxBTl81NCAqLwoKI2lmZGVmIFdWTEFOXzU2CiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9JRCAgICAgICAgICAgIENPTVBfSURfVlhfV09SS1NfRU5ECiNlbmRpZiAvKiBXVkxBTl81NiAqLwoKI2lmICFkZWZpbmVkIE1TRl9DT01QT05FTlRfSUQKI2Vycm9yICJ5b3UgbXVzdCBkZWZpbmUgYW4gTVNGIGNvbXBvbmVudCBJRDogV1ZMQU5fNTMsIFdWTEFOXzU0LCBXVkxBTl81NiIKI2VuZGlmCgojZGVmaW5lCU1TRl9DT01QT05FTlRfVkFSCQkJMQoKI2RlZmluZSBIQ0ZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgIEhDRl9FWFRfSU5GT19MT0cKLy8jZGVmaW5lIEhDRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgSENGX0VYVF9JTkZPX0xPRyB8IEhDRl9FWFRfTUIKI2RlZmluZSBIQ0ZfU0xFRVAgICAgICAgICAgICAgICAgICAgICAgICggSENGX0NEUyB8IEhDRl9ERFMgKQovLyNkZWZpbmUgSENGX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAoIEhDRl9ERFMgKQoKI2lmbmRlZiBIQ0ZfQUNUX1dBS0VVUAojZGVmaW5lIEhDRl9BQ1RfV0FLRVVQICAgICAgICAgICAgICAgICAgMHgxRAojZW5kaWYgLy8gSENGX0FDVF9XQUtFVVAKCiNpZiBkZWZpbmVkIEZBVE5JQyB8fCBkZWZpbmVkIEJFQUdMRV9IMjUzCiNkZWZpbmUgVDFfX0hDRl9UWVBFICAgICAgICAgICAgICAgICAgICBIQ0ZfVFlQRV9TVEEKI2Vsc2UKLy8jZGVmaW5lIFQxX19IQ0ZfVFlQRSAgICAgICAgICAgICAgICAgICAgSENGX1RZUEVfQVAgfCBIQ0ZfVFlQRV9TVEEKI2RlZmluZSBUMV9fSENGX1RZUEUgICAgICAgICAgICAgICAgICAgIEhDRl9UWVBFX1NUQQkJLyogZHosIFN0YXRpb24gY29kZSBvbmx5ICovCiNlbmRpZgoKI2lmZGVmIEhFUk1FU19VU0IKI2RlZmluZSBUMl9fSENGX1RZUEUJCQkJCShUMV9fSENGX1RZUEUgfCBIQ0ZfVFlQRV9VU0IpCiNlbHNlIC8vIEhFUk1FU19VU0IKI2RlZmluZSBUMl9fSENGX1RZUEUJCQkJCShUMV9fSENGX1RZUEUpCiNlbmRpZiAvLyBIRVJNRVNfVVNCCgojaWZkZWYgX1dBUlAKI2RlZmluZSBUM19fSENGX1RZUEUJCQkJCShUMl9fSENGX1RZUEUgfCBIQ0ZfVFlQRV9ISUk1KQojZWxzZSAvLyBfV0FSUAojZGVmaW5lIFQzX19IQ0ZfVFlQRQkJCQkJKFQyX19IQ0ZfVFlQRSB8IEhDRl9UWVBFX1dQQSB8IEhDRl9UWVBFX0hJSSkKLy8jZGVmaW5lIFQzX19IQ0ZfVFlQRQkJCQkJKFQyX19IQ0ZfVFlQRSB8IEhDRl9UWVBFX0hJSSkJLyogZHouIG5vIFdQQSBzdXBwb3J0IGF0IHRoaXMgdGltZSwgdGVzdCBjb2RlICovCiNlbmRpZiAvLyBXQVJQCgojaWZkZWYgX0NDWAojZGVmaW5lIFQ0X19IQ0ZfVFlQRQkJCQkJKFQzX19IQ0ZfVFlQRSB8IEhDRl9UWVBFX0NDWCkKI2Vsc2UgLy8gX1dBUlAKI2RlZmluZSBUNF9fSENGX1RZUEUJCQkJCShUM19fSENGX1RZUEUpCiNlbmRpZiAvLyBfQ0NYCgojZGVmaW5lIFQ1X19IQ0ZfVFlQRQkJCQkJKFQ0X19IQ0ZfVFlQRSkKCi8vIERlZmF1bHQgdG8gVFlQRV9BUCArIFNTTiEKI2RlZmluZSBIQ0ZfVFlQRQkJCQkJCShUNV9fSENGX1RZUEUgKQoKCiNkZWZpbmUJTVNGX0NPTVBPTkVOVF9NQUpPUl9WRVIJCTIKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX01JTk9SX1ZFUgkJMAoKI2RlZmluZSBIQ0ZfSU8gICAgICAgICAgICAgICAgICAgICAgSENGX0lPX01FTQojZGVmaW5lIEhDRl9ETUEgICAgICAgICAgICAgICAgICAgICAwCiNkZWZpbmUgSENGX01FTV9JTyAgICAgICAgICAgICAgICAgIDEKCgovKiBFbmRpYW4gaXMgZGV0ZXJtaW5lZCBieSB2eFdvcmtzIHByb2plY3QgY29tcGlsZSBvcHRpb24gKi8KI2lmIChfQllURV9PUkRFUiA9PSBfQklHX0VORElBTikKI3VuZGVmICBIQ0ZfTElUVExFX0VORElBTgojZGVmaW5lIEhDRl9CSUdfRU5ESUFOICAgICAgICAgICAgICAxCiNlbmRpZgoKCiNkZWZpbmUgQ05WX0VORCh3KSAgICAoICgoaGNmXzE2KSh3KSAmIDB4MDBGRikgPDwgOCB8ICgoaGNmXzE2KSh3KSAmIDB4RkYwMCkgPj4gOCApCiNpZiBkZWZpbmVkIEhDRl9CSUdfRU5ESUFOCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQiBJIEcgICBFIE4gRCBJIEEgTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiNkZWZpbmUgQ05WX0xJVFRMRV9UT19JTlQodykgICAgQ05WX0VORCh3KQkvLyAgICBlbmRpYW5lc3MgY29udmVyc2lvbiBuZWVkZWQKI2RlZmluZSBDTlZfQklHX1RPX0lOVCh3KQkJKHcpCQkJLy8gbm8gZW5kaWFuZXNzIGNvbnZlcnNpb24gbmVlZGVkCiNlbHNlCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEwgSSBUIFQgTCBFICAgRSBOIEQgSSBBIE4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgojZGVmaW5lIENOVl9MSVRUTEVfVE9fSU5UKHcpIAkodykJCQkvLyBubyBlbmRpYW5lc3MgY29udmVyc2lvbiBuZWVkZWQKI2RlZmluZSBDTlZfQklHX1RPX0lOVCh3KSAgICAgICBDTlZfRU5EKHcpCS8vICAgIGVuZGlhbmVzcyBjb252ZXJzaW9uIG5lZWRlZAojZW5kaWYgLy8gSENGX0JJR19FTkRJQU4KCi8vIGNvbnZlcnNpb24gbWFjcm9zIHdoaWNoIGNhbiBiZSBleHByZXNzZWQgaW4gb3RoZXIgbWFjcm9zCiNkZWZpbmUgQ05WX0lOVF9UT19MSVRUTEUodykJQ05WX0xJVFRMRV9UT19JTlQodykKI2RlZmluZSBDTlZfSU5UX1RPX0JJRyh3KQkJQ05WX0JJR19UT19JTlQodykKCgoKI2RlZmluZSBJTl9QT1JUX1dPUkQoIHBvcnQgKSAgICAgICAgICAgICooKHZvbGF0aWxlIGhjZl8xNiAqKSggcG9ydCApKQojZGVmaW5lIE9VVF9QT1JUX1dPUkQoIHBvcnQsIHZhbHVlICkgICAgKigodm9sYXRpbGUgaGNmXzE2ICopKCBwb3J0ICkpID0gKChoY2ZfMTYpKCB2YWx1ZSApKQovLyNkZWZpbmUgSU5fUE9SVF9CWVRFKCBwb3J0ICkgICAgICAgICAgICAqKCh2b2xhdGlsZSBoY2ZfOCAqKSggcG9ydCApKQoKI2RlZmluZSBJTl9QT1JUX1NUUklORyggcG9ydCwgYWRkciwgbGVuKSB7CQlcCgl1bnNpZ25lZCBsID0gbGVuOwkJCQkJCQkJXAoJaGNmXzE2ICAqZCA9IChoY2ZfMTYgKikoYWRkcik7CQkJCQlcCgloY2ZfMTYgICB0OwkJCQkJCQkJCQlcCgl3aGlsZSAobC0tKSB7CQkJCQkJCQkJXAoJCXQgPSBJTl9QT1JUX1dPUkQocG9ydCk7CQkJCQkJXAoJCSpkKysgPSBDTlZfTElUVExFX1RPX0lOVCh0KTsJCQkJXAoJfQkJCQkJCQkJCQkJCVwKfSAvLyBJTl9QT1JUX1NUUklORwoKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkcoIHBvcnQsIGFkZHIsIGxlbikgewkJXAoJdW5zaWduZWQgbCA9IChsZW4pOwkJCQkJCQkJXAoJaGNmXzE2ICAqcyA9IChoY2ZfMTYgKikoYWRkcik7CQkJCQlcCgloY2ZfMTYgICB0OwkJCQkJCQkJCQlcCgl3aGlsZSAobC0tKSB7CQkJCQkJCQkJXAoJCXQgPSAqcysrOwkJCQkJCQkJCVwKCQl0ID0gQ05WX0xJVFRMRV9UT19JTlQodCk7CQkJCQlcCgkJT1VUX1BPUlRfV09SRChwb3J0LCB0KTsJCQkJCQlcCgl9CQkJCQkJCQkJCQkJXAp9IC8vIE9VVF9QT1JUX1NUUklORwoKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNihwb3J0LCBkc3QsIG4pCSAgICB7CVwKCXVuc2lnbmVkIGwgPSAobik7CQkJCQkJCQlcCgloY2ZfMTYgICpkID0gKGhjZl8xNiAqKShkc3QpOwkJCQkJXAoJd2hpbGUgKGwtLSkgewkJCQkJCQkJCVwKCQkqZCsrID0gSU5fUE9SVF9XT1JEKHBvcnQpOwkJCQkJXAoJfQkJCQkJCQkJCQkJCVwKfSAvLyBJTl9QT1JUX1NUUklOR18xNgoKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYocG9ydCwgc3JjLCBuKQl7CVwKCWhjZl8xNiAgIHQ7CQkJCQkJCQkJCVwKCWludCBsID0gKG4pOwkJCQkJCQkJCVwKCWhjZl8xNiAgKnMgPSAoaGNmXzE2ICopKHNyYyk7CQkJCQlcCgl3aGlsZSAobC0tKSB7CQkJCQkJCQkJXAoJCXQgPSAqcysrOwkJCQkJCQkJCVwKCQlPVVRfUE9SVF9XT1JEKHBvcnQsIHQpOwkJCQkJCVwKCX0JCQkJCQkJCQkJCQlcCn0gLy8gT1VUX1BPUlRfU1RSSU5HXzE2CgovKiAjZGVmaW5lIEhDRl9ZSUVMRCAgICAgICAgICAgICAgICAgICAgICAgKHRhc2tEZWxheSgwKSA9PSAwKSAqLwoKCgojaWZkZWYgV1ZMQU5fREVCVUcKI2RlZmluZSBEQkcgICAgICAgICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAxCiNlbmRpZgoKLyogd2UnbGwgbmVlZCB0byBhZGQgdGhlc2UgcHJpbnRzIHNvbWVkYXkgKi8KI2RlZmluZSBPVVRQVVRERUJVR01TRyhkcHJpbnRmX2V4cCkKI2RlZmluZSBBU1NFUlRERUJVR01TRyhjb25kLCBkcHJpbnRmX2V4cCkKCiNkZWZpbmUgSENGX0lOVEVSRkFDRV9DT05ORUNUKGlmYnApCiNkZWZpbmUgSENGX0lOVEVSRkFDRV9ESVNDT05ORUNUKGlmYnApCiNkZWZpbmUgSENGX0VOVEVSX0lOVEVSRkFDRV9GVU5DVChpYmZiKQojZGVmaW5lIEhDRl9MRUFWRV9JTlRFUkZBQ0VfRlVOQ1QoaWZicCkKCiNkZWZpbmUgc3lzSW5Xb3JkKG9mZnNldEFkZHIpICBJTl9QT1JUX1dPUkQob2Zmc2V0QWRkcikKI2RlZmluZSBzeXNJbkJ5dGUob2Zmc2V0QWRkcikgIElOX1BPUlRfQllURShvZmZzZXRBZGRyKQojZGVmaW5lIHN5c091dFdvcmQoYWRkciwgdmFsdWUpIE9VVF9QT1JUX1dPUkQoYWRkciwgdmFsdWUpCgojZW5kaWYgLypJUFRfVDgzMDAgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZiAhIGRlZmluZWQgCUhDRl9BTElHTgojZGVmaW5lIAkJSENGX0FMSUdOCQkJMQkJLy9kZWZhdWx0IHRvIG5vIGFsaWdubWVudAojZW5kaWYgLy8gCQlIQ0ZfQUxJR04KCiNpZiAhIGRlZmluZWQgCUhDRl9BU1NFUlQKI2RlZmluZSAJCUhDRl9BU1NFUlQJCQkwCiNlbmRpZiAvLwkJSENGX0FTU0VSVAoKI2lmICEgZGVmaW5lZAlIQ0ZfQklHX0VORElBTgojZGVmaW5lIAkJSENGX0JJR19FTkRJQU4JCTAKI2VuZGlmIC8vIAkJSENGX0JJR19FTkRJQU4KCiNpZiAhIGRlZmluZWQJSENGX0RMX09OTFkKI2RlZmluZSAJCUhDRl9ETF9PTkxZCQkJMAojZW5kaWYgLy8gCQlIQ0ZfRExfT05MWQoKI2lmICEgZGVmaW5lZAlIQ0ZfRE1BCiNkZWZpbmUgCQlIQ0ZfRE1BCQkJCTAKI2VuZGlmIC8vIAkJSENGX0RNQQoKI2lmICEgZGVmaW5lZAlIQ0ZfRU5DQVAKI2RlZmluZQkJCUhDRl9FTkNBUAkJCUhDRl9FTkMKI2VuZGlmIC8vCQlIQ0ZfRU5DQVAKCiNpZiAhIGRlZmluZWQJSENGX0VOVFJZCiNkZWZpbmUJCQlIQ0ZfRU5UUlkoIGlmYnAgKQojZW5kaWYgLy8JCUhDRl9FTlRSWQoKI2lmICEgZGVmaW5lZAlIQ0ZfRVhJVAojZGVmaW5lCQkJSENGX0VYSVQoIGlmYnAgKQojZW5kaWYgLy8JCUhDRl9FWElUCgojaWYgISBkZWZpbmVkCUhDRl9FWFQKI2RlZmluZQkJCUhDRl9FWFQJCQkJMAojZW5kaWYgLy8JCUhDRl9FWFQKCiNpZiAhIGRlZmluZWQJSENGX0lOVF9PTgojZGVmaW5lCQkJSENGX0lOVF9PTgkJCTEKI2VuZGlmIC8vCQlIQ0ZfSU5UX09OCgojaWYgISBkZWZpbmVkCUhDRl9JTwojZGVmaW5lCQkJSENGX0lPCQkJCTAJCS8vZGVmYXVsdCAxNiBiaXRzIHN1cHBvcnQgb25seSwgcG9ydCBJL08KI2VuZGlmIC8vCQlIQ0ZfSU8KCiNpZiAhIGRlZmluZWQJSENGX0xFR0FDWQojZGVmaW5lCQkJSENGX0xFR0FDWQkJCTAKI2VuZGlmIC8vCQlIQ0ZfTEVHQUNZCgojaWYgISBkZWZpbmVkCUhDRl9NQVhfTFRWCiNkZWZpbmUgCQlIQ0ZfTUFYX0xUVgkJCTEyMDAJLy8gc3VmZmljaWVudCBmb3IgYWxsIGtub3duIHB1cnBvc2VzCiNlbmRpZiAvLwkJSENGX01BWF9MVFYKCiNpZiAhIGRlZmluZWQJSENGX1BST1RfVElNRQojZGVmaW5lIAkJSENGX1BST1RfVElNRQkJMTAwCQkvLyBudW1iZXIgb2YgMTBLIG1pY3Jvc2VjIHByb3RlY3Rpb24gdGltZXIgYWdhaW5zdCBIL1cgbWFsZnVuY3Rpb24KI2VuZGlmIC8vIAkJSENGX1BST1RfVElNRQoKI2lmICEgZGVmaW5lZAlIQ0ZfU0xFRVAKI2RlZmluZQkJCUhDRl9TTEVFUAkJCTAKI2VuZGlmIC8vCQlIQ0ZfU0xFRVAKCiNpZiAhIGRlZmluZWQJSENGX1RBTExJRVMKI2RlZmluZQkJCUhDRl9UQUxMSUVTCQkJKCBIQ0ZfVEFMTElFU19OSUMgfCBIQ0ZfVEFMTElFU19IQ0YgKQojZW5kaWYgLy8JCUhDRl9UQUxMSUVTCgojaWYgISBkZWZpbmVkIAlIQ0ZfVFlQRQojZGVmaW5lIAkJSENGX1RZUEUgCQkJMAojZW5kaWYgLy8JCUhDRl9UWVBFCgojaWYJCQkJSENGX0JJR19FTkRJQU4KI3VuZGVmCQkJSENGX0JJR19FTkRJQU4KI2RlZmluZQkJCUhDRl9CSUdfRU5ESUFOCQkxCQkvL2p1c3QgZm9yIGNvbnZlbmllbmNlIG9mIGdlbmVyYXRpbmcgY2ZnX2hjZl9vcHQKI2VuZGlmIC8vCSAJSENGX0JJR19FTkRJQU4KCiNpZgkJCQlIQ0ZfRExfT05MWQojdW5kZWYJCQlIQ0ZfRExfT05MWQojZGVmaW5lCQkJSENGX0RMX09OTFkJCQkxCQkvL2p1c3QgZm9yIGNvbnZlbmllbmNlIG9mIGdlbmVyYXRpbmcgY2ZnX2hjZl9vcHQKI2VuZGlmIC8vCQlIQ0ZfRExfT05MWQoKI2lmCQkJCUhDRl9ETUEKI3VuZGVmCQkJSENGX0RNQQojZGVmaW5lCQkJSENGX0RNQQkJCQkxCQkvL2p1c3QgZm9yIGNvbnZlbmllbmNlIG9mIGdlbmVyYXRpbmcgY2ZnX2hjZl9vcHQKI2VuZGlmIC8vCQlIQ0ZfRE1BCgojaWYJCQkJSENGX0lOVF9PTgojdW5kZWYJCQlIQ0ZfSU5UX09OCiNkZWZpbmUJCQlIQ0ZfSU5UX09OCQkJMQkJLy9qdXN0IGZvciBjb252ZW5pZW5jZSBvZiBnZW5lcmF0aW5nIGNmZ19oY2Zfb3B0CiNlbmRpZiAvLwkJSENGX0lOVF9PTgoKCiNpZiAhIGRlZmluZWQgSU5fUE9SVF9TVFJJTkdfOF8xNgojZGVmaW5lICBJTl9QT1JUX1NUUklOR184XzE2KHBvcnQsIGFkZHIsIGxlbikJSU5fUE9SVF9TVFJJTkdfMTYocG9ydCwgYWRkciwgbGVuKQojZGVmaW5lICBPVVRfUE9SVF9TVFJJTkdfOF8xNihwb3J0LCBhZGRyLCBsZW4pCU9VVF9QT1JUX1NUUklOR18xNihwb3J0LCBhZGRyLCBsZW4pCiNlbmRpZiAvLyBJTl9QT1JUX1NUUklOR184XzE2CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmICEgZGVmaW5lZAlGQVIKI2RlZmluZSAJCUZBUgkJCQkJCS8vIGRlZmF1bHQgdG8gZmxhdCAzMi1iaXRzIGNvZGUKI2VuZGlmIC8vIAkJRkFSCgp0eXBlZGVmIGhjZl84ICBGQVIgKndjaV9idWZwOwkJCS8vIHNlZ21lbnRlZCAxNi1iaXRzIG9yIGZsYXQgMzItYml0cyBwb2ludGVyIHRvIDggYml0cyB1bml0CnR5cGVkZWYgaGNmXzE2IEZBUiAqd2NpX3JlY29yZHA7CQkvLyBzZWdtZW50ZWQgMTYtYml0cyBvciBmbGF0IDMyLWJpdHMgcG9pbnRlciB0byAxNiBiaXRzIHVuaXQKCi8qCUkvTyBBZGRyZXNzIHNpemUKKglQbGF0Zm9ybXMgd2hpY2ggdXNlIHBvcnQgbWFwcGVkIEkvTyB3aWxsIChpbiBnZW5lcmFsKSBoYXZlIGEgNjRrIEkvTyBzcGFjZSwgY29udmVuaWVudGx5IGV4cHJlc3NlZCBpbiBhCioJMTYtYml0cyBxdWFudGl0eQoqCVBsYXRmb3JtcyB3aGljaCB1c2UgbWVtb3J5IG1hcHBlZCBJL08gd2lsbCAoaW4gZ2VuZXJhbCkgaGF2ZSBhbiBJL08gc3BhY2UgbXVjaCBsYXJnZXIgdGhhbiA2NGssIGFuZCBuZWVkIGEKKgkzMi1iaXRzIHF1YW50aXR5IHRvIGV4cHJlc3MgdGhlIEkvTyBiYXNlCiovCgojaWYgSENGX0lPICYgSENGX0lPX01FTQp0eXBlZGVmIGhjZl8zMiBoY2ZfaW87CiNlbHNlCnR5cGVkZWYgaGNmXzE2IGhjZl9pbzsKI2VuZGlmIC8vSENGX0lPCgojaWYgCUhDRl9QUk9UX1RJTUUgPiAxMjgKI2RlZmluZSBIQ0ZfUFJPVF9USU1FX1NIRlQJMwojZGVmaW5lIEhDRl9QUk9UX1RJTUVfRElWCTgKI2VsaWYgCUhDRl9QUk9UX1RJTUUgPiA2NAojZGVmaW5lIEhDRl9QUk9UX1RJTUVfU0hGVAkyCiNkZWZpbmUgSENGX1BST1RfVElNRV9ESVYJNAojZWxpZiAJSENGX1BST1RfVElNRSA+IDMyCiNkZWZpbmUgSENGX1BST1RfVElNRV9TSEZUCTEKI2RlZmluZSBIQ0ZfUFJPVF9USU1FX0RJVgkyCiNlbHNlIC8vSENGX1BST1RfVElNRSA+PSAxOQojZGVmaW5lIEhDRl9QUk9UX1RJTUVfU0hGVAkwCiNkZWZpbmUgSENGX1BST1RfVElNRV9ESVYJMQojZW5kaWYKCiNkZWZpbmUgSENGX1BST1RfVElNRV9DTlQgKEhDRl9QUk9UX1RJTUUgLyBIQ0ZfUFJPVF9USU1FX0RJVikKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAuIC4gLiAuIC4gLiAuIC4gLiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyogTVNGX0NPTVBPTkVOVF9JRCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgQ0ZHX0lERU5USVRZX1NUUkNUIGluIEhDRi5DCiogQ0ZHX0lERU5USVRZX1NUUkNUIGlzIGRlZmluZWQgaW4gSENGLkMgcHVyZWx5IGJhc2VkIG9uIGNvbnZlbmllbmNlIGFyZ3VtZW50cy4KKiBUaGUgSENGIGNhbiBub3QgaGF2ZSB0aGUga25vd2xlZGdlIHRvIGRldGVybWluZSB0aGUgQ29tcG9uZW50SWQgZmllbGQgb2YgdGhlIElkZW50aXR5IHJlY29yZCAoYWthIGFzCiogVmVyc2lvbiBSZWNvcmQpLCB0aGVyZWZvcmUgdGhlIE1TRiBwYXJ0IG9mIHRoZSBEcml2ZXJzIG11c3Qgc3VwcGx5IHRoaXMgdmFsdWUgdmlhIHRoZSBTeXN0ZW0gQ29uc3RhbnQKKiBNU0ZfQ09NUE9ORU5UX0lELgoqIFRoZXJlIGlzIGEgc2V0IG9mIHZhbHVlcyBwcmVkZWZpbmVkIGluIE1ERC5IIChmb3JtYXQgQ09NUF9JRF8uLi4uLikKKgoqIE5vdGUgdGhhdCB0YWtpbmcgTVNGX0NPTVBPTkVOVF9JRCBhcyBhIGRlZmF1bHQgdmFsdWUgZm9yIERVSV9DT01QQVRfVkFSIGlzIHB1cmVseSBhbiBpbXBsZW1lbnRhdGlvbgoqIGNvbnZlbmllbmNlLCB0aGUgbnVtZXJpY2FsIHZhbHVlcyBvZiB0aGVzZSB0d28gcXVhbnRpdGllcyBoYXZlIG5vbmUgZnVuY3Rpb25hbCByZWxhdGlvbnNoaXAgd2hhdHNvZXZlci4KKi8KCiNpZiBkZWZpbmVkCU1TRl9DT01QT05FTlRfSUQKCiNpZiAhIGRlZmluZWQJRFVJX0NPTVBBVF9WQVIKI2RlZmluZQkJCURVSV9DT01QQVRfVkFSCQlNU0ZfQ09NUE9ORU5UX0lECiNlbmRpZiAvLwkJRFVJX0NPTVBBVF9WQVIKCiNpZiAhIGRlZmluZWQJRFVJX0NPTVBBVF9CT1QJCS8vOz90aGlzIHdheSB1dGlsaXRpZXMgY2FuIGxvd2VyIGFzIHdlbGwgcmFpc2UgdGhlIGJvdHRvbQojZGVmaW5lCQkJRFVJX0NPTVBBVF9CT1QJCTgKI2VuZGlmIC8vCQlEVUlfQ09NUEFUX0JPVAoKI2lmICEgZGVmaW5lZAlEVUlfQ09NUEFUX1RPUAkJLy87P3RoaXMgd2F5IHV0aWxpdGllcyBjYW4gbG93ZXIgYXMgd2VsbCByYWlzZSB0aGUgdG9wCiNkZWZpbmUJCQlEVUlfQ09NUEFUX1RPUCAgICAgICA4CiNlbmRpZiAvLwkJRFVJX0NPTVBBVF9UT1AKCiNlbmRpZiAvLyBNU0ZfQ09NUE9ORU5UX0lECgojaWYgKEhDRl9UWVBFKSAmIEhDRl9UWVBFX0hJSTUKCiNpZiAhIGRlZmluZWQJSENGX0hTSV9WQVJfNQojZGVmaW5lCQkJSENGX0hTSV9WQVJfNQojZW5kaWYgLy8JCUhDRl9IU0lfVkFSXzUKCiNpZiAhIGRlZmluZWQJSENGX0FQRl9WQVJfNAojZGVmaW5lCQkJSENGX0FQRl9WQVJfNAojZW5kaWYgLy8JCUhDRl9BUEZfVkFSXzQKCiNpZiAoSENGX1RZUEUpICYgSENGX1RZUEVfV0FSUAojaWYgISBkZWZpbmVkCUhDRl9TVEFfVkFSXzQKI2RlZmluZQkJCUhDRl9TVEFfVkFSXzQKI2VuZGlmIC8vCQlIQ0ZfU1RBX1ZBUl80CiNlbHNlCiNpZiAhIGRlZmluZWQJSENGX1NUQV9WQVJfMgojZGVmaW5lCQkJSENGX1NUQV9WQVJfMgojZW5kaWYgLy8JCUhDRl9TVEFfVkFSXzIKI2VuZGlmCgojaWYgZGVmaW5lZCBIQ0ZfSFNJX1ZBUl80CmVycjogSFNJIHZhcmlhbnRzIDQgY29ycmVzcG9uZCB3aXRoIEhJSTsKI2VuZGlmIC8vIEhDRl9IU0lfVkFSXzQKCiNlbHNlCgojaWYgISBkZWZpbmVkCUhDRl9IU0lfVkFSXzQKI2RlZmluZQkJCUhDRl9IU0lfVkFSXzQJCS8vSGVybWVzLUlJIGFsbCB0eXBlcyAoZm9yIHRoZSB0aW1lIGJlaW5nISkKI2VuZGlmIC8vCQlIQ0ZfSFNJX1ZBUl80CgojaWYgISBkZWZpbmVkCUhDRl9BUEZfVkFSXzIKI2RlZmluZSAJCUhDRl9BUEZfVkFSXzIKI2VuZGlmIC8vCQlIQ0ZfQVBGX1ZBUl8yCgojaWYgISBkZWZpbmVkCUhDRl9TVEFfVkFSXzIKI2RlZmluZQkJCUhDRl9TVEFfVkFSXzIKI2VuZGlmIC8vCQlIQ0ZfU1RBX1ZBUl8yCgojZW5kaWYgLy8gSENGX1RZUEVfSElJNQoKI2lmICEgZGVmaW5lZAlIQ0ZfUFJJX1ZBUl8zCiNkZWZpbmUJCUhDRl9QUklfVkFSXzMKI2VuZGlmIC8vCQlIQ0ZfUFJJX1ZBUl8zCgojaWYgZGVmaW5lZCBIQ0ZfSFNJX1ZBUl8xIHx8IGRlZmluZWQgSENGX0hTSV9WQVJfMiB8fCBkZWZpbmVkIEhDRl9IU0lfVkFSXzMKZXJyOiBIU0kgdmFyaWFudHMgMSwgMiBhbmQgMyBjb3JyZXNwb25kIHdpdGggSC1JIG9ubHk7CiNlbmRpZiAvLyBIQ0ZfSFNJX1ZBUl8xLCBIQ0ZfSFNJX1ZBUl8yLCBIQ0ZfSFNJX1ZBUl8zCgojaWYgZGVmaW5lZCBIQ0ZfUFJJX1ZBUl8xIHx8IGRlZmluZWQgSENGX1BSSV9WQVJfMgplcnI6IHByaW1hcnkgdmFyaWFudHMgMSBhbmQgMiBjb3JyZXNwb25kIHdpdGggSC1JIG9ubHk7CiNlbmRpZiAvLyBIQ0ZfUFJJX1ZBUl8xIC8gSENGX1BSSV9WQVJfMgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC4gLiAuIC4gLiAuIC4gLiAuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyogVGhlIEJBU0VEIGN1c3RvbWl6YXRpb24gbWFjcm8gaXMgdXNlZCB0byByZXNvbHZlcyB0aGUgU1MhPURTIGNvbmZsaWN0IGZvciB0aGUgSW50ZXJydXB0IFNlcnZpY2UgbG9naWMgaW4KICogRE9TIERyaXZlcnMuIER1ZSB0byB0aGUgY3VtYmVyc29tZW5lc3Mgb2YgbWl4aW5nIEMgYW5kIGFzc2VtYmxlciBsb2NhbCBCQVNFRCB2YXJpYWJsZXMgc3RpbGwgZW5kIHVwIGluIHRoZQogKiB3cm9uZyBzZWdtZW50LiBUaGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoZSBIQ0YgdXNlcyBvbmx5IGdsb2JhbCBCQVNFRCB2YXJpYWJsZXMgb3IgSUZCLWJhc2VkIHZhcmlhYmxlcy4KICogVGhlICJCQVNFRCIgY29uc3RydWN0aW9uIChzdXBwb3NlZGx5KSBvbmx5IGFtb3VudHMgdG8gc29tZXRoaW5nIGluIHRoZSBzbWFsbCBtZW1vcnkgbW9kZWwuCiAqCiAqIE5vdGUgdGhhdCB0aGUgd2hvbGUgQkFTRUQgcmlnbWFyb2xlIGlzIG5lZWRsZXNzbHkgY29tcGxpY2F0ZWQgYmVjYXVzZSBib3RoIHRoZSBNaWNyb3NvZnQgQ29tcGlsZXIgYW5kCiAqIExpbmtlciBhcmUgdW5uZWNlc3NhcnkgcmVzdHJpY3RpdmUgaW4gd2hhdCBmYXIgcG9pbnRlciBtYW5pcHVsYXRpb24gdGhleSBhbGxvdwogKi8KCiNpZiAhIGRlZmluZWQJQkFTRUQKI2RlZmluZSAJCUJBU0VECiNlbmRpZiAvLwkJQkFTRUQKCiNpZiAhIGRlZmluZWQJRVhURVJOX0MKI2lmZGVmIF9fY3BsdXNwbHVzCiNkZWZpbmUJCQlFWFRFUk5fQyBleHRlcm4gIkMiCiNlbHNlCiNkZWZpbmUJCQlFWFRFUk5fQwojZW5kaWYgLy8gX19jcGx1c3BsdXMKI2VuZGlmIC8vCQlFWFRFUk5fQwoKI2lmICEgZGVmaW5lZAlOVUxMCiNkZWZpbmUJCQlOVUxMCSgodm9pZCAqKSAwKQojZW5kaWYgLy8JCU5VTEwKCiNpZiAhIGRlZmluZWQJVEVYVAojZGVmaW5lCQkJVEVYVCh4KQl4CiNlbmRpZiAvLwkJVEVYVAoKI2lmICFkZWZpbmVkCV9UQ0hBUl9ERUZJTkVECiNkZWZpbmUgCQlUQ0hBUgljaGFyCiNlbmRpZiAvLwkJX1RDSEFSX0RFRklORUQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKiBDIE8gTiBGIEwgSSBDIFQgICBEIEUgVCBFIEMgVCBJIE8gTiAgJiAgUiBFIFMgTyBMIFUgVCBJIE8gTiAqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZiBkZWZpbmVkIEhDRl9MSVRUTEVfRU5ESUFOCmVycjogSENGX0xJVFRMRV9FTkRJQU4gaXMgb2Jzb2xldGU7CiNlbmRpZiAvLyAJSENGX0xJVFRMRV9FTkRJQU4KCiNpZiBkZWZpbmVkIEhDRl9JTlRfT0ZGCmVycjogSENGX0lOVF9PRkYgaXMgb2Jzb2xldGU7CiNlbmRpZiAvL0hDRl9JTlRfT0ZGCgojaWYgSENGX0FMSUdOICE9IDEgJiYgSENGX0FMSUdOICE9IDIgJiYgSENGX0FMSUdOICE9IDQgJiYgSENGX0FMSUdOICE9IDgKZXJyOiBpbnZhbGlkIHZhbHVlIGZvciBIQ0ZfQUxJR047CiNlbmRpZiAvLyBIQ0ZfQUxJR04KCiNpZiAoSENGX0FTU0VSVCkgJiB+KCBIQ0ZfQVNTRVJUX1BSSU5URiB8IEhDRl9BU1NFUlRfU1dfU1VQIHwgSENGX0FTU0VSVF9NQiB8IEhDRl9BU1NFUlRfUlRfTVNGX1JUTiB8IFwKCQkJCQkgIEhDRl9BU1NFUlRfTE5LX01TRl9SVE4gKQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9BU1NFUlQ7CiNlbmRpZiAvLyBIQ0ZfQVNTRVJUCgojaWYgKEhDRl9BU1NFUlQpICYgSENGX0FTU0VSVF9NQiAmJiAhICggKEhDRl9FWFQpICYgSENGX0VYVF9NQiApCQkvL2RldGVjdCBwb3RlbnRpYWwgY29uZmxpY3QKZXJyOiB0aGVzZSBtYWNyb3MgYXJlIG5vdCB1c2VkIGNvbnNpc3RlbnRseTsKI2VuZGlmIC8vIEhDRl9BU1NFUlRfTUIgLyBIQ0ZfRVhUX01CCgojaWYgSENGX0JJR19FTkRJQU4gIT0gMCAmJiBIQ0ZfQklHX0VORElBTiAhPSAxCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0JJR19FTkRJQU47CiNlbmRpZiAvLyBIQ0ZfQklHX0VORElBTgoKI2lmIEhDRl9ETF9PTkxZICE9IDAgJiYgSENGX0RMX09OTFkgIT0gMQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9ETF9PTkxZOwojZW5kaWYgLy8gSENGX0RMX09OTFkKCiNpZiBIQ0ZfRE1BICE9IDAgJiYgSENGX0RNQSAhPSAxCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0RNQTsKI2VuZGlmIC8vIEhDRl9ETUEKCiNpZiAoSENGX0VOQ0FQKSAmIH4oIEhDRl9FTkMgfCBIQ0ZfRU5DX1NVUCApCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0VOQ0FQOwojZW5kaWYgLy8gSENGX0VOQ0FQCgojaWYgKEhDRl9FWFQpICYgfiggSENGX0VYVF9JTkZPX0xPRyB8IEhDRl9FWFRfSU5UX1RYX0VYIHwgSENGX0VYVF9UQUxMSUVTX0ZXIHwgSENGX0VYVF9UQUxMSUVTX0hDRgl8IFwKCQkJCSAgIEhDRl9FWFRfTklDX0FDQ0VTUyB8IEhDRl9FWFRfTUIgfCBIQ0ZfRVhUX0lOVF9USUNLIHwgXAoJCQkJICAgSENGX0VYVF9JRkJfU1RSQ1QgfCBIQ0ZfRVhUX0RFU0NfU1RSQ1QgfCBIQ0ZfRVhUX1RYX0NPTlQgKQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9FWFQ7CiNlbmRpZiAvLyBIQ0ZfRVhUCgojaWYgSENGX0lOVF9PTiAhPSAwICYmIEhDRl9JTlRfT04gIT0gMQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9JTlRfT047CiNlbmRpZiAvLyBIQ0ZfSU5UX09OCgojaWYgKEhDRl9JTykgJiB+KCBIQ0ZfSU9fTUVNIHwgSENGX0lPXzMyQklUUyApCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0lPOwojZW5kaWYgLy8gSENGX0lPCgojaWYgSENGX0xFR0FDWSAhPSAwICYmIEhDRl9MRUdBQ1kgIT0gMQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9MRUdBQ1k7CiNlbmRpZiAvLyBIQ0ZfTEVHQUNZCgojaWYgSENGX01BWF9MVFYgPCAxNiB8fCBIQ0ZfTUFYX0xUViA+IDIzMDQKZXJyOiBpbnZhbGlkIHZhbHVlIGZvciBIQ0ZfTUFYX0xUVjsKI2VuZGlmIC8vIEhDRl9NQVhfTFRWCgojaWYgSENGX1BST1RfVElNRSAhPSAwICYmICggSENGX1BST1RfVElNRSA8IDE5IHx8IDI1NiA8IEhDRl9QUk9UX1RJTUUgKQplcnI6IGJlbG93IG1pbmltdW0gLjA4IHNlY29uZCByZXF1aXJlZCBieSBIZXJtZXMgb3IgcG9zc2libHkgYWJvdmUgaGNmXzMyIGNhcGFjaXR5OwojZW5kaWYgLy8gSENGX1BST1RfVElNRQoKI2lmIChIQ0ZfU0xFRVApICYgfiggSENGX0NEUyB8IEhDRl9ERFMgKQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9TTEVFUDsKI2VuZGlmIC8vIEhDRl9TTEVFUAoKI2lmIChIQ0ZfU0xFRVApICYmICEgKEhDRl9JTlRfT04pCmVycjogdGhlc2UgbWFjcm9zIGFyZSBub3QgdXNlZCBjb25zaXN0ZW50bHk7CiNlbmRpZiAvLyBIQ0ZfU0xFRVAgLyBIQ0ZfSU5UX09OCgojaWYgKEhDRl9TTEVFUCkgJiYgISAoIChIQ0ZfRVhUKSAmIEhDRl9FWFRfSU5UX1RJQ0sgKQovLzs/IGVycjogdGhlc2UgbWFjcm9zIGFyZSBub3QgdXNlZCBjb25zaXN0ZW50bHk7CiNlbmRpZiAvLyBIQ0ZfU0xFRVAgLyBIQ0ZfRVhUX0lOVF9USUNLCgojaWYgKEhDRl9UQUxMSUVTKSAmIH4oIEhDRl9UQUxMSUVTX0hDRiB8IEhDRl9UQUxMSUVTX05JQyB8IEhDRl9UQUxMSUVTX1JFU0VUICkgfHwgXAoJKEhDRl9UQUxMSUVTKSA9PSBIQ0ZfVEFMTElFU19SRVNFVAplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9UQUxMSUVTOwojZW5kaWYgLy8gSENGX1RBTExJRVMKCiNpZiAoSENGX1RZUEUpICYgfihIQ0ZfVFlQRV9XUEEgfCBIQ0ZfVFlQRV9VU0IgfCBIQ0ZfVFlQRV9QUkVMT0FERUQgfCBIQ0ZfVFlQRV9ISUk1IHwgSENGX1RZUEVfV0FSUCB8IFwKCQlIQ0ZfVFlQRV9DQ1ggLyogfCBIQ0ZfVFlQRV9UWF9ERUxBWSAqLyApCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX1RZUEU7CiNlbmRpZiAvL0hDRl9UWVBFCgojaWYgKEhDRl9UWVBFKSAmIEhDRl9UWVBFX1dBUlAgJiYgKEhDRl9UWVBFKSAmIEhDRl9UWVBFX1dQQQplcnI6IGF0IG1vc3QgMSBvZiB0aGVzZSBtYWNyb3Mgc2hvdWxkIGJlIGRlZmluZWQ7CiNlbmRpZiAvL0hDRl9UWVBFX1dBUlAgLyBIQ0ZfVFlQRV9XUEEKCiNlbmRpZiAvL0hDRkNGR19ICgo=