Ly8gIGNvbW1vbl90eXBlLmhwcCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KCi8vICBDb3B5cmlnaHQgMjAxMCBWaWNlbnRlIEouIEJvdGV0IEVzY3JpYmEKCi8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCi8vICBTZWUgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0CgojaWZuZGVmIE5ETkJPT1NUX1RZUEVfVFJBSVRTX0VYVF9ERUNMVkFMX19IUFAKI2RlZmluZSBORE5CT09TVF9UWVBFX1RSQUlUU19FWFRfREVDTFZBTF9fSFBQCgojaW5jbHVkZSA8bmRuYm9vc3QvY29uZmlnLmhwcD4KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgojaW5jbHVkZSA8bmRuYm9vc3QvdHlwZV90cmFpdHMvYWRkX3J2YWx1ZV9yZWZlcmVuY2UuaHBwPgovLyNpbmNsdWRlIDxuZG5ib29zdC90eXBlX3RyYWl0cy9hZGRfbHZhbHVlX3JlZmVyZW5jZS5ocHA+CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgIEMrKzAzIGltcGxlbWVudGF0aW9uIG9mICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBWaWNlbnRlIEouIEJvdGV0IEVzY3JpYmEgICAgICAgICAgICAgICAvLwovL34gMjAuMy40IEZ1bmN0aW9uIHRlbXBsYXRlIGRlY2x2YWwgW2RlY2x2YWxdCi8vfiAxIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZSBkZWNsdmFsIHRvIHNpbXBsaWZ5IHRoZSBkZWZpbml0aW9uIG9mIGV4cHJlc3Npb25zIHdoaWNoIG9jY3VyIGFzCi8vfiB1bmV2YWx1YXRlZCBvcGVyYW5kcy4KLy9+IDIgUmVtYXJrczogSWYgdGhpcyBmdW5jdGlvbiBpcyB1c2VkLCB0aGUgcHJvZ3JhbSBpcyBpbGwtZm9ybWVkLgovL34gMyBSZW1hcmtzOiBUaGUgdGVtcGxhdGUgcGFyYW1ldGVyIFQgb2YgZGVjbHZhbCBtYXkgYmUgYW4gaW5jb21wbGV0ZSB0eXBlLgovL34gWyBFeGFtcGxlOgoKLy9+IHRlbXBsYXRlIDxjbGFzcyBUbywgY2xhc3MgRnJvbT4KLy9+IGRlY2x0eXBlKHN0YXRpY19jYXN0PFRvPihkZWNsdmFsPEZyb20+KCkpKSBjb252ZXJ0KEZyb20mJik7CgovL34gZGVjbGFyZXMgYSBmdW5jdGlvbiB0ZW1wbGF0ZSBjb252ZXJ0IHdoaWNoIG9ubHkgcGFydGljaXBhdHMgaW4gb3ZlcmxvYWRpbmcgaWYgdGhlIHR5cGUgRnJvbSBjYW4gYmUKLy9+IGV4cGxpY2l0bHkgY29udmVydGVkIHRvIHR5cGUgVG8uIEZvciBhbm90aGVyIGV4YW1wbGUgc2VlIGNsYXNzIHRlbXBsYXRlIGNvbW1vbl90eXBlICgyMC43LjYuNikuIJdlbmQKLy9+IGV4YW1wbGUgXQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKbmFtZXNwYWNlIG5kbmJvb3N0IHsKCi8vI2lmICFkZWZpbmVkKE5ETkJPT1NUX05PX1JWQUxVRV9SRUZFUkVOQ0VTKQogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICB0eXBlbmFtZSBhZGRfcnZhbHVlX3JlZmVyZW5jZTxUPjo6dHlwZSBkZWNsdmFsKCkgTkROQk9PU1RfTk9FWENFUFQ7IC8vIGFzIHVuZXZhbHVhdGVkIG9wZXJhbmQKLy8jZWxzZQovLyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLy8gICAgdHlwZW5hbWUgYWRkX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnR5cGUgZGVjbHZhbCgpIE5ETkJPT1NUX05PRVhDRVBUOyAvLyBhcyB1bmV2YWx1YXRlZCBvcGVyYW5kCi8vI2VuZGlmCn0gIC8vIG5hbWVzcGFjZSBuZG5ib29zdAoKI2VuZGlmICAvLyBORE5CT09TVF9UWVBFX1RSQUlUU19FWFRfREVDTFZBTF9fSFBQCg==