Ci8vICAgdmltOnR3PTExMDp0cz00OgojaWZuZGVmIEhDRkNGR19ICiNkZWZpbmUgSENGQ0ZHX0ggMQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqIEZJTEUJIDogaGNmY2ZnLnRwbCAvLyBoY2ZjZmcuaAoqCiogREFURSAgIDogJERhdGU6IDIwMDQvMDgvMDUgMTE6NDc6MTAgJCAgICRSZXZpc2lvbjogMS42ICQKKiBPcmlnaW5hbDogMjAwNC8wNC8wOCAxNToxODoxNiAgICBSZXZpc2lvbjogMS40MCAgICAgIFRhZzogdDIwMDQwNDA4XzAxCiogT3JpZ2luYWw6IDIwMDQvMDQvMDEgMTU6MzI6NTUgICAgUmV2aXNpb246IDEuMzggICAgICBUYWc6IHQ3XzIwMDQwNDAxXzAxCiogT3JpZ2luYWw6IDIwMDQvMDMvMTAgMTU6Mzk6MjggICAgUmV2aXNpb246IDEuMzQgICAgICBUYWc6IHQyMDA0MDMxMF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAzLzAzIDE0OjEwOjEyICAgIFJldmlzaW9uOiAxLjMyICAgICAgVGFnOiB0MjAwNDAzMDRfMDEKKiBPcmlnaW5hbDogMjAwNC8wMy8wMiAwOToyNzoxMiAgICBSZXZpc2lvbjogMS4zMCAgICAgIFRhZzogdDIwMDQwMzAyXzAzCiogT3JpZ2luYWw6IDIwMDQvMDIvMjQgMTM6MDA6MjggICAgUmV2aXNpb246IDEuMjUgICAgICBUYWc6IHQyMDA0MDIyNF8wMQoqIE9yaWdpbmFsOiAyMDA0LzAyLzE4IDE3OjEzOjU3ICAgIFJldmlzaW9uOiAxLjIzICAgICAgVGFnOiB0MjAwNDAyMTlfMDEKKgoqIEFVVEhPUiA6IE5pY28gVmFsc3RlcgoqCiogREVTQyAgIDogSENGIEN1c3RvbWl6YXRpb24gTWFjcm9zCiogaGNmY2ZnLnRwbCBsaXN0IGFsbCAjZGVmaW5lcyB3aGljaCBtdXN0IGJlIHNwZWNpZmllZCB0bzoKKiAgIGFkanVzdCB0aGUgSENGIGZ1bmN0aW9ucyBkZWZpbmVkIGluIEhDRi5DIHRvIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzcGVjaWZpYyBlbnZpcm9ubWVudAoqCQlvIG1heGltdW0gc2l6ZXMgZm9yIG1lc3NhZ2VzCioJCW8gRW5kaWFuZXNzCioJQ29tcGlsZXIgc3BlY2lmaWMgbWFjcm9zCioJCW8gcG9ydCBJL08gbWFjcm9zCioJCW8gdHlwZSBkZWZpbml0aW9ucwoqCiogQnkgY29weWluZyBIQ0ZDRkcuVFBMIHRvIEhDRkNGRy5IIGFuZCAtaWYgbmVlZGVkLSBtb2RpZnlpbmcgdGhlICNkZWZpbmVzIHRoZSBXQ0kgZnVuY3Rpb25hbGl0eSBjYW4gYmUKKiB0YWlsb3JlZAoqCiogU3VwcG9ydGVkIGVudmlyb25tZW50czoKKiBXVkxBTl80MQlNaW5pcG9ydAkJCQkJCQkJTkRJUyAzLjEKKiBXVkxBTl80MglQYWNrZXQJCQkJCQkJCQlNaWNyb3NvZnQgVmlzdWFsIEMgMS41CiogV1ZMQU5fNDMJMTYgYml0cyBET1MgT0RJCQkJCQkJCU1pY3Jvc29mdCBWaXN1YWwgQyAxLjUKKiBXVkxBTl80NAkzMiBiaXRzIE9ESSAoX19ORVRXQVJFXzM4Nl9fKQkJCVdBVENPTQoqIFdWTEFOXzQ1CU1BQ19PUwkJCQkJCQkJCU1QVz8sIFN5bWFudGVjPwoqIFdWTEFOXzQ2CVdpbmRvd3MgQ0UgKF9XSU4zMl9XQ0UpCQkJCQlNaWNyb3NvZnQgPwoqIFdWTEFOXzQ3CUxJTlVYICAoX19MSU5VWF9fKQkJCQkJCUdDQywgZGlzY2FyZGVkLCBiYXNlZCBvbiBHUEwnZWQgSENGLWxpZ2h0CiogV1ZMQU5fNDgJTWluaXBvcnQJCQkJCQkJCU5ESVMgNQoqIFdWTEFOXzQ5CUxJTlVYICAoX19MSU5VWF9fKQkJCQkJCUdDQywgb3JpZ2luYWxseSBiYXNlZCBvbiBwcmUtY29tcGlsZWQgSENGX2xpYnJhcnkKKiAJCQkJCQkJCQkJCQkJbWlncmF0ZWQgdG8gdXNlIHRoZSBIQ0Ygc291cmNlcyB3aGVuIEx1Y2VudCBUZWNobm9sb2dpZXMKKiAJCQkJCQkJCQkJCQkJYnJvdWdodCB0aGUgSENGIG1vZHVsZSB1bmRlciBHUEwKKiBXVkxBTl81MQlNaW5pcG9ydCBVU0IJCQkJCQkJTkRJUyA1CiogV1ZMQU5fNTIJTWluaXBvcnQJCQkJCQkJCU5ESVMgNAoqIFdWTEFOXzUzCVZ4V29ya3MgRU5EIFN0YXRpb24gZHJpdmVyCiogV1ZMQU5fNTQJVnhXb3JrcyBFTkQgQWNjZXNzIFBvaW50IGRyaXZlcgoqIFdWTEFOXzgxCVdhdmVQb2ludAkJCQkJCQkJQk9STEFORCBDCiogV0NJVFNUCUluaG91c2UgdGVzdCB0b29sCQkJCQkJTWljcm9zb2Z0IFZpc3VhbCBDIDEuNQoqIFdTVQkJV2F2ZUxBTiBTdGF0aW9uIFVwZGF0ZQkJCQkJTWljcm9zb2Z0IFZpc3VhbCBDID8/CiogU0NPIFVOSVgJbm90IHlldCBhY3R1YWxseSB1c2VkID8JCQkJCT8KKiBfX3BwYwkJT0VNIHN1cHBsaWVkCQkJCQkJCT8KKiBfQU0yOUsJT0VNIHN1cHBsaWVkCQkJCQkJCT8KKiA/CQkJT0VNIHN1cHBsaWVkCQkJCQkJCU1pY3JvdGVjIFJlc2VhcmNoIDgwWDg2IENvbXBpbGVyCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqCiogU09GVFdBUkUgTElDRU5TRQoqCiogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCiogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwoqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCioKKiBDT1BZUklHSFQgqSAxOTk0IC0gMTk5NQlieSBBVCZULgkJCQlBbGwgUmlnaHRzIFJlc2VydmVkCiogQ09QWVJJR0hUIKkgMTk5NiAtIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcy4JQWxsIFJpZ2h0cyBSZXNlcnZlZAoqIENPUFlSSUdIVCCpIDIwMDEgLSAyMDA0CWJ5IEFnZXJlIFN5c3RlbXMgSW5jLglBbGwgUmlnaHRzIFJlc2VydmVkCiogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKgoqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoqCiogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwoqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQoqICAgIGRpc3RyaWJ1dGlvbi4KKgoqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAoqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKgoqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCiogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCioKKiBEaXNjbGFpbWVyCioKKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQoqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCiogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQoqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwoqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAoqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAoqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCiogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKiBEQU1BR0UuCioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoJQWxpZ25tZW50CioJU29tZSBwbGF0Zm9ybXMgY2FuIGFjY2VzcyB3b3JkcyBvbiBvZGQgYm91bmRhcmllcyAod2l0aCBwb3NzaWJseSBhbiBwZXJmb3JtYW5jZSBpbXBhY3QpLCBhdCBvdGhlcgoqCXBsYXRmb3JtcyBzdWNoIGFuIGFjY2VzcyBtYXkgcmVzdWx0IGluIGEgbWVtb3J5IGFjY2VzcyB2aW9sYXRpb24uCioJSXQgaXMgYXNzdW1lZCB0aGF0IGV2ZXJ5d2hlcmUgd2hlcmUgdGhlIEhDRiBjYXN0cyBhIGNoYXIgcG9pbnRlciBpbnRvIGEgd29yZCBwb2ludGVyLCB0aGUgYWxpZ25tZW50CioJY3JpdGVyaWEgYXJlIG1ldC4gVGhpcyBwdXQgc29tZSByZXN0cmljdGlvbnMgb24gdGhlIE1TRiwgd2hpY2ggYXJlIGFzc3VtZWQgdG8gYmUgImF1dG9tYXRpY2FsbHkiIGZ1bGZpbGxlZAoqCWF0IHRoZSBhcHBsaWNhYmxlIHBsYXRmb3JtcwoqCVRvIGFzc2VydCB0aGlzIGFzc3VtcHRpb24sIHRoZSBtYWNybyBIQ0ZfQUxJR04gY2FuIGJlIGRlZmluZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEsIG1lYW5pbmcgYnl0ZQoqCWFsaWdubWVudCAob3Igbm8gYWxpZ25tZW50KSwgYSB2YWx1ZSBvZiAyIG1lYW5zIHdvcmQgYWxpZ25tZW50LCBhIHZhbHVlIG9mIDQgbWVhbnMgZG91YmxlIHdvcmQgYWxpZ25tZW50CiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgSU5fUE9SVF9TVFJJTkdfOF8xNiAgUyBhIG0gcCBsIGUgcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKCQkvLyBDIGltcGxlbWVudGF0aW9uIHdoaWNoIGxldCB0aGUgcHJvY2Vzc29yIGhhbmRsZSB0aGUgd29yZC1hdC1ieXRlLWJvdW5kYXJ5IHByb2JsZW0KI2RlZmluZSBJTl9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKSB3aGlsZSAoIG4tLSApIAlcCgl7ICooaGNmXzE2IEZBUiopYWRkciA9IElOX1BPUlRfV09SRCggcG9ydCApOyAoKGhjZl84IEZBUiopYWRkcikrPTI7IH0KCgkJLy8gQyBpbXBsZW1lbnRhdGlvbiB3aGljaCBoYW5kbGVzIHRoZSB3b3JkLWF0LWJ5dGUtYm91bmRhcnkgcHJvYmxlbQojZGVmaW5lIElOX1BPUlRfU1RSSU5HXzhfMTYoIHBvcnQsIGFkZHIsIG4pCXdoaWxlICggbi0tICkJIFwKCXsgaGNmXzE2IGkgPSBJTl9QT1JUX1dPUkQocG9ydCk7ICooKGhjZl84IEZBUiopYWRkcikrKyA9IChoY2ZfOClpOyAqKChoY2ZfOCBGQVIqKWFkZHIpKysgPSAoaGNmXzgpKGk+PjgpO30KCgkJLy8gQXNzZW1ibGVyIGltcGxlbWVudGF0aW9uCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfOF8xNiggcG9ydCwgYWRkciwgbGVuKSBfX2FzbQkJXAp7CQkJCQkJCQkJCQkJCQlcCglfX2FzbSBwdXNoIGRpCQkJCQkJCQkJCVwKCV9fYXNtIHB1c2ggZXMJCQkJCQkJCQkJXAoJX19hc20gbW92IGN4LGxlbgkJCQkJCQkJCVwKCV9fYXNtIGxlcyBkaSxhZGRyCQkJCQkJCQkJXAoJX19hc20gbW92IGR4LHBvcnQJCQkJCQkJCQlcCglfX2FzbSByZXAgaW5zdwkJCQkJCQkJCQlcCglfX2FzbSBwb3AgZXMJCQkJCQkJCQkJXAoJX19hc20gcG9wIGRpCQkJCQkJCQkJCVwKfQoKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgT1VUX1BPUlRfU1RSSU5HXzhfMTYgIFMgYSBtIHAgbCBlIHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoJCS8vIEMgaW1wbGVtZW50YXRpb24gd2hpY2ggbGV0IHRoZSBwcm9jZXNzb3IgaGFuZGxlIHRoZSB3b3JkLWF0LWJ5dGUtYm91bmRhcnkgcHJvYmxlbQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKQl3aGlsZSAoIG4tLSApIFwKCXsgT1VUX1BPUlRfV09SRCggcG9ydCwgKihoY2ZfMTYgRkFSKilhZGRyICkgOyAoKGhjZl84IEZBUiopYWRkcikrPTI7IH0KCgkJLy8gQyBpbXBsZW1lbnRhdGlvbiB3aGljaCBoYW5kbGVzIHRoZSB3b3JkLWF0LWJ5dGUtYm91bmRhcnkgcHJvYmxlbQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBuKQl3aGlsZSAoIG4tLSApIFwKCXsgT1VUX1BPUlRfV09SRCggcG9ydCwgKigoaGNmXzggRkFSKilhZGRyKSB8ICooKChoY2ZfOCBGQVIqKWFkZHIpKzEpPDw4ICApOyAoaGNmXzggRkFSKilhZGRyKz0yOyB9CgoJCS8vIEFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbgojZGVmaW5lIE9VVF9QT1JUX1NUUklOR184XzE2KCBwb3J0LCBhZGRyLCBsZW4pIF9fYXNtCVwKewkJCQkJCQkJCQkJCQkJXAoJX19hc20gcHVzaCBzaQkJCQkJCQkJCQlcCglfX2FzbSBwdXNoIGRzCQkJCQkJCQkJCVwKCV9fYXNtIG1vdiBjeCxsZW4JCQkJCQkJCQlcCglfX2FzbSBsZHMgc2ksYWRkcgkJCQkJCQkJCVwKCV9fYXNtIG1vdiBkeCxwb3J0CQkJCQkJCQkJXAoJX19hc20gcmVwIG91dHN3CQkJCQkJCQkJCVwKCV9fYXNtIHBvcCBkcwkJCQkJCQkJCQlcCglfX2FzbSBwb3Agc2kJCQkJCQkJCQkJXAp9CgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKiogIEMgTyBNIFAgSSBMIEUgUiAgIFMgUCBFIEMgSSBGIEkgQyAgIE0gQSBDIFIgTyBTICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioKKgkJCSEhISEhISEhISEhISEhISEhISEhISEhISEgTm90ZSB0byB0aGUgSENGLWltcGxlbWVudG9yICEhISEhISEhISEhISEhISEhISEhISEhISEKKgkJCSEhISEgRG8gbm90IGNhbGwgdGhlc2UgbWFjcm9zIHdpdGggcGFyYW1ldGVycyB3aGljaCBpbnRyb2R1Y2Ugc2lkZSBlZmZlY3RzICEhISEKKgkJCSEhISEhISEhISEhISEhISEhISEhISEhISEgTm90ZSB0byB0aGUgSENGLWltcGxlbWVudG9yICEhISEhISEhISEhISEhISEhISEhISEhISEKKgoqCiogQnkgc2VsZWN0aW5nIHRoZSBhcHByb3ByaWF0ZSBNYWNybyBkZWZpbml0aW9ucyBieSBtZWFucyBvZiBtb2RpZnlpbmcgdGhlICIjaWZkZWYgMC8xIiBsaW5lcywgdGhlIEhDRiBjYW4gYmUKKiBhZGp1c3RlZCBmb3IgdGhlIEkvTyBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzcGVjaWZpYyBjb21waWxlcgoqCiogSWYgbmVlZGVkIHRoZSBtYWNyb3MgY2FuIGJlIG1vZGlmaWVkIG9yIHJlcGxhY2VkIHdpdGggZGVmaW5pdGlvbnMgYXBwcm9wcmlhdGUgZm9yIHlvdXIgcGVyc29uYWwgcGxhdGZvcm0uCiogSWYgeW91IG5lZWQgdG8gbWFrZSBzdWNoIGNoYW5nZXMgaXQgaXMgYXBwcmVjaWF0ZWQgaWYgeW91IGluZm9ybSBBZ2VyZSBTeXN0ZW1zCiogVGhhdCB3YXkgdGhlIGNoYW5nZXMgY2FuIGJlY29tZSBwYXJ0IG9mIHRoZSBuZXh0IHJlbGVhc2Ugb2YgdGhlIFdDSQoqCiogRm9yIGNvbnZlbmllbmNlIG9mIHRoZSBNU0YtcHJvZ3JhbW1lciwgYWxsIG1hY3JvcyBhcmUgYWxsb3dlZCB0byBtb2RpZnkgdGhlaXIgcGFyYW1ldGVycyAoYWx0aG91Z2ggc29tZQoqIG1pZ2h0IGFyZ3VlIHRoYXQgdGhpcyB3b3VsZCBjb25zdGl0dXRlIGJhZCBjb2RpbmcgcHJhY3RpY2UpLiBUaGlzIGhhcyBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBIQ0YsIGUuZy4gYXMgYQoqIGNvbnNlcXVlbmNlIHRoZXNlIG1hY3JvcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgd2hpY2ggaGF2ZSBzaWRlIGVmZmVjdHMsIGUuZyBhdXRvLWluY3JlbWVudC4KKgoqIGluIHRoZSBNaWNyb3NvZnQgaW1wbGVtZW50YXRpb24gb2YgaW5saW5lIGFzc2VtYmx5IGl0IGlzIE8uSy4gdG8gY29ycnVwdCBhbGwgZmxhZ3MgZXhjZXB0IHRoZSBkaXJlY3Rpb24gZmxhZwoqIGFuZCB0byBjb3JydXB0IGFsbCByZWdpc3RlcnMgZXhjZXB0IHRoZSBzZWdtZW50IHJlZ2lzdGVycyBhbmQgRURJLCBFU0ksIEVTUCBhbmQgRUJQIChvciB0aGVpciAxNiBiaXRzCiogZXF1aXZhbGVudHMpLiAgT3RoZXIgZW52aXJvbm1lbnRzIG1heSBoYXZlIG90aGVyIGNvbnN0cmFpbnRzCioKKiBpbiB0aGUgSW50ZWwgZW52aXJvbm1lbnQgaXQgaXMgTy5LIHRvIGhhdmUgYSB3b3JkIChhcyBhIDE2IGJpdHMgcXVhbnRpdHkpIGF0IGEgYnl0ZSBib3VuZGFyeSwgaGVuY2UKKiBJTl8vT1VUX1BPUlRfU1RSSU5HXzhfMTYgY2FuIG1vdmUgd29yZHMgYmV0d2VlbiBQQy1tZW1vcnkgYW5kIE5JQy1tZW1vcnkgd2l0aCBhcyBvbmx5IGNvbnN0cmFpbnQgdGhhdCB0aGUKKiB3b3JkcyBhcmUgb24gYSB3b3JkIGJvdW5kYXJ5IGluIE5JQy1tZW1vcnkuIFRoaXMgZG9lcyBub3QgaG9sZCB0cnVlIGZvciBhbGwgY29uY2VpdmFibGUgZW52aXJvbm1lbnRzLCBlLmcuCiogYW4gTW90b3JvbGEgNjh4eHggZG9lcyBub3QgYWxsb3cgdGhpcy4gUHJvYmFibHkvaG9wZWZ1bGx5IHRoZSBib3VuZGFyeSBjb25kaXRpb25zIGltcG9zZWQgYnkgdGhlc2UgdHlwZSBvZgoqIHBsYXRmb3JtcyBwcmV2ZW50IHRoaXMgY2FzZSBmcm9tIG1hdGVyaWFsaXppbmcuICBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgT1VUX1BPUlRfU1RSSU5HXzhfMTYgbXVzdCBiZSBjb2RlZAoqIGJ5IGNvbWJpbmluZyB0d28gSG9zdCBtZW1vcnkgaGNmXzggdmFsdWVzIGF0IGEgdGltZSB0byBhIHNpbmdsZSBoY2ZfMTYgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIHRoZSBOSUMgYW5kCiogSU5fUE9SVF9TVFJJTkdfOF8xNiB0aGUgc2luZ2xlIGhjZl8xNiByZXRyaWV2ZWQgZnJvbSB0aGUgTklDIG11c3QgYmUgc3BsaXQgaW4gdHdvIGhjZl84IHZhbHVlcyB0byBiZSBzdG9yZWQKKiBpbiBIb3N0IG1lbW9yeSAoc2VlIHRoZSBzYW1wbGUgY29kZSBhYm92ZSkKKgoqCVRoZSBwcm90b3R5cGVzIGFuZCBmdW5jdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBtYWNyb3MgYXJlOgoqCioJaGNmXzE2CUlOX1BPUlRfV09SRCggaGNmXzE2IHBvcnQgKQoqCQkJUmVhZHMgYSB3b3JkICgxNiBiaXRzKSBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydAoqCioJdm9pZAlPVVRfUE9SVF9XT1JEKCBoY2ZfMTYgcG9ydCwgaGNmXzE2IHZhbHVlKQoqCQkJV3JpdGVzIGEgd29yZCAoMTYgYml0cykgdG8gdGhlIHNwZWNpZmllZCBwb3J0CioKKgloY2ZfMTYJSU5fUE9SVF9EV09SRCggaGNmXzE2IHBvcnQgKQoqCQkJUmVhZHMgYSBkd29yZCAoMzIgYml0cykgZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQKKgoqCXZvaWQJT1VUX1BPUlRfRFdPUkQoIGhjZl8xNiBwb3J0LCBoY2ZfMzIgdmFsdWUpCioJCQlXcml0ZXMgYSBkd29yZCAoMzIgYml0cykgdG8gdGhlIHNwZWNpZmllZCBwb3J0CioKKgl2b2lkCUlOX1BPUlRfU1RSSU5HXzhfMTYoIHBvcnQsIGFkZHIsIGxlbikKKgkJCVJlYWRzIGxlbiBudW1iZXIgb2Ygd29yZHMgKDE2IGJpdHMpIGZyb20gTklDIG1lbW9yeSB2aWEgdGhlIHNwZWNpZmllZCBwb3J0IHRvIHRoZSAoRkFSKQoqCQkJYnl0ZS1wb2ludGVyIGFkZHIgaW4gUEMtUkFNCioJCQlOb3RlIHRoYXQgbGVuIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHdvcmRzLCBOT1QgdGhlIG51bWJlciBvZiBieXRlcwoqCQkJISEhTk9URSwgYWx0aG91Z2ggbGVuIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHdvcmRzLCBhZGRyIE1VU1QgYmUgYSBjaGFyIHBvaW50ZXIgTk9URSEhIQoqCQkJU2VlIGFsc28gdGhlIGNvbW1vbiBub3RlcyBmb3IgSU5fUE9SVF9TVFJJTkdfOF8xNiBhbmQgT1VUX1BPUlRfU1RSSU5HXzhfMTYKKgoqCXZvaWQJT1VUX1BPUlRfU1RSSU5HXzhfMTYoIHBvcnQsIGFkZHIsIGxlbikKKgkJCVdyaXRlcyBsZW4gbnVtYmVyIG9mIHdvcmRzICgxNiBiaXRzKSBmcm9tIHRoZSAoRkFSKSBieXRlLXBvaW50ZXIgYWRkciBpbiBQQy1SQU0gdmlhIHRoZSBzcGVjaWZpZWQKKgkJCXBvcnQgdG8gTklDIG1lbW9yeQoqCQkJTm90ZSB0aGF0IGxlbiBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB3b3JkcywgTk9UIHRoZSBudW1iZXIgb2YgYnl0ZXMuCioJCQkhISFOT1RFLCBhbHRob3VnaCBsZW4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygd29yZHMsIGFkZHIgTVVTVCBiZSBhIGNoYXIgcG9pbnRlciBOT1RFISEhCioKKgkJCVRoZSBwZWN1bGlhciBjb21iaW5hdGlvbiBvZiB3b3JkLWxlbmd0aCBhbmQgY2hhciBwb2ludGVycyBmb3IgSU5fUE9SVF9TVFJJTkdfOF8xNiBhcyB3ZWxsIGFzCioJCQlPVVRfUE9SVF9TVFJJTkdfOF8xNiBpcyBqdXN0aWZpZWQgYnkgdGhlIGFzc3VtcHRpb24gdGhhdCBpdCBvZmZlcnMgYSBtb3JlIG9wdGltYWwgYWxnb3JpdGhtCioKKgl2b2lkCUlOX1BPUlRfU1RSSU5HXzMyKCBwb3J0LCBhZGRyLCBsZW4pCioJCQlSZWFkcyBsZW4gbnVtYmVyIG9mIGRvdWJsZS13b3JkcyAoMzIgYml0cykgZnJvbSBOSUMgbWVtb3J5IHZpYSB0aGUgc3BlY2lmaWVkIHBvcnQgdG8gdGhlIChGQVIpCioJCQlkb3VibGUtd29yZCBhZGRyZXNzIGFkZHIgaW4gUEMtUkFNCioKKgl2b2lkCU9VVF9QT1JUX1NUUklOR18zMiggcG9ydCwgYWRkciwgbGVuKQoqCQkJV3JpdGVzIGxlbiBudW1iZXIgb2YgZG91YmxlLXdvcmRzICgzMiBiaXRzKSBmcm9tIHRoZSAoRkFSKSBkb3VibGUtd29yZCBhZGRyZXNzIGFkZHIgaW4gUEMtUkFNIHZpYQoqCQkJdGhlIHNwZWNpZmllZCBwb3J0IHRvIE5JQyBtZW1vcnkKKgoqCQkJISEhISEhISEhISEhISEhISEhISEhISEhISBOb3RlIHRvIHRoZSBIQ0YtaW1wbGVtZW50b3IgISEhISEhISEhISEhISEhISEhISEhISEhIQoqCQkJISEhISBEbyBub3QgY2FsbCB0aGVzZSBtYWNyb3Mgd2l0aCBwYXJhbWV0ZXJzIHdoaWNoIGludHJvZHVjZSBzaWRlIGVmZmVjdHMgISEhIQoqCQkJISEhISEhISEhISEhISEhISEhISEhISEhISBOb3RlIHRvIHRoZSBIQ0YtaW1wbGVtZW50b3IgISEhISEhISEhISEhISEhISEhISEhISEhIQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgZGVmaW5lIElOVCBUeXBlcyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCQloY2ZfODsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJCWhjZl8xNjsKdHlwZWRlZiB1bnNpZ25lZCBsb25nCQkJaGNmXzMyOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogIGRlZmluZSBJL08gVHlwZXMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBIQ0ZfSU9fTUVNICAgICAJCQkweDAwMDEJLy8gbWVtb3J5IG1hcHBlZCBJL08JKCAwOiBQb3J0IEkvTyApCiNkZWZpbmUgSENGX0lPXzMyQklUUyAgIAkgIAkweDAwMDIgCS8vIDMyQml0cyBzdXBwb3J0CQkoIDA6IG9ubHkgMTYgQml0cyBJL08pCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICNkZWZpbmUgSENGX1RZUEUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgSENGX1RZUEVfTk9ORQkJCTB4MDAwMAkvLyBObyB0eXBlCiNkZWZpbmUgSENGX1RZUEVfV1BBCQkJMHgwMDAxCS8vIFdQQSBzdXBwb3J0CiNkZWZpbmUgSENGX1RZUEVfVVNCCQkJMHgwMDAyCS8vIHJlc2VydmVkIChVU0IgRG9uZ2xlIGRyaXZlciBzdXBwb3J0KQovLyNkZWZpbmUgSENGX1RZUEVfSElJCQkJMHgwMDA0CS8vIEhlcm1lcy1JSSwgdG8gZGlzY3JpbWluYXRlIEgtSSBhbmQgSC1JSSBDRkdfSENGX09QVF9TVFJDVAojZGVmaW5lIEhDRl9UWVBFX1dBUlAJCQkweDAwMDgJLy8gV0FSUCBGL1cKI2RlZmluZSBIQ0ZfVFlQRV9QUkVMT0FERUQJCTB4MDA0MAkvLyBwcmUtbG9hZGVkIEYvVwojZGVmaW5lIEhDRl9UWVBFX0hJSTUJCQkweDAwODAJLy8gSGVybWVzLTIuNSBIL1cKI2RlZmluZSBIQ0ZfVFlQRV9DQ1gJCQkweDAxMDAJLy8gQ0tJUAojZGVmaW5lIEhDRl9UWVBFX0JFQUdMRV9ISUk1CTB4MDIwMAkvLyBCZWFnbGUgSGVybWVzLTIuNSBIL1cKI2RlZmluZSBIQ0ZfVFlQRV9UWF9ERUxBWQkJMHg0MDAwCS8vIERlbGF5ZWQgdHJhbnNtaXNzaW9uICggbm9uLURNQSBvbmx5KQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjZGVmaW5lIEhDRl9BU1NFUlQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIEhDRl9BU1NFUlRfTk9ORQkJCTB4MDAwMAkvLyBObyBhc3NlcnQgc3VwcG9ydAojZGVmaW5lIEhDRl9BU1NFUlRfUFJJTlRGCQkweDAwMDEJLy8gSGVybWVzIGdlbmVyYXRlZCBkZWJ1ZyBpbmZvCiNkZWZpbmUgSENGX0FTU0VSVF9TV19TVVAJCTB4MDAwMgkvLyBsb2dnaW5nIHZpYSBIZXJtZXMgc3VwcG9ydCByZWdpc3RlcgojZGVmaW5lIEhDRl9BU1NFUlRfTUIJCQkweDAwMDQJLy8gbG9nZ2luZyB2aWEgTWFpbGJveAojZGVmaW5lIEhDRl9BU1NFUlRfUlRfTVNGX1JUTgkweDQwMDAJLy8gZHluYW1pY2FsbHkgYmluZGluZyBvZiBtc2ZfYXNzZXJ0IHJvdXRpbmUKI2RlZmluZSBIQ0ZfQVNTRVJUX0xOS19NU0ZfUlROCTB4ODAwMAkvLyBzdGF0aWNhbGx5IGJpbmRpbmcgb2YgbXNmX2Fzc2VydCByb3V0aW5lCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICNkZWZpbmUgSENGX0VOQ0FQICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgSENGX0VOQ19OT05FCQkJMHgwMDAwCS8vIE5vIGVuY2Fwc3VsYXRpb24gc3VwcG9ydAojZGVmaW5lIEhDRl9FTkMJCQkJCTB4MDAwMQkvLyBIQ0YgaGFuZGxlcyBFbi0vRGVjYXBzdWxhdGlvbgojZGVmaW5lIEhDRl9FTkNfU1VQCQkJCTB4MDAwMgkvLyBIQ0Ygc3VwcG9ydHMgTVNGIHRvIGhhbmRsZSBFbi0vRGVjYXBzdWxhdGlvbgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjZGVmaW5lIEhDRl9FWFQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojZGVmaW5lIEhDRl9FWFRfTk9ORQkJCTB4MDAwMAkvLyBObyBleHBhbmRlZCBmZWF0dXJlcwojZGVmaW5lIEhDRl9FWFRfSU5GT19MT0cJCTB4MDAwMQkvLyBsb2dnaW5nIG9mIEhlcm1lcyBJbmZvIGZyYW1lcwovLyNkZWZpbmUgSENGX0VYVF9JTlRfVFhfT0sJCTB4MDAwMgkvLyBSRVNFUlZFRCEhISBtb25pdG9yaW5nIHN1Y2Nlc3NmdWwgVHggbWVzc2FnZQojZGVmaW5lIEhDRl9FWFRfSU5UX1RYX0VYCQkweDAwMDQJLy8gbW9uaXRvcmluZyB1bnN1Y2Nlc3NmdWwgVHggbWVzc2FnZQovLyNkZWZpbmUgSENGX0VYVF9NT05fTU9ERQkJMHgwMDA4CS8vIExFR0FDWQojZGVmaW5lIEhDRl9FWFRfVEFMTElFU19GVwkJMHgwMDEwCS8vIHN1cHBvcnQgZm9yIHVwIHRvIDMyIEhlcm1lcyBFbmdpbmVlcmluZyB0YWxsaWVzCiNkZWZpbmUgSENGX0VYVF9UQUxMSUVTX0hDRgkJMHgwMDIwCS8vIHN1cHBvcnQgZm9yIHVwIHRvIDggSENGIEVuZ2luZWVyaW5nIHRhbGxpZXMKI2RlZmluZSBIQ0ZfRVhUX05JQ19BQ0NFU1MJCTB4MDA0MAkvLyBkaXJlY3QgYWNjZXNzIHZpYSBBdXgtcG9ydHMgYW5kIHRvIEhlcm1lcyByZWdpc3RlcnMgYW5kIGNvbW1hbmRzCiNkZWZpbmUgSENGX0VYVF9NQgkJCQkweDAwODAJLy8gTWFpbEJveCBjb2RlIGV4cGFuZGVkCiNkZWZpbmUgSENGX0VYVF9JRkJfU1RSQ1QgCQkweDAxMDAJLy8gTVNGIGN1c3RvbSBwb2ludGVyIGluIElGQgojZGVmaW5lIEhDRl9FWFRfREVTQ19TVFJDVCAJCTB4MDIwMAkvLyBNU0YgY3VzdG9tIHBvaW50ZXIgaW4gRGVzY3JpcHRvcgojZGVmaW5lIEhDRl9FWFRfVFhfQ09OVAkJCTB4NDAwMAkvLyBDb250aW51b3VzIHRyYW5zbWl0IHRlc3QKI2RlZmluZSBIQ0ZfRVhUX0lOVF9USUNLCQkweDgwMDAJLy8gZW5hYmxlcyBUaW1lclRpY2sgaW50ZXJydXB0IGdlbmVyYXRpb24KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogI2RlZmluZSBIQ0ZfU0xFRVAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBIQ0ZfRERTCQkJCQkweDAwMDEJLy8gRGlzY29ubmVjdGVkIERlZXAgU2xlZXAKI2RlZmluZSBIQ0ZfQ0RTCQkJCQkweDAwMDIJLy8gQ29ubmVjdGVkIERlZXAgU2xlZXAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogI2RlZmluZSBIQ0ZfVEFMTElFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNkZWZpbmUgSENGX1RBTExJRVNfTk9ORQkJMHgwMDAwCS8vIE5vIHRhbGx5IHN1cHBvcnQKI2RlZmluZSBIQ0ZfVEFMTElFU19OSUMJCQkweDAwMDEJLy8gSGVybWVzIFRhbGxpZXMgYWNjdW11bGF0ZWQgaW4gSUZCCiNkZWZpbmUgSENGX1RBTExJRVNfSENGCQkJMHgwMDAyCS8vIEhDRiBUYWxsaWVzIGFjY3VtdWxhdGVkIGluIElGQgojZGVmaW5lIEhDRl9UQUxMSUVTX1JFU0VUCQkweDgwMDAJLy8gVGFsbGllcyBpbiBJRkIgYXJlIHJlc2V0IHdoZW4gcmVwb3J0ZWQgdmlhIGhjZl9nZXRfaW5mbwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgTCBJIE4gVSBYICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZmRlZiBXVkxBTl80OQojaW5jbHVkZSA8YXNtL2lvLmg+Ci8vI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8d2xfdmVyc2lvbi5oPgoKLyogVGhlIGZvbGxvd2luZyBtYWNybyBlbnN1cmVzIHRoYXQgbm8gc3ltYm9scyBhcmUgZXhwb3J0ZWQsIG1pbmltaXppbmcgdGhlIGNoYW5jZSBvZiBhIHN5bWJvbAogICBjb2xsaXNpb24gaW4gdGhlIGtlcm5lbCAqLwovL0VYUE9SVF9OT19TWU1CT0xTOyAgLy87P3RoaXMgcGxhY2Ugc2VlbXMgbm90IGFwcHJvcHJpYXRlbHkgdG8gbWUKCi8vI2RlZmluZSBIQ0ZfU0xFRVAgKEhDRl9DRFMgfCBIQ0ZfRERTICkKI2RlZmluZSBIQ0ZfU0xFRVAgKEhDRl9DRFMpCgovKiBOb3RlOiBOb24tV0FSUCBmaXJtd2FyZSBhbGwgc3VwcG9ydCBXUEEuIEhvd2V2ZXIgdGhlIG9yaWdpbmFsIEFnZXJlCiAqIGxpbnV4IGRyaXZlciBkb2VzIG5vdCBlbmFibGUgV1BBLiBFbmFibGluZyBXUEEgaGVyZSBjYXVzZXMgd2hhdGV2ZXIKICogcHJlbGltaW5hcnkgV1BBIGxvZ2ljIHRvIGJlIGluY2x1ZGVkLCBzb21lIG9mIHdoaWNoIG1heSBiZSBzcGVjaWZpYwogKiB0byBIRVJNRVNJLgogKgogKiBWYXJpb3VzIGNvbW1lbnQgYXJlIGNsZWFyIHRoYXQgV0FSUCBhbmQgV1BBIGFyZSBub3QgY29tcGF0aWJsZQogKiAod2hpY2ggbWF5IGp1c3QgbWVhbiBXQVJQIGRvZXMgV1BBIGluIGEgZGlmZmVyZW50IGZhc2hpb24pLgogKi8KCi8qICNkZWZpbmUgSENGX1RZUEUgICAgKEhDRl9UWVBFX0hJSTV8SENGX1RZUEVfU1RBfEhDRl9UWVBFX0FQKSAqLwojaWZkZWYgSEVSTUVTMjUKI2lmZGVmIFdBUlAKI2RlZmluZSBIQ0ZfVFlQRSAgICAoIEhDRl9UWVBFX1dBUlAgfCBIQ0ZfVFlQRV9ISUk1ICkKI2Vsc2UKI2RlZmluZSBIQ0ZfVFlQRSAgICAoSENGX1RZUEVfSElJNSB8IEhDRl9UWVBFX1dQQSkKI2VuZGlmIC8qIFdBUlAgKi8KI2Vsc2UKI2RlZmluZSBIQ0ZfVFlQRSAgICBIQ0ZfVFlQRV9XUEEKI2VuZGlmIC8qIEhFUk1FUzI1ICovCgojaWZkZWYgRU5BQkxFX0RNQQojZGVmaW5lIEhDRl9ETUEJCTEKI2VuZGlmIC8vIEVOQUJMRV9ETUEKCi8qIFdlIG5vdyBuZWVkIGEgc3dpdGNoIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIE1haWxib3ggYW5kIG90aGVyIG5lY2Vzc2FyeSBleHRlbnNpb25zICovCiNkZWZpbmUgSENGX0VYVCAoIEhDRl9FWFRfTUIgfCBIQ0ZfRVhUX0lORk9fTE9HIHwgSENGX0VYVF9JTlRfVElDSyApLy9nZXQgZGVlcHNsZWVwIGV4ZXJjaXNlIGdvaW5nCgovKiA7PyBUaGUgTGludXggTVNGIHN0aWxsIHVzZXMgdGhlc2UgZGVmaW5pdGlvbnM7IGRlZmluZSBpdCBoZXJlIHVudGlsIGl0J3MgcmVtb3ZlZCAqLwojaWZuZGVmIEhDRl9UWVBFX0hJSQojZGVmaW5lIEhDRl9UWVBFX0hJSSAweDAwMDQKI2VuZGlmCgojaWZuZGVmIEhDRl9UWVBFX0FQCiNkZWZpbmUgSENGX1RZUEVfQVAgIDB4MDAxMAojZW5kaWYKCiNpZm5kZWYgSENGX1RZUEVfU1RBCiNkZWZpbmUgSENGX1RZUEVfU1RBIDB4MDAyMAojZW5kaWYgIC8vIEhDRl9UWVBFX1NUQQoKLyogR3VhcmFudGVlcyB3b3JkIGFsaWdubWVudCAqLwojZGVmaW5lIEhDRl9BTElHTgkJMgoKLyogRW5kaWFuIG1hY3JvcyBDTlZfSU5UX1RPX0xJVFRMRSgpIGFuZCBDTlZfTElUVExFX1RPX0lOVCgpIHdlcmUgcmVuYW1lZCB0bwogICBDTlZfU0hPUlRfVE9fTElUVExFKCkgYW5kIENOVl9MSVRUTEVfVE9fU0hPUlQoKSAqLwojaWZuZGVmIENOVl9JTlRfVE9fTElUVExFCiNkZWZpbmUgQ05WX0lOVF9UT19MSVRUTEUgICBDTlZfU0hPUlRfVE9fTElUVExFCiNlbmRpZgoKI2lmbmRlZiBDTlZfTElUVExFX1RPX0lOVAojZGVmaW5lIENOVl9MSVRUTEVfVE9fSU5UICAgQ05WX0xJVFRMRV9UT19TSE9SVAojZW5kaWYKCiNkZWZpbmUJSENGX0VSUl9CVVNZCQkJMHgwNgoKLyogVUlMIGRlZmluZXMgd2VyZSByZW1vdmVkIGZyb20gdGhlIEhDRiAqLwojZGVmaW5lIFVJTF9TVUNDRVNTCQkJCQlIQ0ZfU1VDQ0VTUwojZGVmaW5lIFVJTF9FUlJfVElNRV9PVVQJCQlIQ0ZfRVJSX1RJTUVfT1VUCiNkZWZpbmUgVUlMX0VSUl9OT19OSUMJCQkJSENGX0VSUl9OT19OSUMKI2RlZmluZSBVSUxfRVJSX0xFTgkJCQkJSENGX0VSUl9MRU4KI2RlZmluZSBVSUxfRVJSX01JTgkJCQkJSENGX0VSUl9NQVgJLyplbmQgb2YgSENGIGVycm9ycyB3aGljaCBhcmUgcGFzc2VkIHRocm91Z2ggdG8gVUlMCgkJCQkJCQkJCQkJCSAgKioqICoqICoqKiAqKioqKiogKioqKiogKioqICoqKioqKiAqKioqKioqICoqICoqKiAgKi8KI2RlZmluZSBVSUxfRVJSX0lOX1VTRQkJCQkweDQ0CiNkZWZpbmUgVUlMX0VSUl9XUk9OR19JRkIJCQkweDQ2CiNkZWZpbmUgVUlMX0VSUl9NQVgJCQkJCTB4N0YJCS8qdXBwZXIgYm91bmRhcnkgb2YgVUlMIGVycm9ycyB3aXRob3V0IEhDRi1wZW5kYW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiogKioqKioqKiogKiogKioqICoqKioqKiAqKioqKioqICoqKiAqKioqKioqICAqLwojZGVmaW5lIFVJTF9FUlJfQlVTWQkJCSAgICBIQ0ZfRVJSX0JVU1kKI2RlZmluZSBVSUxfRVJSX0RJQUdfMQkJCSAgICBIQ0ZfRVJSX0RJQUdfMQojZGVmaW5lIFVJTF9GQUlMVVJFCQkJCQkweEZGCS8qIDIwMDEwNzA1IG52IHRoaXMgcmVsaWNrIHNob3VsZCBiZSBlcmlkaWNhdGVkICovCiNkZWZpbmUgVUlMX0VSUl9QSUZfQ09ORkxJQ1QJCTB4NDAJLy9vYnNvbGV0ZQojZGVmaW5lIFVJTF9FUlJfSU5DT01QX0RSVgkJCTB4NDEJLy9vYnNvbGV0ZQojZGVmaW5lIFVJTF9FUlJfRE9TX0NBTEwJCQkweDQzCS8vb2Jzb2xldGUKI2RlZmluZSBVSUxfRVJSX05PX0RSVgkJCQkweDQyCS8vb2Jzb2xldGUKI2RlZmluZSBVSUxfRVJSX05TVEwJCQkJMHg0NQkvL29ic29sZXRlCgoKCiNpZiAwICAvLzs/ICNpZmRlZiBnZXQgdGhpcyBnb2luZyBMQVRFUiBIRVJNRVMyNQojZGVmaW5lIEhDRl9JTyAgICAgICAgICAgICAgSENGX0lPXzMyQklUUwojZGVmaW5lIEhDRl9ETUEgICAgICAgICAgICAgMQojZGVmaW5lIEhDRl9ERVNDX1NUUkNUX0VYVCAgNAoKLyogU3dpdGNoIGZvciBCdXNNYXN0ZXIgRE1BIHN1cHBvcnQuIE5vdGUgdGhhdCB0aGUgYWJvdmUgZGVmaW5lIGluY2x1ZGVzIHRoZSBETUEtc3BlY2lmaWMgSENGCiAgIGNvZGUgaW4gdGhlIGJ1aWxkLiBUaGlzIGRlZmluZSBzZXRzIHRoZSBNU0YgdG8gdXNlIERNQTsgaWYgRU5BQkxFX0RNQSBpcyBub3QgZGVmaW5lZCwgdGhlbgogICBwb3J0IEkvTyB3aWxsIGJlIHVzZWQgaW4gdGhlIGJ1aWxkICovCiNpZm5kZWYgQlVTX1BDTUNJQQojZGVmaW5lIEVOQUJMRV9ETUEKI2VuZGlmICAvLyBVU0VfUENNQ0lBCgojZW5kaWYgIC8vIEhFUk1FUzI1CgoKLyogT3ZlcnJ1bGUgc3RhbmRhcmQgV2F2ZUxBTiBQYWNrZXQgU2l6ZSB3aGVuIGluIERNQSBtb2RlICovCiNpZmRlZiBFTkFCTEVfRE1BCiNkZWZpbmUgSENGX01BWF9QQUNLRVRfU0laRSAyMzA0CiNlbHNlCiNkZWZpbmUgSENGX01BWF9QQUNLRVRfU0laRSAxNTE0CiNlbmRpZiAgLy8gRU5BQkxFX0RNQQoKLyogVGhlIGZvbGxvd2luZyBzZXRzIHRoZSBjb21wb25lbnQgSUQsIGFzIHdlbGwgYXMgdGhlIHZlcnNpb25pbmcuIFNlZSBhbHNvIHdsX3ZlcnNpb24uaCAqLwojZGVmaW5lCU1TRl9DT01QT05FTlRfSUQJQ09NUF9JRF9MSU5VWAoKI2RlZmluZQlNU0ZfQ09NUE9ORU5UX1ZBUgkJCURSVl9WQVJJQU5UCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9NQUpPUl9WRVIgICAgIERSVl9NQUpPUl9WRVJTSU9OCiNkZWZpbmUgTVNGX0NPTVBPTkVOVF9NSU5PUl9WRVIgICAgIERSVl9NSU5PUl9WRVJTSU9OCgovKiBEZWZpbmUgdGhlIGZvbGxvd2luZyB0byB0dXJuIG9uIGFzc2VydGlvbnMgaW4gdGhlIEhDRiAqLwovLyNkZWZpbmUgSENGX0FTU0VSVCAgMHg4MDAwCiNkZWZpbmUgSENGX0FTU0VSVAkJCUhDRl9BU1NFUlRfTE5LX01TRl9SVE4JLy8gc3RhdGljYWxseSBiaW5kaW5nIG9mIG1zZl9hc3NlcnQgcm91dGluZQoKI2lmZGVmIFVTRV9CSUdfRU5ESUFOCiNkZWZpbmUgSENGX0JJR19FTkRJQU4gIDEKI2Vsc2UKI2RlZmluZSBIQ0ZfQklHX0VORElBTiAgMAojZW5kaWYgIC8qIFVTRV9CSUdfRU5ESUFOICovCgovKiBEZWZpbmUgdGhlIGZvbGxvd2luZyBpZiB5b3VyIHN5c3RlbSB1c2VzIG1lbW9yeS1tYXBwZWQgSU8gKi8KLy8jZGVmaW5lIEhDRl9NRU1fSU8KCi8qIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyB0aGUgc3RhbmRhcmQgbWFjcm9zIHJlcXVpcmVkIGJ5IHRoZSBIQ0YgdG8gbW92ZSBkYXRhIHRvL2Zyb20gdGhlIGNhcmQgKi8KI2RlZmluZSBJTl9QT1JUX0JZVEUocG9ydCkJCQkoKGhjZl84KWluYiggKGhjZl9pbykocG9ydCkgKSkKI2RlZmluZSBJTl9QT1JUX1dPUkQocG9ydCkJCQkoKGhjZl8xNilpbncoIChoY2ZfaW8pKHBvcnQpICkpCiNkZWZpbmUgT1VUX1BPUlRfQllURShwb3J0LCB2YWx1ZSkJKG91dGIoIChoY2ZfOCkgKHZhbHVlKSwgKGhjZl9pbykocG9ydCkgKSkKI2RlZmluZSBPVVRfUE9SVF9XT1JEKHBvcnQsIHZhbHVlKQkob3V0dygoaGNmXzE2KSAodmFsdWUpLCAoaGNmX2lvKShwb3J0KSApKQoKI2RlZmluZSBJTl9QT1JUX1NUUklOR18xNihwb3J0LCBkc3QsIG4pICAgIGluc3coKGhjZl9pbykocG9ydCksIGRzdCwgbikKI2RlZmluZSBPVVRfUE9SVF9TVFJJTkdfMTYocG9ydCwgc3JjLCBuKSAgIG91dHN3KChoY2ZfaW8pKHBvcnQpLCBzcmMsIG4pCi8vI2RlZmluZSBJTl9QT1JUX1NUUklOR0wocG9ydCwgZHN0LCBuKSAgIGluc2woKHBvcnQpLCAoZHN0KSwgKG4pKQovLyNkZWZpbmUgT1VUX1BPUlRfU1RSSU5HTChwb3J0LCBzcmMsIG4pICBvdXRzbCgocG9ydCksIChzcmMpLCAobikpCiNkZWZpbmUgSU5fUE9SVF9TVFJJTkdfMzIocG9ydCwgZHN0LCBuKSAgIGluc2woKHBvcnQpLCAoZHN0KSwgKG4pKQojZGVmaW5lIE9VVF9QT1JUX1NUUklOR18zMihwb3J0LCBzcmMsIG4pICBvdXRzbCgocG9ydCksIChzcmMpLCAobikpCiNkZWZpbmUgSU5fUE9SVF9IQ0YzMihwb3J0KSAgICAgICAgICBpbmwoIChoY2ZfaW8pKHBvcnQpICkKI2RlZmluZSBPVVRfUE9SVF9IQ0YzMihwb3J0LCB2YWx1ZSkgIG91dGwoKGhjZl8zMikodmFsdWUpLCAoaGNmX2lvKShwb3J0KSApCgojZGVmaW5lIElOX1BPUlRfRFdPUkQocG9ydCkgICAgICAgICAgSU5fUE9SVF9IQ0YzMihwb3J0KQojZGVmaW5lIE9VVF9QT1JUX0RXT1JEKHBvcnQsIHZhbHVlKSAgT1VUX1BPUlRfSENGMzIocG9ydCwgdmFsdWUpCgojZGVmaW5lICBJTl9QT1JUX1NUUklOR184XzE2KHBvcnQsIGFkZHIsIGxlbikJSU5fUE9SVF9TVFJJTkdfMTYocG9ydCwgYWRkciwgbGVuKQojZGVmaW5lICBPVVRfUE9SVF9TVFJJTkdfOF8xNihwb3J0LCBhZGRyLCBsZW4pCU9VVF9QT1JUX1NUUklOR18xNihwb3J0LCBhZGRyLCBsZW4pCgojaWZuZGVmIENGR19TQ0FOX0NIQU5ORUxTXzJHSFoKI2RlZmluZSBDRkdfU0NBTl9DSEFOTkVMU18yR0haIDB4RkNDMgojZW5kaWYgLyogQ0ZHX1NDQU5fQ0hBTk5FTFNfMkdIWiAqLwoKI2RlZmluZSBIQ0ZfTUFYX01TRyAxNjAwIC8vZ2V0IGdvaW5nIDs/CiNlbmRpZgkvLyBXVkxBTl80OQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmICEgZGVmaW5lZCAJSENGX0FMSUdOCiNkZWZpbmUgCQlIQ0ZfQUxJR04JCQkxCQkvL2RlZmF1bHQgdG8gbm8gYWxpZ25tZW50CiNlbmRpZiAvLyAJCUhDRl9BTElHTgoKI2lmICEgZGVmaW5lZCAJSENGX0FTU0VSVAojZGVmaW5lIAkJSENGX0FTU0VSVAkJCTAKI2VuZGlmIC8vCQlIQ0ZfQVNTRVJUCgojaWYgISBkZWZpbmVkCUhDRl9CSUdfRU5ESUFOCiNkZWZpbmUgCQlIQ0ZfQklHX0VORElBTgkJMAojZW5kaWYgLy8gCQlIQ0ZfQklHX0VORElBTgoKI2lmICEgZGVmaW5lZAlIQ0ZfRE1BCiNkZWZpbmUgCQlIQ0ZfRE1BCQkJCTAKI2VuZGlmIC8vIAkJSENGX0RNQQoKI2lmICEgZGVmaW5lZAlIQ0ZfRU5DQVAKI2RlZmluZQkJCUhDRl9FTkNBUAkJCUhDRl9FTkMKI2VuZGlmIC8vCQlIQ0ZfRU5DQVAKCiNpZiAhIGRlZmluZWQJSENGX0VYVAojZGVmaW5lCQkJSENGX0VYVAkJCQkwCiNlbmRpZiAvLwkJSENGX0VYVAoKI2lmICEgZGVmaW5lZAlIQ0ZfSU5UX09OCiNkZWZpbmUJCQlIQ0ZfSU5UX09OCQkJMQojZW5kaWYgLy8JCUhDRl9JTlRfT04KCiNpZiAhIGRlZmluZWQJSENGX0lPCiNkZWZpbmUJCQlIQ0ZfSU8JCQkJMAkJLy9kZWZhdWx0IDE2IGJpdHMgc3VwcG9ydCBvbmx5LCBwb3J0IEkvTwojZW5kaWYgLy8JCUhDRl9JTwoKI2lmICEgZGVmaW5lZAlIQ0ZfTEVHQUNZCiNkZWZpbmUJCQlIQ0ZfTEVHQUNZCQkJMAojZW5kaWYgLy8JCUhDRl9MRUdBQ1kKCiNpZiAhIGRlZmluZWQJSENGX01BWF9MVFYKI2RlZmluZSAJCUhDRl9NQVhfTFRWCQkJMTIwMAkvLyBzdWZmaWNpZW50IGZvciBhbGwga25vd24gcHVycG9zZXMKI2VuZGlmIC8vCQlIQ0ZfTUFYX0xUVgoKI2lmICEgZGVmaW5lZAlIQ0ZfUFJPVF9USU1FCiNkZWZpbmUgCQlIQ0ZfUFJPVF9USU1FCQkxMDAJCS8vIG51bWJlciBvZiAxMEsgbWljcm9zZWMgcHJvdGVjdGlvbiB0aW1lciBhZ2FpbnN0IEgvVyBtYWxmdW5jdGlvbgojZW5kaWYgLy8gCQlIQ0ZfUFJPVF9USU1FCgojaWYgISBkZWZpbmVkCUhDRl9TTEVFUAojZGVmaW5lCQkJSENGX1NMRUVQCQkJMAojZW5kaWYgLy8JCUhDRl9TTEVFUAoKI2lmICEgZGVmaW5lZAlIQ0ZfVEFMTElFUwojZGVmaW5lCQkJSENGX1RBTExJRVMJCQkoIEhDRl9UQUxMSUVTX05JQyB8IEhDRl9UQUxMSUVTX0hDRiApCiNlbmRpZiAvLwkJSENGX1RBTExJRVMKCiNpZiAhIGRlZmluZWQgCUhDRl9UWVBFCiNkZWZpbmUgCQlIQ0ZfVFlQRSAJCQkwCiNlbmRpZiAvLwkJSENGX1RZUEUKCiNpZgkJCQlIQ0ZfQklHX0VORElBTgojdW5kZWYJCQlIQ0ZfQklHX0VORElBTgojZGVmaW5lCQkJSENGX0JJR19FTkRJQU4JCTEJCS8vanVzdCBmb3IgY29udmVuaWVuY2Ugb2YgZ2VuZXJhdGluZyBjZmdfaGNmX29wdAojZW5kaWYgLy8JIAlIQ0ZfQklHX0VORElBTgoKI2lmCQkJCUhDRl9ETUEKI3VuZGVmCQkJSENGX0RNQQojZGVmaW5lCQkJSENGX0RNQQkJCQkxCQkvL2p1c3QgZm9yIGNvbnZlbmllbmNlIG9mIGdlbmVyYXRpbmcgY2ZnX2hjZl9vcHQKI2VuZGlmIC8vCQlIQ0ZfRE1BCgojaWYJCQkJSENGX0lOVF9PTgojdW5kZWYJCQlIQ0ZfSU5UX09OCiNkZWZpbmUJCQlIQ0ZfSU5UX09OCQkJMQkJLy9qdXN0IGZvciBjb252ZW5pZW5jZSBvZiBnZW5lcmF0aW5nIGNmZ19oY2Zfb3B0CiNlbmRpZiAvLwkJSENGX0lOVF9PTgoKCiNpZiAhIGRlZmluZWQgSU5fUE9SVF9TVFJJTkdfOF8xNgojZGVmaW5lICBJTl9QT1JUX1NUUklOR184XzE2KHBvcnQsIGFkZHIsIGxlbikJSU5fUE9SVF9TVFJJTkdfMTYocG9ydCwgYWRkciwgbGVuKQojZGVmaW5lICBPVVRfUE9SVF9TVFJJTkdfOF8xNihwb3J0LCBhZGRyLCBsZW4pCU9VVF9QT1JUX1NUUklOR18xNihwb3J0LCBhZGRyLCBsZW4pCiNlbmRpZiAvLyBJTl9QT1JUX1NUUklOR184XzE2CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmICEgZGVmaW5lZAlGQVIKI2RlZmluZSAJCUZBUgkJCQkJCS8vIGRlZmF1bHQgdG8gZmxhdCAzMi1iaXRzIGNvZGUKI2VuZGlmIC8vIAkJRkFSCgp0eXBlZGVmIGhjZl84ICBGQVIgKndjaV9idWZwOwkJCS8vIHNlZ21lbnRlZCAxNi1iaXRzIG9yIGZsYXQgMzItYml0cyBwb2ludGVyIHRvIDggYml0cyB1bml0CnR5cGVkZWYgaGNmXzE2IEZBUiAqd2NpX3JlY29yZHA7CQkvLyBzZWdtZW50ZWQgMTYtYml0cyBvciBmbGF0IDMyLWJpdHMgcG9pbnRlciB0byAxNiBiaXRzIHVuaXQKCi8qCUkvTyBBZGRyZXNzIHNpemUKKglQbGF0Zm9ybXMgd2hpY2ggdXNlIHBvcnQgbWFwcGVkIEkvTyB3aWxsIChpbiBnZW5lcmFsKSBoYXZlIGEgNjRrIEkvTyBzcGFjZSwgY29udmVuaWVudGx5IGV4cHJlc3NlZCBpbiBhCioJMTYtYml0cyBxdWFudGl0eQoqCVBsYXRmb3JtcyB3aGljaCB1c2UgbWVtb3J5IG1hcHBlZCBJL08gd2lsbCAoaW4gZ2VuZXJhbCkgaGF2ZSBhbiBJL08gc3BhY2UgbXVjaCBsYXJnZXIgdGhhbiA2NGssIGFuZCBuZWVkIGEKKgkzMi1iaXRzIHF1YW50aXR5IHRvIGV4cHJlc3MgdGhlIEkvTyBiYXNlCiovCgojaWYgSENGX0lPICYgSENGX0lPX01FTQp0eXBlZGVmIGhjZl8zMiBoY2ZfaW87CiNlbHNlCnR5cGVkZWYgaGNmXzE2IGhjZl9pbzsKI2VuZGlmIC8vSENGX0lPCgojaWYgCUhDRl9QUk9UX1RJTUUgPiAxMjgKI2RlZmluZSBIQ0ZfUFJPVF9USU1FX1NIRlQJMwojZGVmaW5lIEhDRl9QUk9UX1RJTUVfRElWCTgKI2VsaWYgCUhDRl9QUk9UX1RJTUUgPiA2NAojZGVmaW5lIEhDRl9QUk9UX1RJTUVfU0hGVAkyCiNkZWZpbmUgSENGX1BST1RfVElNRV9ESVYJNAojZWxpZiAJSENGX1BST1RfVElNRSA+IDMyCiNkZWZpbmUgSENGX1BST1RfVElNRV9TSEZUCTEKI2RlZmluZSBIQ0ZfUFJPVF9USU1FX0RJVgkyCiNlbHNlIC8vSENGX1BST1RfVElNRSA+PSAxOQojZGVmaW5lIEhDRl9QUk9UX1RJTUVfU0hGVAkwCiNkZWZpbmUgSENGX1BST1RfVElNRV9ESVYJMQojZW5kaWYKCiNkZWZpbmUgSENGX1BST1RfVElNRV9DTlQgKEhDRl9QUk9UX1RJTUUgLyBIQ0ZfUFJPVF9USU1FX0RJVikKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAuIC4gLiAuIC4gLiAuIC4gLiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyogTVNGX0NPTVBPTkVOVF9JRCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgQ0ZHX0lERU5USVRZX1NUUkNUIGluIEhDRi5DCiogQ0ZHX0lERU5USVRZX1NUUkNUIGlzIGRlZmluZWQgaW4gSENGLkMgcHVyZWx5IGJhc2VkIG9uIGNvbnZlbmllbmNlIGFyZ3VtZW50cy4KKiBUaGUgSENGIGNhbiBub3QgaGF2ZSB0aGUga25vd2xlZGdlIHRvIGRldGVybWluZSB0aGUgQ29tcG9uZW50SWQgZmllbGQgb2YgdGhlIElkZW50aXR5IHJlY29yZCAoYWthIGFzCiogVmVyc2lvbiBSZWNvcmQpLCB0aGVyZWZvcmUgdGhlIE1TRiBwYXJ0IG9mIHRoZSBEcml2ZXJzIG11c3Qgc3VwcGx5IHRoaXMgdmFsdWUgdmlhIHRoZSBTeXN0ZW0gQ29uc3RhbnQKKiBNU0ZfQ09NUE9ORU5UX0lELgoqIFRoZXJlIGlzIGEgc2V0IG9mIHZhbHVlcyBwcmVkZWZpbmVkIGluIE1ERC5IIChmb3JtYXQgQ09NUF9JRF8uLi4uLikKKgoqIE5vdGUgdGhhdCB0YWtpbmcgTVNGX0NPTVBPTkVOVF9JRCBhcyBhIGRlZmF1bHQgdmFsdWUgZm9yIERVSV9DT01QQVRfVkFSIGlzIHB1cmVseSBhbiBpbXBsZW1lbnRhdGlvbgoqIGNvbnZlbmllbmNlLCB0aGUgbnVtZXJpY2FsIHZhbHVlcyBvZiB0aGVzZSB0d28gcXVhbnRpdGllcyBoYXZlIG5vbmUgZnVuY3Rpb25hbCByZWxhdGlvbnNoaXAgd2hhdHNvZXZlci4KKi8KCiNpZiBkZWZpbmVkCU1TRl9DT01QT05FTlRfSUQKCiNpZiAhIGRlZmluZWQJRFVJX0NPTVBBVF9WQVIKI2RlZmluZQkJCURVSV9DT01QQVRfVkFSCQlNU0ZfQ09NUE9ORU5UX0lECiNlbmRpZiAvLwkJRFVJX0NPTVBBVF9WQVIKCiNpZiAhIGRlZmluZWQJRFVJX0NPTVBBVF9CT1QJCS8vOz90aGlzIHdheSB1dGlsaXRpZXMgY2FuIGxvd2VyIGFzIHdlbGwgcmFpc2UgdGhlIGJvdHRvbQojZGVmaW5lCQkJRFVJX0NPTVBBVF9CT1QJCTgKI2VuZGlmIC8vCQlEVUlfQ09NUEFUX0JPVAoKI2lmICEgZGVmaW5lZAlEVUlfQ09NUEFUX1RPUAkJLy87P3RoaXMgd2F5IHV0aWxpdGllcyBjYW4gbG93ZXIgYXMgd2VsbCByYWlzZSB0aGUgdG9wCiNkZWZpbmUJCQlEVUlfQ09NUEFUX1RPUCAgICAgICA4CiNlbmRpZiAvLwkJRFVJX0NPTVBBVF9UT1AKCiNlbmRpZiAvLyBNU0ZfQ09NUE9ORU5UX0lECgojaWYgKEhDRl9UWVBFKSAmIEhDRl9UWVBFX0hJSTUKCiNpZiAhIGRlZmluZWQJSENGX0hTSV9WQVJfNQojZGVmaW5lCQkJSENGX0hTSV9WQVJfNQojZW5kaWYgLy8JCUhDRl9IU0lfVkFSXzUKCiNpZiAhIGRlZmluZWQJSENGX0FQRl9WQVJfNAojZGVmaW5lCQkJSENGX0FQRl9WQVJfNAojZW5kaWYgLy8JCUhDRl9BUEZfVkFSXzQKCiNpZiAoSENGX1RZUEUpICYgSENGX1RZUEVfV0FSUAojaWYgISBkZWZpbmVkCUhDRl9TVEFfVkFSXzQKI2RlZmluZQkJCUhDRl9TVEFfVkFSXzQKI2VuZGlmIC8vCQlIQ0ZfU1RBX1ZBUl80CiNlbHNlCiNpZiAhIGRlZmluZWQJSENGX1NUQV9WQVJfMgojZGVmaW5lCQkJSENGX1NUQV9WQVJfMgojZW5kaWYgLy8JCUhDRl9TVEFfVkFSXzIKI2VuZGlmCgojaWYgZGVmaW5lZCBIQ0ZfSFNJX1ZBUl80CmVycjogSFNJIHZhcmlhbnRzIDQgY29ycmVzcG9uZCB3aXRoIEhJSTsKI2VuZGlmIC8vIEhDRl9IU0lfVkFSXzQKCiNlbHNlCgojaWYgISBkZWZpbmVkCUhDRl9IU0lfVkFSXzQKI2RlZmluZQkJCUhDRl9IU0lfVkFSXzQJCS8vSGVybWVzLUlJIGFsbCB0eXBlcyAoZm9yIHRoZSB0aW1lIGJlaW5nISkKI2VuZGlmIC8vCQlIQ0ZfSFNJX1ZBUl80CgojaWYgISBkZWZpbmVkCUhDRl9BUEZfVkFSXzIKI2RlZmluZSAJCUhDRl9BUEZfVkFSXzIKI2VuZGlmIC8vCQlIQ0ZfQVBGX1ZBUl8yCgojaWYgISBkZWZpbmVkCUhDRl9TVEFfVkFSXzIKI2RlZmluZQkJCUhDRl9TVEFfVkFSXzIKI2VuZGlmIC8vCQlIQ0ZfU1RBX1ZBUl8yCgojZW5kaWYgLy8gSENGX1RZUEVfSElJNQoKI2lmICEgZGVmaW5lZAlIQ0ZfUFJJX1ZBUl8zCiNkZWZpbmUJCUhDRl9QUklfVkFSXzMKI2VuZGlmIC8vCQlIQ0ZfUFJJX1ZBUl8zCgojaWYgZGVmaW5lZCBIQ0ZfSFNJX1ZBUl8xIHx8IGRlZmluZWQgSENGX0hTSV9WQVJfMiB8fCBkZWZpbmVkIEhDRl9IU0lfVkFSXzMKZXJyOiBIU0kgdmFyaWFudHMgMSwgMiBhbmQgMyBjb3JyZXNwb25kIHdpdGggSC1JIG9ubHk7CiNlbmRpZiAvLyBIQ0ZfSFNJX1ZBUl8xLCBIQ0ZfSFNJX1ZBUl8yLCBIQ0ZfSFNJX1ZBUl8zCgojaWYgZGVmaW5lZCBIQ0ZfUFJJX1ZBUl8xIHx8IGRlZmluZWQgSENGX1BSSV9WQVJfMgplcnI6IHByaW1hcnkgdmFyaWFudHMgMSBhbmQgMiBjb3JyZXNwb25kIHdpdGggSC1JIG9ubHk7CiNlbmRpZiAvLyBIQ0ZfUFJJX1ZBUl8xIC8gSENGX1BSSV9WQVJfMgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC4gLiAuIC4gLiAuIC4gLiAuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKLyogVGhlIEJBU0VEIGN1c3RvbWl6YXRpb24gbWFjcm8gaXMgdXNlZCB0byByZXNvbHZlcyB0aGUgU1MhPURTIGNvbmZsaWN0IGZvciB0aGUgSW50ZXJydXB0IFNlcnZpY2UgbG9naWMgaW4KICogRE9TIERyaXZlcnMuIER1ZSB0byB0aGUgY3VtYmVyc29tZW5lc3Mgb2YgbWl4aW5nIEMgYW5kIGFzc2VtYmxlciBsb2NhbCBCQVNFRCB2YXJpYWJsZXMgc3RpbGwgZW5kIHVwIGluIHRoZQogKiB3cm9uZyBzZWdtZW50LiBUaGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoZSBIQ0YgdXNlcyBvbmx5IGdsb2JhbCBCQVNFRCB2YXJpYWJsZXMgb3IgSUZCLWJhc2VkIHZhcmlhYmxlcy4KICogVGhlICJCQVNFRCIgY29uc3RydWN0aW9uIChzdXBwb3NlZGx5KSBvbmx5IGFtb3VudHMgdG8gc29tZXRoaW5nIGluIHRoZSBzbWFsbCBtZW1vcnkgbW9kZWwuCiAqCiAqIE5vdGUgdGhhdCB0aGUgd2hvbGUgQkFTRUQgcmlnbWFyb2xlIGlzIG5lZWRsZXNzbHkgY29tcGxpY2F0ZWQgYmVjYXVzZSBib3RoIHRoZSBNaWNyb3NvZnQgQ29tcGlsZXIgYW5kCiAqIExpbmtlciBhcmUgdW5uZWNlc3NhcnkgcmVzdHJpY3RpdmUgaW4gd2hhdCBmYXIgcG9pbnRlciBtYW5pcHVsYXRpb24gdGhleSBhbGxvdwogKi8KCiNpZiAhIGRlZmluZWQJQkFTRUQKI2RlZmluZSAJCUJBU0VECiNlbmRpZiAvLwkJQkFTRUQKCiNpZiAhIGRlZmluZWQJRVhURVJOX0MKI2lmZGVmIF9fY3BsdXNwbHVzCiNkZWZpbmUJCQlFWFRFUk5fQyBleHRlcm4gIkMiCiNlbHNlCiNkZWZpbmUJCQlFWFRFUk5fQwojZW5kaWYgLy8gX19jcGx1c3BsdXMKI2VuZGlmIC8vCQlFWFRFUk5fQwoKI2lmICEgZGVmaW5lZAlOVUxMCiNkZWZpbmUJCQlOVUxMCSgodm9pZCAqKSAwKQojZW5kaWYgLy8JCU5VTEwKCiNpZiAhIGRlZmluZWQJVEVYVAojZGVmaW5lCQkJVEVYVCh4KQl4CiNlbmRpZiAvLwkJVEVYVAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqIEMgTyBOIEYgTCBJIEMgVCAgIEQgRSBUIEUgQyBUIEkgTyBOICAmICBSIEUgUyBPIEwgVSBUIEkgTyBOICoqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmIEhDRl9BTElHTiAhPSAxICYmIEhDRl9BTElHTiAhPSAyICYmIEhDRl9BTElHTiAhPSA0ICYmIEhDRl9BTElHTiAhPSA4CmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0FMSUdOOwojZW5kaWYgLy8gSENGX0FMSUdOCgojaWYgKEhDRl9BU1NFUlQpICYgfiggSENGX0FTU0VSVF9QUklOVEYgfCBIQ0ZfQVNTRVJUX1NXX1NVUCB8IEhDRl9BU1NFUlRfTUIgfCBIQ0ZfQVNTRVJUX1JUX01TRl9SVE4gfCBcCgkJCQkJICBIQ0ZfQVNTRVJUX0xOS19NU0ZfUlROICkKZXJyOiBpbnZhbGlkIHZhbHVlIGZvciBIQ0ZfQVNTRVJUOwojZW5kaWYgLy8gSENGX0FTU0VSVAoKI2lmIChIQ0ZfQVNTRVJUKSAmIEhDRl9BU1NFUlRfTUIgJiYgISAoIChIQ0ZfRVhUKSAmIEhDRl9FWFRfTUIgKQkJLy9kZXRlY3QgcG90ZW50aWFsIGNvbmZsaWN0CmVycjogdGhlc2UgbWFjcm9zIGFyZSBub3QgdXNlZCBjb25zaXN0ZW50bHk7CiNlbmRpZiAvLyBIQ0ZfQVNTRVJUX01CIC8gSENGX0VYVF9NQgoKI2lmIEhDRl9CSUdfRU5ESUFOICE9IDAgJiYgSENGX0JJR19FTkRJQU4gIT0gMQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9CSUdfRU5ESUFOOwojZW5kaWYgLy8gSENGX0JJR19FTkRJQU4KCiNpZiBIQ0ZfRE1BICE9IDAgJiYgSENGX0RNQSAhPSAxCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0RNQTsKI2VuZGlmIC8vIEhDRl9ETUEKCiNpZiAoSENGX0VOQ0FQKSAmIH4oIEhDRl9FTkMgfCBIQ0ZfRU5DX1NVUCApCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0VOQ0FQOwojZW5kaWYgLy8gSENGX0VOQ0FQCgojaWYgKEhDRl9FWFQpICYgfiggSENGX0VYVF9JTkZPX0xPRyB8IEhDRl9FWFRfSU5UX1RYX0VYIHwgSENGX0VYVF9UQUxMSUVTX0ZXIHwgSENGX0VYVF9UQUxMSUVTX0hDRgl8IFwKCQkJCSAgIEhDRl9FWFRfTklDX0FDQ0VTUyB8IEhDRl9FWFRfTUIgfCBIQ0ZfRVhUX0lOVF9USUNLIHwgXAoJCQkJICAgSENGX0VYVF9JRkJfU1RSQ1QgfCBIQ0ZfRVhUX0RFU0NfU1RSQ1QgfCBIQ0ZfRVhUX1RYX0NPTlQgKQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9FWFQ7CiNlbmRpZiAvLyBIQ0ZfRVhUCgojaWYgSENGX0lOVF9PTiAhPSAwICYmIEhDRl9JTlRfT04gIT0gMQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9JTlRfT047CiNlbmRpZiAvLyBIQ0ZfSU5UX09OCgojaWYgKEhDRl9JTykgJiB+KCBIQ0ZfSU9fTUVNIHwgSENGX0lPXzMyQklUUyApCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX0lPOwojZW5kaWYgLy8gSENGX0lPCgojaWYgSENGX0xFR0FDWSAhPSAwICYmIEhDRl9MRUdBQ1kgIT0gMQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9MRUdBQ1k7CiNlbmRpZiAvLyBIQ0ZfTEVHQUNZCgojaWYgSENGX01BWF9MVFYgPCAxNiB8fCBIQ0ZfTUFYX0xUViA+IDIzMDQKZXJyOiBpbnZhbGlkIHZhbHVlIGZvciBIQ0ZfTUFYX0xUVjsKI2VuZGlmIC8vIEhDRl9NQVhfTFRWCgojaWYgSENGX1BST1RfVElNRSAhPSAwICYmICggSENGX1BST1RfVElNRSA8IDE5IHx8IDI1NiA8IEhDRl9QUk9UX1RJTUUgKQplcnI6IGJlbG93IG1pbmltdW0gLjA4IHNlY29uZCByZXF1aXJlZCBieSBIZXJtZXMgb3IgcG9zc2libHkgYWJvdmUgaGNmXzMyIGNhcGFjaXR5OwojZW5kaWYgLy8gSENGX1BST1RfVElNRQoKI2lmIChIQ0ZfU0xFRVApICYgfiggSENGX0NEUyB8IEhDRl9ERFMgKQplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9TTEVFUDsKI2VuZGlmIC8vIEhDRl9TTEVFUAoKI2lmIChIQ0ZfU0xFRVApICYmICEgKEhDRl9JTlRfT04pCmVycjogdGhlc2UgbWFjcm9zIGFyZSBub3QgdXNlZCBjb25zaXN0ZW50bHk7CiNlbmRpZiAvLyBIQ0ZfU0xFRVAgLyBIQ0ZfSU5UX09OCgojaWYgKEhDRl9TTEVFUCkgJiYgISAoIChIQ0ZfRVhUKSAmIEhDRl9FWFRfSU5UX1RJQ0sgKQovLzs/IGVycjogdGhlc2UgbWFjcm9zIGFyZSBub3QgdXNlZCBjb25zaXN0ZW50bHk7CiNlbmRpZiAvLyBIQ0ZfU0xFRVAgLyBIQ0ZfRVhUX0lOVF9USUNLCgojaWYgKEhDRl9UQUxMSUVTKSAmIH4oIEhDRl9UQUxMSUVTX0hDRiB8IEhDRl9UQUxMSUVTX05JQyB8IEhDRl9UQUxMSUVTX1JFU0VUICkgfHwgXAoJKEhDRl9UQUxMSUVTKSA9PSBIQ0ZfVEFMTElFU19SRVNFVAplcnI6IGludmFsaWQgdmFsdWUgZm9yIEhDRl9UQUxMSUVTOwojZW5kaWYgLy8gSENGX1RBTExJRVMKCiNpZiAoSENGX1RZUEUpICYgfihIQ0ZfVFlQRV9XUEEgfCBIQ0ZfVFlQRV9VU0IgfCBIQ0ZfVFlQRV9QUkVMT0FERUQgfCBIQ0ZfVFlQRV9ISUk1IHwgSENGX1RZUEVfV0FSUCB8IFwKCQlIQ0ZfVFlQRV9DQ1ggLyogfCBIQ0ZfVFlQRV9UWF9ERUxBWSAqLyApCmVycjogaW52YWxpZCB2YWx1ZSBmb3IgSENGX1RZUEU7CiNlbmRpZiAvL0hDRl9UWVBFCgojaWYgKEhDRl9UWVBFKSAmIEhDRl9UWVBFX1dBUlAgJiYgKEhDRl9UWVBFKSAmIEhDRl9UWVBFX1dQQQplcnI6IGF0IG1vc3QgMSBvZiB0aGVzZSBtYWNyb3Mgc2hvdWxkIGJlIGRlZmluZWQ7CiNlbmRpZiAvL0hDRl9UWVBFX1dBUlAgLyBIQ0ZfVFlQRV9XUEEKCiNlbmRpZiAvL0hDRkNGR19ICgo=