IyA8cHJlPgojIEAoIylzb3V0aGFtZXJpY2EJOC40OAojIFRoaXMgZmlsZSBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiwgc28gY2xhcmlmaWVkIGFzIG9mCiMgMjAwOS0wNS0xNyBieSBBcnRodXIgRGF2aWQgT2xzb24uCgojIFRoaXMgZGF0YSBpcyBieSBubyBtZWFucyBhdXRob3JpdGF0aXZlOyBpZiB5b3UgdGhpbmsgeW91IGtub3cgYmV0dGVyLAojIGdvIGFoZWFkIGFuZCBlZGl0IHRoZSBmaWxlIChhbmQgcGxlYXNlIHNlbmQgYW55IGNoYW5nZXMgdG8KIyB0ekBlbHNpZS5uY2kubmloLmdvdiBmb3IgZ2VuZXJhbCB1c2UgaW4gdGhlIGZ1dHVyZSkuCgojIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgojIEEgZ29vZCBzb3VyY2UgZm9yIHRpbWUgem9uZSBoaXN0b3JpY2FsIGRhdGEgb3V0c2lkZSB0aGUgVS5TLiBpcwojIFRob21hcyBHLiBTaGFua3MgYW5kIFJpcXVlIFBvdHRlbmdlciwgVGhlIEludGVybmF0aW9uYWwgQXRsYXMgKDZ0aCBlZGl0aW9uKSwKIyBTYW4gRGllZ286IEFDUyBQdWJsaWNhdGlvbnMsIEluYy4gKDIwMDMpLgojCiMgR3dpbGxpbSBMYXcgd3JpdGVzIHRoYXQgYSBnb29kIHNvdXJjZQojIGZvciByZWNlbnQgdGltZSB6b25lIGRhdGEgaXMgdGhlIEludGVybmF0aW9uYWwgQWlyIFRyYW5zcG9ydAojIEFzc29jaWF0aW9uJ3MgU3RhbmRhcmQgU2NoZWR1bGVzIEluZm9ybWF0aW9uIE1hbnVhbCAoSUFUQSBTU0lNKSwKIyBwdWJsaXNoZWQgc2VtaWFubnVhbGx5LiAgTGF3IHNlbnQgaW4gc2V2ZXJhbCBoZWxwZnVsIHN1bW1hcmllcwojIG9mIHRoZSBJQVRBJ3MgZGF0YSBhZnRlciAxOTkwLgojCiMgRXhjZXB0IHdoZXJlIG90aGVyd2lzZSBub3RlZCwgU2hhbmtzICYgUG90dGVuZ2VyIGlzIHRoZSBzb3VyY2UgZm9yCiMgZW50cmllcyB0aHJvdWdoIDE5OTAsIGFuZCBJQVRBIFNTSU0gaXMgdGhlIHNvdXJjZSBmb3IgZW50cmllcyBhZnRlcndhcmRzLgojCiMgRWFybGllciBlZGl0aW9ucyBvZiB0aGVzZSB0YWJsZXMgdXNlZCB0aGUgTm9ydGggQW1lcmljYW4gc3R5bGUgKGUuZy4gQVJTVCBhbmQKIyBBUkRUIGZvciBBcmdlbnRpbmUgU3RhbmRhcmQgYW5kIERheWxpZ2h0IFRpbWUpLCBidXQgdGhlIGZvbGxvd2luZyBxdW90ZQojIHN1Z2dlc3RzIHRoYXQgaXQncyBiZXR0ZXIgdG8gdXNlIEV1cm9wZWFuIHN0eWxlIChlLmcuIEFSVCBhbmQgQVJTVCkuCiMJSSBzdWdnZXN0IHRoZSB1c2Ugb2YgX1N1bW1lciB0aW1lXyBpbnN0ZWFkIG9mIHRoZSBtb3JlIGN1bWJlcnNvbWUKIwlfZGF5bGlnaHQtc2F2aW5nIHRpbWVfLiAgX1N1bW1lciB0aW1lXyBzZWVtcyB0byBiZSBpbiBnZW5lcmFsIHVzZQojCWluIEV1cm9wZSBhbmQgU291dGggQW1lcmljYS4KIwktLSBFIE8gQ3V0bGVyLCBfTmV3IFlvcmsgVGltZXNfICgxOTM3LTAyLTE0KSwgcXVvdGVkIGluCiMJSCBMIE1lbmNrZW4sIF9UaGUgQW1lcmljYW4gTGFuZ3VhZ2U6IFN1cHBsZW1lbnQgSV8gKDE5NjApLCBwIDQ2NgojCiMgRWFybGllciBlZGl0aW9ucyBvZiB0aGVzZSB0YWJsZXMgYWxzbyB1c2VkIHRoZSBOb3J0aCBBbWVyaWNhbiBzdHlsZQojIGZvciB0aW1lIHpvbmVzIGluIEJyYXppbCwgYnV0IHRoaXMgd2FzIGluY29ycmVjdCwgYXMgQnJhemlsaWFucyBzYXkKIyAic3VtbWVyIHRpbWUiLiAgUmVpbmFsZG8gR291bGFydCwgYSBTYW8gUGF1bG8gYnVzaW5lc3NtYW4gYWN0aXZlIGluCiMgdGhlIHJhaWxyb2FkIHNlY3Rvciwgd3JpdGVzICgxOTk5LTA3LTA2KToKIwlUaGUgc3ViamVjdCBvZiB0aW1lIHpvbmVzIGlzIGN1cnJlbnRseSBhIG1hdHRlciBvZiBkaXNjdXNzaW9uL2RlYmF0ZSBpbgojCUJyYXppbC4gIExldCdzIHNheSB0aGF0ICJ0aGUgQnJhc2lsaWEgdGltZSIgaXMgY29uc2lkZXJlZCB0aGUKIwkib2ZmaWNpYWwgdGltZSIgYmVjYXVzZSBCcmFzaWxpYSBpcyB0aGUgY2FwaXRhbCBjaXR5LgojCVRoZSBvdGhlciB0aHJlZSB0aW1lIHpvbmVzIGFyZSBjYWxsZWQgIkJyYXNpbGlhIHRpbWUgIm1pbnVzIG9uZSIgb3IKIwkicGx1cyBvbmUiIG9yICJwbHVzIHR3byIuICBBcyBmYXIgYXMgSSBrbm93IHRoZXJlIGlzIG5vIHN1Y2gKIwluYW1lL2Rlc2lnbmF0aW9uIGFzICJFYXN0ZXJuIFRpbWUiIG9yICJDZW50cmFsIFRpbWUiLgojIFNvIEkgaW52ZW50ZWQgdGhlIGZvbGxvd2luZyAoRW5nbGlzaC1sYW5ndWFnZSkgYWJicmV2aWF0aW9ucyBmb3Igbm93LgojIENvcnJlY3Rpb25zIGFyZSB3ZWxjb21lIQojCQlzdGQJZHN0CiMJLTI6MDAJRk5UCUZOU1QJRmVybmFuZG8gZGUgTm9yb25oYQojCS0zOjAwCUJSVAlCUlNUCUJyYXNpbGlhCiMJLTQ6MDAJQU1UCUFNU1QJQW1hem9uCiMJLTU6MDAJQUNUCUFDU1QJQWNyZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBBcmdlbnRpbmEKCiMgRnJvbSBCb2IgRGV2aW5lICgxOTg4LTAxLTI4KToKIyBBcmdlbnRpbmE6IGZpcnN0IFN1bmRheSBpbiBPY3RvYmVyIHRvIGZpcnN0IFN1bmRheSBpbiBBcHJpbCBzaW5jZSAxOTc2LgojIERvdWJsZSBTdW1tZXIgdGltZSBmcm9tIDE5NjkgdG8gMTk3NC4gIFN3aXRjaGVzIGF0IG1pZG5pZ2h0LgoKIyBGcm9tIFUuIFMuIE5hdmFsIE9ic2VydmF0b3J5ICgxOTg4LTAxLTE5OSk6CiMgQVJHRU5USU5BICAgICAgICAgICAzIEggQkVISU5EICAgVVRDCgojIEZyb20gSGVybmFuIEcuIE90ZXJvICgxOTk1LTA2LTI2KToKIyBJIGFtIHNlbmRpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgQXJnZW50aW5lIHRpbWUgem9uZSB0YWJsZS4uLgojIEFSIHdhcyBjaG9zZW4gYmVjYXVzZSB0aGV5IGFyZSB0aGUgSVNPIGxldHRlcnMgdGhhdCByZXByZXNlbnQgQXJnZW50aW5hLgoKIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKUnVsZQlBcmcJMTkzMAlvbmx5CS0JRGVjCSAxCTA6MDAJMTowMAlTClJ1bGUJQXJnCTE5MzEJb25seQktCUFwcgkgMQkwOjAwCTAJLQpSdWxlCUFyZwkxOTMxCW9ubHkJLQlPY3QJMTUJMDowMAkxOjAwCVMKUnVsZQlBcmcJMTkzMgkxOTQwCS0JTWFyCSAxCTA6MDAJMAktClJ1bGUJQXJnCTE5MzIJMTkzOQktCU5vdgkgMQkwOjAwCTE6MDAJUwpSdWxlCUFyZwkxOTQwCW9ubHkJLQlKdWwJIDEJMDowMAkxOjAwCVMKUnVsZQlBcmcJMTk0MQlvbmx5CS0JSnVuCTE1CTA6MDAJMAktClJ1bGUJQXJnCTE5NDEJb25seQktCU9jdAkxNQkwOjAwCTE6MDAJUwpSdWxlCUFyZwkxOTQzCW9ubHkJLQlBdWcJIDEJMDowMAkwCS0KUnVsZQlBcmcJMTk0Mwlvbmx5CS0JT2N0CTE1CTA6MDAJMTowMAlTClJ1bGUJQXJnCTE5NDYJb25seQktCU1hcgkgMQkwOjAwCTAJLQpSdWxlCUFyZwkxOTQ2CW9ubHkJLQlPY3QJIDEJMDowMAkxOjAwCVMKUnVsZQlBcmcJMTk2Mwlvbmx5CS0JT2N0CSAxCTA6MDAJMAktClJ1bGUJQXJnCTE5NjMJb25seQktCURlYwkxNQkwOjAwCTE6MDAJUwpSdWxlCUFyZwkxOTY0CTE5NjYJLQlNYXIJIDEJMDowMAkwCS0KUnVsZQlBcmcJMTk2NAkxOTY2CS0JT2N0CTE1CTA6MDAJMTowMAlTClJ1bGUJQXJnCTE5NjcJb25seQktCUFwcgkgMgkwOjAwCTAJLQpSdWxlCUFyZwkxOTY3CTE5NjgJLQlPY3QJU3VuPj0xCTA6MDAJMTowMAlTClJ1bGUJQXJnCTE5NjgJMTk2OQktCUFwcglTdW4+PTEJMDowMAkwCS0KUnVsZQlBcmcJMTk3NAlvbmx5CS0JSmFuCTIzCTA6MDAJMTowMAlTClJ1bGUJQXJnCTE5NzQJb25seQktCU1heQkgMQkwOjAwCTAJLQpSdWxlCUFyZwkxOTg4CW9ubHkJLQlEZWMJIDEJMDowMAkxOjAwCVMKIwojIEZyb20gSGVybmFuIEcuIE90ZXJvICgxOTk1LTA2LTI2KToKIyBUaGVzZSBjb3JyZWN0aW9ucyB3ZXJlIGNvbnRyaWJ1dGVkIGJ5IEludGVyU29mdCBBcmdlbnRpbmEgUy5BLiwKIyBvYnRhaW5pbmcgdGhlIGRhdGEgZnJvbSB0aGU6CiMgVGFsbGVyZXMgZGUgSGlkcm9ncmFmaWEgTmF2YWwgQXJnZW50aW5hCiMgKEFyZ2VudGluZSBOYXZhbCBIeWRyb2dyYXBoeSBJbnN0aXR1dGUpClJ1bGUJQXJnCTE5ODkJMTk5MwktCU1hcglTdW4+PTEJMDowMAkwCS0KUnVsZQlBcmcJMTk4OQkxOTkyCS0JT2N0CVN1bj49MTUJMDowMAkxOjAwCVMKIwojIEZyb20gSGVybmFuIEcuIE90ZXJvICgxOTk1LTA2LTI2KToKIyBGcm9tIHRoaXMgbW9tZW50IG9uLCB0aGUgbGF3IHRoYXQgbWFuZGF0ZWQgdGhlIGRheWxpZ2h0IHNhdmluZwojIHRpbWUgY29ycmVjdGlvbnMgd2FzIGRlcm9nYXRlZCBhbmQgbm8gbW9yZSBtb2RpZmljYXRpb25zCiMgdG8gdGhlIHRpbWUgem9uZXMgKGZvciBkYXlsaWdodCBzYXZpbmcpIGFyZSBub3cgbWFkZS4KIwojIEZyb20gUml2ZXMgTWNEb3cgKDIwMDAtMDEtMTApOgojIE9uIE9jdG9iZXIgMywgMTk5OSwgMDowMCBsb2NhbCwgQXJnZW50aW5hIGltcGxlbWVudGVkIGRheWxpZ2h0IHNhdmluZ3MgdGltZSwKIyB3aGljaCBkaWQgbm90IHJlc3VsdCBpbiB0aGUgc3dpdGNoIG9mIGEgdGltZSB6b25lLCBhcyB0aGV5IHN0YXllZCA5IGhvdXJzCiMgZnJvbSB0aGUgSW50ZXJuYXRpb25hbCBEYXRlIExpbmUuClJ1bGUJQXJnCTE5OTkJb25seQktCU9jdAlTdW4+PTEJMDowMAkxOjAwCVMKIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA3LTEyLTI4KToKIyBEU1Qgd2FzIHNldCB0byBleHBpcmUgb24gTWFyY2ggNSwgbm90IE1hcmNoIDMsIGJ1dCBzaW5jZSBpdCB3YXMgY29udmVydGVkCiMgdG8gc3RhbmRhcmQgdGltZSBvbiBNYXJjaCAzIGl0J3MgbW9yZSBjb252ZW5pZW50IGZvciB1cyB0byBwcmV0ZW5kIHRoYXQKIyBpdCBlbmRlZCBvbiBNYXJjaCAzLgpSdWxlCUFyZwkyMDAwCW9ubHkJLQlNYXIJMwkwOjAwCTAJLQojCiMgRnJvbSBQZXRlciBHcmFkZWxza2kgdmlhIFN0ZWZmZW4gVGhvcnNlbiAoMjAwMC0wMy0wMSk6CiMgV2UganVzdCBjaGVja2VkIHdpdGggb3VyIFNhbyBQYXVsbyBvZmZpY2UgYW5kIHRoZXkgc2F5IHRoZSBnb3Zlcm5tZW50IG9mCiMgQXJnZW50aW5hIGRlY2lkZWQgbm90IHRvIGJlY29tZSBvbmUgb2YgdGhlIGNvdW50cmllcyB0aGF0IGdvIG9uIG9yIG9mZiBEU1QuCiMgU28gQnVlbm9zIEFpcmVzIHNob3VsZCBiZSAtMyBob3VycyBmcm9tIEdNVCBhdCBhbGwgdGltZXMuCiMKIyBGcm9tIEZhYmlhbiBMLiBBcmNlIEpvZnJlICgyMDAwLTA0LTA0KToKIyBUaGUgbGF3IHRoYXQgY2xhaW1lZCBEU1QgZm9yIEFyZ2VudGluYSB3YXMgZGVyb2dhdGVkIGJ5IFByZXNpZGVudCBGZXJuYW5kbwojIGRlIGxhIFJ1YSBvbiBNYXJjaCAyLCAyMDAwLCBiZWNhdXNlIGl0IHdvdWxkIG1ha2UgcGVvcGxlIHNwZW5kIG1vcmUgZW5lcmd5CiMgaW4gdGhlIHdpbnRlciB0aW1lLCByYXRoZXIgdGhhbiBsZXNzLiAgVGhlIGNoYW5nZSB0b29rIGVmZmVjdCBvbiBNYXJjaCAzLgojCiMgRnJvbSBNYXJpYW5vIEFic2F0eiAoMjAwMS0wNi0wNik6CiMgb25lIG9mIHRoZSBtYWpvciBuZXdzcGFwZXJzIGhlcmUgaW4gQXJnZW50aW5hIHNhaWQgdGhhdCB0aGUgMTk5OQojIFRpbWV6b25lIExhdyAod2hpY2ggbmV2ZXIgd2FzIGVmZmVjdGl2ZWx5IGFwcGxpZWQpIHdpbGwgKHdvdWxkPykgYmUKIyBpbiBlZmZlY3QuLi4uIFRoZSBhcnRpY2xlIGlzIGF0CiMgaHR0cDovL2FyLmNsYXJpbi5jb20vZGlhcmlvLzIwMDEtMDYtMDYvZS0wMTcwMS5odG0KIyAuLi4gVGhlIExhdyBpdHNlbGYgaXMgIkxleSBObyAyNTE1NSIsIHNhbmN0aW9uZWQgb24gMTk5OS0wOC0yNSwgZW5hY3RlZAojIDE5OTktMDktMTcsIGFuZCBwdWJsaXNoZWQgMTk5OS0wOS0yMS4gIFRoZSBvZmZpY2lhbCBwdWJsaWNhdGlvbiBpcyBhdDoKIyBodHRwOi8vd3d3LmJvbGV0aW4uanVzLmdvdi5hci9CT04vUHJpbWVyYS8xOTk5LzA5LVNlcHRpZW1icmUvMjEvUERGL0JPMjEtMDktOTlMRUcuUERGCiMgUmVncmV0ZnVsbHksIHlvdSBoYXZlIHRvIHN1YnNjcmliZSAoYW5kIHBheSkgZm9yIHRoZSBvbi1saW5lIHZlcnNpb24uLi4uCiMKIyAoMjAwMS0wNi0xMik6CiMgdGhlIHRpbWV6b25lIGZvciBBcmdlbnRpbmEgd2lsbCBub3QgY2hhbmdlIG5leHQgU3VuZGF5LgojIEFwcGFyZW50bHkgaXQgd2lsbCBkbyBzbyBvbiBTdW5kYXkgMjR0aC4uLi4KIyBodHRwOi8vYXIuY2xhcmluLmNvbS9kaWFyaW8vMjAwMS0wNi0xMi9zLTAzNTAxLmh0bQojCiMgKDIwMDEtMDYtMjUpOgojIExhc3QgRnJpZGF5ICh5ZXMsIHRoZSBsYXN0IHdvcmtpbmcgZGF5IGJlZm9yZSB0aGUgZGF0ZSBvZiB0aGUgY2hhbmdlKSwgdGhlCiMgU2VuYXRlIGFubnVsbGVkIHRoZSAxOTk5IGxhdyB0aGF0IGludHJvZHVjZWQgdGhlIGNoYW5nZXMgbGF0ZXIgcG9zdHBvbmVkLgojIGh0dHA6Ly93d3cuY2xhcmluLmNvbS5hci9kaWFyaW8vMjAwMS0wNi0yMi9zLTAzNjAxLmh0bQojIEl0IHJlbWFpbnMgdGhlIHZvdGUgb2YgdGhlIERlcHV0aWVzLi4uLCBidXQgaXQgd2lsbCBiZSB0aGUgc2FtZS4uLi4KIyBUaGlzIGtpbmQgb2YgdGhpbmdzIGhhZCBhbHdheXMgYmVlbiBkb25lIHRoaXMgd2F5IGluIEFyZ2VudGluYS4KIyBXZSBhcmUgc3RpbGwgLTAzOjAwIGFsbCB5ZWFyIHJvdW5kIGluIGFsbCBvZiB0aGUgY291bnRyeS4KIwojIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA3LTEyLTIxKToKIyBBIHVzZXIgKExlb25hcmRvIENoYWltKSByZXBvcnRlZCB0aGF0IEFyZ2VudGluYSB3aWxsIGFkb3B0IERTVC4uLi4KIyBhbGwgb2YgdGhlIGNvdW50cnkgKGFsbCBab25lLWVudHJpZXMpIGFyZSBhZmZlY3RlZC4gIE5ld3MgcmVwb3J0cyBsaWtlCiMgaHR0cDovL3d3dy5sYW5hY2lvbi5jb20uYXIvb3Bpbmlvbi9ub3RhLmFzcD9ub3RhX2lkPTk3MzAzNyBpbmRpY2F0ZQojIHRoYXQgQXJnZW50aW5hIHdpbGwgdXNlIERTVCBuZXh0IHllYXIgYXMgd2VsbCwgZnJvbSBPY3RvYmVyIHRvCiMgTWFyY2gsIGFsdGhvdWdoIGV4YWN0IHJ1bGVzIGFyZSBub3QgZ2l2ZW4uCiMKIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNy0xMi0yNikKIyBUaGUgbGFzdCBodXJkbGUgb2YgQXJnZW50aW5hIERTVCBpcyBvdmVyLCB0aGUgcHJvcG9zYWwgd2FzIGFwcHJvdmVkIGluCiMgdGhlIGxvd2VyIGNoYW1iZXIgdG9vIChEZXB1dGFkb3MpIHdpdGggYSB2b3RlIDE5MiBmb3IgYW5kIDIgYWdhaW5zdC4KIyBCeSB0aGUgd2F5IHRoYW5rcyB0byBNYXJpYW5vIEFic2F0eiBhbmQgRGFuaWVsIE1hcmlvIFZlZ2EgZm9yIHRoZSBsaW5rIHRvCiMgdGhlIG9yaWdpbmFsIHNjYW5uZWQgcHJvcG9zYWwsIHdoZXJlIHRoZSBkYXRlcyBhbmQgdGhlIHplcm8gaG91cnMgYXJlCiMgY2xlYXIgYW5kIHVuYW1iaWd1b3VzLi4uVGhpcyBpcyB0aGUgYXJ0aWNsZSBhYm91dCBmaW5hbCBhcHByb3ZhbDoKIyA8YSBocmVmPSJodHRwOi8vd3d3LmxhbmFjaW9uLmNvbS5hci9wb2xpdGljYS9ub3RhLmFzcD9ub3RhX2lkPTk3Mzk5NiI+CiMgaHR0cDovL3d3dy5sYW5hY2lvbi5jb20uYXIvcG9saXRpY2Evbm90YS5hc3A/bm90YV9pZD05NzM5OTYKIyA8L2E+CiMKIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA3LTEyLTIyKToKIyBGb3IgZGF0ZXMgYWZ0ZXIgbWlkLTIwMDgsIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXJlIG15IGd1ZXNzZXMgYW5kCiMgYXJlIHF1aXRlIHBvc3NpYmx5IHdyb25nLCBidXQgYXJlIG1vcmUgbGlrZWx5IHRoYW4gbm8gRFNUIGF0IGFsbC4KCiMgRnJvbSBBbGV4YW5kZXIgS3JpdmVueXNoZXYgKDIwMDgtMDktMDUpOgojIEFzIHBlciBtZXNzYWdlIGZyb20gQ2FybG9zIEFsYmVydG8gRm9uc2VjYSBBcmF1eiAoTmljYXJhZ3VhKSwKIyBBcmdlbnRpbmEgd2lsbCBzdGFydCBEU1Qgb24gU3VuZGF5IE9jdG9iZXIgMTksIDIwMDguCiMKIyA8YSBocmVmPSJodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2RzdF9uZXdzL2RzdF9uZXdzX2FyZ2VudGluYTAzLmh0bWwiPgojIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5jb20vZHN0X25ld3MvZHN0X25ld3NfYXJnZW50aW5hMDMuaHRtbAojIDwvYT4KIyBPUgojIDxhIGhyZWY9Imh0dHA6Ly93d3cuaW1wdWxzb2JhaXJlcy5jb20uYXIvbm90YS5waHA/aWQ9NTc4MzIgKGluIHNwYW5pc2gpIj4KIyBodHRwOi8vd3d3LmltcHVsc29iYWlyZXMuY29tLmFyL25vdGEucGhwP2lkPTU3ODMyIChpbiBzcGFuaXNoKQojIDwvYT4KCiMgRnJvbSBSb2RyaWdvIFNldmVybyAoMjAwOC0xMC0wNik6CiMgSGVyZSBpcyBzb21lIGluZm8gYXZhaWxhYmxlIGF0IGEgR2VudG9vIGJ1ZyByZWxhdGVkIHRvIFRaIG9uIEFyZ2VudGluYSdzIERTVDoKIyAuLi4KIyAtLS0tLS0tIENvbW1lbnQgIzEgZnJvbSBbam1kb2NpbGVdICAyMDA4LTEwLTA2IDE2OjI4IDAwMDAgLS0tLS0tLQojIEhpLCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aW1lem9uZS1kYXRhLTIwMDhlIGFuZCBtYXliZSB3aXRoCiMgdGltZXpvbmUtZGF0YS0yMDA4ZgojIEFyZ2VudGluaWFuIGxhdyBbTnVtYmVyXSAyNS4xNTUgaXMgbm8gbG9uZ2VyIHZhbGlkLgojIDxhIGhyZWY9Imh0dHA6Ly93d3cuaW5mb2xlZy5nb3YuYXIvaW5mb2xlZ0ludGVybmV0L2FuZXhvcy82MDAwMC02NDk5OS82MDAzNi9ub3JtYS5odG0iPgojIGh0dHA6Ly93d3cuaW5mb2xlZy5nb3YuYXIvaW5mb2xlZ0ludGVybmV0L2FuZXhvcy82MDAwMC02NDk5OS82MDAzNi9ub3JtYS5odG0KIyA8L2E+CiMgVGhlIG5ldyBvbmUgaXMgbGF3IFtOdW1iZXJdIDI2LjM1MAojIDxhIGhyZWY9Imh0dHA6Ly93d3cuaW5mb2xlZy5nb3YuYXIvaW5mb2xlZ0ludGVybmV0L2FuZXhvcy8xMzUwMDAtMTM5OTk5LzEzNjE5MS9ub3JtYS5odG0iPgojIGh0dHA6Ly93d3cuaW5mb2xlZy5nb3YuYXIvaW5mb2xlZ0ludGVybmV0L2FuZXhvcy8xMzUwMDAtMTM5OTk5LzEzNjE5MS9ub3JtYS5odG0KIyA8L2E+CiMgU28gdGhlcmUgaXMgbm8gc3VtbWVyIHRpbWUgaW4gQXJnZW50aW5hIGZvciBub3cuCgojIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMDgtMTAtMjApOgojIERlY3JlZSAxNjkzLzIwMDggYXBwbGllcyBMYXcgMjYuMzUwIGZvciB0aGUgc3VtbWVyIDIwMDgvMjAwOSBlc3RhYmxpc2hpbmcgRFNUIGluIEFyZ2VudGluYQojIEZyb20gMjAwOC0xMC0xOSB1bnRpbCAyMDA5LTAzLTE1CiMgPGEgaHJlZj0iaHR0cDovL3d3dy5ib2xldGlub2ZpY2lhbC5nb3YuYXIvQm9yYS5Qb3J0YWwvQ3VzdG9tQ29udHJvbHMvUGRmQ29udGVudC5hc3B4P2ZwPTE2MTAyMDA4JnBpPTMmcGY9NCZzPTAmc2VjPTAxIj4KIyBodHRwOi8vd3d3LmJvbGV0aW5vZmljaWFsLmdvdi5hci9Cb3JhLlBvcnRhbC9DdXN0b21Db250cm9scy9QZGZDb250ZW50LmFzcHg/ZnA9MTYxMDIwMDgmcGk9MyZwZj00JnM9MCZzZWM9MDEKIyA8L2E+CiMKIyBEZWNyZWUgMTcwNS8yMDA4IGV4Y2VwdGluZyAxMiBQcm92aW5jZXMgZnJvbSBhcHBseWluZyBEU1QgaW4gdGhlIHN1bW1lciAyMDA4LzIwMDk6CiMgQ2F0YW1hcmNhLCBMYSBSaW9qYSwgTWVuZG96YSwgU2FsdGEsIFNhbiBKdWFuLCBTYW4gTHVpcywgTGEgUGFtcGEsIE5ldXF1ZW4sIFJpbyBOZWdybywgQ2h1YnV0LCBTYW50YSBDcnV6CiMgYW5kIFRpZXJyYSBkZWwgRnVlZ28KIyA8YSBocmVmPSJodHRwOi8vd3d3LmJvbGV0aW5vZmljaWFsLmdvdi5hci9Cb3JhLlBvcnRhbC9DdXN0b21Db250cm9scy9QZGZDb250ZW50LmFzcHg/ZnA9MTcxMDIwMDgmcGk9MSZwZj0xJnM9MCZzZWM9MDEiPgojIGh0dHA6Ly93d3cuYm9sZXRpbm9maWNpYWwuZ292LmFyL0JvcmEuUG9ydGFsL0N1c3RvbUNvbnRyb2xzL1BkZkNvbnRlbnQuYXNweD9mcD0xNzEwMjAwOCZwaT0xJnBmPTEmcz0wJnNlYz0wMQojIDwvYT4KIwojIFByZXNzIHJlbGVhc2UgMjM1IGRhdGVkIFNhdHVyZGF5IE9jdG9iZXIgMTh0aCwgZnJvbSB0aGUgR292ZXJubWVudCBvZiB0aGUgUHJvdmluY2Ugb2YgSnVqdXkgc2F5aW5nCiMgaXQgd2lsbCBub3QgYXBwbHkgRFNUIGVpdGhlciAoZXZlbiB3aGVuIGl0IHdhcyBub3QgaW5jbHVkZWQgaW4gRGVjcmVlIDE3MDUvMjAwOCkKIyA8YSBocmVmPSJodHRwOi8vd3d3Lmp1anV5Lmdvdi5hci9pbmRleDIvcGFydGVzX3ByZW5zYS8xOF8xMF8wOC8yMzUtMTgxMDA4LmRvYyI+CiMgaHR0cDovL3d3dy5qdWp1eS5nb3YuYXIvaW5kZXgyL3BhcnRlc19wcmVuc2EvMThfMTBfMDgvMjM1LTE4MTAwOC5kb2MKIyA8L2E+CgojIEZyb20gZnVsbGluZXQgKDIwMDktMTAtMTgpOgojIEFzIGFubm91bmNlZCBpbgojIDxhIGhlZj0iaHR0cDovL3d3dy5hcmdlbnRpbmEuZ29iLmFyL2FyZ2VudGluYS9wb3J0YWwvcGFnaW5hcy5kaHRtbD9wYWdpbmE9MzU2Ij4KIyBodHRwOi8vd3d3LmFyZ2VudGluYS5nb2IuYXIvYXJnZW50aW5hL3BvcnRhbC9wYWdpbmFzLmRodG1sP3BhZ2luYT0zNTYKIyA8L2E+CiMgKGFuIG9mZmljaWFsIC5nb2IuYXIpIHVuZGVyIHRpdGxlOiAiU2luIENhbWJpbyBkZSBIb3JhIiAoZW5nbGlzaDogIk5vIGhvdXIgY2hhbmdlIikKIwojICJQb3IgZWwgbW9tZW50bywgZWwgR29iaWVybm8gTmFjaW9uYWwgcmVzb2x2aW8gbm8gbW9kaWZpY2FyIGxhIGhvcmEKIyBvZmljaWFsLCBkZWNpc2lvbiBxdWUgZXN0YWJhIGVuIGVzdHVkaW8gcGFyYSBzdSBpbXBsZW1lbnRhY2lvbiBlbAojIGRvbWluZ28gMTggZGUgb2N0dWJyZS4gRGVzZGUgZWwgTWluaXN0ZXJpbyBkZSBQbGFuaWZpY2FjaW9uIHNlIGFudW5jaW8KIyBxdWUgbGEgQXJnZW50aW5hIGhveSwgZW4gZXN0YXMgY29uZGljaW9uZXMgbWV0ZW9yb2xvZ2ljYXMsIG5vIG5lY2VzaXRhCiMgbGEgbW9kaWZpY2FjaW9uIGRlbCBodXNvIGhvcmFyaW8sIHlhIHF1ZSAyMDA5IG5vcyBlbmN1ZW50cmEgY29uCiMgY3JlY2ltaWVudG8gZW4gbGEgcHJvZHVjY2lvbiB5IGRpc3RyaWJ1Y2lvbiBlbmVyZ2V0aWNhLiIKClJ1bGUJQXJnCTIwMDcJb25seQktCURlYwkzMAkwOjAwCTE6MDAJUwpSdWxlCUFyZwkyMDA4CTIwMDkJLQlNYXIJU3VuPj0xNQkwOjAwCTAJLQpSdWxlCUFyZwkyMDA4CW9ubHkJLQlPY3QJU3VuPj0xNQkwOjAwCTE6MDAJUwogCiMgRnJvbSBNYXJpYW5vIEFic2F0eiAoMjAwNC0wNS0yMSk6CiMgVG9kYXkgaXQgd2FzIG9mZmljaWFsbHkgcHVibGlzaGVkIHRoYXQgdGhlIFByb3ZpbmNlIG9mIE1lbmRvemEgaXMgY2hhbmdpbmcKIyBpdHMgdGltZXpvbmUgdGhpcyB3aW50ZXIuLi4gc3RhcnRpbmcgdG9tb3Jyb3cgbmlnaHQuLi4uCiMgaHR0cDovL3d3dy5nb2Jlcm5hYy5tZW5kb3phLmdvdi5hci9ib2xldGluL3BkZi8yMDA0MDUyMS0yNzE1OC1ub3JtYXMucGRmCiMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNC0wNS0yNCk6CiMgSXQncyBMYXcgTm8uIDcsMjEwLiAgVGhpcyBjaGFuZ2UgaXMgZHVlIHRvIGEgcHVibGljIHBvd2VyIGVtZXJnZW5jeSwgc28gZm9yCiMgbm93IHdlJ2xsIGFzc3VtZSBpdCdzIGZvciB0aGlzIHllYXIgb25seS4KIwojIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgojIDxhIGhyZWY9Imh0dHA6Ly93d3cuc3BpY2FzYy5uZXQvaG9ydmVyYS5odG1sIj4KIyBIb3JhIGRlIHZlcmFubyBwYXJhIGxhIFJlcHVibGljYSBBcmdlbnRpbmEgKDIwMDMtMDYtMDgpCiMgPC9hPiBzYXlzIHRoYXQgc3RhbmRhcmQgdGltZSBpbiBBcmdlbnRpbmEgZnJvbSAxODk0LTEwLTMxCiMgdG8gMTkyMC0wNS0wMSB3YXMgLTQ6MTY6NDguMjUuICBHbyB3aXRoIHRoaXMgbW9yZS1wcmVjaXNlIHZhbHVlCiMgb3ZlciBTaGFua3MgJiBQb3R0ZW5nZXIuCiMKIyBGcm9tIE1hcmlhbm8gQWJzYXR6ICgyMDA0LTA2LTA1KToKIyBUaGVzZSBtZWRpYSBhcnRpY2xlcyBmcm9tIGEgbWFqb3IgbmV3c3BhcGVyIG1vc3RseSBjb3ZlciB0aGUgY3VycmVudCBzdGF0ZToKIyBodHRwOi8vd3d3LmxhbmFjaW9uLmNvbS5hci8wNC8wNS8yNy9kZV82MDQ4MjUuYXNwCiMgaHR0cDovL3d3dy5sYW5hY2lvbi5jb20uYXIvMDQvMDUvMjgvZGVfNjA1MjAzLmFzcAojCiMgVGhlIGZvbGxvd2luZyBlaWdodCAoOCkgcHJvdmluY2VzIHB1bGxlZCBjbG9ja3MgYmFjayB0byBVVEMtMDQ6MDAgYXQKIyBtaWRuaWdodCBNb25kYXkgTWF5IDMxc3QuICh0aGF0IGlzLCB0aGUgbmlnaHQgYmV0d2VlbiAwNS8zMSBhbmQgMDYvMDEpLgojIEFwcGFyZW50bHksIGFsbCBuaW5lIHByb3ZpbmNlcyB3b3VsZCBnbyBiYWNrIHRvIFVUQy0wMzowMCBhdCB0aGUgc2FtZQojIHRpbWUgaW4gT2N0b2JlciAxN3RoLgojCiMgQ2F0YW1hcmNhLCBDaHVidXQsIExhIFJpb2phLCBTYW4gSnVhbiwgU2FuIEx1aXMsIFNhbnRhIENydXosCiMgVGllcnJhIGRlbCBGdWVnbywgVHVjdW1hbi4KIwojIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMDQtMDYtMTQpOgojIC4uLiB0aGlzIHdlZWtlbmQsIHRoZSBQcm92aW5jZSBvZiBUdWN1bWFuIGRlY2lkZWQgaXQnZCBnbyBiYWNrIHRvIFVUQy0wMzowMAojIHllc3RlcmRheSBtaWRuaWdodCAodGhhdCBpcywgYXQgMjQ6MDAgU2F0dXJkYXkgMTJ0aCksIHNpbmNlIHRoZSBwZW9wbGUncwojIGFubm95YW5jZSB3aXRoIHRoZSBjaGFuZ2UgaXMgbXVjaCBoaWdoZXIgdGhhbiB0aGUgcG93ZXIgc2F2aW5ncyBvYnRhaW5lZC4uLi4KIwojIEZyb20gR3dpbGxpbSBMYXcgKDIwMDQtMDYtMTQpOgojIGh0dHA6Ly93d3cubGFuYWNpb24uY29tLmFyLzA0LzA2LzEwL2RlXzYwOTA3OC5hc3AgLi4uCiMgICAgICJUaGUgdGltZSBjaGFuZ2UgaW4gVGllcnJhIGRlbCBGdWVnbyB3YXMgYSBjb25mbGljdGVkIGRlY2lzaW9uIGZyb20KIyAgIHRoZSBzdGFydC4gIFRoZSBnb3Zlcm5tZW50IGhhZCBkZWNyZWVkIHRoYXQgdGhlIG1lYXN1cmUgd291bGQgdGFrZQojICAgZWZmZWN0IG9uIEp1bmUgMSwgYnV0IGEgbm9ybWF0aXZlIGVycm9yIGZvcmNlZCB0aGUgbmV3IHRpbWUgdG8gYmVnaW4KIyAgIHRocmVlIGRheXMgZWFybGllciwgZnJvbSBhIFNhdHVyZGF5IHRvIGEgU3VuZGF5Li4uLgojIE91ciB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHRoZSBjaGFuZ2Ugd2FzIG9yaWdpbmFsbHkgc2NoZWR1bGVkIHRvIHRha2UgcGxhY2UKIyBvbiBKdW5lIDEgYXQgMDA6MDAgaW4gQ2h1YnV0LCBTYW50YSBDcnV6LCBUaWVycmEgZGVsIEZ1ZWdvIChhbmQgc29tZSBvdGhlcgojIHByb3ZpbmNlcykuICBTdW5kYXkgd2FzIE1heSAzMCwgb25seSB0d28gZGF5cyBlYXJsaWVyLiAgU28gdGhlIGFydGljbGUKIyBjb250YWlucyBhIGNvbnRyYWRpY3Rpb24uICBJIHdvdWxkIGdpdmUgbW9yZSBjcmVkZW5jZSB0byB0aGUgU2F0dXJkYXkvU3VuZGF5CiMgZGF0ZSB0aGFuIHRoZSAidGhyZWUgZGF5cyBlYXJsaWVyIiBwaHJhc2UsIGFuZCBjb25jbHVkZSB0aGF0IFRpZXJyYSBkZWwKIyBGdWVnbyBzZXQgaXRzIGNsb2NrcyBiYWNrIGF0IDIwMDQtMDUtMzAgMDA6MDAuCiMKIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNC0xMC0wNSk6CiMgVGhlIHByZXZpb3VzIGxhdyA3MjEwIHdoaWNoIGNoYW5nZWQgdGhlIHByb3ZpbmNlIG9mIE1lbmRvemEncyB0aW1lIHpvbmUKIyBiYWNrIGluIE1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2xpZ2h0bHkgaW4gYSBuZXcgbGF3IDcyNzcsIHdoaWNoIHNldCB0aGUKIyBuZXcgZW5kIGRhdGUgdG8gMjAwNC0wOS0yNiAob3JpZ2luYWwgZGF0ZSB3YXMgMjAwNC0xMC0xNykuCiMgaHR0cDovL3d3dy5nb2Jlcm5hYy5tZW5kb3phLmdvdi5hci9ib2xldGluL3BkZi8yMDA0MDkyNC0yNzI0NC1ub3JtYXMucGRmCiMKIyBGcm9tIE1hcmlhbm8gQWJzYXR6ICgyMDA0LTEwLTA1KToKIyBTYW4gSnVhbiBjaGFuZ2VkIGZyb20gVVRDLTAzOjAwIHRvIFVUQy0wNDowMCBhdCBtaWRuaWdodCBiZXR3ZWVuCiMgU3VuZGF5LCBNYXkgMzB0aCBhbmQgTW9uZGF5LCBNYXkgMzFzdC4gIEl0IGNoYW5nZWQgYmFjayB0byBVVEMtMDM6MDAKIyBhdCBtaWRuaWdodCBiZXR3ZWVuIFNhdHVyZGF5LCBKdWx5IDI0dGggYW5kIFN1bmRheSwgSnVseSAyNXRoLi4uLgojIGh0dHA6Ly93d3cuc2FuanVhbi5nb3YuYXIvcHJlbnNhL2FyY2hpdm8vMDAwMzI5Lmh0bWwKIyBodHRwOi8vd3d3LnNhbmp1YW4uZ292LmFyL3ByZW5zYS9hcmNoaXZvLzAwMDQyNi5odG1sCiMgaHR0cDovL3d3dy5zYW5qdWFuLmdvdi5hci9wcmVuc2EvYXJjaGl2by8wMDA0NDEuaHRtbAoKIyBGcm9tIEFsZXggS3JpdmVueXNoZXYgKDIwMDgtMDEtMTcpOgojIEhlcmUgYXJlIGFydGljbGVzIHRoYXQgQXJnZW50aW5hIFByb3ZpbmNlIFNhbiBMdWlzIGlzIHBsYW5uaW5nIHRvIGVuZCBEU1QKIyBhcyBlYXJsaWVyIGFzIHVwY29taW5nIE1vbmRheSBKYW51YXJ5IDIxLCAyMDA4IG9yIEZlYnJ1YXJ5IDIwMDg6CiMKIyBQcm92aW5jaWEgYXJnZW50aW5hIHJldHJhc2EgcmVsb2ogeSBtYXJjYSBkaWZlcmVuY2lhIGNvbiByZXN0byBkZWwgcGFpcwojIChBcmdlbnRpbmUgUHJvdmluY2UgZGVsYXllZCBjbG9jayBhbmQgbWFyayBkaWZmZXJlbmNlIHdpdGggdGhlIHJlc3Qgb2YgdGhlCiMgY291bnRyeSkKIyA8YSBocmVmPSJodHRwOi8vY2wuaW52ZXJ0aWEuY29tL25vdGljaWFzL25vdGljaWEuYXNweD9pZE5vdGljaWE9MjAwODAxMTcxODQ5X0VGRV9FVDQzNzMmaWR0ZWwiPgojIGh0dHA6Ly9jbC5pbnZlcnRpYS5jb20vbm90aWNpYXMvbm90aWNpYS5hc3B4P2lkTm90aWNpYT0yMDA4MDExNzE4NDlfRUZFX0VUNDM3MyZpZHRlbAojIDwvYT4KIwojIEVzIGlubWluZW50ZSBxdWUgZW4gU2FuIEx1aXMgYXRyYXNlbiB1bmEgaG9yYSBsb3MgcmVsb2plcwojIChJdCBpcyBpbW1pbmVudCBpbiBTYW4gTHVpcyBjbG9ja3Mgb25lIGhvdXIgZGVsYXkpCiMgPGEgaHJlZj0iaHR0cDovL3d3dy5sYWdhY2V0YS5jb20uYXIvdmVybm90YWUuYXNwP2lkX25vdGE9MjUzNDE0Ij4KIyBodHRwOi8vd3d3LmxhZ2FjZXRhLmNvbS5hci92ZXJub3RhZS5hc3A/aWRfbm90YT0yNTM0MTQKIyA8L2E+CiMKIyA8YSBocmVmPSJodHRwOi8vd3d3LndvcmxkdGltZXpvbmUubmV0L2RzdF9uZXdzL2RzdF9uZXdzX2FyZ2VudGluYTAyLmh0bWwiPgojIGh0dHA6Ly93d3cud29ybGR0aW1lem9uZS5uZXQvZHN0X25ld3MvZHN0X25ld3NfYXJnZW50aW5hMDIuaHRtbAojIDwvYT4KCiMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDgtMDEtMTgpOgojIFRoZSBwYWdlIG9mIHRoZSBTYW4gTHVpcyBwcm92aW5jaWFsIGdvdmVybm1lbnQKIyA8YSBocmVmPSJodHRwOi8vd3d3LnNhbmx1aXMuZ292LmFyL25vdGFzLmFzcD9pZENhbmFsPTAmaWQ9MjI4MTIiPgojIGh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvbm90YXMuYXNwP2lkQ2FuYWw9MCZpZD0yMjgxMgojIDwvYT4KIyBjb25maXJtcyB3aGF0IEFsZXggS3JpdmVueXNoZXYgaGFzIGVhcmxpZXIgc2VudCB0byB0aGUgdHoKIyBlbWFpbGluZyBsaXN0IGFib3V0IHRoYXQgU2FuIEx1aXMgcGxhbnMgdG8gcmV0dXJuIHRvIHN0YW5kYXJkCiMgdGltZSBtdWNoIGVhcmxpZXIgdGhhbiB0aGUgcmVzdCBvZiB0aGUgY291bnRyeS4gSXQgYWxzbwojIGNvbmZpcm1zIHRoYXQgdXBvbiByZXF1ZXN0IHRoZSBwcm92aW5jZXMgU2FuIEp1YW4gYW5kIE1lbmRvemEgCiMgcmVmdXNlZCB0byBmb2xsb3cgU2FuIEx1aXMgaW4gdGhpcyBjaGFuZ2UuIAojIAojIFRoZSBjaGFuZ2UgaXMgc3VwcG9zZWQgdG8gdGFrZSBwbGFjZSBNb25kYXkgdGhlIDIxLnN0IGF0IDA6MDAKIyBob3Vycy4gQXMgZmFyIGFzIEkgdW5kZXJzdGFuZCBpdCBpZiB0aGlzIGdvZXMgYWhlYWQsIHdlIG5lZWQKIyBhIG5ldyB0aW1lem9uZSBmb3IgU2FuIEx1aXMgKGFsdGhvdWdoIHRoZXJlIGFyZSBhbHNvIGRvY3VtZW50ZWQKIyBpbmRlcGVuZGVudCBjaGFuZ2VzIGluIHRoZSBzb3V0aGFtZXJpY2EgZmlsZSBvZiBTYW4gTHVpcyBpbgojIDE5OTAgYW5kIDE5OTEgd2hpY2ggaGFzIG5vdCBiZWVuIGNvbmZpcm1lZCkuCgojIEZyb20gSmVzcGVyIE5vcmdhYXJkIFdlbGVuICgyMDA4LTAxLTI1KToKIyBVbmZvcnR1bmF0ZWx5IHRoZSBiZWxvdyBwYWdlIGhhcyBiZWNvbWUgZGVmdW5jdCwgYWJvdXQgdGhlIFNhbiBMdWlzCiMgdGltZSBjaGFuZ2UuIFBlcmhhcHMgYmVjYXVzZSBpdCBub3cgaXMgcGFydCBvZiBhIGdyb3VwIG9mIHBhZ2VzICJNb3N0CiMgaW1wb3J0YW50IHBhZ2VzIG9mIDIwMDguIgojCiMgWW91IGNhbiB1c2UKIyA8YSBocmVmPSJodHRwOi8vd3d3LnNhbmx1aXMuZ292LmFyL25vdGFzLmFzcD9pZENhbmFsPTgxNDEmaWQ9MjI4MzQiPgojIGh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvbm90YXMuYXNwP2lkQ2FuYWw9ODE0MSZpZD0yMjgzNAojIDwvYT4KIyBpbnN0ZWFkIGl0IHNlZW1zLiBPciB1c2UgIkJ1c2NhZG9yIiBmcm9tIHRoZSBtYWluIHBhZ2Ugb2YgdGhlIFNhbiBMdWlzCiMgZ292ZXJubWVudCwgYW5kIGZpbGwgaW4gImh1c28iIGFuZCBjbGljayBPSywgYW5kIHlvdSB3aWxsIGdldCAzIHBhZ2VzCiMgZnJvbSB3aGljaCB0aGUgZmlyc3Qgb25lIGlzIGlkZW50aWNhbCB0byB0aGUgYWJvdmUuCgojIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMDgtMDEtMjgpOgojIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgUHJvdmluY2Ugb2YgU2FuIEx1aXMgKGFuZCBzbyBmYXIgb25seSB0aGF0CiMgcHJvdmluY2UpIGRlY2lkZWQgdG8gZ28gYmFjayB0byBVVEMtMyBlZmZlY3RpdmUgbWlkbmlnaHQgSmFuIDIwdGggMjAwOAojICh0aGF0IGlzLCBNb25kYXkgMjFzdCBhdCAwOjAwIGlzIHRoZSB0aW1lIHRoZSBjbG9ja3Mgd2VyZSBkZWxheWVkIGJhY2sKIyAxIGhvdXIpLCBhbmQgdGhleSBpbnRlbmQgdG8ga2VlcCBVVEMtMyBhcyB0aGVpciB0aW1lem9uZSBhbGwgeWVhciByb3VuZAojICh0aGF0IGlzLCB1bmxlc3MgdGhleSBjaGFuZ2UgdGhlaXIgbWluZCBhbnkgbWludXRlIG5vdykuCiMKIyBTbyB3ZSdsbCBoYXZlIHRvIGFkZCB5ZXQgYW5vdGhlciBjaXR5IHRvICdzb3V0aGFtZXJpY2EnIChJIHRoaW5rIFNhbgojIEx1aXMgY2l0eSBpcyB0aGUgbW9zIHBvcHVsYXRlZCBjaXR5IGluIHRoZSBQcm92aW5jZSwgc28gaXQnZCBiZQojIEFtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzLi4uIG9mIGNvdXJzZSBJIGNhbid0IHJlbWVtYmVyIGlmIFNhbiBMdWlzJ3MKIyBoaXN0b3J5IG9mIHBhcnRpY3VsYXIgY2hhbmdlcyBnb2VzIGFsb25nIHdpdGggTWVuZG96YSBvciBTYW4gSnVhbiA6LSgKIyAoSSBvbmx5IHJlbWVtYmVyIG5vdCBiZWluZyBhYmxlIHRvIGNvbGxlY3QgaGFyZCBmYWN0cyBhYm91dCBTYW4gTHVpcwojIGJhY2sgaW4gMjAwNCwgd2hlbiB0aGVzZSBwcm92aW5jZXMgY2hhbmdlZCB0byBVVEMtNCBmb3IgYSBmZXcgZGF5cywgSQojIG1haWxlZCB0aGVtIHBlcnNvbmFsbHkgYW5kIG5ldmVyIGdvdCBhbiBhbnN3ZXIpLgoKIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA4LTA2LTMwKToKIyBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgZGF0YSBhcmUgZnJvbSBTaGFua3MgJiBQb3R0ZW5nZXIgdGhyb3VnaCAxOTkyLAojIGZyb20gdGhlIElBVEEgb3RoZXJ3aXNlLiAgQXMgbm90ZWQgYmVsb3csIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgdGhhdAojIEFtZXJpY2EvQ29yZG9iYSBzcGxpdCBpbnRvIDYgc3VicmVnaW9ucyBkdXJpbmcgMTk5MS8xOTkyLCBvbmUgb2Ygd2hpY2gKIyB3YXMgQW1lcmljYS9TYW5fTHVpcywgYnV0IHdlIGhhdmVuJ3QgdmVyaWZpZWQgdGhpcyB5ZXQgc28gZm9yIG5vdyB3ZSdsbAojIGtlZXAgQW1lcmljYS9Db3Jkb2JhIGEgc2luZ2xlIHJlZ2lvbiByYXRoZXIgdGhhbiBzcGxpdHRpbmcgaXQgaW50byB0aGUKIyBvdGhlciA1IHN1YnJlZ2lvbnMuCgojIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMDktMDMtMTMpOgojIFllc3RlcmRheSAod2l0aCBvdXIgdXN1YWwgMi1kYXkgbm90aWNlKSB0aGUgUHJvdmluY2Ugb2YgU2FuIEx1aXMKIyBkZWNpZGVkIHRoYXQgbmV4dCBTdW5kYXkgaW5zdGVhZCBvZiAic3RheWluZyIgQHV0Yy0wMzowMCB0aGV5IHdpbGwgZ28KIyB0byB1dGMtMDQ6MDAgdW50aWwgdGhlIHNlY29uZCBTYXR1cmRheSBpbiBPY3RvYmVyLi4uCiMKIyBUaGUgcHJlc3MgcmVsZWFzZSBpcyBhdAojIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvU0wvUGFnaW5hcy9Ob3RpY2lhRGV0YWxsZS5hc3A/VGVtYUlkPTEmSW5mb1ByZW5zYUlkPTMxMDIiPgojIGh0dHA6Ly93d3cuc2FubHVpcy5nb3YuYXIvU0wvUGFnaW5hcy9Ob3RpY2lhRGV0YWxsZS5hc3A/VGVtYUlkPTEmSW5mb1ByZW5zYUlkPTMxMDIKIyA8L2E+CiMgKEkgY291bGRuJ3QgZmluZCB0aGUgZGVjcmVlLCBidXQKIyA8YSBocmVmPSJodHRwOi8vd3d3LnNhbmx1aXMuZ292LmFyIj4KIyB3d3cuc2FubHVpcy5nb3YuYXIKIyA8YS8+CiMgaXMgdGhlIG9mZmljaWFsIHBhZ2UgZm9yIHRoZSBQcm92aW5jZSBHb3Zlcm5tZW50KS4KIwojIFRoZXJlJ3MgYWxzbyBhIG5vdGUgaW4gb25seSBvbmUgb2YgdGhlIG1ham9yIG5hdGlvbmFsIHBhcGVycyAoTGEgTmFjafNuKSBhdAojIDxhIGhyZWY9Imh0dHA6Ly93d3cubGFuYWNpb24uY29tLmFyL25vdGEuYXNwP25vdGFfaWQ9MTEwNzkxMiI+CiMgaHR0cDovL3d3dy5sYW5hY2lvbi5jb20uYXIvbm90YS5hc3A/bm90YV9pZD0xMTA3OTEyCiMgPC9hPgojIAojIFRoZSBwcmVzcyByZWxlYXNlIHNheXM6CiMgICguLi4pIGFudW5jafMgcXVlIGVsIHBy83hpbW8gZG9taW5nbyBhIGxhcyAwMDowMCBsb3MgcHVudGFub3MgZGViZXLhbgojIGF0cmFzYXIgdW5hIGhvcmEgc3VzIHJlbG9qZXMuCiMKIyBBIHBhcnRpciBkZSBlbnRvbmNlcywgU2FuIEx1aXMgZXN0YWJsZWNlcuEgZWwgaHVzbyBob3JhcmlvIHByb3BpbyBkZQojIGxhIFByb3ZpbmNpYS4gRGUgZXN0YSBtYW5lcmEsIGR1cmFudGUgZWwgcGVyaW9kbyBkZWwgY2FsZW5kYXJpbyBhbnVhbAojIDIwMDksIGVsIGNhbWJpbyBob3JhcmlvIHF1ZWRhcuEgY29tcHJlbmRpZG8gZW50cmUgbGFzIDAwOjAwIGRlbCB0ZXJjZXIKIyBkb21pbmdvIGRlIG1hcnpvIHkgbGFzIDI0OjAwIGRlbCBzZWd1bmRvIHPhYmFkbyBkZSBvY3R1YnJlLgojIFF1aWNrJmRpcnR5IHRyYW5zbGF0aW9uCiMgKC4uLikgYW5ub3VuY2VkIHRoYXQgbmV4dCBTdW5kYXksIGF0IDAwOjAwLCBQdW50YW5vcyAodGhlIFNhbiBMdWlzCiMgaW5oYWJpdGFudHMpIHdpbGwgaGF2ZSB0byB0dXJuIGJhY2sgb25lIGhvdXIgdGhlaXIgY2xvY2tzCiMKIyBTaW5jZSB0aGVuLCBTYW4gTHVpcyB3aWxsIGVzdGFibGlzaCBpdHMgb3duIFByb3ZpbmNlIHRpbWV6b25lLiBUaHVzLAojIGR1cmluZyAyMDA5LCB0aGlzIHRpbWV6b25lIGNoYW5nZSB3aWxsIHJ1biBmcm9tIDAwOjAwIHRoZSB0aGlyZCBTdW5kYXkKIyBpbiBNYXJjaCB1bnRpbCAyNDowMCBvZiB0aGUgc2Vjb25kIFNhdHVyZGF5IGluIE9jdG9iZXIuCgojIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMDktMTAtMTYpOgojIC4uLnRoZSBQcm92aW5jZSBvZiBTYW4gTHVpcyBpcyBhIGNhc2UgaW4gaXRzZWxmLgojCiMgVGhlIExhdyBhdAojIDxhIGhyZWY9Imh0dHA6Ly93d3cuZGlwdXRhZG9zc2FubHVpcy5nb3YuYXIvZGlwdXRhZG9zYXNwL3BhZ2luYXMvdmVyTm9ybWEuYXNwP05vcm1hSUQ9Mjc2PiIKIyBodHRwOi8vd3d3LmRpcHV0YWRvc3Nhbmx1aXMuZ292LmFyL2RpcHV0YWRvc2FzcC9wYWdpbmFzL3Zlck5vcm1hLmFzcD9Ob3JtYUlEPTI3NgojIDwvYT4KIyBpcyBhbWJpZ3VvdXMgYmVjYXVzZSBlc3RhYmxpc2hlcyBhIGNhbGVuZGFyIGZyb20gdGhlIDJuZCBTdW5kYXkgaW4KIyBPY3RvYmVyIGF0IDA6MDAgdGhydSB0aGUgMm5kIFNhdHVyZGF5IGluIE1hcmNoIGF0IDI0OjAwIGFuZCB0aGUKIyBjb21wbGVtZW50IG9mIHRoYXQgc3RhcnRpbmcgb24gdGhlIDJuZCBTdW5kYXkgb2YgTWFyY2ggYXQgMDowMCBhbmQKIyBlbmRpbmcgb24gdGhlIDJuZCBTYXR1cmRheSBvZiBNYXJjaCBhdCAyNDowMC4KIwojIFRoaXMgY2xlYXJseSBicmVha3MgZXZlcnkgdGltZSB0aGUgMXN0IG9mIE1hcmNoIG9yIE9jdG9iZXIgaXMgYSBTdW5kYXkuCiMKIyBJTUhPLCB0aGUgInNwaXJpdCBvZiB0aGUgTGF3IiBpcyB0byBtYWtlIHRoZSBjaGFuZ2VzIGF0IDA6MDAgb24gdGhlIDJuZAojIFN1bmRheSBvZiBPY3RvYmVyIGFuZCBNYXJjaC4KIwojIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGNoYW5nZXMgaW4gdGhlIHJlc3Qgb2YgdGhlIFByb3ZpbmNlcyB0aGF0IGRpZAojIGNoYW5nZSBpbiAyMDA3LzIwMDgsIHdlcmUgbWFkZSBhY2NvcmRpbmcgdG8gdGhlIEZlZGVyYWwgTGF3IGFuZCBEZWNyZWVzCiMgdGhhdCBkaWQgc28gb24gdGhlIDNyZCBTdW5kYXkgb2YgT2N0b2JlciBhbmQgTWFyY2guCiMKIyBJbiBmYWN0LCBTYW4gTHVpcyBhY3R1YWxseSBzd2l0Y2hlZCBmcm9tIFVUQy00IHRvIFVUQy0zIGxhc3QgU3VuZGF5CiMgKE9jdG9iZXIgMTF0aCkgYXQgMDowMC4KIwojIFNvIEkgZ3Vlc3MgYSBuZXcgc2V0IG9mIHJ1bGVzLCBiZXNpZGVzICJBcmciLCBtdXN0IGJlIG1hZGUgYW5kIHRoZSBsYXN0CiMgQW1lcmljYS9BcmdlbnRpbmEvU2FuX0x1aXMgZW50cmllcyBzaG91bGQgY2hhbmdlIHRvIHVzZSB0aGVzZS4uLgojCiMgSSdtIGVuY2xvc2luZyBhIHBhdGNoIHRoYXQgZG9lcyB3aGF0IEkgc2F5Li4uIHJlZ3JldGZ1bGx5LCB0aGUgU2FuIEx1aXMKIyB0aW1lem9uZSBtdXN0IGJlIGNhbGxlZCAiV0FSVC9XQVJTVCIgZXZlbiB3aGVuIG1vc3Qgb2YgdGhlIHRpbWUgKGxpa2UsCiMgcmlnaHQgbm93KSBXQVJTVCA9PSBBUlQuLi4gdGhhdCBpcywgc2luY2UgbGFzdCBTdW5kYXksIGFsbCB0aGUgY291bnRyeQojIGlzIHVzaW5nIFVUQy0zLCBidXQgaW4gbXkgcGF0Y2gsIFNhbiBMdWlzIGNhbGxzIGl0ICJXQVJTVCIgYW5kIHRoZSByZXN0CiMgb2YgdGhlIGNvdW50cnkgY2FsbHMgaXQgIkFSVCIuCiMgLi4uCgojIEZyb20gQWxleGFuZGVyIEtyaXZlbnlzaGV2ICgyMDEwLTA0LTA5KToKIyBBY2NvcmRpbmcgdG8gbmV3cyByZXBvcnRzIGZyb20gRWwgRGlhcmlvIGRlIGxhIFJlcHVibGljYSBQcm92aW5jZSBTYW4KIyBMdWlzLCBBcmdlbnRpbmEgKHN0YW5kYXJkIHRpbWUgVVRDLTA0KSB3aWxsIGtlZXAgRGF5bGlnaHQgU2F2aW5nIFRpbWUKIyBhZnRlciBBcHJpbCAxMSwgMjAxMC0td2lsbCBjb250aW51ZSB0byBoYXZlIHNhbWUgdGltZSBhcyByZXN0IG9mCiMgQXJnZW50aW5hIChVVEMtMykgKG5vIERTVCkuCiMKIyBDb25maXJtYXJvbiBsYSBwciZvYWN1dGU7cnJvZ2EgZGVsIGh1c28gaG9yYXJpbyBkZSB2ZXJhbm8gKFNwYW5pc2gpCiMgPGEgaHJlZj0iaHR0cDovL3d3dy5lbGRpYXJpb2RlbGFyZXB1YmxpY2EuY29tL2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdGFzaz12aWV3JmlkPTI5MzgzJkl0ZW1pZD05Ij4KIyBodHRwOi8vd3d3LmVsZGlhcmlvZGVsYXJlcHVibGljYS5jb20vaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ0YXNrPXZpZXcmaWQ9MjkzODMmSXRlbWlkPTkKIyA8L2E+CiMgb3IgKHNvbWUgRW5nbGlzaCB0cmFuc2xhdGlvbik6CiMgPGEgaHJlZj0iaHR0cDovL3d3dy53b3JsZHRpbWV6b25lLmNvbS9kc3RfbmV3cy9kc3RfbmV3c19hcmdlbnRpbmEwOC5odG1sIj4KIyBodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2RzdF9uZXdzL2RzdF9uZXdzX2FyZ2VudGluYTA4Lmh0bWwKIyA8L2E+CgojIEZyb20gTWFyaWFubyBBYnNhdHogKDIwMTAtMDQtMTIpOgojIHllcy4uLkkgY2FuIGNvbmZpcm0gdGhpcy4uLmFuZCBnaXZlbiB0aGF0IFNhbiBMdWlzIGtlZXBzIGNhbGxpbmcKIyBVVEMtMDM6MDAgInN1bW1lciB0aW1lIiwgd2Ugc2hvdWxkJ3QganVzdCBsZXQgU2FuIEx1aXMgZ28gYmFjayB0byAiQXJnIgojIHJ1bGVzLi4uU2FuIEx1aXMgaXMgc3RpbGwgdXNpbmcgIldlc3Rlcm4gQVJnZW50aW5hIFRpbWUiIGFuZCBpdCBnb3QKIyBzdHVjayBvbiBTdW1tZXIgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGV2ZW4gdGhvdWdoIHRoZSBzdW1tZXIgaXMgb3Zlci4KCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KIwojIEJ1ZW5vcyBBaXJlcyAoQkEpLCBDYXBpdGFsIEZlZGVyYWwgKENGKSwKWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9CdWVub3NfQWlyZXMgLTM6NTM6NDggLSBMTVQgMTg5NCBPY3QgMzEKCQkJLTQ6MTY6NDggLQlDTVQJMTkyMCBNYXkgIyBDb3Jkb2JhIE1lYW4gVGltZQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTkgT2N0ICAzCgkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMwoJCQktMzowMAlBcmcJQVIlc1QKIwojIENvcmRvYmEgKENCKSwgU2FudGEgRmUgKFNGKSwgRW50cmUgUmlvcyAoRVIpLCBDb3JyaWVudGVzIChDTiksIE1pc2lvbmVzIChNTiksCiMgQ2hhY28gKENDKSwgRm9ybW9zYSAoRk0pLCBTYW50aWFnbyBkZWwgRXN0ZXJvIChTRSkKIwojIFNoYW5rcyAmIFBvdHRlbmdlciBhbHNvIG1ha2UgdGhlIGZvbGxvd2luZyBjbGFpbXMsIHdoaWNoIHdlIGhhdmVuJ3QgdmVyaWZpZWQ6CiMgLSBGb3Jtb3NhIHN3aXRjaGVkIHRvIC0zOjAwIG9uIDE5OTEtMDEtMDcuCiMgLSBNaXNpb25lcyBzd2l0Y2hlZCB0byAtMzowMCBvbiAxOTkwLTEyLTI5LgojIC0gQ2hhY28gc3dpdGNoZWQgdG8gLTM6MDAgb24gMTk5MS0wMS0wNC4KIyAtIFNhbnRpYWdvIGRlbCBFc3Rlcm8gc3dpdGNoZWQgdG8gLTQ6MDAgb24gMTk5MS0wNC0wMSwKIyAgIHRoZW4gdG8gLTM6MDAgb24gMTk5MS0wNC0yNi4KIwpab25lIEFtZXJpY2EvQXJnZW50aW5hL0NvcmRvYmEgLTQ6MTY6NDggLSBMTVQJMTg5NCBPY3QgMzEKCQkJLTQ6MTY6NDggLQlDTVQJMTkyMCBNYXkKCQkJLTQ6MDAJLQlBUlQJMTkzMCBEZWMKCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CgkJCS0zOjAwCUFyZwlBUiVzVAkxOTkxIE1hciAgMwoJCQktNDowMAktCVdBUlQJMTk5MSBPY3QgMjAKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTkgT2N0ICAzCgkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMwoJCQktMzowMAlBcmcJQVIlc1QKIwojIFNhbHRhIChTQSksIExhIFBhbXBhIChMUCksIE5ldXF1ZW4gKE5RKSwgUmlvIE5lZ3JvIChSTikKWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9TYWx0YSAtNDoyMTo0MCAtIExNVAkxODk0IE9jdCAzMQoJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTEgTWFyICAzCgkJCS00OjAwCS0JV0FSVAkxOTkxIE9jdCAyMAoJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCgkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IE9jdCAxOAoJCQktMzowMAktCUFSVAojCiMgVHVjdW1hbiAoVE0pClpvbmUgQW1lcmljYS9BcmdlbnRpbmEvVHVjdW1hbiAtNDoyMDo1MiAtIExNVAkxODk0IE9jdCAzMQoJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTEgTWFyICAzCgkJCS00OjAwCS0JV0FSVAkxOTkxIE9jdCAyMAoJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCgkJCS0zOjAwCS0JQVJUCTIwMDQgSnVuICAxCgkJCS00OjAwCS0JV0FSVAkyMDA0IEp1biAxMwoJCQktMzowMAlBcmcJQVIlc1QKIwojIExhIFJpb2phIChMUikKWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9MYV9SaW9qYSAtNDoyNzoyNCAtIExNVAkxODk0IE9jdCAzMQoJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTEgTWFyICAxCgkJCS00OjAwCS0JV0FSVAkxOTkxIE1heSAgNwoJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCgkJCS0zOjAwCS0JQVJUCTIwMDQgSnVuICAxCgkJCS00OjAwCS0JV0FSVAkyMDA0IEp1biAyMAoJCQktMzowMAlBcmcJQVIlc1QJMjAwOCBPY3QgMTgKCQkJLTM6MDAJLQlBUlQKIwojIFNhbiBKdWFuIChTSikKWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9TYW5fSnVhbiAtNDozNDowNCAtIExNVAkxODk0IE9jdCAzMQoJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTEgTWFyICAxCgkJCS00OjAwCS0JV0FSVAkxOTkxIE1heSAgNwoJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCgkJCS0zOjAwCS0JQVJUCTIwMDQgTWF5IDMxCgkJCS00OjAwCS0JV0FSVAkyMDA0IEp1bCAyNQoJCQktMzowMAlBcmcJQVIlc1QJMjAwOCBPY3QgMTgKCQkJLTM6MDAJLQlBUlQKIwojIEp1anV5IChKWSkKWm9uZSBBbWVyaWNhL0FyZ2VudGluYS9KdWp1eSAtNDoyMToxMiAtCUxNVAkxODk0IE9jdCAzMQoJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTAgTWFyICA0CgkJCS00OjAwCS0JV0FSVAkxOTkwIE9jdCAyOAoJCQktNDowMAkxOjAwCVdBUlNUCTE5OTEgTWFyIDE3CgkJCS00OjAwCS0JV0FSVAkxOTkxIE9jdCAgNgoJCQktMzowMAkxOjAwCUFSU1QJMTk5MgoJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCgkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IE9jdCAxOAoJCQktMzowMAktCUFSVAojCiMgQ2F0YW1hcmNhIChDVCksIENodWJ1dCAoQ0gpClpvbmUgQW1lcmljYS9BcmdlbnRpbmEvQ2F0YW1hcmNhIC00OjIzOjA4IC0gTE1UCTE4OTQgT2N0IDMxCgkJCS00OjE2OjQ4IC0JQ01UCTE5MjAgTWF5CgkJCS00OjAwCS0JQVJUCTE5MzAgRGVjCgkJCS00OjAwCUFyZwlBUiVzVAkxOTY5IE9jdCAgNQoJCQktMzowMAlBcmcJQVIlc1QJMTk5MSBNYXIgIDMKCQkJLTQ6MDAJLQlXQVJUCTE5OTEgT2N0IDIwCgkJCS0zOjAwCUFyZwlBUiVzVAkxOTk5IE9jdCAgMwoJCQktNDowMAlBcmcJQVIlc1QJMjAwMCBNYXIgIDMKCQkJLTM6MDAJLQlBUlQJMjAwNCBKdW4gIDEKCQkJLTQ6MDAJLQlXQVJUCTIwMDQgSnVuIDIwCgkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IE9jdCAxOAoJCQktMzowMAktCUFSVAojCiMgTWVuZG96YSAoTVopClpvbmUgQW1lcmljYS9BcmdlbnRpbmEvTWVuZG96YSAtNDozNToxNiAtIExNVAkxODk0IE9jdCAzMQoJCQktNDoxNjo0OCAtCUNNVAkxOTIwIE1heQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTAgTWFyICA0CgkJCS00OjAwCS0JV0FSVAkxOTkwIE9jdCAxNQoJCQktNDowMAkxOjAwCVdBUlNUCTE5OTEgTWFyICAxCgkJCS00OjAwCS0JV0FSVAkxOTkxIE9jdCAxNQoJCQktNDowMAkxOjAwCVdBUlNUCTE5OTIgTWFyICAxCgkJCS00OjAwCS0JV0FSVAkxOTkyIE9jdCAxOAoJCQktMzowMAlBcmcJQVIlc1QJMTk5OSBPY3QgIDMKCQkJLTQ6MDAJQXJnCUFSJXNUCTIwMDAgTWFyICAzCgkJCS0zOjAwCS0JQVJUCTIwMDQgTWF5IDIzCgkJCS00OjAwCS0JV0FSVAkyMDA0IFNlcCAyNgoJCQktMzowMAlBcmcJQVIlc1QJMjAwOCBPY3QgMTgKCQkJLTM6MDAJLQlBUlQKIwojIFNhbiBMdWlzIChTTCkKClJ1bGUJU2FuTHVpcwkyMDA4CTIwMDkJLQlNYXIJU3VuPj04CTA6MDAJMAktClJ1bGUJU2FuTHVpcwkyMDA3CTIwMDkJLQlPY3QJU3VuPj04CTA6MDAJMTowMAlTCgpab25lIEFtZXJpY2EvQXJnZW50aW5hL1Nhbl9MdWlzIC00OjI1OjI0IC0gTE1UCTE4OTQgT2N0IDMxCgkJCS00OjE2OjQ4IC0JQ01UCTE5MjAgTWF5CgkJCS00OjAwCS0JQVJUCTE5MzAgRGVjCgkJCS00OjAwCUFyZwlBUiVzVAkxOTY5IE9jdCAgNQoJCQktMzowMAlBcmcJQVIlc1QJMTk5MAoJCQktMzowMAkxOjAwCUFSU1QJMTk5MCBNYXIgMTQKCQkJLTQ6MDAJLQlXQVJUCTE5OTAgT2N0IDE1CgkJCS00OjAwCTE6MDAJV0FSU1QJMTk5MSBNYXIgIDEKCQkJLTQ6MDAJLQlXQVJUCTE5OTEgSnVuICAxCgkJCS0zOjAwCS0JQVJUCTE5OTkgT2N0ICAzCgkJCS00OjAwCTE6MDAJV0FSU1QJMjAwMCBNYXIgIDMKCQkJLTM6MDAJLQlBUlQJMjAwNCBNYXkgMzEKCQkJLTQ6MDAJLQlXQVJUCTIwMDQgSnVsIDI1CgkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IEphbiAyMQoJCQktNDowMAlTYW5MdWlzCVdBUiVzVAojCiMgU2FudGEgQ3J1eiAoU0MpClpvbmUgQW1lcmljYS9BcmdlbnRpbmEvUmlvX0dhbGxlZ29zIC00OjM2OjUyIC0gTE1UIDE4OTQgT2N0IDMxCgkJCS00OjE2OjQ4IC0JQ01UCTE5MjAgTWF5ICMgQ29yZG9iYSBNZWFuIFRpbWUKCQkJLTQ6MDAJLQlBUlQJMTkzMCBEZWMKCQkJLTQ6MDAJQXJnCUFSJXNUCTE5NjkgT2N0ICA1CgkJCS0zOjAwCUFyZwlBUiVzVAkxOTk5IE9jdCAgMwoJCQktNDowMAlBcmcJQVIlc1QJMjAwMCBNYXIgIDMKCQkJLTM6MDAJLQlBUlQJMjAwNCBKdW4gIDEKCQkJLTQ6MDAJLQlXQVJUCTIwMDQgSnVuIDIwCgkJCS0zOjAwCUFyZwlBUiVzVAkyMDA4IE9jdCAxOAoJCQktMzowMAktCUFSVAojCiMgVGllcnJhIGRlbCBGdWVnbywgQW50YXJ0aWRhIGUgSXNsYXMgZGVsIEF0bGFudGljbyBTdXIgKFRGKQpab25lIEFtZXJpY2EvQXJnZW50aW5hL1VzaHVhaWEgLTQ6MzM6MTIgLSBMTVQgMTg5NCBPY3QgMzEKCQkJLTQ6MTY6NDggLQlDTVQJMTkyMCBNYXkgIyBDb3Jkb2JhIE1lYW4gVGltZQoJCQktNDowMAktCUFSVAkxOTMwIERlYwoJCQktNDowMAlBcmcJQVIlc1QJMTk2OSBPY3QgIDUKCQkJLTM6MDAJQXJnCUFSJXNUCTE5OTkgT2N0ICAzCgkJCS00OjAwCUFyZwlBUiVzVAkyMDAwIE1hciAgMwoJCQktMzowMAktCUFSVAkyMDA0IE1heSAzMAoJCQktNDowMAktCVdBUlQJMjAwNCBKdW4gMjAKCQkJLTM6MDAJQXJnCUFSJXNUCTIwMDggT2N0IDE4CgkJCS0zOjAwCS0JQVJUCgojIEFydWJhCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZQlBbWVyaWNhL0FydWJhCS00OjQwOjI0IC0JTE1UCTE5MTIgRmViIDEyCSMgT3Jhbmplc3RhZAoJCQktNDozMAktCUFOVAkxOTY1ICMgTmV0aGVybGFuZHMgQW50aWxsZXMgVGltZQoJCQktNDowMAktCUFTVAoKIyBCb2xpdmlhCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZQlBbWVyaWNhL0xhX1BhegktNDozMjozNiAtCUxNVAkxODkwCgkJCS00OjMyOjM2IC0JQ01UCTE5MzEgT2N0IDE1ICMgQ2FsYW1hcmNhIE1UCgkJCS00OjMyOjM2IDE6MDAJQk9TVAkxOTMyIE1hciAyMSAjIEJvbGl2aWEgU1QKCQkJLTQ6MDAJLQlCT1QJIyBCb2xpdmlhIFRpbWUKCiMgQnJhemlsCgojIEZyb20gUGF1bCBFZ2dlcnQgKDE5OTMtMTEtMTgpOgojIFRoZSBtYXlvciBvZiBSaW8gcmVjZW50bHkgYXR0ZW1wdGVkIHRvIGNoYW5nZSB0aGUgdGltZSB6b25lIHJ1bGVzCiMganVzdCBpbiBoaXMgY2l0eSwgaW4gb3JkZXIgdG8gbGVhdmUgbW9yZSBzdW1tZXIgdGltZSBmb3IgdGhlIHRvdXJpc3QgdHJhZGUuCiMgVGhlIHJ1bGUgY2hhbmdlIGxhc3RlZCBvbmx5IHBhcnQgb2YgdGhlIGRheTsKIyB0aGUgZmVkZXJhbCBnb3Zlcm5tZW50IHJlZnVzZWQgdG8gZm9sbG93IHRoZSBjaXR5J3MgcnVsZXMsIGFuZCBidXNpbmVzcwojIHdhcyBpbiBhIGNoYW9zLCBzbyB0aGUgbWF5b3IgYmFja2VkIGRvd24gdGhhdCBhZnRlcm5vb24uCgojIEZyb20gSUFUQSBTU0lNICgxOTk2LTAyKToKIyBfT25seV8gdGhlIGZvbGxvd2luZyBzdGF0ZXMgaW4gQlIxIG9ic2VydmUgRFNUOiBSaW8gR3JhbmRlIGRvIFN1bCAoUlMpLAojIFNhbnRhIENhdGFyaW5hIChTQyksIFBhcmFuYSAoUFIpLCBTYW8gUGF1bG8gKFNQKSwgUmlvIGRlIEphbmVpcm8gKFJKKSwKIyBFc3Bpcml0byBTYW50byAoRVMpLCBNaW5hcyBHZXJhaXMgKE1HKSwgQmFoaWEgKEJBKSwgR29pYXMgKEdPKSwKIyBEaXN0cml0byBGZWRlcmFsIChERiksIFRvY2FudGlucyAoVE8pLCBTZXJnaXBlIFtTRV0gYW5kIEFsYWdvYXMgW0FMXS4KIyBbVGhlIGxhc3QgdGhyZWUgc3RhdGVzIGFyZSBuZXcgdG8gdGhpcyBpc3N1ZSBvZiB0aGUgSUFUQSBTU0lNLl0KCiMgRnJvbSBHd2lsbGltIExhdyAoMTk5Ni0xMC0wNyk6CiMgR2VvZ3JhcGh5LCBoaXN0b3J5IChUb2NhbnRpbnMgd2FzIHBhcnQgb2YgR29pYXMgdW50aWwgMTk4OSksIGFuZCBvdGhlcgojIHNvdXJjZXMgb2YgdGltZSB6b25lIGluZm9ybWF0aW9uIGxlYWQgbWUgdG8gYmVsaWV2ZSB0aGF0IEFMLCBTRSwgYW5kIFRPIHdlcmUKIyBhbHdheXMgaW4gQlIxLCBhbmQgc28gdGhlIG9ubHkgY2hhbmdlIHdhcyB3aGV0aGVyIG9yIG5vdCB0aGV5IG9ic2VydmVkIERTVC4uLi4KIyBUaGUgZWFybGllc3QgaXNzdWUgb2YgdGhlIFNTSU0gSSBoYXZlIGlzIDIvOTEuICBFYWNoIGlzc3VlIGZyb20gdGhlbiB1bnRpbAojIDkvOTUgc2F5cyB0aGF0IERTVCBpcyBvYnNlcnZlZCBvbmx5IGluIHRoZSB0ZW4gc3RhdGVzIEkgcXVvdGVkIGZyb20gOS85NSwKIyBhbG9uZyB3aXRoIE1hdG8gR3Jvc3NvIChNVCkgYW5kIE1hdG8gR3Jvc3NvIGRvIFN1bCAoTVMpLCB3aGljaCBhcmUgaW4gQlIyCiMgKFVUQy00KS4uLi4gIFRoZSBvdGhlciB0d28gdGltZSB6b25lcyBnaXZlbiBmb3IgQnJhemlsIGFyZSBCUjMsIHdoaWNoIGlzCiMgVVRDLTUsIG5vIERTVCwgYW5kIGFwcGxpZXMgb25seSBpbiB0aGUgc3RhdGUgb2YgQWNyZSAoQUMpOyBhbmQgQlI0LCB3aGljaCBpcwojIFVUQy0yLCBhbmQgYXBwbGllcyB0byBGZXJuYW5kbyBkZSBOb3JvbmhhIChmb3JtZXJseSBGTiwgYnV0IEkgYmVsaWV2ZSBpdCdzCiMgYmVjb21lIHBhcnQgb2YgdGhlIHN0YXRlIG9mIFBlcm5hbWJ1Y28pLiAgVGhlIGJvdW5kYXJ5IGJldHdlZW4gQlIxIGFuZCBCUjIKIyBoYXMgbmV2ZXIgYmVlbiBjbGVhcmx5IHN0YXRlZC4gIFRoZXkndmUgc2ltcGx5IGJlZW4gY2FsbGVkIEVhc3QgYW5kIFdlc3QuCiMgSG93ZXZlciwgc29tZSBjb25jbHVzaW9ucyBjYW4gYmUgZHJhd24gZnJvbSBhbm90aGVyIElBVEEgbWFudWFsOiB0aGUgQWlybGluZQojIENvZGluZyBEaXJlY3RvcnksIHdoaWNoIGxpc3RzIGNsb3NlIHRvIDQwMCBhaXJwb3J0cyBpbiBCcmF6aWwuICBGb3IgZWFjaAojIGFpcnBvcnQgaXQgZ2l2ZXMgYSB0aW1lIHpvbmUgd2hpY2ggaXMgY29kZWQgdG8gdGhlIFNTSU0uICBGcm9tIHRoYXQKIyBpbmZvcm1hdGlvbiwgSSdtIGxlZCB0byBjb25jbHVkZSB0aGF0IHRoZSBzdGF0ZXMgb2YgQW1hcGEgKEFQKSwgQ2VhcmEgKENFKSwKIyBNYXJhbmhhbyAoTUEpLCBQYXJhaWJhIChQUiksIFBlcm5hbWJ1Y28gKFBFKSwgUGlhdWkgKFBJKSwgYW5kIFJpbyBHcmFuZGUgZG8KIyBOb3J0ZSAoUk4pLCBhbmQgdGhlIGVhc3Rlcm4gcGFydCBvZiBQYXJhIChQQSkgYXJlIGFsbCBpbiBCUjEgd2l0aG91dCBEU1QuCgojIEZyb20gTWFyY29zIFRhZGV1ICgxOTk4LTA5LTI3KToKIyA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici92ZXJhbzEuaHRtbCI+CiMgQnJhemlsaWFuIG9mZmljaWFsIHBhZ2UKIyA8L2E+CgojIEZyb20gSmVzcGVyIE5vcmdhYXJkICgyMDAwLTExLTAzKToKIyBbRm9yIGFuIG9mZmljaWFsIGxpc3Qgb2Ygd2hpY2ggcmVnaW9ucyBpbiBCcmF6aWwgdXNlIHdoaWNoIHRpbWUgem9uZXMsIHNlZTpdCiMgaHR0cDovL3BjZHNoMDEub24uYnIvRnVzYnIuaHRtCiMgaHR0cDovL3BjZHNoMDEub24uYnIvRnVzYnJodi5odG0KCiMgRnJvbSBDZWxzbyBEb3JpYSB2aWEgRGF2aWQgTWFkZW8gKDIwMDItMTAtMDkpOgojIFRoZSByZWFzb24gZm9yIHRoZSBkZWxheSB0aGlzIHllYXIgaGFzIHRvIGRvIHdpdGggZWxlY3Rpb25zIGluIEJyYXppbC4KIwojIFVubGlrZSBpbiB0aGUgVW5pdGVkIFN0YXRlcywgZWxlY3Rpb25zIGluIEJyYXppbCBhcmUgMTAwJSBjb21wdXRlcml6ZWQgYW5kCiMgdGhlIHJlc3VsdHMgYXJlIGtub3duIGFsbW9zdCBpbW1lZGlhdGVseS4gIFllc3RlcmRheSwgaXQgd2FzIHRoZSBmaXJzdAojIHJvdW5kIG9mIHRoZSBlbGVjdGlvbnMgd2hlbiAxMTUgbWlsbGlvbiBCcmF6aWxpYW5zIHZvdGVkIGZvciBQcmVzaWRlbnQsCiMgR292ZXJub3IsIFNlbmF0b3JzLCBGZWRlcmFsIERlcHV0aWVzLCBhbmQgU3RhdGUgRGVwdXRpZXMuICBOb2JvZHkgaXMKIyBjb3VudGluZyAob3IgcmUtY291bnRpbmcpIHZvdGVzIGFueW1vcmUgYW5kIHdlIGtub3cgdGhlcmUgd2lsbCBiZSBhIHNlY29uZAojIHJvdW5kIGZvciB0aGUgUHJlc2lkZW5jeSBhbmQgYWxzbyBmb3Igc29tZSBHb3Zlcm5vcnMuICBUaGUgMm5kIHJvdW5kIHdpbGwKIyB0YWtlIHBsYWNlIG9uIE9jdG9iZXIgMjd0aC4KIwojIFRoZSByZWFzb24gd2h5IHRoZSBEU1Qgd2lsbCBvbmx5IGJlZ2luIE5vdmVtYmVyIDNyZCBpcyB0aGF0IHRoZSB0aG91c2FuZHMKIyBvZiBlbGVjdG9yYWwgbWFjaGluZXMgdXNlZCBjYW5ub3QgaGF2ZSB0aGVpciB0aW1lIGNoYW5nZWQsIGFuZCBzaW5jZSB0aGUKIyBDb25zdGl0dXRpb24gc2F5cyB0aGUgZWxlY3Rpb25zIG11c3QgYmVnaW4gYXQgODowMCBBTSBhbmQgZW5kIGF0IDU6MDAgUE0sCiMgdGhlIEdvdmVybm1lbnQgZGVjaWRlZCB0byBwb3N0cG9uZSBEU1QsIGluc3RlYWQgb2YgY2hhbmdpbmcgdGhlIENvbnN0aXR1dGlvbgojIChtYXliZSwgZm9yIHRoZSBuZXh0IGVsZWN0aW9ucywgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIGNsb2NrKS4uLgoKIyBGcm9tIFJvZHJpZ28gU2V2ZXJvICgyMDA0LTEwLTA0KToKIyBJdCdzIGp1c3QgdGhlIGJpYW5udWFsIGNoYW5nZSBtYWRlIG5lY2Vzc2FyeSBieSB0aGUgbXVjaCBoeXBlZCwgc3VwcG9zZWRseQojIG1vZGVybiBCcmF6aWxpYW4gZWxldHJvbmljIHZvdGluZyBtYWNoaW5lcyB3aGljaCwgYXBwYXJlbnRseSwgY2FuJ3QgZGVhbAojIHdpdGggYSB0aW1lIGNoYW5nZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIHNlY29uZCByb3VuZHMgb2YgdGhlIGVsZWN0aW9ucy4KCiMgRnJvbSBTdGVmZmVuIFRob3JzZW4gKDIwMDctMDktMjApOgojIEJyYXppbCB3aWxsIHN0YXJ0IERTVCBvbiAyMDA3LTEwLTE0IDAwOjAwIGFuZCBlbmQgb24gMjAwOC0wMi0xNyAwMDowMDoKIyBodHRwOi8vd3d3Lm1tZS5nb3YuYnIvc2l0ZS9uZXdzL2RldGFpbC5kbztqc2Vzc2lvbmlkPUJCQTA2ODExQUZDQUFDMjhGMDI4NTIxMDkxMzUxM0RBP25ld3NJZD0xMzk3NQoKIyBGcm9tIFBhdWwgU2NodWx6ZSAoMjAwOC0wNi0yNCk6CiMgLi4uYnkgbGF3IG51bWJlciAxMS42NjIgb2YgQXByaWwgMjQsIDIwMDggKHB1Ymxpc2hlZCBpbiB0aGUgIkRpYXJpbwojIE9maWNpYWwgZGEgVW5pYW8iLi4uKSBpbiBCcmF6aWwgdGhlcmUgYXJlIGNoYW5nZXMgaW4gdGhlIHRpbWV6b25lcywKIyBlZmZlY3RpdmUgdG9kYXkgKDAwOjAwYW0gYXQgSnVuZSAyNCwgMjAwOCkgYXMgZm9sbG93czoKIwojIGEpIFRoZSB0aW1lem9uZSBVVEMrNSBpcyBlW3hddGluZ3Vpc2hlZCwgd2l0aCBhbGwgdGhlIEFjcmUgc3RhdGUgYW5kIHRoZQojIHBhcnQgb2YgdGhlIEFtYXpvbmFzIHN0YXRlIHRoYXQgaGFkIHRoaXMgdGltZXpvbmUgbm93IGJlaW5nIHB1dCB0byB0aGUKIyB0aW1lem9uZSBVVEMrNAojIGIpIFRoZSB3aG9sZSBQYXJhIHN0YXRlIG5vdyBpcyBwdXQgYXQgdGltZXpvbmUgVVRDKzMsIGluc3RlYWQgb2YganVzdAojIHBhcnQgb2YgaXQsIGFzIHdhcyBiZWZvcmUuCiMKIyBUaGlzIGNoYW5nZSBmb2xsb3dzIGEgcHJvcG9zYWwgb2Ygc2VuYXRvciBUaWFvIFZpYW5hIG9mIEFjcmUgc3RhdGUsIHRoYXQKIyBwcm9wb3NlZCBpdCBkdWUgdG8gY29uY2VybnMgYWJvdXQgb3BlbiB0ZWxldmlzaW9uIGNoYW5uZWxzIGRpc3BsYXlpbmcKIyBwcm9ncmFtcyBpbmFwcHJvcHJpYXRlIHRvIHlvdXRocyBpbiB0aGUgc3RhdGVzIHRoYXQgaGFkIHRoZSB0aW1lem9uZQojIFVUQys1IHRvbyBlYXJseSBpbiB0aGUgbmlnaHQuIEluIHRoZSBvY2Nhc2lvbiwgc29tZSBtb3JlIGNvcnJlY3Rpb25zCiMgd2VyZSBwcm9wb3NlZCwgdHJ5aW5nIHRvIHVuaWZ5IHRoZSB0aW1lem9uZXMgb2YgYW55IGdpdmVuIHN0YXRlLiBUaGlzCiMgY2hhbmdlIG1vZGlmaWVzIHRpbWV6b25lIHJ1bGVzIGRlZmluZWQgaW4gZGVjcmVlIDIuNzg0IG9mIDE4IEp1bmUsCiMgMTkxMy4KCiMgRnJvbSBSb2RyaWdvIFNldmVybyAoMjAwOC0wNi0yNCk6CiMgSnVzdCBjb3JyZWN0aW5nIHRoZSBVUkw6CiMgPGEgaHJlZj0iaHR0cHM6Ly93d3cuaW4uZ292LmJyL2ltcHJlbnNhL3Zpc3VhbGl6YS9pbmRleC5qc3A/am9ybmFsPWRvJnNlY2FvPTEmcGFnaW5hPTEmZGF0YT0yNS8wNC8yMDA4Ij4KIyBodHRwczovL3d3dy5pbi5nb3YuYnIvaW1wcmVuc2EvdmlzdWFsaXphL2luZGV4LmpzcD9qb3JuYWw9ZG8mc2VjYW89MSZwYWdpbmE9MSZkYXRhPTI1LzA0LzIwMDgKIyA8L2E+CiMKIyBBcyBhIHJlc3VsdCBvZiB0aGUgYWJvdmUgRGVjcmVlIEkgYmVsaWV2ZSB0aGUgQW1lcmljYS9SaW9fQnJhbmNvCiMgdGltZXpvbmUgc2hhbGwgYmUgbW9kaWZpZWQgZnJvbSBVVEMtNSB0byBVVEMtNCBhbmQgYSBuZXcgdGltZXpvbmUgc2hhbGwKIyBiZSBjcmVhdGVkIHRvIHJlcHJlc2VudCB0aGUgdGhlIHdlc3Qgc2lkZSBvZiB0aGUgUGFyYSBTdGF0ZS4gSQojIHN1Z2dlc3QgdGhpcyBuZXcgdGltZXpvbmUgYmUgY2FsbGVkIFNhbnRhcmVtIGFzIHRoZSBtb3N0CiMgaW1wb3J0YW50L3BvcHVsYXRlZCBjaXR5IGluIHRoZSBhZmZlY3RlZCBhcmVhLgojCiMgVGhpcyBuZXcgdGltZXpvbmUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIFJpb19CcmFuY28gdGltZXpvbmUgdXAgdG8KIyB0aGUgMjAwOC8wNi8yNCBjaGFuZ2Ugd2hpY2ggd291bGQgYmUgdG8gVVRDLTMgaW5zdGVhZCBvZiBVVEMtNC4KCiMgRnJvbSBBbGV4IEtyaXZlbnlzaGV2ICgyMDA4LTA2LTI0KToKIyBUaGlzIGlzIGEgcXVpY2sgcmVmZXJlbmNlIHBhZ2UgZm9yIE5ldyBhbmQgT2xkIEJyYXppbCBUaW1lIFpvbmVzIG1hcC4KIyA8YSBocmVmPSJodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2JyYXppbC10aW1lLW5ldy1vbGQucGhwIj4KIyBodHRwOi8vd3d3LndvcmxkdGltZXpvbmUuY29tL2JyYXppbC10aW1lLW5ldy1vbGQucGhwCiMgPC9hPgojCiMgLSA0IHRpbWUgem9uZXMgcmVwbGFjZWQgYnkgMyB0aW1lIHpvbmVzLWVsaW1pbmF0aW5nIHRpbWUgem9uZSBVVEMtIDA1CiMgKHN0YXRlIEFjcmUgYW5kIHRoZSBwYXJ0IG9mIHRoZSBBbWF6b25hcyB3aWxsIGJlIFVUQy9HTVQtIDA0KSAtIHdlc3Rlcm4KIyBwYXJ0IG9mIFBhciBzdGF0ZSBpcyBtb3ZpbmcgdG8gb25lIHRpbWV6b25lIFVUQy0gMDMgKGZyb20gVVRDIC0wNCkuCgojIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDItMTAtMTApOgojIFRoZSBvZmZpY2lhbCBkZWNyZWVzIHJlZmVyZW5jZWQgYmVsb3cgYXJlIG1vc3RseSB0YWtlbiBmcm9tCiMgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjSFYuaHRtbCI+CiMgRGVjcmV0b3Mgc29icmUgbyBIb3JhcmlvIGRlIFZlcmFvIG5vIEJyYXNpbAojIDwvYT4uCgojIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA4LTA4LTI5KToKIyBBcyBhbm5vdW5jZWQgYnkgdGhlIGdvdmVybm1lbnQgYW5kIG1hbnkgbmV3c3BhcGVycyBpbiBCcmF6aWwgbGF0ZQojIHllc3RlcmRheSwgQnJhemlsIHdpbGwgc3RhcnQgRFNUIG9uIDIwMDgtMTAtMTkgKG5lZWQgdG8gY2hhbmdlIHJ1bGUpIGFuZAojIGl0IHdpbGwgZW5kIG9uIDIwMDktMDItMTUgKGN1cnJlbnQgcnVsZSBmb3IgQnJhemlsIGlzIGZpbmUpLiBCYXNlZCBvbgojIHBhc3QgeWVhcnMgZXhwZXJpZW5jZSB3aXRoIHRoZSBlbGVjdGlvbnMsIHRoZXJlIHdhcyBhIGdvb2QgY2hhbmNlIHRoYXQKIyB0aGUgc3RhcnQgd2FzIHBvc3Rwb25lZCB0byBOb3ZlbWJlciwgYnV0IGl0IGRpZCBub3QgaGFwcGVuIHRoaXMgeWVhci4KIwojIEl0IGhhcyBub3QgeWV0IGJlZW4gcG9zdGVkIHRvIGh0dHA6Ly9wY2RzaDAxLm9uLmJyL0RlY0hWLmh0bWwKIwojIEFuIG9mZmljaWFsIHBhZ2UgYWJvdXQgaXQ6CiMgPGEgaHJlZj0iaHR0cDovL3d3dy5tbWUuZ292LmJyL3NpdGUvbmV3cy9kZXRhaWwuZG8/bmV3c0lkPTE2NzIyIj4KIyBodHRwOi8vd3d3Lm1tZS5nb3YuYnIvc2l0ZS9uZXdzL2RldGFpbC5kbz9uZXdzSWQ9MTY3MjIKIyA8L2E+CiMgTm90ZSB0aGF0IHRoaXMgbGluayBkb2VzIG5vdCBhbHdheXMgd29yayBkaXJlY3RseSwgYnV0IG11c3QgYmUgYWNjZXNzZWQKIyBieSBnb2luZyB0bwojIDxhIGhyZWY9Imh0dHA6Ly93d3cubW1lLmdvdi5ici9maXJzdCI+CiMgaHR0cDovL3d3dy5tbWUuZ292LmJyL2ZpcnN0CiMgPC9hPgojCiMgT25lIGV4YW1wbGUgbGluayB0aGF0IHdvcmtzIGRpcmVjdGx5OgojIDxhIGhyZWY9Imh0dHA6Ly9qb3JuYWxlLmNvbS5ici9pbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnRhc2s9dmlldyZpZD0xMzUzMCZJdGVtaWQ9NTQiPgojIGh0dHA6Ly9qb3JuYWxlLmNvbS5ici9pbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnRhc2s9dmlldyZpZD0xMzUzMCZJdGVtaWQ9NTQKIyAoUG9ydHVndWVzZSkKIyA8L2E+CiMKIyBXZSBoYXZlIGEgd3JpdHRlbiBhIHNob3J0IGFydGljbGUgYWJvdXQgaXQgYXMgd2VsbDoKIyA8YSBocmVmPSJodHRwOi8vd3d3LnRpbWVhbmRkYXRlLmNvbS9uZXdzL3RpbWUvYnJhemlsLWRzdC0yMDA4LTIwMDkuaHRtbCI+CiMgaHR0cDovL3d3dy50aW1lYW5kZGF0ZS5jb20vbmV3cy90aW1lL2JyYXppbC1kc3QtMjAwOC0yMDA5Lmh0bWwKIyA8L2E+CgojIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUwojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjIwNDY2Lmh0bSI+MjAsNDY2PC9hPiAoMTkzMS0xMC0wMSkKIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFYyMTg5Ni5odG0iPjIxLDg5NjwvYT4gKDE5MzItMDEtMTApClJ1bGUJQnJhemlsCTE5MzEJb25seQktCU9jdAkgMwkxMTowMAkxOjAwCVMKUnVsZQlCcmF6aWwJMTkzMgkxOTMzCS0JQXByCSAxCSAwOjAwCTAJLQpSdWxlCUJyYXppbAkxOTMyCW9ubHkJLQlPY3QJIDMJIDA6MDAJMTowMAlTCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMjMxOTUuaHRtIj4yMywxOTU8L2E+ICgxOTMzLTEwLTEwKQojIHJldm9rZWQgRFNULgojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjI3NDk2Lmh0bSI+MjcsNDk2PC9hPiAoMTk0OS0xMS0yNCkKIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFYyNzk5OC5odG0iPjI3LDk5ODwvYT4gKDE5NTAtMDQtMTMpClJ1bGUJQnJhemlsCTE5NDkJMTk1MgktCURlYwkgMQkgMDowMAkxOjAwCVMKUnVsZQlCcmF6aWwJMTk1MAlvbmx5CS0JQXByCTE2CSAxOjAwCTAJLQpSdWxlCUJyYXppbAkxOTUxCTE5NTIJLQlBcHIJIDEJIDA6MDAJMAktCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMzIzMDguaHRtIj4zMiwzMDg8L2E+ICgxOTUzLTAyLTI0KQpSdWxlCUJyYXppbAkxOTUzCW9ubHkJLQlNYXIJIDEJIDA6MDAJMAktCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMzQ3MjQuaHRtIj4zNCw3MjQ8L2E+ICgxOTUzLTExLTMwKQojIHJldm9rZWQgRFNULgojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjUyNzAwLmh0bSI+NTIsNzAwPC9hPiAoMTk2My0xMC0xOCkKIyBlc3RhYmxpc2hlZCBEU1QgZnJvbSAxOTYzLTEwLTIzIDAwOjAwIHRvIDE5NjQtMDItMjkgMDA6MDAKIyBpbiBTUCwgUkosIEdCLCBNRywgRVMsIGR1ZSB0byB0aGUgcHJvbG9uZ2F0aW9uIG9mIHRoZSBkcm91Z2h0LgojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjUzMDcxLmh0bSI+NTMsMDcxPC9hPiAoMTk2My0xMi0wMykKIyBleHRlbmRlZCB0aGUgYWJvdmUgZGVjcmVlIHRvIGFsbCBvZiB0aGUgbmF0aW9uYWwgdGVycml0b3J5IG9uIDEyLTA5LgpSdWxlCUJyYXppbAkxOTYzCW9ubHkJLQlEZWMJIDkJIDA6MDAJMTowMAlTCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWNTM2MDQuaHRtIj41Myw2MDQ8L2E+ICgxOTY0LTAyLTI1KQojIGV4dGVuZGVkIHN1bW1lciB0aW1lIGJ5IG9uZSBkYXkgdG8gMTk2NC0wMy0wMSAwMDowMCAoc3RhcnQgb2Ygc2Nob29sKS4KUnVsZQlCcmF6aWwJMTk2NAlvbmx5CS0JTWFyCSAxCSAwOjAwCTAJLQojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjU1NjM5Lmh0bSI+NTUsNjM5PC9hPiAoMTk2NS0wMS0yNykKUnVsZQlCcmF6aWwJMTk2NQlvbmx5CS0JSmFuCTMxCSAwOjAwCTE6MDAJUwpSdWxlCUJyYXppbAkxOTY1CW9ubHkJLQlNYXIJMzEJIDA6MDAJMAktCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWNTczMDMuaHRtIj41NywzMDM8L2E+ICgxOTY1LTExLTIyKQpSdWxlCUJyYXppbAkxOTY1CW9ubHkJLQlEZWMJIDEJIDA6MDAJMTowMAlTCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWNTc4NDMuaHRtIj41Nyw4NDM8L2E+ICgxOTY2LTAyLTE4KQpSdWxlCUJyYXppbAkxOTY2CTE5NjgJLQlNYXIJIDEJIDA6MDAJMAktClJ1bGUJQnJhemlsCTE5NjYJMTk2NwktCU5vdgkgMQkgMDowMAkxOjAwCVMKIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY2MzQyOS5odG0iPjYzLDQyOTwvYT4gKDE5NjgtMTAtMTUpCiMgcmV2b2tlZCBEU1QuCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWOTE2OTguaHRtIj45MSw2OTg8L2E+ICgxOTg1LTA5LTI3KQpSdWxlCUJyYXppbAkxOTg1CW9ubHkJLQlOb3YJIDIJIDA6MDAJMTowMAlTCiMgRGVjcmVlIDkyLDMxMCAoMTk4Ni0wMS0yMSkKIyBEZWNyZWUgOTIsNDYzICgxOTg2LTAzLTEzKQpSdWxlCUJyYXppbAkxOTg2CW9ubHkJLQlNYXIJMTUJIDA6MDAJMAktCiMgRGVjcmVlIDkzLDMxNiAoMTk4Ni0xMC0wMSkKUnVsZQlCcmF6aWwJMTk4Nglvbmx5CS0JT2N0CTI1CSAwOjAwCTE6MDAJUwpSdWxlCUJyYXppbAkxOTg3CW9ubHkJLQlGZWIJMTQJIDA6MDAJMAktCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWOTQ5MjIuaHRtIj45NCw5MjI8L2E+ICgxOTg3LTA5LTIyKQpSdWxlCUJyYXppbAkxOTg3CW9ubHkJLQlPY3QJMjUJIDA6MDAJMTowMAlTClJ1bGUJQnJhemlsCTE5ODgJb25seQktCUZlYgkgNwkgMDowMAkwCS0KIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY5NjY3Ni5odG0iPjk2LDY3NjwvYT4gKDE5ODgtMDktMTIpCiMgZXhjZXB0IGZvciB0aGUgc3RhdGVzIG9mIEFDLCBBTSwgUEEsIFJSLCBSTywgYW5kIEFQICh0aGVuIGEgdGVycml0b3J5KQpSdWxlCUJyYXppbAkxOTg4CW9ubHkJLQlPY3QJMTYJIDA6MDAJMTowMAlTClJ1bGUJQnJhemlsCTE5ODkJb25seQktCUphbgkyOQkgMDowMAkwCS0KIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvSFY5ODA3Ny5odG0iPjk4LDA3NzwvYT4gKDE5ODktMDgtMjEpCiMgd2l0aCB0aGUgc2FtZSBleGNlcHRpb25zClJ1bGUJQnJhemlsCTE5ODkJb25seQktCU9jdAkxNQkgMDowMAkxOjAwCVMKUnVsZQlCcmF6aWwJMTk5MAlvbmx5CS0JRmViCTExCSAwOjAwCTAJLQojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjk5NTMwLmh0bSI+OTksNTMwPC9hPiAoMTk5MC0wOS0xNykKIyBhZG9wdGVkIGJ5IFJTLCBTQywgUFIsIFNQLCBSSiwgRVMsIE1HLCBHTywgTVMsIERGLgojIERlY3JlZSA5OSw2MjkgKDE5OTAtMTAtMTkpIGFkZHMgQkEsIE1ULgpSdWxlCUJyYXppbAkxOTkwCW9ubHkJLQlPY3QJMjEJIDA6MDAJMTowMAlTClJ1bGUJQnJhemlsCTE5OTEJb25seQktCUZlYgkxNwkgMDowMAkwCS0KIyA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjE5OTEuaHRtIj5Vbm51bWJlcmVkIGRlY3JlZTwvYT4gKDE5OTEtMDktMjUpCiMgYWRvcHRlZCBieSBSUywgU0MsIFBSLCBTUCwgUkosIEVTLCBNRywgQkEsIEdPLCBNVCwgTVMsIERGLgpSdWxlCUJyYXppbAkxOTkxCW9ubHkJLQlPY3QJMjAJIDA6MDAJMTowMAlTClJ1bGUJQnJhemlsCTE5OTIJb25seQktCUZlYgkgOQkgMDowMAkwCS0KIyA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjE5OTIuaHRtIj5Vbm51bWJlcmVkIGRlY3JlZTwvYT4gKDE5OTItMTAtMTYpCiMgYWRvcHRlZCBieSBzYW1lIHN0YXRlcy4KUnVsZQlCcmF6aWwJMTk5Mglvbmx5CS0JT2N0CTI1CSAwOjAwCTE6MDAJUwpSdWxlCUJyYXppbAkxOTkzCW9ubHkJLQlKYW4JMzEJIDA6MDAJMAktCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWOTQyLmh0bSI+OTQyPC9hPiAoMTk5My0wOS0yOCkKIyBhZG9wdGVkIGJ5IHNhbWUgc3RhdGVzLCBwbHVzIEFNLgojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjEyNTIuaHRtIj4xLDI1MjwvYT4gKDE5OTQtMDktMjI7CiMgd2ViIHBhZ2UgY29ycmVjdGVkIDIwMDQtMDEtMDcpIGFkb3B0ZWQgYnkgc2FtZSBzdGF0ZXMsIG1pbnVzIEFNLgojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9IVjE2MzYuaHRtIj4xLDYzNjwvYT4gKDE5OTUtMDktMTQpCiMgYWRvcHRlZCBieSBzYW1lIHN0YXRlcywgcGx1cyBNVCBhbmQgVE8uCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMTY3NC5odG0iPjEsNjc0PC9hPiAoMTk5NS0xMC0xMykKIyBhZGRzIEFMLCBTRS4KUnVsZQlCcmF6aWwJMTk5MwkxOTk1CS0JT2N0CVN1bj49MTEJIDA6MDAJMTowMAlTClJ1bGUJQnJhemlsCTE5OTQJMTk5NQktCUZlYglTdW4+PTE1CSAwOjAwCTAJLQpSdWxlCUJyYXppbAkxOTk2CW9ubHkJLQlGZWIJMTEJIDA6MDAJMAktCiMgRGVjcmVlIDxhIGhyZWY9Imh0dHA6Ly9wY2RzaDAxLm9uLmJyL0hWMjAwMC5odG0iPjIsMDAwPC9hPiAoMTk5Ni0wOS0wNCkKIyBhZG9wdGVkIGJ5IHNhbWUgc3RhdGVzLCBtaW51cyBBTCwgU0UuClJ1bGUJQnJhemlsCTE5OTYJb25seQktCU9jdAkgNgkgMDowMAkxOjAwCVMKUnVsZQlCcmF6aWwJMTk5Nwlvbmx5CS0JRmViCTE2CSAwOjAwCTAJLQojIEZyb20gRGFuaWVsIEMuIFNvYnJhbCAoMTk5OC0wMi0xMik6CiMgSW4gMTk5NywgdGhlIERTIGJlZ2FuIG9uIE9jdG9iZXIgNi4gVGhlIHN0YXRlZCByZWFzb24gd2FzIHRoYXQKIyBiZWNhdXNlIGludGVybmF0aW9uYWwgdGVsZXZpc2lvbiBuZXR3b3JrcyBpZ25vcmVkIEJyYXppbCdzIHBvbGljeSBvbiBEUywKIyB0aGV5IGJvdWdodCB0aGUgd3JvbmcgdGltZXMgb24gc2F0ZWxsaXRlIGZvciBjb3ZlcmFnZSBvZiBQb3BlJ3MgdmlzaXQuCiMgVGhpcyB5ZWFyLCB0aGUgZW5kaW5nIGRhdGUgb2YgRFMgd2FzIHBvc3Rwb25lZCB0byBNYXJjaCAxCiMgdG8gaGVscCBkZWFsaW5nIHdpdGggdGhlIHNob3J0YWdlcyBvZiBlbGVjdHJpYyBwb3dlci4KIwojIERlY3JlZSAyLDMxNyAoMTk5Ny0wOS0wNCksIGFkb3B0ZWQgYnkgc2FtZSBzdGF0ZXMuClJ1bGUJQnJhemlsCTE5OTcJb25seQktCU9jdAkgNgkgMDowMAkxOjAwCVMKIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvZmlndXJhcy9IVjI0OTUuSlBHIj4yLDQ5NTwvYT4KIyAoMTk5OC0wMi0xMCkKUnVsZQlCcmF6aWwJMTk5OAlvbmx5CS0JTWFyCSAxCSAwOjAwCTAJLQojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9maWd1cmFzL0h2OTguanBnIj4yLDc4MDwvYT4gKDE5OTgtMDktMTEpCiMgYWRvcHRlZCBieSB0aGUgc2FtZSBzdGF0ZXMgYXMgYmVmb3JlLgpSdWxlCUJyYXppbAkxOTk4CW9ubHkJLQlPY3QJMTEJIDA6MDAJMTowMAlTClJ1bGUJQnJhemlsCTE5OTkJb25seQktCUZlYgkyMQkgMDowMAkwCS0KIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvZmlndXJhcy9IVjMxNTAuZ2lmIj4zLDE1MDwvYT4KIyAoMTk5OS0wOC0yMykgYWRvcHRlZCBieSBzYW1lIHN0YXRlcy4KIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjSFY5OS5naWYiPjMsMTg4PC9hPiAoMTk5OS0wOS0zMCkKIyBhZGRzIFNFLCBBTCwgUEIsIFBFLCBSTiwgQ0UsIFBJLCBNQSBhbmQgUlIuClJ1bGUJQnJhemlsCTE5OTkJb25seQktCU9jdAkgMwkgMDowMAkxOjAwCVMKUnVsZQlCcmF6aWwJMjAwMAlvbmx5CS0JRmViCTI3CSAwOjAwCTAJLQojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9ERUMzNTkyLmh0bSI+Myw1OTI8L2E+ICgyMDAwLTA5LTA2KQojIGFkb3B0ZWQgYnkgdGhlIHNhbWUgc3RhdGVzIGFzIGJlZm9yZS4KIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjMzYzMC5qcGciPjMsNjMwPC9hPiAoMjAwMC0xMC0xMykKIyByZXBlYWxzIERTVCBpbiBQRSBhbmQgUlIsIGVmZmVjdGl2ZSAyMDAwLTEwLTE1IDAwOjAwLgojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9EZWMzNjMyLmpwZyI+Myw2MzI8L2E+ICgyMDAwLTEwLTE3KQojIHJlcGVhbHMgRFNUIGluIFNFLCBBTCwgUEIsIFJOLCBDRSwgUEkgYW5kIE1BLCBlZmZlY3RpdmUgMjAwMC0xMC0yMiAwMDowMC4KIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvZmlndXJhcy9IVjM5MTYuZ2lmIj4zLDkxNjwvYT4KIyAoMjAwMS0wOS0xMykgcmVlc3RhYmxpc2hlcyBEU1QgaW4gQUwsIENFLCBNQSwgUEIsIFBFLCBQSSwgUk4sIFNFLgpSdWxlCUJyYXppbAkyMDAwCTIwMDEJLQlPY3QJU3VuPj04CSAwOjAwCTE6MDAJUwpSdWxlCUJyYXppbAkyMDAxCTIwMDYJLQlGZWIJU3VuPj0xNQkgMDowMAkwCS0KIyBEZWNyZWUgNCwzOTkgKDIwMDItMTAtMDEpIHJlcGVhbHMgRFNUIGluIEFMLCBDRSwgTUEsIFBCLCBQRSwgUEksIFJOLCBTRS4KIyA8YSBocmVmPSJodHRwOi8vd3d3LnByZXNpZGVuY2lhLmdvdi5ici9DQ0lWSUwvZGVjcmV0by8yMDAyL0Q0Mzk5Lmh0bSI+NCwzOTk8L2E+ClJ1bGUJQnJhemlsCTIwMDIJb25seQktCU5vdgkgMwkgMDowMAkxOjAwCVMKIyBEZWNyZWUgNCw4NDQgKDIwMDMtMDktMjQ7IGNvcnJlY3RlZCAyMDAzLTA5LTI2KSByZXBlYWxzIERTVCBpbiBCQSwgTVQsIFRPLgojIDxhIGhyZWY9Imh0dHA6Ly93d3cucHJlc2lkZW5jaWEuZ292LmJyL0NDSVZJTC9kZWNyZXRvLzIwMDMvRDQ4NDQuaHRtIj40LDg0NDwvYT4KUnVsZQlCcmF6aWwJMjAwMwlvbmx5CS0JT2N0CTE5CSAwOjAwCTE6MDAJUwojIERlY3JlZSA1LDIyMyAoMjAwNC0xMC0wMSkgcmVlc3RhYmxpc2hlcyBEU1QgaW4gTVQuCiMgPGEgaHJlZj0iaHR0cDovL3d3dy5wbGFuYWx0by5nb3YuYnIvY2NpdmlsXzAzL19BdG8yMDA0LTIwMDYvMjAwNC9EZWNyZXRvL0Q1MjIzLmh0bSI+NSwyMjM8L2E+ClJ1bGUJQnJhemlsCTIwMDQJb25seQktCU5vdgkgMgkgMDowMAkxOjAwCVMKIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjSFY1NTM5LmdpZiI+NSw1Mzk8L2E+ICgyMDA1LTA5LTE5KSwKIyBhZG9wdGVkIGJ5IHRoZSBzYW1lIHN0YXRlcyBhcyBiZWZvcmUuClJ1bGUJQnJhemlsCTIwMDUJb25seQktCU9jdAkxNgkgMDowMAkxOjAwCVMKIyBEZWNyZWUgPGEgaHJlZj0iaHR0cDovL3BjZHNoMDEub24uYnIvRGVjSFY1OTIwLmdpZiI+NSw5MjA8L2E+ICgyMDA2LTEwLTAzKSwKIyBhZG9wdGVkIGJ5IHRoZSBzYW1lIHN0YXRlcyBhcyBiZWZvcmUuClJ1bGUJQnJhemlsCTIwMDYJb25seQktCU5vdgkgNQkgMDowMAkxOjAwCVMKUnVsZQlCcmF6aWwJMjAwNwlvbmx5CS0JRmViCTI1CSAwOjAwCTAJLQojIERlY3JlZSA8YSBocmVmPSJodHRwOi8vcGNkc2gwMS5vbi5ici9EZWNIVjYyMTIuZ2lmIj42LDIxMjwvYT4gKDIwMDctMDktMjYpLAojIGFkb3B0ZWQgYnkgdGhlIHNhbWUgc3RhdGVzIGFzIGJlZm9yZS4KUnVsZQlCcmF6aWwJMjAwNwlvbmx5CS0JT2N0CVN1bj49OAkgMDowMAkxOjAwCVMKIyBGcm9tIEZyZWRlcmljbyBBLiBDLiBOZXZlcyAoMjAwOC0wOS0xMCk6CiMgQWNvcmRpbmcgdG8gdGhpcyBkZWNyZWUKIyA8YSBocmVmPSJodHRwOi8vd3d3LnBsYW5hbHRvLmdvdi5ici9jY2l2aWxfMDMvX0F0bzIwMDctMjAxMC8yMDA4L0RlY3JldG8vRDY1NTguaHRtIj4KIyBodHRwOi8vd3d3LnBsYW5hbHRvLmdvdi5ici9jY2l2aWxfMDMvX0F0bzIwMDctMjAxMC8yMDA4L0RlY3JldG8vRDY1NTguaHRtCiMgPC9hPgojIFt0XWhlIERTVCBwZXJpb2QgaW4gQnJhemlsIG5vdyBvbiB3aWxsIGJlIGZyb20gdGhlIDNyZCBPY3QgU3VuZGF5IHRvIHRoZQojIDNyZCBGZWIgU3VuZGF5LiBUaGVyZSBpcyBhbiBleGNlcHRpb24gb24gdGhlIHJldHVybiBkYXRlIHdoZW4gdGhpcyBpcwojIHRoZSBDYXJuaXZhbCBTdW5kYXkgdGhlbiB0aGUgcmV0dXJuIGRhdGUgd2lsbCBiZSB0aGUgbmV4dCBTdW5kYXkuLi4KUnVsZQlCcmF6aWwJMjAwOAltYXgJLQlPY3QJU3VuPj0xNQkwOjAwCTE6MDAJUwpSdWxlCUJyYXppbAkyMDA4CTIwMTEJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDEyCW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDEzCTIwMTQJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDE1CW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDE2CTIwMjIJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDIzCW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDI0CTIwMjUJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDI2CW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDI3CTIwMzMJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDM0CW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDM1CTIwMzYJLQlGZWIJU3VuPj0xNQkwOjAwCTAJLQpSdWxlCUJyYXppbAkyMDM3CW9ubHkJLQlGZWIJU3VuPj0yMgkwOjAwCTAJLQojIEZyb20gQXJ0aHVyIERhdmlkIE9sc29uICgyMDA4LTA5LTI5KToKIyBUaGUgbmV4dCBpcyB3cm9uZyBpbiBzb21lIHllYXJzIGJ1dCBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nLgpSdWxlCUJyYXppbAkyMDM4CW1heAktCUZlYglTdW4+PTE1CTA6MDAJMAktCgojIFRoZSBsYXRlc3QgcnVsZXNldCBsaXN0ZWQgYWJvdmUgc2F5cyB0aGF0IHRoZSBmb2xsb3dpbmcgc3RhdGVzIG9ic2VydmUgRFNUOgojIERGLCBFUywgR08sIE1HLCBNUywgTVQsIFBSLCBSSiwgUlMsIFNDLCBTUC4KCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KIwojIEZlcm5hbmRvIGRlIE5vcm9uaGEgKGFkbWluaXN0cmF0aXZlbHkgcGFydCBvZiBQRSkKWm9uZSBBbWVyaWNhL05vcm9uaGEJLTI6MDk6NDAgLQlMTVQJMTkxNAoJCQktMjowMAlCcmF6aWwJRk4lc1QJMTk5MCBTZXAgMTcKCQkJLTI6MDAJLQlGTlQJMTk5OSBTZXAgMzAKCQkJLTI6MDAJQnJhemlsCUZOJXNUCTIwMDAgT2N0IDE1CgkJCS0yOjAwCS0JRk5UCTIwMDEgU2VwIDEzCgkJCS0yOjAwCUJyYXppbAlGTiVzVAkyMDAyIE9jdCAgMQoJCQktMjowMAktCUZOVAojIE90aGVyIEF0bGFudGljIGlzbGFuZHMgaGF2ZSBubyBwZXJtYW5lbnQgc2V0dGxlbWVudC4KIyBUaGVzZSBpbmNsdWRlIFRyaW5kYWRlIGFuZCBNYXJ0aW4gVmF6IChhZG1pbmlzdHJhdGl2ZWx5IHBhcnQgb2YgRVMpLAojIEF0b2wgZGFzIFJvY2FzIChSTiksIGFuZCBQZW5lZG9zIGRlIFNhbyBQZWRybyBlIFNhbyBQYXVsbyAoUEUpLgojIEZlcm5hbmRvIGRlIE5vcm9uaGEgd2FzIGEgc2VwYXJhdGUgdGVycml0b3J5IGZyb20gMTk0Mi0wOS0wMiB0byAxOTg5LTAxLTAxOwojIGl0IGFsc28gaW5jbHVkZWQgdGhlIFBlbmVkb3MuCiMKIyBBbWFwYSAoQVApLCBlYXN0IFBhcmEgKFBBKQojIEVhc3QgUGFyYSBpbmNsdWRlcyBCZWxlbSwgTWFyYWJhLCBTZXJyYSBOb3J0ZSwgYW5kIFNhbyBGZWxpeCBkbyBYaW5ndS4KIyBUaGUgZGl2aXNpb24gYmV0d2VlbiBlYXN0IGFuZCB3ZXN0IFBhcmEgaXMgdGhlIHJpdmVyIFhpbmd1LgojIEluIHRoZSBub3J0aCBhIHZlcnkgc21hbGwgcGFydCBmcm9tIHRoZSByaXZlciBKYXZhcnkgKG5vdyBKYXJpIEkgZ3Vlc3MsCiMgdGhlIGJvcmRlciB3aXRoIEFtYXBhKSB0byB0aGUgQW1hem9uLCB0aGVuIHRvIHRoZSBYaW5ndS4KWm9uZSBBbWVyaWNhL0JlbGVtCS0zOjEzOjU2IC0JTE1UCTE5MTQKCQkJLTM6MDAJQnJhemlsCUJSJXNUCTE5ODggU2VwIDEyCgkJCS0zOjAwCS0JQlJUCiMKIyB3ZXN0IFBhcmEgKFBBKQojIFdlc3QgUGFyYSBpbmNsdWRlcyBBbHRhbWlyYSwgT3JpYmlkb3MsIFByYWluaGEsIE9yaXhpbWluYSwgYW5kIFNhbnRhcmVtLgpab25lIEFtZXJpY2EvU2FudGFyZW0JLTM6Mzg6NDggLQlMTVQJMTkxNAoJCQktNDowMAlCcmF6aWwJQU0lc1QJMTk4OCBTZXAgMTIKCQkJLTQ6MDAJLQlBTVQJMjAwOCBKdW4gMjQgMDA6MDAKCQkJLTM6MDAJLQlCUlQKIwojIE1hcmFuaGFvIChNQSksIFBpYXVpIChQSSksIENlYXJhIChDRSksIFJpbyBHcmFuZGUgZG8gTm9ydGUgKFJOKSwKIyBQYXJhaWJhIChQQikKWm9uZSBBbWVyaWNhL0ZvcnRhbGV6YQktMjozNDowMCAtCUxNVAkxOTE0CgkJCS0zOjAwCUJyYXppbAlCUiVzVAkxOTkwIFNlcCAxNwoJCQktMzowMAktCUJSVAkxOTk5IFNlcCAzMAoJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMCBPY3QgMjIKCQkJLTM6MDAJLQlCUlQJMjAwMSBTZXAgMTMKCQkJLTM6MDAJQnJhemlsCUJSJXNUCTIwMDIgT2N0ICAxCgkJCS0zOjAwCS0JQlJUCiMKIyBQZXJuYW1idWNvIChQRSkgKGV4Y2VwdCBBdGxhbnRpYyBpc2xhbmRzKQpab25lIEFtZXJpY2EvUmVjaWZlCS0yOjE5OjM2IC0JTE1UCTE5MTQKCQkJLTM6MDAJQnJhemlsCUJSJXNUCTE5OTAgU2VwIDE3CgkJCS0zOjAwCS0JQlJUCTE5OTkgU2VwIDMwCgkJCS0zOjAwCUJyYXppbAlCUiVzVAkyMDAwIE9jdCAxNQoJCQktMzowMAktCUJSVAkyMDAxIFNlcCAxMwoJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMiBPY3QgIDEKCQkJLTM6MDAJLQlCUlQKIwojIFRvY2FudGlucyAoVE8pClpvbmUgQW1lcmljYS9BcmFndWFpbmEJLTM6MTI6NDggLQlMTVQJMTkxNAoJCQktMzowMAlCcmF6aWwJQlIlc1QJMTk5MCBTZXAgMTcKCQkJLTM6MDAJLQlCUlQJMTk5NSBTZXAgMTQKCQkJLTM6MDAJQnJhemlsCUJSJXNUCTIwMDMgU2VwIDI0CgkJCS0zOjAwCS0JQlJUCiMKIyBBbGFnb2FzIChBTCksIFNlcmdpcGUgKFNFKQpab25lIEFtZXJpY2EvTWFjZWlvCS0yOjIyOjUyIC0JTE1UCTE5MTQKCQkJLTM6MDAJQnJhemlsCUJSJXNUCTE5OTAgU2VwIDE3CgkJCS0zOjAwCS0JQlJUCTE5OTUgT2N0IDEzCgkJCS0zOjAwCUJyYXppbAlCUiVzVAkxOTk2IFNlcCAgNAoJCQktMzowMAktCUJSVAkxOTk5IFNlcCAzMAoJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMCBPY3QgMjIKCQkJLTM6MDAJLQlCUlQJMjAwMSBTZXAgMTMKCQkJLTM6MDAJQnJhemlsCUJSJXNUCTIwMDIgT2N0ICAxCgkJCS0zOjAwCS0JQlJUCiMKIyBCYWhpYSAoQkEpCiMgVGhlcmUgYXJlIHRvbyBtYW55IFNhbHZhZG9ycyBlbHNld2hlcmUsIHNvIHVzZSBBbWVyaWNhL0JhaGlhIGluc3RlYWQKIyBvZiBBbWVyaWNhL1NhbHZhZG9yLgpab25lIEFtZXJpY2EvQmFoaWEJLTI6MzQ6MDQgLQlMTVQJMTkxNAoJCQktMzowMAlCcmF6aWwJQlIlc1QJMjAwMyBTZXAgMjQKCQkJLTM6MDAJLQlCUlQKIwojIEdvaWFzIChHTyksIERpc3RyaXRvIEZlZGVyYWwgKERGKSwgTWluYXMgR2VyYWlzIChNRyksCiMgRXNwaXJpdG8gU2FudG8gKEVTKSwgUmlvIGRlIEphbmVpcm8gKFJKKSwgU2FvIFBhdWxvIChTUCksIFBhcmFuYSAoUFIpLAojIFNhbnRhIENhdGFyaW5hIChTQyksIFJpbyBHcmFuZGUgZG8gU3VsIChSUykKWm9uZSBBbWVyaWNhL1Nhb19QYXVsbwktMzowNjoyOCAtCUxNVAkxOTE0CgkJCS0zOjAwCUJyYXppbAlCUiVzVAkxOTYzIE9jdCAyMyAwMDowMAoJCQktMzowMAkxOjAwCUJSU1QJMTk2NAoJCQktMzowMAlCcmF6aWwJQlIlc1QKIwojIE1hdG8gR3Jvc3NvIGRvIFN1bCAoTVMpClpvbmUgQW1lcmljYS9DYW1wb19HcmFuZGUgLTM6Mzg6MjggLQlMTVQJMTkxNAoJCQktNDowMAlCcmF6aWwJQU0lc1QKIwojIE1hdG8gR3Jvc3NvIChNVCkKWm9uZSBBbWVyaWNhL0N1aWFiYQktMzo0NDoyMCAtCUxNVAkxOTE0CgkJCS00OjAwCUJyYXppbAlBTSVzVAkyMDAzIFNlcCAyNAoJCQktNDowMAktCUFNVAkyMDA0IE9jdCAgMQoJCQktNDowMAlCcmF6aWwJQU0lc1QKIwojIFJvbmRvbmlhIChSTykKWm9uZSBBbWVyaWNhL1BvcnRvX1ZlbGhvIC00OjE1OjM2IC0JTE1UCTE5MTQKCQkJLTQ6MDAJQnJhemlsCUFNJXNUCTE5ODggU2VwIDEyCgkJCS00OjAwCS0JQU1UCiMKIyBSb3JhaW1hIChSUikKWm9uZSBBbWVyaWNhL0JvYV9WaXN0YQktNDowMjo0MCAtCUxNVAkxOTE0CgkJCS00OjAwCUJyYXppbAlBTSVzVAkxOTg4IFNlcCAxMgoJCQktNDowMAktCUFNVAkxOTk5IFNlcCAzMAoJCQktNDowMAlCcmF6aWwJQU0lc1QJMjAwMCBPY3QgMTUKCQkJLTQ6MDAJLQlBTVQKIwojIGVhc3QgQW1hem9uYXMgKEFNKTogQm9jYSBkbyBBY3JlLCBKdXRhaSwgTWFuYXVzLCBGbG9yaWFubyBQZWl4b3RvCiMgVGhlIGdyZWF0IGNpcmNsZSBsaW5lIGZyb20gVGFiYXRpbmdhIHRvIFBvcnRvIEFjcmUgZGl2aWRlcwojIGVhc3QgZnJvbSB3ZXN0IEFtYXpvbmFzLgpab25lIEFtZXJpY2EvTWFuYXVzCS00OjAwOjA0IC0JTE1UCTE5MTQKCQkJLTQ6MDAJQnJhemlsCUFNJXNUCTE5ODggU2VwIDEyCgkJCS00OjAwCS0JQU1UCTE5OTMgU2VwIDI4CgkJCS00OjAwCUJyYXppbAlBTSVzVAkxOTk0IFNlcCAyMgoJCQktNDowMAktCUFNVAojCiMgd2VzdCBBbWF6b25hcyAoQU0pOiBBdGFsYWlhIGRvIE5vcnRlLCBCb2NhIGRvIE1hb2NvLCBCZW5qYW1pbiBDb25zdGFudCwKIwlFaXJ1bmVwZSwgRW52aXJhLCBJcGl4dW5hClpvbmUgQW1lcmljYS9FaXJ1bmVwZQktNDozOToyOCAtCUxNVAkxOTE0CgkJCS01OjAwCUJyYXppbAlBQyVzVAkxOTg4IFNlcCAxMgoJCQktNTowMAktCUFDVAkxOTkzIFNlcCAyOAoJCQktNTowMAlCcmF6aWwJQUMlc1QJMTk5NCBTZXAgMjIKCQkJLTU6MDAJLQlBQ1QJMjAwOCBKdW4gMjQgMDA6MDAKCQkJLTQ6MDAJLQlBTVQKIwojIEFjcmUgKEFDKQpab25lIEFtZXJpY2EvUmlvX0JyYW5jbwktNDozMToxMiAtCUxNVAkxOTE0CgkJCS01OjAwCUJyYXppbAlBQyVzVAkxOTg4IFNlcCAxMgoJCQktNTowMAktCUFDVAkyMDA4IEp1biAyNCAwMDowMAoJCQktNDowMAktCUFNVAoKIyBDaGlsZQoKIyBGcm9tIEVkdWFyZG8gS3JlbGwgKDE5OTUtMTAtMTkpOgojIFRoZSBsYXcgc2F5cyB0byBzd2l0Y2ggdG8gRFNUIGF0IG1pZG5pZ2h0IFsyNDowMF0gb24gdGhlIHNlY29uZCBTQVRVUkRBWQojIG9mIE9jdG9iZXIuLi4uICBUaGUgbGF3IGlzIHRoZSBzYW1lIGZvciBNYXJjaCBhbmQgT2N0b2Jlci4KIyAoMTk5OC0wOS0yOSk6CiMgQmVjYXVzZSBvZiB0aGUgZHJvdWdodCB0aGlzIHllYXIsIHRoZSBnb3Zlcm5tZW50IGRlY2lkZWQgdG8gZ28gaW50bwojIERTVCBlYXJsaWVyIChzYXR1cmRheSA5LzI2IGF0IDI0OjAwKS4gVGhpcyBpcyBhIG9uZS10aW1lIGNoYW5nZSBvbmx5IC4uLgojICh1bmxlc3MgdGhlcmUncyBhbm90aGVyIGRyeSBzZWFzb24gbmV4dCB5ZWFyLCBJIGd1ZXNzKS4KCiMgRnJvbSBKdWxpbyBJLiBQYWNoZWNvIFRyb25jb3NvICgxOTk5LTAzLTE4KToKIyBCZWNhdXNlIG9mIHRoZSBzYW1lIGRyb3VnaHQsIHRoZSBnb3Zlcm5tZW50IGRlY2lkZWQgdG8gZW5kIERTVCBsYXRlciwKIyBvbiBBcHJpbCAzLCAob25lLXRpbWUgY2hhbmdlKS4KCiMgRnJvbSBPc2NhciB2YW4gVmxpam1lbiAoMjAwNi0xMC0wOCk6CiMgaHR0cDovL3d3dy5ob3Jhb2ZpY2lhbC5jbC9jYW1iaW8uaHRtCgojIEZyb20gSmVzcGVyIE5vcmdhYXJkIFdlbGVuICgyMDA2LTEwLTA4KToKIyBJIHRoaW5rIHRoYXQgdGhlcmUgYXJlIHNvbWUgb2J2aW91cyBtaXN0YWtlcyBpbiB0aGUgc3VnZ2VzdGVkIGxpbmsKIyBmcm9tIE9zY2FyIHZhbiBWbGlqbWVuLC4uLiBmb3IgaW5zdGFuY2UgZW50cnkgNjYgc2F5cyB0aGF0IEdNVC00CiMgZW5kZWQgMTk5MC0wOS0xMiB3aGlsZSBlbnRyeSA2NyBvbmx5IGJlZ2lucyBHTVQtMyBhdCAxOTkwLTA5LTE1CiMgKHRoZXkgc2hvdWxkIGhhdmUgYmVlbiAxOTkwLTA5LTE1IGFuZCAxOTkwLTA5LTE2IHJlc3BlY3RpdmVseSksIGJ1dAojIGFueWhvdyBpdCBjbGVhcnMgdXAgc29tZSBkb3VidHMgdG9vLgoKIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTEyLTI3KToKIyBUaGUgZm9sbG93aW5nIGRhdGEgZm9yIENoaWxlIGFuZCBBbWVyaWNhL1NhbnRpYWdvIGFyZSBmcm9tCiMgPGh0dHA6Ly93d3cuaG9yYW9maWNpYWwuY2wvaG9yYW9mLmh0bT4gKDIwMDYtMDktMjApLCB0cmFuc2NyaWJlZCBieQojIEplc3BlciBOb3JnYWFyZCBXZWxlbi4gIFRoZSBkYXRhIGZvciBQYWNpZmljL0Vhc3RlciBhcmUgZnJvbSBTaGFua3MKIyAmIFBvdHRlbmdlciwgZXhjZXB0IHdpdGggRFNUIHRyYW5zaXRpb25zIGFmdGVyIDE5MzIgY2xvbmVkIGZyb20KIyBBbWVyaWNhL1NhbnRpYWdvLiAgVGhlIHByZS0xOTgwIFBhY2lmaWMvRWFzdGVyIGRhdGEgYXJlIGR1YmlvdXMsCiMgYnV0IHdlIGhhdmUgbm8gb3RoZXIgc291cmNlLgoKIyBGcm9tIEdlcm1hbiBQb28tQ2FhbWFufm8gKDIwMDgtMDMtMDMpOgojIER1ZSB0byBkcm91Z2h0LCBDaGlsZSBleHRlbmRzIERheWxpZ2h0IFRpbWUgaW4gdGhyZWUgd2Vla3MuICBUaGlzCiMgaXMgb25lLXRpbWUgY2hhbmdlIChTYXR1cmRheSAzLzI5IGF0IDI0OjAwIGZvciBBbWVyaWNhL1NhbnRpYWdvCiMgYW5kIFNhdHVyZGF5IDMvMjkgYXQgMjI6MDAgZm9yIFBhY2lmaWMvRWFzdGVyKQojIFRoZSBTdXByZW1lIERlY3JlZSBpcyBsb2NhdGVkIGF0IAojIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2hvYS5jbC9zZXJ2aWNpb3Mvc3VwcmVtbzMxNi5wZGYiPgojIGh0dHA6Ly93d3cuc2hvYS5jbC9zZXJ2aWNpb3Mvc3VwcmVtbzMxNi5wZGYKIyA8L2E+CiMgYW5kIHRoZSBpbnN0cnVjdGlvbnMgZm9yIDIwMDggYXJlIGxvY2F0ZWQgaW46CiMgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3Jhb2ZpY2lhbC5jbC9jYW1iaW8uaHRtIj4KIyBodHRwOi8vd3d3LmhvcmFvZmljaWFsLmNsL2NhbWJpby5odG0KIyA8L2E+LgoKIyBGcm9tIEpvc2UgTWlndWVsIEdhcnJpZG8gKDIwMDgtMDMtMDUpOgojIC4uLgojIFlvdSBjb3VsZCBzZWUgdGhlIGFubm91bmNlcyBvZiB0aGUgY2hhbmdlIG9uIAojIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2hvYS5jbC9ub3RpY2lhcy8yMDA4LzA0aG9yYS9ob3JhLmh0bSI+CiMgaHR0cDovL3d3dy5zaG9hLmNsL25vdGljaWFzLzIwMDgvMDRob3JhL2hvcmEuaHRtCiMgPC9hPi4KCiMgRnJvbSBBbmdlbCBDaGlhbmcgKDIwMTAtMDMtMDQpOgojIFN1YmplY3Q6IERTVCBpbiBDaGlsZSBleGNlcHRpb25hbGx5IGV4dGVuZGVkIHRvIDMgQXByaWwgZHVlIHRvIGVhcnRocXVha2UKIyA8YSBocmVmPSJodHRwOi8vd3d3LmdvYmllcm5vZGVjaGlsZS5jbC92aWV3Tm90aWNpYS5hc3B4P2lkQXJ0aWN1bG89MzAwOTgiPgojIGh0dHA6Ly93d3cuZ29iaWVybm9kZWNoaWxlLmNsL3ZpZXdOb3RpY2lhLmFzcHg/aWRBcnRpY3Vsbz0zMDA5OAojIDwvYT4KIyAoaW4gU3BhbmlzaCwgbGFzdCBwYXJhZ3JhcGgpLgojCiMgVGhpcyBpcyBicmVha2luZyBuZXdzLiBUaGVyZSBzaG91bGQgYmUgbW9yZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgbGF0ZXIuCgojIEZyb20gQXJ0aHVyIERhaXZkIE9sc29uICgyMDEwLTAzLTA2KToKIyBBbmdlbCBDaGlhbmcncyBtZXNzYWdlIGNvbmZpcm1lZCBieSBKdWxpbyBQYWNoZWNvOyBKdWxpbyBwcm92aWRlZCBhIHBhdGNoLgoKIyBGcm9tIEdsZW5uIEV5Y2hhbmVyICgyMDExLTAzLTAyKTogW2dleWNoYW5lckBtYWMuY29tXQojIEl0IGFwcGVhcnMgdGhhdCB0aGUgQ2hpbGVhbiBnb3Zlcm5tZW50IGhhcyBkZWNpZGVkIHRvIHBvc3Rwb25lIHRoZQojIGNoYW5nZSBmcm9tIHN1bW1lciB0aW1lIHRvIHdpbnRlciB0aW1lIGFnYWluLCBieSB0aHJlZSB3ZWVrcyB0byBBcHJpbAojIDJuZDoKIyA8YSBocmVmPSJodHRwOi8vd3d3LmVtb2wuY29tL25vdGljaWFzL25hY2lvbmFsL2RldGFsbGUvZGV0YWxsZW5vdGljaWFzLmFzcD9pZG5vdGljaWE9NDY3NjUxIj4KIyBodHRwOi8vd3d3LmVtb2wuY29tL25vdGljaWFzL25hY2lvbmFsL2RldGFsbGUvZGV0YWxsZW5vdGljaWFzLmFzcD9pZG5vdGljaWE9NDY3NjUxCiMgPC9hPgojCiMgVGhpcyBpcyBub3QgeWV0IHJlZmxlY3RlZCBpbiB0aGUgb2ZmaWNhbCAiY2FtYmlvIGRlIGhvcmEiIHNpdGUsIGJ1dAojIHByb2JhYmx5IHdpbGwgYmUgc29vbjoKIyA8YSBocmVmPSJodHRwOi8vd3d3LmhvcmFvZmljaWFsLmNsL2NhbWJpby5odG0iPgojIGh0dHA6Ly93d3cuaG9yYW9maWNpYWwuY2wvY2FtYmlvLmh0bQojIDwvYT4KCiMgRnJvbSBBcnRodXIgRGF2aWQgT2xzb24gKDIwMTEtMDMtMDIpOgojIFRoZSBlbW9sLmNvbSBhcnRpY2xlIG1lbnRpb25zIGEgd2F0ZXIgc2hvcnRhZ2UgYXMgdGhlIGNhdXNlIG9mIHRoZQojIHBvc3Rwb25lbWVudCwgd2hpY2ggbWF5IG1lYW4gdGhhdCBpdCdzIG5vdCBhIHBlcm1hbmVudCBjaGFuZ2UuCgojIEZyb20gR2xlbm4gRXljaGFuZXIgKDIwMTEtMDMtMjgpOgojIFRoZSBhcnRpY2xlOgojIDxhIGhyZWY9Imh0dHA6Ly9kaWFyaW8uZWxtZXJjdXJpby5jb20vMjAxMS8wMy8yOC9fcG9ydGFkYS9fcG9ydGFkYS9ub3RpY2lhcy83NTY1ODk3QS1DQTg2LTQ5RTYtOUUwMy02NjBCMjFBNDg4M0UuaHRtP2lkPTNEezc1NjU4OTdBLUNBODYtNDlFNi05RTAzLTY2MEIyMUE0ODgzRX0iPgojIGh0dHA6Ly9kaWFyaW8uZWxtZXJjdXJpby5jb20vMjAxMS8wMy8yOC9fcG9ydGFkYS9fcG9ydGFkYS9ub3RpY2lhcy83NTY1ODk3QS1DQTg2LTQ5RTYtOUUwMy02NjBCMjFBNDg4M0UuaHRtP2lkPTNEezc1NjU4OTdBLUNBODYtNDlFNi05RTAzLTY2MEIyMUE0ODgzRX0KIyA8L2E+CiMKIyBJbiBFbmdsaXNoOgojIENoaWxlJ3MgY2xvY2tzIHdpbGwgZ28gYmFjayBhbiBob3VyIHRoaXMgeWVhciBvbiB0aGUgN3RoIG9mIE1heSBpbnN0ZWFkCiMgb2YgdGhpcyBTYXR1cmRheS4gVGhleSB3aWxsIGdvIGZvcndhcmQgYWdhaW4gdGhlIDNyZCBTYXR1cmRheSBpbgojIEF1Z3VzdCwgbm90IGluIE9jdG9iZXIgYXMgdGhleSBoYXZlIHNpbmNlIDE5NjguIFRoaXMgaXMgYSBwaWxvdCBwbGFuCiMgd2hpY2ggd2lsbCBiZSByZWV2YWx1YXRlZCBpbiAyMDEyLgoKIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKUnVsZQlDaGlsZQkxOTI3CTE5MzIJLQlTZXAJIDEJMDowMAkxOjAwCVMKUnVsZQlDaGlsZQkxOTI4CTE5MzIJLQlBcHIJIDEJMDowMAkwCS0KUnVsZQlDaGlsZQkxOTQyCW9ubHkJLQlKdW4JIDEJNDowMHUJMAktClJ1bGUJQ2hpbGUJMTk0Mglvbmx5CS0JQXVnCSAxCTU6MDB1CTE6MDAJUwpSdWxlCUNoaWxlCTE5NDYJb25seQktCUp1bAkxNQk0OjAwdQkxOjAwCVMKUnVsZQlDaGlsZQkxOTQ2CW9ubHkJLQlTZXAJIDEJMzowMHUJMDowMAktClJ1bGUJQ2hpbGUJMTk0Nwlvbmx5CS0JQXByCSAxCTQ6MDB1CTAJLQpSdWxlCUNoaWxlCTE5NjgJb25seQktCU5vdgkgMwk0OjAwdQkxOjAwCVMKUnVsZQlDaGlsZQkxOTY5CW9ubHkJLQlNYXIJMzAJMzowMHUJMAktClJ1bGUJQ2hpbGUJMTk2OQlvbmx5CS0JTm92CTIzCTQ6MDB1CTE6MDAJUwpSdWxlCUNoaWxlCTE5NzAJb25seQktCU1hcgkyOQkzOjAwdQkwCS0KUnVsZQlDaGlsZQkxOTcxCW9ubHkJLQlNYXIJMTQJMzowMHUJMAktClJ1bGUJQ2hpbGUJMTk3MAkxOTcyCS0JT2N0CVN1bj49OQk0OjAwdQkxOjAwCVMKUnVsZQlDaGlsZQkxOTcyCTE5ODYJLQlNYXIJU3VuPj05CTM6MDB1CTAJLQpSdWxlCUNoaWxlCTE5NzMJb25seQktCVNlcAkzMAk0OjAwdQkxOjAwCVMKUnVsZQlDaGlsZQkxOTc0CTE5ODcJLQlPY3QJU3VuPj05CTQ6MDB1CTE6MDAJUwpSdWxlCUNoaWxlCTE5ODcJb25seQktCUFwcgkxMgkzOjAwdQkwCS0KUnVsZQlDaGlsZQkxOTg4CTE5ODkJLQlNYXIJU3VuPj05CTM6MDB1CTAJLQpSdWxlCUNoaWxlCTE5ODgJb25seQktCU9jdAlTdW4+PTEJNDowMHUJMTowMAlTClJ1bGUJQ2hpbGUJMTk4OQlvbmx5CS0JT2N0CVN1bj49OQk0OjAwdQkxOjAwCVMKUnVsZQlDaGlsZQkxOTkwCW9ubHkJLQlNYXIJMTgJMzowMHUJMAktClJ1bGUJQ2hpbGUJMTk5MAlvbmx5CS0JU2VwCTE2CTQ6MDB1CTE6MDAJUwpSdWxlCUNoaWxlCTE5OTEJMTk5NgktCU1hcglTdW4+PTkJMzowMHUJMAktClJ1bGUJQ2hpbGUJMTk5MQkxOTk3CS0JT2N0CVN1bj49OQk0OjAwdQkxOjAwCVMKUnVsZQlDaGlsZQkxOTk3CW9ubHkJLQlNYXIJMzAJMzowMHUJMAktClJ1bGUJQ2hpbGUJMTk5OAlvbmx5CS0JTWFyCVN1bj49OQkzOjAwdQkwCS0KUnVsZQlDaGlsZQkxOTk4CW9ubHkJLQlTZXAJMjcJNDowMHUJMTowMAlTClJ1bGUJQ2hpbGUJMTk5OQlvbmx5CS0JQXByCSA0CTM6MDB1CTAJLQpSdWxlCUNoaWxlCTE5OTkJMjAxMAktCU9jdAlTdW4+PTkJNDowMHUJMTowMAlTClJ1bGUJQ2hpbGUJMjAxMQlvbmx5CS0JQXVnCVN1bj49MTYJNDowMHUJMTowMAlTClJ1bGUJQ2hpbGUJMjAxMgltYXgJLQlPY3QJU3VuPj05CTQ6MDB1CTE6MDAJUwpSdWxlCUNoaWxlCTIwMDAJMjAwNwktCU1hcglTdW4+PTkJMzowMHUJMAktCiMgTi5CLjogdGhlIGVuZCBvZiBNYXJjaCAyOSBpbiBDaGlsZSBpcyBNYXJjaCAzMCBpbiBVbml2ZXJzYWwgdGltZSwKIyB3aGljaCBpcyB1c2VkIGJlbG93IGluIHNwZWNpZnlpbmcgdGhlIHRyYW5zaXRpb24uClJ1bGUJQ2hpbGUJMjAwOAlvbmx5CS0JTWFyCTMwCTM6MDB1CTAJLQpSdWxlCUNoaWxlCTIwMDkJb25seQktCU1hcglTdW4+PTkJMzowMHUJMAktClJ1bGUJQ2hpbGUJMjAxMAlvbmx5CS0JQXByCVN1bj49MQkzOjAwdQkwCS0KUnVsZQlDaGlsZQkyMDExCW9ubHkJLQlNYXkJU3VuPj0yCTM6MDB1CTAJLQpSdWxlCUNoaWxlCTIwMTIJbWF4CS0JTWFyCVN1bj49OQkzOjAwdQkwCS0KIyBJQVRBIFNTSU0gYW5vbWFsaWVzOiAoMTk5Mi0wMikgc2F5cyAxOTkyLTAzLTE0OwojICgxOTk2LTA5KSBzYXlzIDE5OTgtMDMtMDguICBJZ25vcmUgdGhlc2UuCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZSBBbWVyaWNhL1NhbnRpYWdvCS00OjQyOjQ2IC0JTE1UCTE4OTAKCQkJLTQ6NDI6NDYgLQlTTVQJMTkxMCAJICAgICMgU2FudGlhZ28gTWVhbiBUaW1lCgkJCS01OjAwCS0JQ0xUCTE5MTYgSnVsICAxICMgQ2hpbGUgVGltZQoJCQktNDo0Mjo0NiAtCVNNVAkxOTE4IFNlcCAgMSAjIFNhbnRpYWdvIE1lYW4gVGltZQoJCQktNDowMAktCUNMVAkxOTE5IEp1bCAgMSAjIENoaWxlIFRpbWUKCQkJLTQ6NDI6NDYgLQlTTVQJMTkyNyBTZXAgIDEgIyBTYW50aWFnbyBNZWFuIFRpbWUKCQkJLTU6MDAJQ2hpbGUJQ0wlc1QJMTk0NyBNYXkgMjIgIyBDaGlsZSBUaW1lCgkJCS00OjAwCUNoaWxlCUNMJXNUClpvbmUgUGFjaWZpYy9FYXN0ZXIJLTc6MTc6NDQgLQlMTVQJMTg5MAoJCQktNzoxNzoyOCAtCUVNVAkxOTMyIFNlcCAgICAjIEVhc3RlciBNZWFuIFRpbWUKCQkJLTc6MDAJQ2hpbGUJRUFTJXNUCTE5ODIgTWFyIDEzIDIxOjAwICMgRWFzdGVyIEkgVGltZQoJCQktNjowMAlDaGlsZQlFQVMlc1QKIwojIFNhbGEgeSBHb21leiBJc2xhbmQgaXMgbGlrZSBQYWNpZmljL0Vhc3Rlci4KIyBPdGhlciBDaGlsZWFuIGxvY2F0aW9ucywgaW5jbHVkaW5nIEp1YW4gRmVybmFuZGV6IElzLCBTYW4gQW1icm9zaW8sCiMgU2FuIEZlbGl4LCBhbmQgQW50YXJjdGljIGJhc2VzLCBhcmUgbGlrZSBBbWVyaWNhL1NhbnRpYWdvLgoKIyBDb2xvbWJpYQojIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUwpSdWxlCUNPCTE5OTIJb25seQktCU1heQkgMwkwOjAwCTE6MDAJUwpSdWxlCUNPCTE5OTMJb25seQktCUFwcgkgNAkwOjAwCTAJLQojIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdClpvbmUJQW1lcmljYS9Cb2dvdGEJLTQ6NTY6MjAgLQlMTVQJMTg4NCBNYXIgMTMKCQkJLTQ6NTY6MjAgLQlCTVQJMTkxNCBOb3YgMjMgIyBCb2dvdGEgTWVhbiBUaW1lCgkJCS01OjAwCUNPCUNPJXNUCSMgQ29sb21iaWEgVGltZQojIE1hbHBlbG8sIFByb3ZpZGVuY2lhLCBTYW4gQW5kcmVzCiMgbm8gaW5mb3JtYXRpb247IHByb2JhYmx5IGxpa2UgQW1lcmljYS9Cb2dvdGEKCiMgQ3VyYWNhbwojCiMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CiMgU2hhbmtzICYgUG90dGVuZ2VyIHNheSB0aGF0IFRoZSBCb3R0b20gYW5kIFBoaWxpcHNidXJnIGhhdmUgYmVlbiBhdAojIC00OjAwIHNpbmNlIHN0YW5kYXJkIHRpbWUgd2FzIGludHJvZHVjZWQgb24gMTkxMi0wMy0wMjsgYW5kIHRoYXQKIyBLcmFsZW5kaWprIGFuZCBSaW5jb24gdXNlZCBLcmFsZW5kaWprIE1lYW4gVGltZSAoLTQ6MzM6MDgpIGZyb20KIyAxOTEyLTAyLTAyIHRvIDE5NjUtMDEtMDEuICBUaGUgZm9ybWVyIGlzIGR1YmlvdXMsIHNpbmNlIFMmUCBhbHNvIHNheQojIFNhYmEgSXNsYW5kIGhhcyBiZWVuIGxpa2UgQ3VyYWNhby4KIyBUaGlzIGFsbCBwcmVkYXRlcyBvdXIgMTk3MCBjdXRvZmYsIHRob3VnaC4KIwojIEJ5IEp1bHkgMjAwNyBDdXJhY2FvIGFuZCBTdCBNYWFydGVuIGFyZSBwbGFubmVkIHRvIGJlY29tZQojIGFzc29jaWF0ZWQgc3RhdGVzIHdpdGhpbiB0aGUgTmV0aGVybGFuZHMsIG11Y2ggbGlrZSBBcnViYTsKIyBCb25haXJlLCBTYWJhIGFuZCBTdCBFdXN0YXRpdXMgd291bGQgYmVjb21lIGRpcmVjdGx5IHBhcnQgb2YgdGhlCiMgTmV0aGVybGFuZHMgYXMgS2luZ2RvbSBJc2xhbmRzLiAgVGhpcyB3b24ndCBhZmZlY3QgdGhlaXIgdGltZSB6b25lcwojIHRob3VnaCwgYXMgZmFyIGFzIHdlIGtub3cuCiMKIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQpab25lCUFtZXJpY2EvQ3VyYWNhbwktNDozNTo0NCAtCUxNVAkxOTEyIEZlYiAxMgkjIFdpbGxlbXN0YWQKCQkJLTQ6MzAJLQlBTlQJMTk2NSAjIE5ldGhlcmxhbmRzIEFudGlsbGVzIFRpbWUKCQkJLTQ6MDAJLQlBU1QKCiMgRWN1YWRvcgojCiMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNy0wMy0wNCk6CiMgQXBwYXJlbnRseSBFY3VhZG9yIGhhZCBhIGZhaWxlZCBleHBlcmltZW50IHdpdGggRFNUIGluIDE5OTIuCiMgPGh0dHA6Ly9taWRlbmEuZ292LmVjL2NvbnRlbnQvdmlldy8xMjYxLzIwOC8+ICgyMDA3LTAyLTI3KSBhbmQKIyA8aHR0cDovL3d3dy5ob3kuY29tLmVjL05vdGljaWFOdWUuYXNwP3Jvd19pZD0yNDk4NTY+ICgyMDA2LTExLTA2KSBib3RoCiMgdGFsayBhYm91dCAiaG9yYSBTaXh0byIuICBMZWF2ZSB0aGlzIGFsb25lIGZvciBub3csIGFzIHdlIGhhdmUgbm8gZGF0YS4KIwojIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdClpvbmUgQW1lcmljYS9HdWF5YXF1aWwJLTU6MTk6MjAgLQlMTVQJMTg5MAoJCQktNToxNDowMCAtCVFNVAkxOTMxICMgUXVpdG8gTWVhbiBUaW1lCgkJCS01OjAwCS0JRUNUCSAgICAgIyBFY3VhZG9yIFRpbWUKWm9uZSBQYWNpZmljL0dhbGFwYWdvcwktNTo1ODoyNCAtCUxNVAkxOTMxICMgUHVlcnRvIEJhcXVlcml6byBNb3Jlbm8KCQkJLTU6MDAJLQlFQ1QJMTk4NgoJCQktNjowMAktCUdBTFQJICAgICAjIEdhbGFwYWdvcyBUaW1lCgojIEZhbGtsYW5kcwoKIyBGcm9tIFBhdWwgRWdnZXJ0ICgyMDA2LTAzLTIyKToKIyBCZXR3ZWVuIDE5OTAgYW5kIDIwMDAgaW5jbHVzaXZlLCBTaGFua3MgJiBQb3R0ZW5nZXIgYW5kIHRoZSBJQVRBIGFncmVlIGV4Y2VwdAojIHRoZSBJQVRBIGdpdmVzIDE5OTYtMDktMDguICBHbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KCiMgRnJvbSBGYWxrbGFuZCBJc2xhbmRzIEdvdmVybm1lbnQgT2ZmaWNlLCBMb25kb24gKDIwMDEtMDEtMjIpCiMgdmlhIEplc3BlciBOb3JnYWFyZDoKIyAuLi4gdGhlIGNsb2NrcyByZXZlcnQgYmFjayB0byBMb2NhbCBNZWFuIFRpbWUgYXQgMiBhbSBvbiBTdW5kYXkgMTUKIyBBcHJpbCAyMDAxIGFuZCBhZHZhbmNlIG9uZSBob3VyIHRvIHN1bW1lciB0aW1lIGF0IDIgYW0gb24gU3VuZGF5IDIKIyBTZXB0ZW1iZXIuICBJdCBpcyBhbnRpY2lwYXRlZCB0aGF0IHRoZSBjbG9ja3Mgd2lsbCByZXZlcnQgYmFjayBhdCAyCiMgYW0gb24gU3VuZGF5IDIxIEFwcmlsIDIwMDIgYW5kIGFkdmFuY2UgdG8gc3VtbWVyIHRpbWUgYXQgMiBhbSBvbgojIFN1bmRheSAxIFNlcHRlbWJlci4KCiMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMS0wMi0xMyk6CiMKIyBJIGhhdmUgY29tbXVuaWNhdGVkIHNldmVyYWwgdGltZXMgd2l0aCBwZW9wbGUgdGhlcmUsIGFuZCB0aGUgbGFzdAojIHRpbWUgSSBoYWQgY29tbXVuaWNhdGlvbnMgdGhhdCB3YXMgaGVscGZ1bCB3YXMgaW4gMTk5OC4gIEhlcmUgaXMKIyB3aGF0IHdhcyBzYWlkIHRoZW46CiMKIyAiVGhlIGdlbmVyYWwgcnVsZSB3YXMgdGhhdCBTdGFubGV5IHVzZWQgZGF5bGlnaHQgc2F2aW5nIGFuZCB0aGUgQ2FtcAojIGRpZCBub3QuIEhvd2V2ZXIgZm9yIHZhcmlvdXMgcmVhc29ucyBtYW55IHBlb3BsZSBpbiB0aGUgQ2FtcCBoYXZlCiMgc3RhcnRlZCB0byB1c2UgZGF5bGlnaHQgc2F2aW5nIChrbm93biBsb2NhbGx5IGFzICdTdGFubGV5IFRpbWUnKQojIFRoZXJlIGlzIG5vIHJ1bGUgYXMgdG8gd2hvIHVzZXMgZGF5bGlnaHQgc2F2aW5nIC0gaXQgaXMgYSBtYXR0ZXIgb2YKIyBwZXJzb25hbCBjaG9pY2UgYW5kIHNvIGl0IGlzIGltcG9zc2libGUgdG8gZHJhdyBhIG1hcCBzaG93aW5nIHdobwojIHVzZXMgaXQgYW5kIHdobyBkb2VzIG5vdC4gQW55IGxpc3Qgd291bGQgYmUgb3V0IG9mIGRhdGUgYXMgc29vbiBhcwojIGl0IHdhcyBwcm9kdWNlZC4gVGhpcyB5ZWFyIGRheWxpZ2h0IHNhdmluZyBlbmRlZCBvbiBBcHJpbCAxOC8xOXRoCiMgYW5kIHN0YXJ0ZWQgYWdhaW4gb24gU2VwdGVtYmVyIDEyLzEzdGguICBJIGRvIG5vdCBrbm93IHdoYXQgdGhlIHJ1bGUKIyBpcywgYnV0IGNhbiBmaW5kIG91dCBpZiB5b3UgbGlrZS4gIFdlIGRvIG5vdCBjaGFuZ2UgYXQgdGhlIHNhbWUgdGltZQojIGFzIFVLIG9yIENoaWxlLiIKIwojIEkgZGlkIGhhdmUgaW4gbXkgbm90ZXMgdGhhdCB0aGUgcnVsZSB3YXMgIlNlY29uZCBTYXR1cmRheSBpbiBTZXAgYXQKIyAwOjAwIHVudGlsIHRoaXJkIFNhdHVyZGF5IGluIEFwciBhdCAwOjAwIi4gIEkgdGhpbmsgdGhhdCB0aGlzIGRvZXMKIyBub3QgYWdyZWUgaW4gc29tZSBjYXNlcyB3aXRoIFNoYW5rczsgaXMgdGhpcyB0cnVlPwojCiMgQWxzbywgdGhlcmUgaXMgbm8gbWVudGlvbiBpbiB0aGUgbGlzdCB0aGF0IHNvbWUgYXJlYXMgaW4gdGhlCiMgRmFsa2xhbmRzIGRvIG5vdCB1c2UgRFNULiAgSSBoYXZlIGZvdW5kIGluIG15IGNvbW11bmljYXRpb25zIHRoZXJlCiMgdGhhdCB0aGVzZSBhcmVhcyBhcmUgb24gdGhlIHdlc3Rlcm4gaGFsZiBvZiBFYXN0IEZhbGtsYW5kIGFuZCBhbGwgb2YKIyBXZXN0IEZhbGtsYW5kLiAgU3RhbmxleSBpcyB0aGUgb25seSBwbGFjZSB0aGF0IGNvbnNpc3RlbnRseSBvYnNlcnZlcwojIERTVC4gIEFnYWluLCBhcyBpbiBvdGhlciBwbGFjZXMgaW4gdGhlIHdvcmxkLCB0aGUgZmFybWVycyBkb24ndCBsaWtlCiMgaXQuICBXZXN0IEZhbGtsYW5kIGlzIGFsbW9zdCBlbnRpcmVseSBzaGVlcCBmYXJtZXJzLgojCiMgSSBrbm93IG9uZSBsYWR5IHRoZXJlIHRoYXQga2VlcHMgYSBsaXN0IG9mIHdoaWNoIGZhcm0ga2VlcHMgRFNUIGFuZAojIHdoaWNoIGRvZXNuJ3QgZWFjaCB5ZWFyLiAgU2hlIHJ1bnMgYSBzaG9wIGluIFN0YW5sZXksIGFuZCBzYXlzIHRoYXQKIyB0aGUgbGlzdCBjaGFuZ2VzIGVhY2ggeWVhci4gIFNoZSB1c2VzIGl0IHRvIGNvbW11bmljYXRlIHRvIGhlcgojIGN1c3RvbWVycywgY2F0Y2hpbmcgdGhlbSB3aGVuIHRoZXkgYXJlIGhvbWUgZm9yIGx1bmNoIG9yIGRpbm5lci4KCiMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwMS0wMy0wNSk6CiMgRm9yIG5vdywgd2UnbGwganVzdCByZWNvcmQgdGhlIHRpbWUgaW4gU3RhbmxleSwgc2luY2Ugd2UgaGF2ZSBubwojIGJldHRlciBpbmZvLgoKIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAxMS0wNC0wMSk6CiMgVGhlIEZhbGtsYW5kIElzbGFuZHMgd2lsbCBub3QgdHVybiBiYWNrIGNsb2NrcyB0aGlzIHdpbnRlciwgYnV0IHN0YXkgb24KIyBkYXlsaWdodCBzYXZpbmcgdGltZS4KIwojIE9uZSBzb3VyY2U6CiMgPGEgaHJlZj0iaHR0cDovL3d3dy5mYWxrbGFuZG5ld3MuY29tL3B1YmxpYy9zdG9yeS5jZm0/Z2V0PTU5MTQmc291cmNlPTMiPgojIGh0dHA6Ly93d3cuZmFsa2xhbmRuZXdzLmNvbS9wdWJsaWMvc3RvcnkuY2ZtP2dldD01OTE0JnNvdXJjZT0zCiMgPC9hPgojCiMgV2UgaGF2ZSBnb3R0ZW4gdGhpcyBjb25maXJtZWQgYnkgYSBjbGVyayBvZiB0aGUgbGVnaXNsYXRpdmUgYXNzZW1ibHk6CiMgTm9ybWFsbHkgdGhlIGNsb2NrcyByZXZlcnQgdG8gTG9jYWwgTWVhbiBUaW1lIChVVEMvR01UIC00IGhvdXJzKSBvbiB0aGUKIyB0aGlyZCBTdW5kYXkgb2YgQXByaWwgYXQgMDIwMGhycyBhbmQgYWR2YW5jZSB0byBTdW1tZXIgVGltZSAoVVRDL0dNVCAtMwojIGhvdXJzKSBvbiB0aGUgZmlyc3QgU3VuZGF5IG9mIFNlcHRlbWJlciBhdCAwMjAwaHJzLgojCiMgSU1QT1JUQU5UIE5PVEU6IER1cmluZyAyMDExLCBvbiBhIHRyaWFsIGJhc2lzLCB0aGUgRmFsa2xhbmQgSXNsYW5kcwojIHdpbGwgbm90IHJldmVydCB0byBsb2NhbCBtZWFuIHRpbWUsIGJ1dCBjbG9ja3Mgd2lsbCByZW1haW4gb24gU3VtbWVyCiMgdGltZSAoVVRDL0dNVCAtIDMgaG91cnMpIHRocm91Z2hvdXQgdGhlIHdob2xlIG9mIDIwMTEuICBBbnkgbG9uZyB0ZXJtCiMgY2hhbmdlIHRvIGxvY2FsIHRpbWUgZm9sbG93aW5nIHRoZSB0cmlhbCBwZXJpb2Qgd2lsbCBiZSBub3RpZmllZC4KIyBSdWxlCU5BTUUJRlJPTQlUTwlUWVBFCUlOCU9OCUFUCVNBVkUJTEVUVEVSL1MKUnVsZQlGYWxrCTE5MzcJMTkzOAktCVNlcAlsYXN0U3VuCTA6MDAJMTowMAlTClJ1bGUJRmFsawkxOTM4CTE5NDIJLQlNYXIJU3VuPj0xOQkwOjAwCTAJLQpSdWxlCUZhbGsJMTkzOQlvbmx5CS0JT2N0CTEJMDowMAkxOjAwCVMKUnVsZQlGYWxrCTE5NDAJMTk0MgktCVNlcAlsYXN0U3VuCTA6MDAJMTowMAlTClJ1bGUJRmFsawkxOTQzCW9ubHkJLQlKYW4JMQkwOjAwCTAJLQpSdWxlCUZhbGsJMTk4Mwlvbmx5CS0JU2VwCWxhc3RTdW4JMDowMAkxOjAwCVMKUnVsZQlGYWxrCTE5ODQJMTk4NQktCUFwcglsYXN0U3VuCTA6MDAJMAktClJ1bGUJRmFsawkxOTg0CW9ubHkJLQlTZXAJMTYJMDowMAkxOjAwCVMKUnVsZQlGYWxrCTE5ODUJMjAwMAktCVNlcAlTdW4+PTkJMDowMAkxOjAwCVMKUnVsZQlGYWxrCTE5ODYJMjAwMAktCUFwcglTdW4+PTE2CTA6MDAJMAktClJ1bGUJRmFsawkyMDAxCTIwMTAJLQlBcHIJU3VuPj0xNQkyOjAwCTAJLQpSdWxlCUZhbGsJMjAxMgltYXgJLQlBcHIJU3VuPj0xNQkyOjAwCTAJLQpSdWxlCUZhbGsJMjAwMQltYXgJLQlTZXAJU3VuPj0xCTI6MDAJMTowMAlTCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZSBBdGxhbnRpYy9TdGFubGV5CS0zOjUxOjI0IC0JTE1UCTE4OTAKCQkJLTM6NTE6MjQgLQlTTVQJMTkxMiBNYXIgMTIgICMgU3RhbmxleSBNZWFuIFRpbWUKCQkJLTQ6MDAJRmFsawlGSyVzVAkxOTgzIE1heSAgICAgIyBGYWxrbGFuZCBJcyBUaW1lCgkJCS0zOjAwCUZhbGsJRkslc1QJMTk4NSBTZXAgMTUKCQkJLTQ6MDAJRmFsawlGSyVzVAoKIyBGcmVuY2ggR3VpYW5hCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZSBBbWVyaWNhL0NheWVubmUJLTM6Mjk6MjAgLQlMTVQJMTkxMSBKdWwKCQkJLTQ6MDAJLQlHRlQJMTk2NyBPY3QgIyBGcmVuY2ggR3VpYW5hIFRpbWUKCQkJLTM6MDAJLQlHRlQKCiMgR3V5YW5hCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZQlBbWVyaWNhL0d1eWFuYQktMzo1Mjo0MCAtCUxNVAkxOTE1IE1hcgkjIEdlb3JnZXRvd24KCQkJLTM6NDUJLQlHQkdUCTE5NjYgTWF5IDI2ICMgQnIgR3VpYW5hIFRpbWUKCQkJLTM6NDUJLQlHWVQJMTk3NSBKdWwgMzEgIyBHdXlhbmEgVGltZQoJCQktMzowMAktCUdZVAkxOTkxCiMgSUFUQSBTU0lNICgxOTk2LTA2KSBzYXlzIC00OjAwLiAgQXNzdW1lIGEgMTk5MSBzd2l0Y2guCgkJCS00OjAwCS0JR1lUCgojIFBhcmFndWF5CiMgRnJvbSBQYXVsIEVnZ2VydCAoMjAwNi0wMy0yMik6CiMgU2hhbmtzICYgUG90dGVuZ2VyIHNheSB0aGF0IHNwcmluZyB0cmFuc2l0aW9ucyBhcmUgZnJvbSAwMTowMCAtPiAwMjowMCwKIyBhbmQgYXV0dW1uIHRyYW5zaXRpb25zIGFyZSBmcm9tIDAwOjAwIC0+IDIzOjAwLiAgR28gd2l0aCBwcmUtMTk5OQojIGVkaXRpb25zIG9mIFNoYW5rcywgYW5kIHdpdGggdGhlIElBVEEsIHdobyBzYXkgdHJhbnNpdGlvbnMgb2NjdXIgYXQgMDA6MDAuCiMgUnVsZQlOQU1FCUZST00JVE8JVFlQRQlJTglPTglBVAlTQVZFCUxFVFRFUi9TClJ1bGUJUGFyYQkxOTc1CTE5ODgJLQlPY3QJIDEJMDowMAkxOjAwCVMKUnVsZQlQYXJhCTE5NzUJMTk3OAktCU1hcgkgMQkwOjAwCTAJLQpSdWxlCVBhcmEJMTk3OQkxOTkxCS0JQXByCSAxCTA6MDAJMAktClJ1bGUJUGFyYQkxOTg5CW9ubHkJLQlPY3QJMjIJMDowMAkxOjAwCVMKUnVsZQlQYXJhCTE5OTAJb25seQktCU9jdAkgMQkwOjAwCTE6MDAJUwpSdWxlCVBhcmEJMTk5MQlvbmx5CS0JT2N0CSA2CTA6MDAJMTowMAlTClJ1bGUJUGFyYQkxOTkyCW9ubHkJLQlNYXIJIDEJMDowMAkwCS0KUnVsZQlQYXJhCTE5OTIJb25seQktCU9jdAkgNQkwOjAwCTE6MDAJUwpSdWxlCVBhcmEJMTk5Mwlvbmx5CS0JTWFyCTMxCTA6MDAJMAktClJ1bGUJUGFyYQkxOTkzCTE5OTUJLQlPY3QJIDEJMDowMAkxOjAwCVMKUnVsZQlQYXJhCTE5OTQJMTk5NQktCUZlYglsYXN0U3VuCTA6MDAJMAktClJ1bGUJUGFyYQkxOTk2CW9ubHkJLQlNYXIJIDEJMDowMAkwCS0KIyBJQVRBIFNTSU0gKDIwMDAtMDIpIHNheXMgMTk5OS0xMC0xMDsgaWdub3JlIHRoaXMgZm9yIG5vdy4KIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwMC0xMC0wMik6CiMgSSBoYXZlIHRocmVlIGluZGVwZW5kZW50IHJlcG9ydHMgdGhhdCBQYXJhZ3VheSBjaGFuZ2VkIHRvIERTVCB0aGlzIFN1bmRheQojICgxMC0wMSkuCiMKIyBUcmFuc2xhdGVkIGJ5IEd3aWxsaW0gTGF3ICgyMDAxLTAyLTI3KSBmcm9tCiMgPGEgaHJlZj0iaHR0cDovL3d3dy5kaWFyaW9ub3RpY2lhcy5jb20ucHkvMDExMDAwL25hY2lvbmFsL25hY2lvbmExLmh0bSI+CiMgTm90aWNpYXMsIGEgZGFpbHkgcGFwZXIgaW4gQXN1bmNpb24sIFBhcmFndWF5ICgyMDAwLTEwLTAxKQojIDwvYT46CiMgU3RhcnRpbmcgYXQgMDowMCB0b2RheSwgdGhlIGNsb2NrIHdpbGwgYmUgc2V0IGZvcndhcmQgNjAgbWludXRlcywgaW4KIyBmdWxmaWxsbWVudCBvZiBEZWNyZWUgTm8uIDcsMjczIG9mIHRoZSBFeGVjdXRpdmUgUG93ZXIuLi4uICBUaGUgdGltZSBjaGFuZ2UKIyBzeXN0ZW0gaGFzIGJlZW4gb3BlcmF0aW5nIGZvciBzZXZlcmFsIHllYXJzLiAgRm9ybWVybHkgdGhlcmUgd2FzIGEgc2VwYXJhdGUKIyBkZWNyZWUgZWFjaCB5ZWFyOyB0aGUgbmV3IGxhdyBoYXMgdGhlIHNhbWUgZWZmZWN0LCBidXQgcGVybWFuZW50bHkuICBFdmVyeQojIHllYXIsIHRoZSB0aW1lIHdpbGwgY2hhbmdlIG9uIHRoZSBmaXJzdCBTdW5kYXkgb2YgT2N0b2JlcjsgbGlrZXdpc2UsIHRoZQojIGNsb2NrIHdpbGwgYmUgc2V0IGJhY2sgb24gdGhlIGZpcnN0IFN1bmRheSBvZiBNYXJjaC4KIwpSdWxlCVBhcmEJMTk5NgkyMDAxCS0JT2N0CVN1bj49MQkwOjAwCTE6MDAJUwojIElBVEEgU1NJTSAoMTk5Ny0wOSkgc2F5cyBNYXIgMTsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuClJ1bGUJUGFyYQkxOTk3CW9ubHkJLQlGZWIJbGFzdFN1bgkwOjAwCTAJLQojIFNoYW5rcyAmIFBvdHRlbmdlciBzYXkgMTk5OS0wMi0yODsgSUFUQSBTU0lNICgxOTk5LTAyKSBzYXlzIDE5OTktMDItMjcsIGJ1dAojICgxOTk5LTA5KSByZXBvcnRzIG5vIGRhdGU7IGdvIHdpdGggYWJvdmUgc291cmNlcyBhbmQgR2VyZCBLbm9wcyAoMjAwMS0wMi0yNykuClJ1bGUJUGFyYQkxOTk4CTIwMDEJLQlNYXIJU3VuPj0xCTA6MDAJMAktCiMgRnJvbSBSaXZlcyBNY0RvdyAoMjAwMi0wMi0yOCk6CiMgQSBkZWNyZWUgd2FzIGlzc3VlZCBpbiBQYXJhZ3VheSAobm8uIDE2MzUwKSBvbiAyMDAyLTAyLTI2IHRoYXQgY2hhbmdlZCB0aGUKIyBkc3QgbWV0aG9kIHRvIGJlIGZyb20gdGhlIGZpcnN0IFN1bmRheSBpbiBTZXB0ZW1iZXIgdG8gdGhlIGZpcnN0IFN1bmRheSBpbgojIEFwcmlsLgpSdWxlCVBhcmEJMjAwMgkyMDA0CS0JQXByCVN1bj49MQkwOjAwCTAJLQpSdWxlCVBhcmEJMjAwMgkyMDAzCS0JU2VwCVN1bj49MQkwOjAwCTE6MDAJUwojCiMgRnJvbSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDUtMDEtMDIpOgojIFRoZXJlIGFyZSBzZXZlcmFsIHNvdXJjZXMgdGhhdCBjbGFpbSB0aGF0IFBhcmFndWF5IG1hZGUKIyBhIHRpbWV6b25lIHJ1bGUgY2hhbmdlIGluIGF1dHVtbiAyMDA0LgojIEZyb20gU3RlZmZlbiBUaG9yc2VuICgyMDA1LTAxLTA1KToKIyBEZWNyZWUgMSw4NjcgKDIwMDQtMDMtMDUpCiMgRnJvbSBDYXJsb3MgUmF1bCBQZXJhc3NvIHZpYSBKZXNwZXIgTm9yZ2FhcmQgV2VsZW4gKDIwMDYtMTAtMTMpCiMgPGh0dHA6Ly93d3cucHJlc2lkZW5jaWEuZ292LnB5L2RlY3JldG9zL0QxODY3LnBkZj4KUnVsZQlQYXJhCTIwMDQJMjAwOQktCU9jdAlTdW4+PTE1CTA6MDAJMTowMAlTClJ1bGUJUGFyYQkyMDA1CTIwMDkJLQlNYXIJU3VuPj04CTA6MDAJMAktCiMgRnJvbSBDYXJsb3MgUmF1bCBQZXJhc3NvICgyMDEwLTAyLTE4KToKIyBCeSBkZWNyZWUgbnVtYmVyIDM5NTggaXNzdWVkIHllc3RlcmRheSAoCiMgPGEgaHJlZj0iaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5nb3YucHkvdjEvd3AtY29udGVudC91cGxvYWRzLzIwMTAvMDIvZGVjcmV0bzM5NTgucGRmIj4KIyBodHRwOi8vd3d3LnByZXNpZGVuY2lhLmdvdi5weS92MS93cC1jb250ZW50L3VwbG9hZHMvMjAxMC8wMi9kZWNyZXRvMzk1OC5wZGYKIyA8L2E+CiMgKQojIFBhcmFndWF5IGNoYW5nZXMgaXRzIERTVCBzY2hlZHVsZSwgcG9zdHBvbmluZyB0aGUgTWFyY2ggcnVsZSB0byBBcHJpbCBhbmQKIyBtb2RpZnlpbmcgdGhlIE9jdG9iZXIgZGF0ZS4gVGhlIGRlY3JlZSByZWFkczoKIyAuLi4KIyBBcnQuIDEuIEl0IGlzIGhlcmVieSBlc3RhYmxpc2hlZCB0aGF0IGZyb20gdGhlIHNlY29uZCBTdW5kYXkgb2YgdGhlIG1vbnRoIG9mCiMgQXByaWwgb2YgdGhpcyB5ZWFyICgyMDEwKSwgdGhlIG9mZmljaWFsIHRpbWUgaXMgdG8gYmUgc2V0IGJhY2sgNjAgbWludXRlcywKIyBhbmQgdGhhdCBvbiB0aGUgZmlyc3QgU3VuZGF5IG9mIHRoZSBtb250aCBvZiBPY3RvYmVyLCBpdCBpcyB0byBiZSBzZXQKIyBmb3J3YXJkIDYwIG1pbnV0ZXMsIGluIGFsbCB0aGUgdGVycml0b3J5IG9mIHRoZSBQYXJhZ3VheWFuIFJlcHVibGljLgojIC4uLgpSdWxlCVBhcmEJMjAxMAltYXgJLQlPY3QJU3VuPj0xCTA6MDAJMTowMAlTClJ1bGUJUGFyYQkyMDEwCW1heAktCUFwcglTdW4+PTgJMDowMAkwCS0KCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZSBBbWVyaWNhL0FzdW5jaW9uCS0zOjUwOjQwIC0JTE1UCTE4OTAKCQkJLTM6NTA6NDAgLQlBTVQJMTkzMSBPY3QgMTAgIyBBc3VuY2lvbiBNZWFuIFRpbWUKCQkJLTQ6MDAJLQlQWVQJMTk3MiBPY3QgIyBQYXJhZ3VheSBUaW1lCgkJCS0zOjAwCS0JUFlUCTE5NzQgQXByCgkJCS00OjAwCVBhcmEJUFklc1QKCiMgUGVydQojCiMgPGEgaHJlZj0ibmV3czp4ckdtYi4zOTkzNSRnQTEuMTM4OTYxMTNAbmV3czQuc3J2LmhjdmxueS5jdi5uZXQiPgojIEZyb20gRXZlbHluIEMuIExlZXBlciB2aWEgTWFyayBCcmFkZXIgKDIwMDMtMTAtMjYpOjwvYT4KIyBXaGVuIHdlIHdlcmUgaW4gUGVydSBpbiAxOTg1LTE5ODYsIHRoZXkgYXBwYXJlbnRseSBzd2l0Y2hlZCBvdmVyCiMgc29tZXRpbWUgYmV0d2VlbiBEZWNlbWJlciAyOSBhbmQgSmFudWFyeSAzIHdoaWxlIHdlIHdlcmUgb24gdGhlIEFtYXpvbi4KIwojIEZyb20gUGF1bCBFZ2dlcnQgKDIwMDYtMDMtMjIpOgojIFNoYW5rcyAmIFBvdHRlbmdlciBkb24ndCBoYXZlIHRoaXMgdHJhbnNpdGlvbi4gIEFzc3VtZSAxOTg2IHdhcyBsaWtlIDE5ODcuCgojIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUwpSdWxlCVBlcnUJMTkzOAlvbmx5CS0JSmFuCSAxCTA6MDAJMTowMAlTClJ1bGUJUGVydQkxOTM4CW9ubHkJLQlBcHIJIDEJMDowMAkwCS0KUnVsZQlQZXJ1CTE5MzgJMTkzOQktCVNlcAlsYXN0U3VuCTA6MDAJMTowMAlTClJ1bGUJUGVydQkxOTM5CTE5NDAJLQlNYXIJU3VuPj0yNAkwOjAwCTAJLQpSdWxlCVBlcnUJMTk4NgkxOTg3CS0JSmFuCSAxCTA6MDAJMTowMAlTClJ1bGUJUGVydQkxOTg2CTE5ODcJLQlBcHIJIDEJMDowMAkwCS0KUnVsZQlQZXJ1CTE5OTAJb25seQktCUphbgkgMQkwOjAwCTE6MDAJUwpSdWxlCVBlcnUJMTk5MAlvbmx5CS0JQXByCSAxCTA6MDAJMAktCiMgSUFUQSBpcyBhbWJpZ3VvdXMgZm9yIDE5OTMvMTk5NTsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuClJ1bGUJUGVydQkxOTk0CW9ubHkJLQlKYW4JIDEJMDowMAkxOjAwCVMKUnVsZQlQZXJ1CTE5OTQJb25seQktCUFwcgkgMQkwOjAwCTAJLQojIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdClpvbmUJQW1lcmljYS9MaW1hCS01OjA4OjEyIC0JTE1UCTE4OTAKCQkJLTU6MDg6MzYgLQlMTVQJMTkwOCBKdWwgMjggIyBMaW1hIE1lYW4gVGltZT8KCQkJLTU6MDAJUGVydQlQRSVzVAkjIFBlcnUgVGltZQoKIyBTb3V0aCBHZW9yZ2lhCiMgWm9uZQlOQU1FCQlHTVRPRkYJUlVMRVMJRk9STUFUCVtVTlRJTF0KWm9uZSBBdGxhbnRpYy9Tb3V0aF9HZW9yZ2lhIC0yOjI2OjA4IC0JTE1UCTE4OTAJCSMgR3J5dHZpa2VuCgkJCS0yOjAwCS0JR1NUCSMgU291dGggR2VvcmdpYSBUaW1lCgojIFNvdXRoIFNhbmR3aWNoIElzCiMgdW5pbmhhYml0ZWQ7IHNjaWVudGlmaWMgcGVyc29ubmVsIGhhdmUgd2ludGVyZWQKCiMgU3VyaW5hbWUKIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQpab25lIEFtZXJpY2EvUGFyYW1hcmlibwktMzo0MDo0MCAtCUxNVAkxOTExCgkJCS0zOjQwOjUyIC0JUE1UCTE5MzUgICAgICMgUGFyYW1hcmlibyBNZWFuIFRpbWUKCQkJLTM6NDA6MzYgLQlQTVQJMTk0NSBPY3QgIyBUaGUgY2FwaXRhbCBtb3ZlZD8KCQkJLTM6MzAJLQlORUdUCTE5NzUgTm92IDIwICMgRHV0Y2ggR3VpYW5hIFRpbWUKCQkJLTM6MzAJLQlTUlQJMTk4NCBPY3QgIyBTdXJpbmFtZSBUaW1lCgkJCS0zOjAwCS0JU1JUCgojIFRyaW5pZGFkIGFuZCBUb2JhZ28KIyBab25lCU5BTUUJCUdNVE9GRglSVUxFUwlGT1JNQVQJW1VOVElMXQpab25lIEFtZXJpY2EvUG9ydF9vZl9TcGFpbiAtNDowNjowNCAtCUxNVAkxOTEyIE1hciAyCgkJCS00OjAwCS0JQVNUCgojIFVydWd1YXkKIyBGcm9tIFBhdWwgRWdnZXJ0ICgxOTkzLTExLTE4KToKIyBVcnVndWF5IHdpbnMgdGhlIHByaXplIGZvciB0aGUgc3RyYW5nZXN0IHBlYWNldGltZSBtYW5pcHVsYXRpb24gb2YgdGhlIHJ1bGVzLgojIEZyb20gU2hhbmtzICYgUG90dGVuZ2VyOgojIFJ1bGUJTkFNRQlGUk9NCVRPCVRZUEUJSU4JT04JQVQJU0FWRQlMRVRURVIvUwojIFdoaXRtYW4gZ2l2ZXMgMTkyMyBPY3QgMTsgZ28gd2l0aCBTaGFua3MgJiBQb3R0ZW5nZXIuClJ1bGUJVXJ1Z3VheQkxOTIzCW9ubHkJLQlPY3QJIDIJIDA6MDAJMDozMAlIUwpSdWxlCVVydWd1YXkJMTkyNAkxOTI2CS0JQXByCSAxCSAwOjAwCTAJLQpSdWxlCVVydWd1YXkJMTkyNAkxOTI1CS0JT2N0CSAxCSAwOjAwCTA6MzAJSFMKUnVsZQlVcnVndWF5CTE5MzMJMTkzNQktCU9jdAlsYXN0U3VuCSAwOjAwCTA6MzAJSFMKIyBTaGFua3MgJiBQb3R0ZW5nZXIgZ2l2ZSAxOTM1IEFwciAxIDA6MDAgJiAxOTM2IE1hciAzMCAwOjAwOyBnbyB3aXRoIFdoaXRtYW4uClJ1bGUJVXJ1Z3VheQkxOTM0CTE5MzYJLQlNYXIJU2F0Pj0yNQkyMzozMHMJMAktClJ1bGUJVXJ1Z3VheQkxOTM2CW9ubHkJLQlOb3YJIDEJIDA6MDAJMDozMAlIUwpSdWxlCVVydWd1YXkJMTkzNwkxOTQxCS0JTWFyCWxhc3RTdW4JIDA6MDAJMAktCiMgV2hpdG1hbiBnaXZlcyAxOTM3IE9jdCAzOyBnbyB3aXRoIFNoYW5rcyAmIFBvdHRlbmdlci4KUnVsZQlVcnVndWF5CTE5MzcJMTk0MAktCU9jdAlsYXN0U3VuCSAwOjAwCTA6MzAJSFMKIyBXaGl0bWFuIGdpdmVzIDE5NDEgT2N0IDI0IC0gMTk0MiBNYXIgMjcsIDE5NDIgRGVjIDE0IC0gMTk0MyBBcHIgMTMsCiMgYW5kIDE5NDMgQXByIDEzIGBgdG8gcHJlc2VudCB0aW1lJyc7IGdvIHdpdGggU2hhbmtzICYgUG90dGVuZ2VyLgpSdWxlCVVydWd1YXkJMTk0MQlvbmx5CS0JQXVnCSAxCSAwOjAwCTA6MzAJSFMKUnVsZQlVcnVndWF5CTE5NDIJb25seQktCUphbgkgMQkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5NDIJb25seQktCURlYwkxNAkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5NDMJb25seQktCU1hcgkxNAkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5NTkJb25seQktCU1heQkyNAkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5NTkJb25seQktCU5vdgkxNQkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5NjAJb25seQktCUphbgkxNwkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5NjAJb25seQktCU1hcgkgNgkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5NjUJMTk2NwktCUFwcglTdW4+PTEJIDA6MDAJMTowMAlTClJ1bGUJVXJ1Z3VheQkxOTY1CW9ubHkJLQlTZXAJMjYJIDA6MDAJMAktClJ1bGUJVXJ1Z3VheQkxOTY2CTE5NjcJLQlPY3QJMzEJIDA6MDAJMAktClJ1bGUJVXJ1Z3VheQkxOTY4CTE5NzAJLQlNYXkJMjcJIDA6MDAJMDozMAlIUwpSdWxlCVVydWd1YXkJMTk2OAkxOTcwCS0JRGVjCSAyCSAwOjAwCTAJLQpSdWxlCVVydWd1YXkJMTk3Mglvbmx5CS0JQXByCTI0CSAwOjAwCTE6MDAJUwpSdWxlCVVydWd1YXkJMTk3Mglvbmx5CS0JQXVnCTE1CSAwOjAwCTAJLQpSdWxlCVVydWd1YXkJMTk3NAlvbmx5CS0JTWFyCTEwCSAwOjAwCTA6MzAJSFMKUnVsZQlVcnVndWF5CTE5NzQJb25seQktCURlYwkyMgkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5NzYJb25seQktCU9jdAkgMQkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5NzcJb25seQktCURlYwkgNAkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5NzgJb25seQktCUFwcgkgMQkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5NzkJb25seQktCU9jdAkgMQkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5ODAJb25seQktCU1heQkgMQkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5ODcJb25seQktCURlYwkxNAkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5ODgJb25seQktCU1hcgkxNAkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5ODgJb25seQktCURlYwkxMQkgMDowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTE5ODkJb25seQktCU1hcgkxMgkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5ODkJb25seQktCU9jdAkyOQkgMDowMAkxOjAwCVMKIyBTaGFua3MgJiBQb3R0ZW5nZXIgc2F5IG5vIERTVCB3YXMgb2JzZXJ2ZWQgaW4gMTk5MC8xIGFuZCAxOTkxLzIsCiMgYW5kIHRoYXQgMTk5Mi8zJ3MgRFNUIHdhcyBmcm9tIDEwLTI1IHRvIDAzLTAxLiAgR28gd2l0aCBJQVRBLgpSdWxlCVVydWd1YXkJMTk5MAkxOTkyCS0JTWFyCVN1bj49MQkgMDowMAkwCS0KUnVsZQlVcnVndWF5CTE5OTAJMTk5MQktCU9jdAlTdW4+PTIxCSAwOjAwCTE6MDAJUwpSdWxlCVVydWd1YXkJMTk5Mglvbmx5CS0JT2N0CTE4CSAwOjAwCTE6MDAJUwpSdWxlCVVydWd1YXkJMTk5Mwlvbmx5CS0JRmViCTI4CSAwOjAwCTAJLQojIEZyb20gRWR1YXJkbyBDb3RhICgyMDA0LTA5LTIwKToKIyBUaGUgdXJ1Z3VheWFuIGdvdmVybm1lbnQgaGFzIGRlY3JlZWQgYSBjaGFuZ2UgaW4gdGhlIGxvY2FsIHRpbWUuLi4uCiMgaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5ndWIudXkvZGVjcmV0b3MvMjAwNDA5MTUwMi5odG0KUnVsZQlVcnVndWF5CTIwMDQJb25seQktCVNlcAkxOQkgMDowMAkxOjAwCVMKIyBGcm9tIFN0ZWZmZW4gVGhvcnNlbiAoMjAwNS0wMy0xMSk6CiMgVXJ1Z3VheSdzIERTVCB3YXMgc2NoZWR1bGVkIHRvIGVuZCBvbiBTdW5kYXksIDIwMDUtMDMtMTMsIGJ1dCBpbiBvcmRlciB0bwojIHNhdmUgZW5lcmd5IC4uLiBpdCB3YXMgcG9zdHBvbmVkIHR3byB3ZWVrcy4uLi4KIyBodHRwOi8vd3d3LnByZXNpZGVuY2lhLmd1Yi51eS9fV2ViL25vdGljaWFzLzIwMDUvMDMvMjAwNTAzMTAwNS5odG0KUnVsZQlVcnVndWF5CTIwMDUJb25seQktCU1hcgkyNwkgMjowMAkwCS0KIyBGcm9tIEVkdWFyZG8gQ290YSAoMjAwNS0wOS0yNyk6CiMgaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5ndWIudXkvX1dlYi9kZWNyZXRvcy8yMDA1LzA5L0NNJTIwMTE5XzA5JTIwMDklMjAyMDA1XzAwMDAxLlBERgojIFRoaXMgbWVhbnMgdGhhdCBmcm9tIDIwMDUtMTAtMDkgYXQgMDI6MDAgbG9jYWwgdGltZSwgdW50aWwgMjAwNi0wMy0xMiBhdAojIDAyOjAwIGxvY2FsIHRpbWUsIG9mZmljaWFsIHRpbWUgaW4gVXJ1Z3VheSB3aWxsIGJlIGF0IEdNVCAtMi4KUnVsZQlVcnVndWF5CTIwMDUJb25seQktCU9jdAkgOQkgMjowMAkxOjAwCVMKUnVsZQlVcnVndWF5CTIwMDYJb25seQktCU1hcgkxMgkgMjowMAkwCS0KIyBGcm9tIEplc3BlciBOb3JnYWFyZCBXZWxlbiAoMjAwNi0wOS0wNik6CiMgaHR0cDovL3d3dy5wcmVzaWRlbmNpYS5ndWIudXkvX3dlYi9kZWNyZXRvcy8yMDA2LzA5L0NNJTIwMjEwXzA4JTIwMDYlMjAyMDA2XzAwMDAxLlBERgpSdWxlCVVydWd1YXkJMjAwNgltYXgJLQlPY3QJU3VuPj0xCSAyOjAwCTE6MDAJUwpSdWxlCVVydWd1YXkJMjAwNwltYXgJLQlNYXIJU3VuPj04CSAyOjAwCTAJLQojIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdClpvbmUgQW1lcmljYS9Nb250ZXZpZGVvCS0zOjQ0OjQ0IC0JTE1UCTE4OTggSnVuIDI4CgkJCS0zOjQ0OjQ0IC0JTU1UCTE5MjAgTWF5ICAxCSMgTW9udGV2aWRlbyBNVAoJCQktMzozMAlVcnVndWF5CVVZJXNUCTE5NDIgRGVjIDE0CSMgVXJ1Z3VheSBUaW1lCgkJCS0zOjAwCVVydWd1YXkJVVklc1QKCiMgVmVuZXp1ZWxhCiMKIyBGcm9tIEpvaG4gU3RhaW5mb3J0aCAoMjAwNy0xMS0yOCk6CiMgLi4uIHRoZSBjaGFuZ2UgZm9yIFZlbmV6dWVsYSBvcmlnaW5hbGx5IGV4cGVjdGVkIGZvciAyMDA3LTEyLTMxIGhhcwojIGJlZW4gYnJvdWdodCBmb3J3YXJkIHRvIDIwMDctMTItMDkuICBUaGUgb2ZmaWNpYWwgYW5ub3VuY2VtZW50IHdhcwojIHB1Ymxpc2hlZCB0b2RheSBpbiB0aGUgIkdhY2V0YSBPZmljaWFsIGRlIGxhIFJlcHVibGljYSBCb2xpdmFyaWFuYQojIGRlIFZlbmV6dWVsYSwgbnVtZXJvIDM4LjgxOSIgKG9mZmljaWFsIGRvY3VtZW50IGZvciBhbGwgbGF3cyBvcgojIHJlc29sdXRpb24gcHVibGljYXRpb24pCiMgaHR0cDovL3d3dy5nbG9ib3Zpc2lvbi5jb20vbmV3cy5waHA/bmlkPTcyMjA4CgojIFpvbmUJTkFNRQkJR01UT0ZGCVJVTEVTCUZPUk1BVAlbVU5USUxdClpvbmUJQW1lcmljYS9DYXJhY2FzCS00OjI3OjQ0IC0JTE1UCTE4OTAKCQkJLTQ6Mjc6NDAgLQlDTVQJMTkxMiBGZWIgMTIgIyBDYXJhY2FzIE1lYW4gVGltZT8KCQkJLTQ6MzAJLQlWRVQJMTk2NQkgICAgICMgVmVuZXp1ZWxhIFRpbWUKCQkJLTQ6MDAJLQlWRVQJMjAwNyBEZWMgIDkgMDM6MDAKCQkJLTQ6MzAJLQlWRVQK