LyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCiAqIHRoYXQgbWF5IGFwcGx5OgogKi8KLyoKICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKICogQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICovCi8qCiAqIE5vdGU6CiAqICAgIElmIG5ldyBkZWZhdWx0X3N0b3JlIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoaXMgaGVhZGVyIGZpbGUsCiAqICAgIHRoZW4gcmVtZW1iZXIgdG8gcnVuICdwZXJsL2RlZmF1bHRfc3RvcmUvZ2VuJyB0byB1cGRhdGUgdGhlCiAqICAgIGNvcnJlc3BvbmRpbmcgcGVybCBpbnRlcmZhY2UuCiAqLwovKgogKiBAZmlsZSBkZWZhdWx0X3N0b3JlLmg6IHN0b3JhZ2Ugc3BhY2UgZm9yIGRlZmF1bHRzCiAqCiAqIEBhZGR0b2dyb3VwIGRlZmF1bHRfc3RvcmUKICoKICogQHsKICovCiNpZm5kZWYgREVGQVVMVF9TVE9SRV9ICiNkZWZpbmUgREVGQVVMVF9TVE9SRV9ICgojaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICAgICAgICAgICJDIiB7CiNlbmRpZgoKI2RlZmluZSBORVRTTk1QX0RTX01BWF9JRFMgMwojZGVmaW5lIE5FVFNOTVBfRFNfTUFYX1NVQklEUyA0OCAgICAgICAgLyogbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA4ICovCgogICAgLyoKICAgICAqIGJlZ2luIHN0b3JhZ2UgZGVmaW5pdGlvbnMgCiAgICAgKi8KLyoqCiAqIEBkZWYgTkVUU05NUF9EU19MSUJSQVJZX0lECiAqIFRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgInN0b3JpZCIgYXJndW1lbnQgdG8gdGhlIEFQSSAKICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJSQVJZX0lEICAgICAwCiNkZWZpbmUgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCAxCiNkZWZpbmUgTkVUU05NUF9EU19UT0tFTl9JRCAgICAgICAyCgogICAgLyoKICAgICAqIFRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgIndoaWNoIiBhcmd1bWVudCB0byB0aGUgQVBJLAogICAgICogd2hlbiB0aGUgc3RvcmVpZCBhcmd1bWVudCBpcyBORVRTTk1QX0RTX0xJQlJBUllfSUQgCiAgICAgKi8KICAgIC8qCiAgICAgKiBsaWJyYXJ5IGJvb2xlYW5zIAogICAgICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX0VSUk9SUyAgICAgICAgICAwCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0FWRV9NSUJfREVTQ1JTICAgICAxCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX0NPTU1FTlRfVEVSTSAgICAyCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX1BBUlNFX0xBQkVMICAgICAzCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQgICAgICAgICA0CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfTE9HX1RJTUVTVEFNUCAgICAgICA1CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9SRUFEX0NPTkZJR1MgICA2ICAgIC8qIGRvbid0IHJlYWQgbm9ybWFsIGNvbmZpZyBmaWxlcyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfQ09ORklHX0xPQUQgICAgICBORVRTTk1QX0RTX0xJQl9ET05UX1JFQURfQ09ORklHUwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9SRVBMQUNFICAgICAgICAgNyAgICAvKiByZXBsYWNlIG9iamVjdHMgZnJvbSBsYXRlc3QgbW9kdWxlICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfTlVNRVJJQ19FTlVNICA4ICAgIC8qIHByaW50IG9ubHkgbnVtZXJpYyBlbnVtIHZhbHVlcyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX05VTUVSSUNfT0lEUyAgOSAgICAvKiBwcmludCBvbmx5IG51bWVyaWMgZW51bSB2YWx1ZXMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX0JSRUFLRE9XTl9PSURTIDEwICAgLyogZG9udCBwcmludCBvaWQgaW5kZXhlcyBzcGVjaWFsbHkgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgIDExICAgLyogZG9uJ3QgdXNlIHRoZSBhbGFybSgpIHNpZ25hbCAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX0ZVTExfT0lEICAgICAgMTIgICAvKiBwcmludCBmdWxseSBxdWFsaWZpZWQgb2lkcyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5UICAgICAgICAgMTMgICAvKiBwcmludCB2ZXJ5IGJyaWVmIG91dHB1dCBmb3IgcGFyc2luZyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1JBTkRPTV9BQ0NFU1MJICAgMTQgICAvKiByYW5kb20gYWNjZXNzIHRvIG9pZCBsYWJlbHMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SRUdFWF9BQ0NFU1MJICAgMTUgICAvKiByZWdleCBtYXRjaGluZyB0byBvaWQgbGFiZWxzICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9DSEVDS19SQU5HRSAgICAxNiAgIC8qIGRvbid0IGNoZWNrIHZhbHVlcyBmb3IgcmFuZ2VzIG9uIHNlbmQgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19UT0tFTl9XQVJOSU5HUyAgIDE3ICAgLyogbm8gd2FybiBhYm91dCB1bmtub3duIGNvbmZpZyB0b2tlbnMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OVU1FUklDX1RJTUVUSUNLUyAgIDE4ICAgLyogcHJpbnQgdGltZXRpY2tzIGFzIGEgbnVtYmVyICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRVNDQVBFX1FVT1RFUyAgICAgICAxOSAgIC8qIHNoZWxsIGVzY2FwZSBxdW90ZSBtYXJrcyBpbiBvaWRzICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVWRVJTRV9FTkNPREUgICAgICAyMCAgIC8qIGVuY29kZSBwYWNrZXRzIGZyb20gYmFjayB0byBmcm9udCAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX0JBUkVfVkFMVUUJICAgMjEgICAvKiBqdXN0IHByaW50IHZhbHVlIChub3QgT0lEID0gdmFsdWUpICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRVhURU5ERURfSU5ERVgJICAgMjIgICAvKiBwcmludCBleHRlbmRlZCBpbmRleCBmb3JtYXQgW3gxXVt4Ml0gKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9IRVhfVEVYVCAgICAgIDIzICAgLyogcHJpbnQgQVNDSUkgdGV4dCBhbG9uZyB3aXRoIGhleCBzdHJpbmdzICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfVUNEX1NUWUxFX09JRCAyNCAgIC8qIHByaW50IE9JRCdzIHVzaW5nIHRoZSBVQ0Qtc3R5bGUgcHJlZml4IHN1cHByZXNzaW9uICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVBRF9VQ0RfU1RZTEVfT0lEICAyNSAgIC8qIHJlcXVpcmUgdG9wLWxldmVsIE9JRHMgdG8gYmUgcHJlZml4ZWQgd2l0aCBhIGRvdCAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hBVkVfUkVBRF9QUkVNSUJfQ09ORklHIDI2ICAgICAgIC8qIGhhdmUgdGhlIHByZS1taWIgcGFyc2luZyBjb25maWcgdG9rZW5zIGJlZW4gcHJvY2Vzc2VkICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfSEFWRV9SRUFEX0NPTkZJRyAgICAyNyAgIC8qIGhhdmUgdGhlIGNvbmZpZyB0b2tlbnMgYmVlbiBwcm9jZXNzZWQgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9RVUlDS0VfUFJJTlQgICAgICAgIDI4ICAgCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9QUklOVF9VTklUUyAgICAyOSAvKiBkb24ndCBwcmludCBVTklUUyBzdWZmaXggKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19ESVNQTEFZX0hJTlQgICAgIDMwIC8qIGRvbid0IGFwcGx5IERJU1BMQVktSElOVHMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl8xNkJJVF9JRFMgICAgICAgICAgIDMxICAgLyogcmVzdHJpY3QgcmVxdWVzdElEcywgZXRjIHRvIDE2LWJpdCB2YWx1ZXMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX1BFUlNJU1RfU1RBVEUgIDMyCS8qIGRvbid0IGxvYWQgY29uZmlnIGFuZCBkb24ndCBsb2FkL3NhdmUgcGVyc2lzdGVudCBmaWxlICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfMkRJR0lUX0hFWF9PVVRQVVQgICAzMwkvKiBwcmludCBhIGxlYWRpbmcgMCBvbiBoZXggdmFsdWVzIDw9ICdmJyAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0lHTk9SRV9OT19DT01NVU5JVFkgMzQJLyogZG9uJ3QgY29tcGxhaW4gaWYgbm8gY29tbXVuaXR5IGlzIHNwZWNpZmllZCBpbiB0aGUgY29tbWFuZCBhcmd1bWVudHMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfTE9BRCAgMzUgLyogZG9uJ3QgbG9hZCBwZXJzaXN0ZW50IGZpbGUgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfU0FWRSAgMzYgLyogZG9uJ3Qgc2F2ZSBwZXJzaXN0ZW50IGZpbGUgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BUFBFTkRfTE9HRklMRVMgICAgIDM3IC8qIGFwcGVuZCwgZG9uJ3Qgb3ZlcndyaXRlLCBsb2cgZmlsZXMgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19ESVNDT1ZFUlkgICAgICAgIDM4IC8qIGRvbid0IHN1cHBvcnQgUkZDNTM0MyBjb250ZXh0RW5naW5lSUQgZGlzY292ZXJ5ICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVggICAgICAzOSAvKiBUU00ncyBzaW1wbGUgc2VjdXJpdHkgbmFtZSBtYXBwaW5nICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9MT0FEX0hPU1RfRklMRVMgNDAgLyogZG9uJ3QgcmVhZCBob3N0LmNvbmYgZmlsZXMgKi8KCiAgICAvKgogICAgICogbGlicmFyeSBpbnRlZ2VycyAKICAgICAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9XQVJOSU5HUyAgICAgICAgIDAKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRUNMRVZFTCAgICAgICAgICAgICAxCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfU05NUFZFUlNJT04gICAgICAgICAgMgojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCAgICAgICAgIDMKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVCAgICA0CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfU1VGRklYX09OTFkgICAgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TVFJJTkdfT1VUUFVUX0ZPUk1BVCA1CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfSEVYX09VVFBVVF9MRU5HVEggICAgNgojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFUlZFUlNFTkRCVUYgICAgICAgIDcgLyogc2VuZCBidWZmZXIgKHNlcnZlcikgKi8KI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRVJWRVJSRUNWQlVGICAgICAgICA4IC8qIHJlY2VpdmUgYnVmZmVyIChzZXJ2ZXIpICovCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0xJRU5UU0VOREJVRiAgICAgICAgOSAvKiBzZW5kIGJ1ZmZlciAoY2xpZW50KSAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVFJFQ1ZCVUYgICAgICAgMTAgLyogcmVjZWl2ZSBidWZmZXIgKGNsaWVudCkgKi8KI2RlZmluZSBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX1BFUk0gICAgIDExCiNkZWZpbmUgTkVUU05NUF9EU19TU0hET01BSU5fRElSX1BFUk0gICAgICAxMgojZGVmaW5lIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfVVNFUiAgICAgMTIKI2RlZmluZSBORVRTTk1QX0RTX1NTSERPTUFJTl9TT0NLX0dST1VQICAgIDEzCiAgICAKICAgIC8qCiAgICAgKiBzcGVjaWFsIG1lYW5pbmdzIGZvciB0aGUgZGVmYXVsdCBTTk1QIHZlcnNpb24gc2xvdCAoTkVUU05NUF9EU19MSUJfU05NUFZFUlNJT04pIAogICAgICovCiNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQojZGVmaW5lIE5FVFNOTVBfRFNfU05NUF9WRVJTSU9OXzEgICAgMTI4ICAgICAgICAvKiBib2d1cyAqLwojZW5kaWYKI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwojZGVmaW5lIE5FVFNOTVBfRFNfU05NUF9WRVJTSU9OXzJjICAgMSAgLyogcmVhbCAqLwojZW5kaWYKI2RlZmluZSBORVRTTk1QX0RTX1NOTVBfVkVSU0lPTl8zICAgIDMgIC8qIHJlYWwgKi8KCgogICAgLyoKICAgICAqIGxpYnJhcnkgc3RyaW5ncyAKICAgICAqLwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFQ05BTUUgICAgICAgICAgIDAKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DT05URVhUICAgICAgICAgICAxCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSAgICAgICAgMgojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FVVEhQQVNTUEhSQVNFICAgIDMKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklWUEFTU1BIUkFTRSAgICA0CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfT1BUSU9OQUxDT05GSUcgICAgNQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUgICAgICAgICAgIDYKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DT01NVU5JVFkgICAgICAgICA3CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfUEVSU0lTVEVOVF9ESVIgICAgOAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NPTkZJR1VSQVRJT05fRElSIDkKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TRUNNT0RFTCAgICAgICAgICAxMAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQkRJUlMgICAgICAgICAgIDExCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfT0lEU1VGRklYICAgICAgICAgMTIKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURQUkVGSVggICAgICAgICAxMwojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSICAgICAgIDE0CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfVEVNUF9GSUxFX1BBVFRFUk4gMTUKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BVVRITUFTVEVSS0VZICAgICAxNgojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSVZNQVNURVJLRVkgICAgIDE3CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVVUSExPQ0FMSVpFREtFWSAgMTgKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklWTE9DQUxJWkVES0VZICAxOQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FQUFRZUEVTICAgICAgICAgIDIwCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfS1NNX0tFWVRBQiAgICAgICAgMjEKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9LU01fU0VSVklDRV9OQU1FICAyMgojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1g1MDlfQ0xJRU5UX1BVQiAgIDIzCiNkZWZpbmUgTkVUU05NUF9EU19MSUJfWDUwOV9TRVJWRVJfUFVCICAgMjQKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TU0hUT1NOTVBfU09DS0VUICAyNQojZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NFUlRfRVhUUkFfU1VCRElSIDI2CiNkZWZpbmUgTkVUU05NUF9EU19MSUJfSE9TVE5BTUUgICAgICAgICAgMjcKI2RlZmluZSBORVRTTk1QX0RTX0xJQl9YNTA5X0NSTF9GSUxFICAgICAyOAojZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RMU19BTEdPUklUTVMgICAgIDI5CgogICAgLyoKICAgICAqIGVuZCBzdG9yYWdlIGRlZmluaXRpb25zIAogICAgICovCgogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGludCB2YWx1ZSk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4oaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBpbnQgdmFsdWUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhpbnQgc3RvcmVpZCwgaW50IHdoaWNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGNoYXIgICAgICAgICAgICpuZXRzbm1wX2RzX2dldF9zdHJpbmcoaW50IHN0b3JlaWQsIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3ZvaWQoaW50IHN0b3JlaWQsIGludCB3aGljaCwgdm9pZCAqdmFsdWUpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIHZvaWQgICAgICAgICAgICpuZXRzbm1wX2RzX2dldF92b2lkKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpOwogICAgTkVUU05NUF9JTVBPUlQKICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyh1X2NoYXIgdHlwZSwgY29uc3QgY2hhciAqZnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBpbnQgc3RvcmVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNoKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIodV9jaGFyIHR5cGUsIGNvbnN0IGNoYXIgKmZ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgaW50IHN0b3JlaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aGljaCk7CiAgICBORVRTTk1QX0lNUE9SVAogICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfcGFyc2VfYm9vbGVhbihjaGFyICpsaW5lKTsKICAgIE5FVFNOTVBfSU1QT1JUCiAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9kc19zaHV0ZG93bih2b2lkKTsKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgojZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFRkFVTFRfU1RPUkVfSCAqLwovKiogQH0gKi8K