IyBqbmRuLXV0aWxzCgpUaGlzIHByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIHRvIHNpbXBsaWZ5IHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlciBvdmVyIHRoZSBORE4gbmV0d29yay4gSXQgcmVsaWVzIG9uIHRoZSBbTkROIFByb3RvY29sXShodHRwczovL25hbWVkLWRhdGEubmV0KSBhbmQgaXRzIGFzc29jaWF0ZWQgW2NsaWVudCBsaWJyYXJ5XShodHRwczovL2dpdGh1Yi5jb20vbmFtZWQtZGF0YS9qbmRuKS4KCiMjIEluc3RhbGwKV2l0aCBNYXZlbiwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciBQT006CmBgYAo8ZGVwZW5kZW5jeT4KICA8Z3JvdXBJZD5jb20uaW50ZWwuam5kbi51dGlsczwvZ3JvdXBJZD4KICA8YXJ0aWZhY3RJZD5qbmRuLXV0aWxzPC9hcnRpZmFjdElkPgogIDx2ZXJzaW9uPlJFTEVBU0U8L3ZlcnNpb24+IDwhLS0gb3IgYSBzcGVjaWZpYyB2ZXJzaW9uIC0tPgo8L2RlcGVuZGVuY3k+CmBgYAoKIyMgVXNlClVzZSBgQ2xpZW50YCBvciBgU2VnbWVudGVkQ2xpZW50YCB0byByZXRyaWV2ZSBkYXRhIGZyb20gdGhlIG5ldHdvcmsuIEZvciBleGFtcGxlOgpgYGAKRGF0YSBkYXRhMSA9IENsaWVudC5nZXREZWZhdWx0KCkuZ2V0U3luYyhmYWNlLCBuYW1lKTsKRGF0YSBkYXRhMiA9IFNlZ21lbnRlZENsaWVudC5nZXREZWZhdWx0KCkuZ2V0U3luYyhmYWNlLCBuYW1lKTsKYGBgCgojIyBMaWNlbnNlCqkgQ29weXJpZ2h0IEludGVsIENvcnBvcmF0aW9uLiBMaWNlbnNlZCB1bmRlciBMR1BMdjMsIHNlZSBbTElDRU5TRV0oaHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL2puZG4tbW9jay9ibG9iL21hc3Rlci9MSUNFTlNFKS4K