LyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBAZmlsZSAgICBzdG0zMmw0eHguaAogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAqIEBicmllZiAgIENNU0lTIFNUTTMyTDR4eCBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUuCiAgKgogICogICAgICAgICAgVGhlIGZpbGUgaXMgdGhlIHVuaXF1ZSBpbmNsdWRlIGZpbGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcgogICogICAgICAgICAgaXMgdXNpbmcgaW4gdGhlIEMgc291cmNlIGNvZGUsIHVzdWFsbHkgaW4gbWFpbi5jLiBUaGlzIGZpbGUgY29udGFpbnM6CiAgKiAgICAgICAgICAgLSBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGhhdCBhbGxvd3MgdG8gc2VsZWN0OgogICogICAgICAgICAgICAgIC0gVGhlIFNUTTMyTDR4eCBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCiAgKiAgICAgICAgICAgICAgLSBUbyB1c2Ugb3Igbm90IHRoZSBwZXJpcGhlcmFsknMgZHJpdmVycyBpbiBhcHBsaWNhdGlvbiBjb2RlKGkuZS4KICAqICAgICAgICAgICAgICAgIGNvZGUgd2lsbCBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWyScyByZWdpc3RlcnMKICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieQogICogICAgICAgICAgICAgICAgIiNkZWZpbmUgVVNFX0hBTF9EUklWRVIiCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQGF0dGVudGlvbgogICoKICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICoKICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCwKICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQXBhY2hlLTIuMAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwoKLyoqIEBhZGR0b2dyb3VwIENNU0lTCiAgKiBAewogICovCgovKiogQGFkZHRvZ3JvdXAgc3RtMzJsNHh4CiAgKiBAewogICovCgojaWZuZGVmIF9fU1RNMzJMNHh4X0gKI2RlZmluZSBfX1NUTTMyTDR4eF9ICgojaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KCi8qKiBAYWRkdG9ncm91cCBMaWJyYXJ5X2NvbmZpZ3VyYXRpb25fc2VjdGlvbgogICogQHsKICAqLwoKLyoqCiAgKiBAYnJpZWYgU1RNMzIgRmFtaWx5CiAgKi8KI2lmICFkZWZpbmVkIChTVE0zMkw0KQojZGVmaW5lIFNUTTMyTDQKI2VuZGlmIC8qIFNUTTMyTDQgKi8KCi8qIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBTVE0zMkw0IGRldmljZSB1c2VkIGluIHlvdXIKICAgYXBwbGljYXRpb24KICAqLwoKI2lmICFkZWZpbmVkIChTVE0zMkw0MTJ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQyMnh4KSAmJiBcCiAgICAhZGVmaW5lZCAoU1RNMzJMNDMxeHgpICYmICFkZWZpbmVkIChTVE0zMkw0MzJ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQzM3h4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDQyeHgpICYmICFkZWZpbmVkIChTVE0zMkw0NDN4eCkgJiYgXAogICAgIWRlZmluZWQgKFNUTTMyTDQ1MXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDUyeHgpICYmICFkZWZpbmVkIChTVE0zMkw0NjJ4eCkgJiYgXAogICAgIWRlZmluZWQgKFNUTTMyTDQ3MXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDc1eHgpICYmICFkZWZpbmVkIChTVE0zMkw0NzZ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDQ4NXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNDg2eHgpICYmIFwKICAgICFkZWZpbmVkIChTVE0zMkw0OTZ4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDRBNnh4KSAmJiBcCiAgICAhZGVmaW5lZCAoU1RNMzJMNFA1eHgpICYmICFkZWZpbmVkIChTVE0zMkw0UTV4eCkgJiYgXAogICAgIWRlZmluZWQgKFNUTTMyTDRSNXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNFI3eHgpICYmICFkZWZpbmVkIChTVE0zMkw0Ujl4eCkgJiYgIWRlZmluZWQgKFNUTTMyTDRTNXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNFM3eHgpICYmICFkZWZpbmVkIChTVE0zMkw0Uzl4eCkKICAvKiAjZGVmaW5lIFNUTTMyTDQxMnh4ICovICAgLyohPCBTVE0zMkw0MTJ4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0MjJ4eCAqLyAgIC8qITwgU1RNMzJMNDIyeHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNDMxeHggKi8gICAvKiE8IFNUTTMyTDQzMXh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDQzMnh4ICovICAgLyohPCBTVE0zMkw0MzJ4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0MzN4eCAqLyAgIC8qITwgU1RNMzJMNDMzeHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNDQyeHggKi8gICAvKiE8IFNUTTMyTDQ0Mnh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDQ0M3h4ICovICAgLyohPCBTVE0zMkw0NDN4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0NTF4eCAqLyAgIC8qITwgU1RNMzJMNDUxeHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNDUyeHggKi8gICAvKiE8IFNUTTMyTDQ1Mnh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDQ2Mnh4ICovICAgLyohPCBTVE0zMkw0NjJ4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0NzF4eCAqLyAgIC8qITwgU1RNMzJMNDcxeHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNDc1eHggKi8gICAvKiE8IFNUTTMyTDQ3NXh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDQ3Nnh4ICovICAgLyohPCBTVE0zMkw0NzZ4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0ODV4eCAqLyAgIC8qITwgU1RNMzJMNDg1eHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNDg2eHggKi8gICAvKiE8IFNUTTMyTDQ4Nnh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDQ5Nnh4ICovICAgLyohPCBTVE0zMkw0OTZ4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0QTZ4eCAqLyAgIC8qITwgU1RNMzJMNEE2eHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNFA1eHggKi8gICAvKiE8IFNUTTMyTDRRNXh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDRSNXh4ICovICAgLyohPCBTVE0zMkw0UjV4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0Ujd4eCAqLyAgIC8qITwgU1RNMzJMNFI3eHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNFI5eHggKi8gICAvKiE8IFNUTTMyTDRSOXh4IERldmljZXMgKi8KICAvKiAjZGVmaW5lIFNUTTMyTDRTNXh4ICovICAgLyohPCBTVE0zMkw0UzV4eCBEZXZpY2VzICovCiAgLyogI2RlZmluZSBTVE0zMkw0Uzd4eCAqLyAgIC8qITwgU1RNMzJMNFM3eHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNFM5eHggKi8gICAvKiE8IFNUTTMyTDRTOXh4IERldmljZXMgKi8KI2VuZGlmCgovKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLgogICovCiNpZiAhZGVmaW5lZCAgKFVTRV9IQUxfRFJJVkVSKQovKioKICogQGJyaWVmIENvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdpbGwgbm90IHVzZSB0aGUgcGVyaXBoZXJhbHMgZHJpdmVycy4KICAgSW4gdGhpcyBjYXNlLCB0aGVzZSBkcml2ZXJzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGFuZCB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsCiAgIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzCiAgICovCiAgLyojZGVmaW5lIFVTRV9IQUxfRFJJVkVSICovCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLwoKLyoqCiAgKiBAYnJpZWYgQ01TSVMgRGV2aWNlIHZlcnNpb24gbnVtYmVyCiAgKi8KI2RlZmluZSBfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9NQUlOICAgKDB4MDEpIC8qITwgWzMxOjI0XSBtYWluIHZlcnNpb24gKi8KI2RlZmluZSBfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9TVUIxICAgKDB4MDcpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8KI2RlZmluZSBfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9TVUIyICAgKDB4MDEpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KI2RlZmluZSBfX1NUTTMyTDRfQ01TSVNfVkVSU0lPTl9SQyAgICAgKDB4MDApIC8qITwgWzc6MF0gIHJlbGVhc2UgY2FuZGlkYXRlICovCiNkZWZpbmUgX19TVE0zMkw0X0NNU0lTX1ZFUlNJT04gICAgICAgICgoX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAyNClcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fU1VCMSA8PCAxNilcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fU1VCMiA8PCA4IClcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkw0X0NNU0lTX1ZFUlNJT05fUkMpKQoKLyoqCiAgKiBAfQogICovCgovKiogQGFkZHRvZ3JvdXAgRGV2aWNlX0luY2x1ZGVkCiAgKiBAewogICovCgojaWYgZGVmaW5lZChTVE0zMkw0MTJ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDEyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0MjJ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDIyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0MzF4eCkKICAjaW5jbHVkZSAic3RtMzJsNDMxeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0MzJ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDMyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0MzN4eCkKICAjaW5jbHVkZSAic3RtMzJsNDMzeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NDJ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDQyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NDN4eCkKICAjaW5jbHVkZSAic3RtMzJsNDQzeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NTF4eCkKICAjaW5jbHVkZSAic3RtMzJsNDUxeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NTJ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDUyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NjJ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDYyeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NzF4eCkKICAjaW5jbHVkZSAic3RtMzJsNDcxeHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NzV4eCkKICAjaW5jbHVkZSAic3RtMzJsNDc1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0NzZ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDc2eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0ODV4eCkKICAjaW5jbHVkZSAic3RtMzJsNDg1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0ODZ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDg2eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0OTZ4eCkKICAjaW5jbHVkZSAic3RtMzJsNDk2eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0QTZ4eCkKICAjaW5jbHVkZSAic3RtMzJsNGE2eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0UDV4eCkKICAjaW5jbHVkZSAic3RtMzJsNHA1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0UTV4eCkKICAjaW5jbHVkZSAic3RtMzJsNHE1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0UjV4eCkKICAjaW5jbHVkZSAic3RtMzJsNHI1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0Ujd4eCkKICAjaW5jbHVkZSAic3RtMzJsNHI3eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0Ujl4eCkKICAjaW5jbHVkZSAic3RtMzJsNHI5eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0UzV4eCkKICAjaW5jbHVkZSAic3RtMzJsNHM1eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0Uzd4eCkKICAjaW5jbHVkZSAic3RtMzJsNHM3eHguaCIKI2VsaWYgZGVmaW5lZChTVE0zMkw0Uzl4eCkKICAjaW5jbHVkZSAic3RtMzJsNHM5eHguaCIKI2Vsc2UKICNlcnJvciAiUGxlYXNlIHNlbGVjdCBmaXJzdCB0aGUgdGFyZ2V0IFNUTTMyTDR4eCBkZXZpY2UgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uIChpbiBzdG0zMmw0eHguaCBmaWxlKSIKI2VuZGlmCgovKioKICAqIEB9CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF90eXBlcwogICogQHsKICAqLwp0eXBlZGVmIGVudW0KewogIFJFU0VUID0gMCwKICBTRVQgPSAhUkVTRVQKfSBGbGFnU3RhdHVzLCBJVFN0YXR1czsKCnR5cGVkZWYgZW51bQp7CiAgRElTQUJMRSA9IDAsCiAgRU5BQkxFID0gIURJU0FCTEUKfSBGdW5jdGlvbmFsU3RhdGU7CiNkZWZpbmUgSVNfRlVOQ1RJT05BTF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IERJU0FCTEUpIHx8ICgoU1RBVEUpID09IEVOQUJMRSkpCgp0eXBlZGVmIGVudW0KewogIFNVQ0NFU1MgPSAwLAogIEVSUk9SID0gIVNVQ0NFU1MKfSBFcnJvclN0YXR1czsKCi8qKgogICogQH0KICAqLwoKCi8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF9tYWNyb3MKICAqIEB7CiAgKi8KI2RlZmluZSBTRVRfQklUKFJFRywgQklUKSAgICAgKChSRUcpIHw9IChCSVQpKQoKI2RlZmluZSBDTEVBUl9CSVQoUkVHLCBCSVQpICAgKChSRUcpICY9IH4oQklUKSkKCiNkZWZpbmUgUkVBRF9CSVQoUkVHLCBCSVQpICAgICgoUkVHKSAmIChCSVQpKQoKI2RlZmluZSBDTEVBUl9SRUcoUkVHKSAgICAgICAgKChSRUcpID0gKDB4MCkpCgojZGVmaW5lIFdSSVRFX1JFRyhSRUcsIFZBTCkgICAoKFJFRykgPSAoVkFMKSkKCiNkZWZpbmUgUkVBRF9SRUcoUkVHKSAgICAgICAgICgoUkVHKSkKCiNkZWZpbmUgTU9ESUZZX1JFRyhSRUcsIENMRUFSTUFTSywgU0VUTUFTSykgIFdSSVRFX1JFRygoUkVHKSwgKCgoUkVBRF9SRUcoUkVHKSkgJiAofihDTEVBUk1BU0spKSkgfCAoU0VUTUFTSykpKQoKI2RlZmluZSBQT1NJVElPTl9WQUwoVkFMKSAgICAgKF9fQ0xaKF9fUkJJVChWQUwpKSkKCgovKioKICAqIEB9CiAgKi8KCiNpZiBkZWZpbmVkIChVU0VfSEFMX0RSSVZFUikKICNpbmNsdWRlICJzdG0zMmw0eHhfaGFsLmgiCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLwoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCgojZW5kaWYgLyogX19TVE0zMkw0eHhfSCAqLwovKioKICAqIEB9CiAgKi8KCi8qKgogICogQH0KICAqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8K