LyoKICogIFUtYm9vdCAtIHg4NiBTdGFydHVwIENvZGUKICoKICogKEMpIENvcHlyaWdodCAyMDA4LTIwMTEKICogR3JhZW1lIFJ1c3MsIDxncmFlbWUucnVzc0BnbWFpbC5jb20+CiAqCiAqIChDKSBDb3B5cmlnaHQgMjAwMgogKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgPGRhbmllbEBvbWljcm9uLnNlPgogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPGFzbS9nbG9iYWxfZGF0YS5oPgojaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgoKLnNlY3Rpb24gLnRleHQKLmNvZGUzMgouZ2xvYmwgX3N0YXJ0Ci50eXBlIF9zdGFydCwgQGZ1bmN0aW9uCi5nbG9ibCBfeDg2Ym9vdF9zdGFydApfeDg2Ym9vdF9zdGFydDoKCS8qCgkgKiBUaGlzIGlzIHRoZSBmYWlsIHNhZmUgMzItYml0IGJvb3RzdHJhcCBlbnRyeSBwb2ludC4gVGhlCgkgKiBmb2xsb3dpbmcgY29kZSBpcyBub3QgZXhlY3V0ZWQgZnJvbSBhIGNvbGQtcmVzZXQgKGFjdHVhbGx5LCBhCgkgKiBsb3Qgb2YgaXQgaXMsIGJ1dCBmcm9tIHJlYWwtbW9kZSBhZnRlciBjb2xkIHJlc2V0LiBJdCBpcwoJICogcmVwZWF0ZWQgaGVyZSB0byBwdXQgdGhlIGJvYXJkIGludG8gYSBzdGF0ZSBhcyBjbG9zZSB0byBjb2xkCgkgKiByZXNldCBhcyBuZWNlc3NhcnkpCgkgKi8KCWNsaQoJY2xkCgoJLyogVHVybiBvZiBjYWNoZSAodGhpcyBtaWdodCByZXF1aXJlIGEgNDg2LWNsYXNzIENQVSkgKi8KCW1vdmwJJWNyMCwgJWVheAoJb3JsCSQoWDg2X0NSMF9OVyB8IFg4Nl9DUjBfQ0QpLCAlZWF4Cgltb3ZsCSVlYXgsICVjcjAKCXdiaW52ZAoKCS8qIFRlbGwgMzItYml0IGNvZGUgaXQgaXMgYmVpbmcgZW50ZXJlZCBmcm9tIGFuIGluLVJBTSBjb3B5ICovCgltb3Z3CSRHRF9GTEdfV0FSTV9CT09ULCAlYngKCWptcAkxZgpfc3RhcnQ6CgkvKgoJICogVGhpcyBpcyB0aGUgMzItYml0IGNvbGQtcmVzZXQgZW50cnkgcG9pbnQuIEluaXRpYWxpemUgJWJ4IHRvIDAKCSAqIGluIGNhc2Ugd2UncmUgcHJlY2VlZGVkIGJ5IHNvbWUgc29ydCBvZiBib290IHN0dWIuCgkgKi8KCW1vdncJJEdEX0ZMR19DT0xEX0JPT1QsICVieAoxOgoKCS8qIExvYWQgdGhlIHNlZ2VtZW50IHJlZ2lzdGVzIHRvIG1hdGNoIHRoZSBnZHQgbG9hZGVkIGluIHN0YXJ0MTYuUyAqLwoJbW92bAkkMHgxOCwgJWVheAoJbW92dwklYXgsICVmcwoJbW92dwklYXgsICVkcwoJbW92dwklYXgsICVncwoJbW92dwklYXgsICVlcwoJbW92dwklYXgsICVzcwoKCS8qIENsZWFyIHRoZSBpbnRlcnVwdCB2ZWN0b3JzICovCglsaWR0CWJsYW5rX2lkdF9wdHIKCgkvKiBFYXJseSBwbGF0Zm9ybSBpbml0IChzZXR1cCBncGlvLCBldGMgKSAqLwoJam1wCWVhcmx5X2JvYXJkX2luaXQKLmdsb2JsIGVhcmx5X2JvYXJkX2luaXRfcmV0CmVhcmx5X2JvYXJkX2luaXRfcmV0OgoKCS8qIEluaXRpYWxpc2UgQ2FjaGUtQXMtUkFNICovCglqbXAJY2FyX2luaXQKLmdsb2JsIGNhcl9pbml0X3JldApjYXJfaW5pdF9yZXQ6CgkvKgoJICogV2Ugbm93IGhhdmUgQ09ORklHX1NZU19DQVJfU0laRSBieXRlcyBvZiBDYWNoZS1Bcy1SQU0gKG9yIFNSQU0sCgkgKiBvciBmdWxseSBpbml0aWFsaXNlZCBTRFJBTSAtIHdlIHJlYWxseSBkb24ndCBjYXJlIHdoaWNoKQoJICogc3RhcnRpbmcgYXQgQ09ORklHX1NZU19DQVJfQUREUiB0byBiZSB1c2VkIGFzIGEgdGVtcG9yYXJ5IHN0YWNrCgkgKi8KCW1vdmwJJENPTkZJR19TWVNfSU5JVF9TUF9BRERSLCAlZXNwCgoJLyogU2V0IHBhcmFtZXRlciB0byBib2FyZF9pbml0X2YoKSB0byBib290IGZsYWdzICovCgl4b3JsCSVlYXgsICVlYXgKCW1vdncJJWJ4LCAlYXgKCgkvKiBFbnRlciwgVS1ib290ISAqLwoJY2FsbAlib2FyZF9pbml0X2YKCgkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4ODUsICVheAoJam1wCWRpZQoKLmdsb2JsIHJlbG9jYXRlX2NvZGUKLnR5cGUgcmVsb2NhdGVfY29kZSwgQGZ1bmN0aW9uCnJlbG9jYXRlX2NvZGU6CgkvKgoJICogU0RSQU0gaGFzIGJlZW4gaW5pdGlhbGlzZWQsIFUtQm9vdCBjb2RlIGhhcyBiZWVuIGNvcGllZCBpbnRvCgkgKiBSQU0sIEJTUyBoYXMgYmVlbiBjbGVhcmVkIGFuZCByZWxvY2F0aW9uIGFkanVzdG1lbnRzIGhhdmUgYmVlbgoJICogbWFkZS4gSXQgaXMgbm93IHRpbWUgdG8ganVtcCBpbnRvIHRoZSBpbi1SQU0gY29weSBvZiBVLUJvb3QKCSAqCgkgKiAlZWF4ID0gQWRkcmVzcyBvZiB0b3Agb2Ygc3RhY2sKCSAqICVlZHggPSBBZGRyZXNzIG9mIEdsb2JhbCBEYXRhCgkgKiAlZWN4ID0gQmFzZSBhZGRyZXNzIG9mIGluLVJBTSBjb3B5IG9mIFUtQm9vdAoJICovCgoJLyogU2V0dXAgc3RhY2sgaW4gUkFNICovCgltb3ZsCSVlYXgsICVlc3AKCgkvKiBTZXR1cCBjYWxsIGFkZHJlc3Mgb2YgaW4tUkFNIGNvcHkgb2YgYm9hcmRfaW5pdF9yKCkgKi8KCW1vdmwJJGJvYXJkX2luaXRfciwgJWVicAoJYWRkbAkoR0RfUkVMT0NfT0ZGICogNCkoJWVkeCksICVlYnAKCgkvKiBTZXR1cCBwYXJhbWV0ZXJzIHRvIGJvYXJkX2luaXRfcigpICovCgltb3ZsCSVlZHgsICVlYXgKCW1vdmwJJWVjeCwgJWVkeAoKCS8qIEp1bXAgdG8gaW4tUkFNIGNvcHkgb2YgYm9hcmRfaW5pdF9yKCkgKi8KCWNhbGwJKiVlYnAKCmRpZToJaGx0CglqbXAJZGllCglobHQKCmJsYW5rX2lkdF9wdHI6Cgkud29yZAkwCQkvKiBsaW1pdCAqLwoJLmxvbmcJMAkJLyogYmFzZSAqLwo=