LyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBAZmlsZSAgICBzdG0zMmw1eHguaAogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KICAqIEBicmllZiAgIENNU0lTIFNUTTMyTDV4eCBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUuCiAgKgogICogICAgICAgICAgVGhlIGZpbGUgaXMgdGhlIHVuaXF1ZSBpbmNsdWRlIGZpbGUgdGhhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcgogICogICAgICAgICAgaXMgdXNpbmcgaW4gdGhlIEMgc291cmNlIGNvZGUsIHVzdWFsbHkgaW4gbWFpbi5jLiBUaGlzIGZpbGUgY29udGFpbnM6CiAgKiAgICAgICAgICAgLSBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGhhdCBhbGxvd3MgdG8gc2VsZWN0OgogICogICAgICAgICAgICAgIC0gVGhlIFNUTTMyTDV4eCBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCiAgKiAgICAgICAgICAgICAgLSBUbyB1c2Ugb3Igbm90IHRoZSBwZXJpcGhlcmFsknMgZHJpdmVycyBpbiBhcHBsaWNhdGlvbiBjb2RlKGkuZS4KICAqICAgICAgICAgICAgICAgIGNvZGUgd2lsbCBiZSBiYXNlZCBvbiBkaXJlY3QgYWNjZXNzIHRvIHBlcmlwaGVyYWyScyByZWdpc3RlcnMKICAqICAgICAgICAgICAgICAgIHJhdGhlciB0aGFuIGRyaXZlcnMgQVBJKSwgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCBieQogICogICAgICAgICAgICAgICAgIiNkZWZpbmUgVVNFX0hBTF9EUklWRVIiCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQGF0dGVudGlvbgogICoKICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICoKICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCwKICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQXBhY2hlLTIuMAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwoKLyoqIEBhZGR0b2dyb3VwIENNU0lTCiAgKiBAewogICovCgovKiogQGFkZHRvZ3JvdXAgc3RtMzJsNXh4CiAgKiBAewogICovCgojaWZuZGVmIFNUTTMyTDV4eF9ICiNkZWZpbmUgU1RNMzJMNXh4X0gKCiNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKLyoqIEBhZGR0b2dyb3VwIExpYnJhcnlfY29uZmlndXJhdGlvbl9zZWN0aW9uCiAgKiBAewogICovCgovKioKICAqIEBicmllZiBTVE0zMiBGYW1pbHkKICAqLwojaWYgIWRlZmluZWQgKFNUTTMyTDUpCiNkZWZpbmUgU1RNMzJMNQojZW5kaWYgLyogU1RNMzJMNSAqLwoKLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IFNUTTMyTDUgZGV2aWNlIHVzZWQgaW4geW91cgogICBhcHBsaWNhdGlvbgogICovCgojaWYgIWRlZmluZWQgKFNUTTMyTDU1Mnh4KSAmJiAhZGVmaW5lZCAoU1RNMzJMNTYyeHgpCiAgLyogI2RlZmluZSBTVE0zMkw1NTJ4eCAqLyAgIC8qITwgU1RNMzJMNTUyeHggRGV2aWNlcyAqLwogIC8qICNkZWZpbmUgU1RNMzJMNTYyeHggKi8gICAvKiE8IFNUTTMyTDU2Mnh4IERldmljZXMgKi8KI2VuZGlmCgovKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLgogICovCiNpZiAhZGVmaW5lZCAgKFVTRV9IQUxfRFJJVkVSKQovKioKICogQGJyaWVmIENvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdpbGwgbm90IHVzZSB0aGUgcGVyaXBoZXJhbHMgZHJpdmVycy4KICAgSW4gdGhpcyBjYXNlLCB0aGVzZSBkcml2ZXJzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGFuZCB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsCiAgIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzCiAgICovCiAgLyojZGVmaW5lIFVTRV9IQUxfRFJJVkVSICovCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLwoKLyoqCiAgKiBAYnJpZWYgQ01TSVMgRGV2aWNlIHZlcnNpb24gbnVtYmVyCiAgKi8KI2RlZmluZSBfX1NUTTMyTDVfQ01TSVNfVkVSU0lPTl9NQUlOICAgKDB4MDFVKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCiNkZWZpbmUgX19TVE0zMkw1X0NNU0lTX1ZFUlNJT05fU1VCMSAgICgweDAwVSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLwojZGVmaW5lIF9fU1RNMzJMNV9DTVNJU19WRVJTSU9OX1NVQjIgICAoMHgwNFUpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KI2RlZmluZSBfX1NUTTMyTDVfQ01TSVNfVkVSU0lPTl9SQyAgICAgKDB4MDFVKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLwojZGVmaW5lIF9fU1RNMzJMNV9DTVNJU19WRVJTSU9OICAgICAgICAoKF9fU1RNMzJMNV9DTVNJU19WRVJTSU9OX01BSU4gPDwgMjRVKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyTDVfQ01TSVNfVkVSU0lPTl9TVUIxIDw8IDE2VSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkw1X0NNU0lTX1ZFUlNJT05fU1VCMiA8PCA4VSApXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJMNV9DTVNJU19WRVJTSU9OX1JDKSkKCi8qKgogICogQH0KICAqLwoKLyoqIEBhZGR0b2dyb3VwIERldmljZV9JbmNsdWRlZAogICogQHsKICAqLwoKI2lmIGRlZmluZWQoU1RNMzJMNTUyeHgpCiAgI2luY2x1ZGUgInN0bTMybDU1Mnh4LmgiCiNlbGlmIGRlZmluZWQoU1RNMzJMNTYyeHgpCiAgI2luY2x1ZGUgInN0bTMybDU2Mnh4LmgiCiNlbHNlCiAjZXJyb3IgIlBsZWFzZSBzZWxlY3QgZmlyc3QgdGhlIHRhcmdldCBTVE0zMkw1eHggZGV2aWNlIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbiAoaW4gc3RtMzJsNXh4LmggZmlsZSkiCiNlbmRpZgoKLyoqCiAgKiBAfQogICovCgovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfdHlwZXMKICAqIEB7CiAgKi8KdHlwZWRlZiBlbnVtCnsKICBSRVNFVCA9IDAsCiAgU0VUID0gIVJFU0VUCn0gRmxhZ1N0YXR1cywgSVRTdGF0dXM7Cgp0eXBlZGVmIGVudW0KewogIERJU0FCTEUgPSAwLAogIEVOQUJMRSA9ICFESVNBQkxFCn0gRnVuY3Rpb25hbFN0YXRlOwojZGVmaW5lIElTX0ZVTkNUSU9OQUxfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBESVNBQkxFKSB8fCAoKFNUQVRFKSA9PSBFTkFCTEUpKQoKdHlwZWRlZiBlbnVtCnsKICBTVUNDRVNTID0gMCwKICBFUlJPUiA9ICFTVUNDRVNTCn0gRXJyb3JTdGF0dXM7CgovKioKICAqIEB9CiAgKi8KCgovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfbWFjcm9zCiAgKiBAewogICovCiNkZWZpbmUgU0VUX0JJVChSRUcsIEJJVCkgICAgICgoUkVHKSB8PSAoQklUKSkKCiNkZWZpbmUgQ0xFQVJfQklUKFJFRywgQklUKSAgICgoUkVHKSAmPSB+KEJJVCkpCgojZGVmaW5lIFJFQURfQklUKFJFRywgQklUKSAgICAoKFJFRykgJiAoQklUKSkKCiNkZWZpbmUgQ0xFQVJfUkVHKFJFRykgICAgICAgICgoUkVHKSA9ICgweDApKQoKI2RlZmluZSBXUklURV9SRUcoUkVHLCBWQUwpICAgKChSRUcpID0gKFZBTCkpCgojZGVmaW5lIFJFQURfUkVHKFJFRykgICAgICAgICAoKFJFRykpCgojZGVmaW5lIE1PRElGWV9SRUcoUkVHLCBDTEVBUk1BU0ssIFNFVE1BU0spICBXUklURV9SRUcoKFJFRyksICgoKFJFQURfUkVHKFJFRykpICYgKH4oQ0xFQVJNQVNLKSkpIHwgKFNFVE1BU0spKSkKCiNkZWZpbmUgUE9TSVRJT05fVkFMKFZBTCkgICAgIChfX0NMWihfX1JCSVQoVkFMKSkpCgoKLyoqCiAgKiBAfQogICovCgojaWYgZGVmaW5lZCAoVVNFX0hBTF9EUklWRVIpCiAjaW5jbHVkZSAic3RtMzJsNXh4X2hhbC5oIgojZW5kaWYgLyogVVNFX0hBTF9EUklWRVIgKi8KCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKI2VuZGlmIC8qIFNUTTMyTDV4eF9IICovCi8qKgogICogQH0KICAqLwoKLyoqCiAgKiBAfQogICovCgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwo=