LyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBAZmlsZSAgICBzdG0zMmYxeHguaAogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAqIEBicmllZiAgIENNU0lTIFNUTTMyRjF4eCBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUuIAogICoKICAqICAgICAgICAgIFRoZSBmaWxlIGlzIHRoZSB1bmlxdWUgaW5jbHVkZSBmaWxlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIKICAqICAgICAgICAgIGlzIHVzaW5nIGluIHRoZSBDIHNvdXJjZSBjb2RlLCB1c3VhbGx5IGluIG1haW4uYy4gVGhpcyBmaWxlIGNvbnRhaW5zOgogICogICAgICAgICAgICAtIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aGF0IGFsbG93cyB0byBzZWxlY3Q6CiAgKiAgICAgICAgICAgICAgLSBUaGUgU1RNMzJGMXh4IGRldmljZSB1c2VkIGluIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KICAqICAgICAgICAgICAgICAtIFRvIHVzZSBvciBub3QgdGhlIHBlcmlwaGVyYWyScyBkcml2ZXJzIGluIGFwcGxpY2F0aW9uIGNvZGUoaS5lLiAKICAqICAgICAgICAgICAgICAgIGNvZGUgd2lsbCBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWyScyByZWdpc3RlcnMgCiAgKiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkcml2ZXJzIEFQSSksIHRoaXMgb3B0aW9uIGlzIGNvbnRyb2xsZWQgYnkgCiAgKiAgICAgICAgICAgICAgICAiI2RlZmluZSBVU0VfSEFMX0RSSVZFUiIKICAqICAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEBhdHRlbnRpb24KICAqCiAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCgovKiogQGFkZHRvZ3JvdXAgQ01TSVMKICAqIEB7CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBzdG0zMmYxeHgKICAqIEB7CiAgKi8KICAgIAojaWZuZGVmIF9fU1RNMzJGMVhYX0gKI2RlZmluZSBfX1NUTTMyRjFYWF9ICgojaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KICAKLyoqIEBhZGR0b2dyb3VwIExpYnJhcnlfY29uZmlndXJhdGlvbl9zZWN0aW9uCiAgKiBAewogICovCgovKioKICAqIEBicmllZiBTVE0zMiBGYW1pbHkKICAqLwojaWYgIWRlZmluZWQgKFNUTTMyRjEpCiNkZWZpbmUgU1RNMzJGMQojZW5kaWYgLyogU1RNMzJGMSAqLwoKLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IFNUTTMyTCBkZXZpY2UgdXNlZCBpbiB5b3VyIAogICBhcHBsaWNhdGlvbiAKICAqLwoKI2lmICFkZWZpbmVkIChTVE0zMkYxMDB4QikgJiYgIWRlZmluZWQgKFNUTTMyRjEwMHhFKSAmJiAhZGVmaW5lZCAoU1RNMzJGMTAxeDYpICYmIFwKICAgICFkZWZpbmVkIChTVE0zMkYxMDF4QikgJiYgIWRlZmluZWQgKFNUTTMyRjEwMXhFKSAmJiAhZGVmaW5lZCAoU1RNMzJGMTAxeEcpICYmICFkZWZpbmVkIChTVE0zMkYxMDJ4NikgJiYgIWRlZmluZWQgKFNUTTMyRjEwMnhCKSAmJiAhZGVmaW5lZCAoU1RNMzJGMTAzeDYpICYmIFwKICAgICFkZWZpbmVkIChTVE0zMkYxMDN4QikgJiYgIWRlZmluZWQgKFNUTTMyRjEwM3hFKSAmJiAhZGVmaW5lZCAoU1RNMzJGMTAzeEcpICYmICFkZWZpbmVkIChTVE0zMkYxMDV4QykgJiYgIWRlZmluZWQgKFNUTTMyRjEwN3hDKQogIC8qICNkZWZpbmUgU1RNMzJGMTAweEIgICovICAgLyohPCBTVE0zMkYxMDBDNCwgU1RNMzJGMTAwUjQsIFNUTTMyRjEwMEM2LCBTVE0zMkYxMDBSNiwgU1RNMzJGMTAwQzgsIFNUTTMyRjEwMFI4LCBTVE0zMkYxMDBWOCwgU1RNMzJGMTAwQ0IsIFNUTTMyRjEwMFJCIGFuZCBTVE0zMkYxMDBWQiAqLwogIC8qICNkZWZpbmUgU1RNMzJGMTAweEUgKi8gICAgLyohPCBTVE0zMkYxMDBSQywgU1RNMzJGMTAwVkMsIFNUTTMyRjEwMFpDLCBTVE0zMkYxMDBSRCwgU1RNMzJGMTAwVkQsIFNUTTMyRjEwMFpELCBTVE0zMkYxMDBSRSwgU1RNMzJGMTAwVkUgYW5kIFNUTTMyRjEwMFpFICovCiAgLyogI2RlZmluZSBTVE0zMkYxMDF4NiAgKi8gICAvKiE8IFNUTTMyRjEwMUM0LCBTVE0zMkYxMDFSNCwgU1RNMzJGMTAxVDQsIFNUTTMyRjEwMUM2LCBTVE0zMkYxMDFSNiBhbmQgU1RNMzJGMTAxVDYgRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJGMTAxeEIgICovICAgLyohPCBTVE0zMkYxMDFDOCwgU1RNMzJGMTAxUjgsIFNUTTMyRjEwMVQ4LCBTVE0zMkYxMDFWOCwgU1RNMzJGMTAxQ0IsIFNUTTMyRjEwMVJCLCBTVE0zMkYxMDFUQiBhbmQgU1RNMzJGMTAxVkIgKi8KICAvKiAjZGVmaW5lIFNUTTMyRjEwMXhFICovICAgIC8qITwgU1RNMzJGMTAxUkMsIFNUTTMyRjEwMVZDLCBTVE0zMkYxMDFaQywgU1RNMzJGMTAxUkQsIFNUTTMyRjEwMVZELCBTVE0zMkYxMDFaRCwgU1RNMzJGMTAxUkUsIFNUTTMyRjEwMVZFIGFuZCBTVE0zMkYxMDFaRSAqLyAKICAvKiAjZGVmaW5lIFNUTTMyRjEwMXhHICAqLyAgIC8qITwgU1RNMzJGMTAxUkYsIFNUTTMyRjEwMVZGLCBTVE0zMkYxMDFaRiwgU1RNMzJGMTAxUkcsIFNUTTMyRjEwMVZHIGFuZCBTVE0zMkYxMDFaRyAqLwogIC8qICNkZWZpbmUgU1RNMzJGMTAyeDYgKi8gICAgLyohPCBTVE0zMkYxMDJDNCwgU1RNMzJGMTAyUjQsIFNUTTMyRjEwMkM2IGFuZCBTVE0zMkYxMDJSNiAqLwogIC8qICNkZWZpbmUgU1RNMzJGMTAyeEIgICovICAgLyohPCBTVE0zMkYxMDJDOCwgU1RNMzJGMTAyUjgsIFNUTTMyRjEwMkNCIGFuZCBTVE0zMkYxMDJSQiAqLwogIC8qICNkZWZpbmUgU1RNMzJGMTAzeDYgICovICAgLyohPCBTVE0zMkYxMDNDNCwgU1RNMzJGMTAzUjQsIFNUTTMyRjEwM1Q0LCBTVE0zMkYxMDNDNiwgU1RNMzJGMTAzUjYgYW5kIFNUTTMyRjEwM1Q2ICovCiAgLyogI2RlZmluZSBTVE0zMkYxMDN4QiAgKi8gICAvKiE8IFNUTTMyRjEwM0M4LCBTVE0zMkYxMDNSOCwgU1RNMzJGMTAzVDgsIFNUTTMyRjEwM1Y4LCBTVE0zMkYxMDNDQiwgU1RNMzJGMTAzUkIsIFNUTTMyRjEwM1RCIGFuZCBTVE0zMkYxMDNWQiAqLwogIC8qICNkZWZpbmUgU1RNMzJGMTAzeEUgKi8gICAgLyohPCBTVE0zMkYxMDNSQywgU1RNMzJGMTAzVkMsIFNUTTMyRjEwM1pDLCBTVE0zMkYxMDNSRCwgU1RNMzJGMTAzVkQsIFNUTTMyRjEwM1pELCBTVE0zMkYxMDNSRSwgU1RNMzJGMTAzVkUgYW5kIFNUTTMyRjEwM1pFICovCiAgLyogI2RlZmluZSBTVE0zMkYxMDN4RyAgKi8gICAvKiE8IFNUTTMyRjEwM1JGLCBTVE0zMkYxMDNWRiwgU1RNMzJGMTAzWkYsIFNUTTMyRjEwM1JHLCBTVE0zMkYxMDNWRyBhbmQgU1RNMzJGMTAzWkcgKi8KICAvKiAjZGVmaW5lIFNUTTMyRjEwNXhDICovICAgIC8qITwgU1RNMzJGMTA1UjgsIFNUTTMyRjEwNVY4LCBTVE0zMkYxMDVSQiwgU1RNMzJGMTA1VkIsIFNUTTMyRjEwNVJDIGFuZCBTVE0zMkYxMDVWQyAqLwogIC8qICNkZWZpbmUgU1RNMzJGMTA3eEMgICovICAgLyohPCBTVE0zMkYxMDdSQiwgU1RNMzJGMTA3VkIsIFNUTTMyRjEwN1JDIGFuZCBTVE0zMkYxMDdWQyAqLyAgCiNlbmRpZgoKLyogIFRpcDogVG8gYXZvaWQgbW9kaWZ5aW5nIHRoaXMgZmlsZSBlYWNoIHRpbWUgeW91IG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gdGhlc2UKICAgICAgICBkZXZpY2VzLCB5b3UgY2FuIGRlZmluZSB0aGUgZGV2aWNlIGluIHlvdXIgdG9vbGNoYWluIGNvbXBpbGVyIHByZXByb2Nlc3Nvci4KICAqLwogIAojaWYgIWRlZmluZWQgIChVU0VfSEFMX0RSSVZFUikKLyoqCiAqIEBicmllZiBDb21tZW50IHRoZSBsaW5lIGJlbG93IGlmIHlvdSB3aWxsIG5vdCB1c2UgdGhlIHBlcmlwaGVyYWxzIGRyaXZlcnMuCiAgIEluIHRoaXMgY2FzZSwgdGhlc2UgZHJpdmVycyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2lsbCAKICAgYmUgYmFzZWQgb24gZGlyZWN0IGFjY2VzcyB0byBwZXJpcGhlcmFscyByZWdpc3RlcnMgCiAgICovCiAgLyojZGVmaW5lIFVTRV9IQUxfRFJJVkVSICovCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLwoKLyoqCiAgKiBAYnJpZWYgQ01TSVMgRGV2aWNlIHZlcnNpb24gbnVtYmVyIFY0LjMuMQogICovCiNkZWZpbmUgX19TVE0zMkYxX0NNU0lTX1ZFUlNJT05fTUFJTiAgICgweDA0KSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCiNkZWZpbmUgX19TVE0zMkYxX0NNU0lTX1ZFUlNJT05fU1VCMSAgICgweDAzKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCiNkZWZpbmUgX19TVE0zMkYxX0NNU0lTX1ZFUlNJT05fU1VCMiAgICgweDAxKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiNkZWZpbmUgX19TVE0zMkYxX0NNU0lTX1ZFUlNJT05fUkMgICAgICgweDAwKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLyAKI2RlZmluZSBfX1NUTTMyRjFfQ01TSVNfVkVSU0lPTiAgICAgICAgKChfX1NUTTMyRjFfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDI0KVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjFfQ01TSVNfVkVSU0lPTl9TVUIxIDw8IDE2KVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjFfQ01TSVNfVkVSU0lPTl9TVUIyIDw8IDggKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjFfQ01TSVNfVkVSU0lPTl9SQykpCgovKioKICAqIEB9CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBEZXZpY2VfSW5jbHVkZWQKICAqIEB7CiAgKi8KCiNpZiBkZWZpbmVkKFNUTTMyRjEwMHhCKQogICNpbmNsdWRlICJzdG0zMmYxMDB4Yi5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwMHhFKQogICNpbmNsdWRlICJzdG0zMmYxMDB4ZS5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwMXg2KQogICNpbmNsdWRlICJzdG0zMmYxMDF4Ni5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwMXhCKQogICNpbmNsdWRlICJzdG0zMmYxMDF4Yi5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwMXhFKQogICNpbmNsdWRlICJzdG0zMmYxMDF4ZS5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwMXhHKQogICNpbmNsdWRlICJzdG0zMmYxMDF4Zy5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwMng2KQogICNpbmNsdWRlICJzdG0zMmYxMDJ4Ni5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwMnhCKQogICNpbmNsdWRlICJzdG0zMmYxMDJ4Yi5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwM3g2KQogICNpbmNsdWRlICJzdG0zMmYxMDN4Ni5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwM3hCKQogICNpbmNsdWRlICJzdG0zMmYxMDN4Yi5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwM3hFKQogICNpbmNsdWRlICJzdG0zMmYxMDN4ZS5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwM3hHKQogICNpbmNsdWRlICJzdG0zMmYxMDN4Zy5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwNXhDKQogICNpbmNsdWRlICJzdG0zMmYxMDV4Yy5oIgojZWxpZiBkZWZpbmVkKFNUTTMyRjEwN3hDKQogICNpbmNsdWRlICJzdG0zMmYxMDd4Yy5oIgojZWxzZQogI2Vycm9yICJQbGVhc2Ugc2VsZWN0IGZpcnN0IHRoZSB0YXJnZXQgU1RNMzJGMXh4IGRldmljZSB1c2VkIGluIHlvdXIgYXBwbGljYXRpb24gKGluIHN0bTMyZjF4eC5oIGZpbGUpIgojZW5kaWYKCi8qKgogICogQH0KICAqLwoKLyoqIEBhZGR0b2dyb3VwIEV4cG9ydGVkX3R5cGVzCiAgKiBAewogICovICAKdHlwZWRlZiBlbnVtIAp7CiAgUkVTRVQgPSAwLCAKICBTRVQgPSAhUkVTRVQKfSBGbGFnU3RhdHVzLCBJVFN0YXR1czsKCnR5cGVkZWYgZW51bSAKewogIERJU0FCTEUgPSAwLCAKICBFTkFCTEUgPSAhRElTQUJMRQp9IEZ1bmN0aW9uYWxTdGF0ZTsKI2RlZmluZSBJU19GVU5DVElPTkFMX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gRElTQUJMRSkgfHwgKChTVEFURSkgPT0gRU5BQkxFKSkKCnR5cGVkZWYgZW51bQp7CiAgU1VDQ0VTUyA9IDBVLAogIEVSUk9SID0gIVNVQ0NFU1MKfSBFcnJvclN0YXR1czsKCi8qKgogICogQH0KICAqLwoKCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF9tYWNyb3MKICAqIEB7CiAgKi8KI2RlZmluZSBTRVRfQklUKFJFRywgQklUKSAgICAgKChSRUcpIHw9IChCSVQpKQoKI2RlZmluZSBDTEVBUl9CSVQoUkVHLCBCSVQpICAgKChSRUcpICY9IH4oQklUKSkKCiNkZWZpbmUgUkVBRF9CSVQoUkVHLCBCSVQpICAgICgoUkVHKSAmIChCSVQpKQoKI2RlZmluZSBDTEVBUl9SRUcoUkVHKSAgICAgICAgKChSRUcpID0gKDB4MCkpCgojZGVmaW5lIFdSSVRFX1JFRyhSRUcsIFZBTCkgICAoKFJFRykgPSAoVkFMKSkKCiNkZWZpbmUgUkVBRF9SRUcoUkVHKSAgICAgICAgICgoUkVHKSkKCiNkZWZpbmUgTU9ESUZZX1JFRyhSRUcsIENMRUFSTUFTSywgU0VUTUFTSykgIFdSSVRFX1JFRygoUkVHKSwgKCgoUkVBRF9SRUcoUkVHKSkgJiAofihDTEVBUk1BU0spKSkgfCAoU0VUTUFTSykpKQoKI2RlZmluZSBQT1NJVElPTl9WQUwoVkFMKSAgICAgKF9fQ0xaKF9fUkJJVChWQUwpKSkgCgoKLyoqCiAgKiBAfQogICovCgojaWYgZGVmaW5lZCAoVVNFX0hBTF9EUklWRVIpCiAjaW5jbHVkZSAic3RtMzJmMXh4X2hhbC5oIgojZW5kaWYgLyogVVNFX0hBTF9EUklWRVIgKi8KCgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KCiNlbmRpZiAvKiBfX1NUTTMyRjF4eF9IICovCi8qKgogICogQH0KICAqLwoKLyoqCiAgKiBAfQogICovCiAgCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCg==