LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJkYS5oCiAqIFZlcnNpb246ICAgICAgIDEuMAogKiBEZXNjcmlwdGlvbjogICBJckRBIGNvbW1vbiBpbmNsdWRlIGZpbGUgZm9yIGtlcm5lbCBpbnRlcm5hbCB1c2UKICogU3RhdHVzOiAgICAgICAgU3RhYmxlCiAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogQ3JlYXRlZCBhdDogICAgVHVlIERlYyAgOSAyMToxMzoxMiAxOTk3CiAqIE1vZGlmaWVkIGF0OiAgIEZyaSBKYW4gMjggMTM6MTY6MzIgMjAwMAogKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIAogKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAgRGFnIEJyYXR0bGksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CiAqICAgICAgCiAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAogKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCiAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKiAgCiAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCiAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICogICAgIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIE5FVF9JUkRBX0gKI2RlZmluZSBORVRfSVJEQV9ICgojaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CQkvKiBzdHJ1Y3Qgc2tfYnVmZiAqLwojaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiNpbmNsdWRlIDxsaW51eC9pZi5oPgkJCS8qIHNhX2ZhbWlseV90IGluIDxsaW51eC9pcmRhLmg+ICovCiNpbmNsdWRlIDxsaW51eC9pcmRhLmg+Cgp0eXBlZGVmIF9fdTMyIG1hZ2ljX3Q7CgojaWZuZGVmIFRSVUUKI2RlZmluZSBUUlVFIDEKI2VuZGlmCgojaWZuZGVmIEZBTFNFIAojZGVmaW5lIEZBTFNFIDAKI2VuZGlmCgovKiBIYWNrIHRvIGRvIHNtYWxsIGJhY2tvZmYgd2hlbiBzZXR0aW5nIG1lZGlhIGJ1c3kgaW4gSXJMQVAgKi8KI2lmbmRlZiBTTUFMTAojZGVmaW5lIFNNQUxMIDUKI2VuZGlmCgojaWZuZGVmIElSREFfTUlOIC8qIExldHMgbm90IG1peCB0aGlzIE1JTiB3aXRoIG90aGVyIGhlYWRlciBmaWxlcyAqLwojZGVmaW5lIElSREFfTUlOKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKI2VuZGlmCgojaWZuZGVmIElSREFfQUxJR04KIyAgZGVmaW5lIElSREFfQUxJR04gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCkpCiNlbmRpZgojaWZuZGVmIElSREFfUEFDSwojICBkZWZpbmUgSVJEQV9QQUNLIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCiNlbmRpZgoKCiNpZmRlZiBDT05GSUdfSVJEQV9ERUJVRwoKZXh0ZXJuIHVuc2lnbmVkIGludCBpcmRhX2RlYnVnOwoKLyogdXNlIDAgZm9yIHByb2R1Y3Rpb24sIDEgZm9yIHZlcmlmaWNhdGlvbiwgPjIgZm9yIGRlYnVnICovCiNkZWZpbmUgSVJEQV9ERUJVR19MRVZFTCAwCgojZGVmaW5lIElSREFfREVCVUcobiwgYXJncy4uLikgXApkbyB7CWlmIChpcmRhX2RlYnVnID49IChuKSkgXAoJCXByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyBcCn0gd2hpbGUgKDApCiNkZWZpbmUgSVJEQV9BU1NFUlQoZXhwciwgZnVuYykgXApkbyB7IGlmKCEoZXhwcikpIHsgXAoJcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXM6JXM6JWQgJXNcbiIsIFwKCQlfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5FX18sKCNleHByKSApOyBcCglmdW5jIH0gfSB3aGlsZSAoMCkKI2RlZmluZSBJUkRBX0FTU0VSVF9MQUJFTChsYWJlbCkJbGFiZWwKI2Vsc2UKI2RlZmluZSBJUkRBX0RFQlVHKG4sIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKI2RlZmluZSBJUkRBX0FTU0VSVChleHByLCBmdW5jKSBkbyB7ICh2b2lkKShleHByKTsgfSB3aGlsZSAoMCkKI2RlZmluZSBJUkRBX0FTU0VSVF9MQUJFTChsYWJlbCkKI2VuZGlmIC8qIENPTkZJR19JUkRBX0RFQlVHICovCgojZGVmaW5lIElSREFfV0FSTklORyhhcmdzLi4uKSBkbyB7IGlmIChuZXRfcmF0ZWxpbWl0KCkpIHByaW50ayhLRVJOX1dBUk5JTkcgYXJncyk7IH0gd2hpbGUgKDApCiNkZWZpbmUgSVJEQV9NRVNTQUdFKGFyZ3MuLi4pIGRvIHsgaWYgKG5ldF9yYXRlbGltaXQoKSkgcHJpbnRrKEtFUk5fSU5GTyBhcmdzKTsgfSB3aGlsZSAoMCkKI2RlZmluZSBJUkRBX0VSUk9SKGFyZ3MuLi4pICAgZG8geyBpZiAobmV0X3JhdGVsaW1pdCgpKSBwcmludGsoS0VSTl9FUlIgYXJncyk7IH0gd2hpbGUgKDApCgovKgogKiAgTWFnaWMgbnVtYmVycyB1c2VkIGJ5IExpbnV4LUlyREEuIFJhbmRvbSBudW1iZXJzIHdoaWNoIG11c3QgYmUgdW5pcXVlIHRvIAogKiAgZ2l2ZSB0aGUgYmVzdCBwcm90ZWN0aW9uCiAqLwoKI2RlZmluZSBJUlRUWV9NQUdJQyAgICAgICAgMHgyMzU3CiNkZWZpbmUgTEFQX01BR0lDICAgICAgICAgIDB4MTM1NwojZGVmaW5lIExNUF9NQUdJQyAgICAgICAgICAweDQzMjEKI2RlZmluZSBMTVBfTFNBUF9NQUdJQyAgICAgMHg2OTMzMwojZGVmaW5lIExNUF9MQVBfTUFHSUMgICAgICAweDM0MzIKI2RlZmluZSBJUkRBX0RFVklDRV9NQUdJQyAgMHg2MzQ1NAojZGVmaW5lIElBU19NQUdJQyAgICAgICAgICAweDAwNwojZGVmaW5lIFRUUF9NQUdJQyAgICAgICAgICAweDI0MTE2OQojZGVmaW5lIFRUUF9UU0FQX01BR0lDICAgICAweDQzNDUKI2RlZmluZSBJUk9CRVhfTUFHSUMgICAgICAgMHgzNDEzMjQKI2RlZmluZSBIQl9NQUdJQyAgICAgICAgICAgMHg2NDUzNAojZGVmaW5lIElSTEFOX01BR0lDICAgICAgICAweDc1NAojZGVmaW5lIElBU19PQkpFQ1RfTUFHSUMgICAweDM0MjM0CiNkZWZpbmUgSUFTX0FUVFJJQl9NQUdJQyAgIDB4NDUyMzIKI2RlZmluZSBJUkRBX1RBU0tfTUFHSUMgICAgMHgzODQyMwoKI2RlZmluZSBJQVNfREVWSUNFX0lEIDB4MDAwMCAvKiBEZWZpbmVkIGJ5IElyREEsIElyTE1QIHNlY3Rpb24gNC4xIChwYWdlIDY4KSAqLwojZGVmaW5lIElBU19QTlBfSUQgICAgMHhkMzQyCiNkZWZpbmUgSUFTX09CRVhfSUQgICAweDM0MzIzCiNkZWZpbmUgSUFTX0lSTEFOX0lEICAweDM0MjM0CiNkZWZpbmUgSUFTX0lSQ09NTV9JRCAweDIzNDMKI2RlZmluZSBJQVNfSVJMUFRfSUQgIDB4OTg3NgoKI2VuZGlmIC8qIE5FVF9JUkRBX0ggKi8K