IyBMb2NhbGUgbmFtZSBhbGlhcyBkYXRhIGJhc2UuCiMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsMjAwMywyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KCiMgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgb2YKIyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB3aGljaCBub3JtYWxseSBjYW4gYmUgZm91bmQgaW4KIwkvdXNyL2xpYi9YMTEvbG9jYWxlL2xvY2FsZS5hbGlhcwojIEEgc2luZ2xlIGxpbmUgY29udGFpbnMgdHdvIGZpZWxkczogYW4gYWxpYXMgYW5kIGEgc3Vic3RpdHV0aW9uIHZhbHVlLgojIEFsbCBlbnRyaWVzIGFyZSBjYXNlIGluZGVwZW5kZW50LgoKIyBOb3RlOiBUaGlzIGZpbGUgaXMgb2Jzb2xldGUgYW5kIGlzIGtlcHQgYXJvdW5kIGZvciB0aGUgdGltZSBiZWluZyBmb3IKIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgTm9ib2R5IHNob3VsZCByZWx5IG9uIHRoZSBuYW1lcyBkZWZpbmVkIGhlcmUuCiMgTG9jYWxlcyBzaG91bGQgYWx3YXlzIGJlIHNwZWNpZmllZCBieSB0aGVpciBmdWxsIG5hbWUuCgpib2ttYWwJCW5iX05PLklTTy04ODU5LTEKYm9rbeVsCQluYl9OTy5JU08tODg1OS0xCmNhdGFsYW4JCWNhX0VTLklTTy04ODU5LTEKY3JvYXRpYW4JaHJfSFIuSVNPLTg4NTktMgpjemVjaAkJY3NfQ1ouSVNPLTg4NTktMgpkYW5pc2ggICAgICAgICAgZGFfREsuSVNPLTg4NTktMQpkYW5zawkJZGFfREsuSVNPLTg4NTktMQpkZXV0c2NoCQlkZV9ERS5JU08tODg1OS0xCmR1dGNoCQlubF9OTC5JU08tODg1OS0xCmVlc3RpCQlldF9FRS5JU08tODg1OS0xCmVzdG9uaWFuCWV0X0VFLklTTy04ODU5LTEKZmlubmlzaCAgICAgICAgIGZpX0ZJLklTTy04ODU5LTEKZnJhbudhaXMJZnJfRlIuSVNPLTg4NTktMQpmcmVuY2gJCWZyX0ZSLklTTy04ODU5LTEKZ2FsZWdvCQlnbF9FUy5JU08tODg1OS0xCmdhbGljaWFuCWdsX0VTLklTTy04ODU5LTEKZ2VybWFuCQlkZV9ERS5JU08tODg1OS0xCmdyZWVrICAgICAgICAgICBlbF9HUi5JU08tODg1OS03CmhlYnJldyAgICAgICAgICBoZV9JTC5JU08tODg1OS04CmhydmF0c2tpCWhyX0hSLklTTy04ODU5LTIKaHVuZ2FyaWFuICAgICAgIGh1X0hVLklTTy04ODU5LTIKaWNlbGFuZGljICAgICAgIGlzX0lTLklTTy04ODU5LTEKaXRhbGlhbiAgICAgICAgIGl0X0lULklTTy04ODU5LTEKamFwYW5lc2UJamFfSlAuZXVjSlAKamFwYW5lc2UuZXVjCWphX0pQLmV1Y0pQCmphX0pQCQlqYV9KUC5ldWNKUApqYV9KUC51amlzCWphX0pQLmV1Y0pQCmphcGFuZXNlLnNqaXMJamFfSlAuU0pJUwprb3JlYW4JCWtvX0tSLmV1Y0tSCmtvcmVhbi5ldWMgCWtvX0tSLmV1Y0tSCmtvX0tSCQlrb19LUi5ldWNLUgpsaXRodWFuaWFuICAgICAgbHRfTFQuSVNPLTg4NTktMTMKbm9fTk8JCW5iX05PLklTTy04ODU5LTEKbm9fTk8uSVNPLTg4NTktMSBuYl9OTy5JU08tODg1OS0xCm5vcndlZ2lhbiAgICAgICBuYl9OTy5JU08tODg1OS0xCm55bm9yc2sJCW5uX05PLklTTy04ODU5LTEKcG9saXNoICAgICAgICAgIHBsX1BMLklTTy04ODU5LTIKcG9ydHVndWVzZSAgICAgIHB0X1BULklTTy04ODU5LTEKcm9tYW5pYW4gICAgICAgIHJvX1JPLklTTy04ODU5LTIKcnVzc2lhbiAgICAgICAgIHJ1X1JVLklTTy04ODU5LTUKc2xvdmFrICAgICAgICAgIHNrX1NLLklTTy04ODU5LTIKc2xvdmVuZSAgICAgICAgIHNsX1NJLklTTy04ODU5LTIKc2xvdmVuaWFuICAgICAgIHNsX1NJLklTTy04ODU5LTIKc3BhbmlzaCAgICAgICAgIGVzX0VTLklTTy04ODU5LTEKc3dlZGlzaCAgICAgICAgIHN2X1NFLklTTy04ODU5LTEKdGhhaQkJdGhfVEguVElTLTYyMAp0dXJraXNoICAgICAgICAgdHJfVFIuSVNPLTg4NTktOQo=