LyogcHJlcGFyZV9wcm90b2NvbC5oIC0gdGhlIHByb3RvY29sIGZvciBwcmVwYXJpbmcgdmFsdWVzIGZvciBTUUxpdGUKICoKICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICoKICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwogKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgogKgogKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAogKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CiAqCiAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CiAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCiAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQogKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgogKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQogKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCiAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAqLwoKI2lmbmRlZiBQWVNRTElURV9QUkVQQVJFX1BST1RPQ09MX0gKI2RlZmluZSBQWVNRTElURV9QUkVQQVJFX1BST1RPQ09MX0gKI2luY2x1ZGUgIlB5dGhvbi5oIgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgUHlPYmplY3RfSEVBRAp9IHB5c3FsaXRlX1ByZXBhcmVQcm90b2NvbDsKCmV4dGVybiBQeVR5cGVPYmplY3QgcHlzcWxpdGVfUHJlcGFyZVByb3RvY29sVHlwZTsKCmludCBweXNxbGl0ZV9wcmVwYXJlX3Byb3RvY29sX2luaXQocHlzcWxpdGVfUHJlcGFyZVByb3RvY29sKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncyk7CnZvaWQgcHlzcWxpdGVfcHJlcGFyZV9wcm90b2NvbF9kZWFsbG9jKHB5c3FsaXRlX1ByZXBhcmVQcm90b2NvbCogc2VsZik7CgppbnQgcHlzcWxpdGVfcHJlcGFyZV9wcm90b2NvbF9zZXR1cF90eXBlcyh2b2lkKTsKCiNkZWZpbmUgVU5LTk9XTiAoLTEpCiNlbmRpZgo=