Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBzYW1wbGVfbmV3X2ZlYXR1cmVzLmNwcCA6IGRlbW9uc3RyYXRlIGZlYXR1cmVzIGFkZGVkIHRvIHByaW50ZidzIHN5bnRheAovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyAgQ29weXJpZ2h0IFNhbXVlbCBLcmVtcHAgMjAwMy4gVXNlLCBtb2RpZmljYXRpb24sIGFuZCBkaXN0cmlidXRpb24gYXJlCi8vICBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLy8gIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQoKLy8gIFNlZSBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Zvcm1hdCBmb3IgbGlicmFyeSBob21lIHBhZ2UKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGlvbWFuaXA+CgojaW5jbHVkZSAiYm9vc3QvZm9ybWF0LmhwcCIKCmludCBtYWluKCl7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgdXNpbmcgYm9vc3Q6OmZvcm1hdDsKICAgIHVzaW5nIGJvb3N0Ojppbzo6Z3JvdXA7CgogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBTaW1wbGUgc3R5bGUgb2YgcmVvcmRlcmluZyA6CiAgICBjb3V0IDw8IGZvcm1hdCgiJTElICUyJSAlMyUgJTIlICUxJSBcbiIpICUgIm8iICUgIm9vIiAlICJPIjsKICAgIC8vICAgICAgICAgIHByaW50cyAgIm8gb28gTyBvbyBvIFxuIgoKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIENlbnRlcmVkIGFsaWdubWVudCA6IGZsYWcgJz0nCiAgICBjb3V0IDw8IGZvcm1hdCgiXyV8PTZ8XyIpICUgMSA8PCBlbmRsOwogICAgLy8gICAgICAgICAgcHJpbnRzICJfICAgMSAgXyIgIDogIDMgc3BhY2VzIGFyZSAgcGFkZGVkIGJlZm9yZSwgYW5kIDIgYWZ0ZXIuCgoKCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8vIFRhYnVsYXRpb25zIDogICAiJXxOdHwiICA9PiB0YWJ1bGF0aW9uIG9mIE4gc3BhY2VzLgogICAgLy8gICAgICAgICAgICAgICAgICIlfE5UZnwiID0+IHRhYnVsYXRpb24gb2YgTiB0aW1lcyB0aGUgY2hhcmFjdGVyIDxmPi4KICAgIC8vICBhcmUgdXNlZnVsIHdoZW4gcHJpbnRpbmcgbGluZXMgd2l0aCBzZXZlcmFsIGZpZWxkcyB3aG9zZSB3aWR0aCBjYW4gdmFyeSBhIGxvdAogICAgLy8gICAgYnV0IHdlJ2QgbGlrZSB0byBwcmludCBzb21lIGZpZWxkcyBhdCB0aGUgc2FtZSBwbGFjZSB3aGVuIHBvc3NpYmxlIDoKICAgIHZlY3RvcjxzdHJpbmc+ICBuYW1lcygxLCAiTWFyYy1GcmFu529pcyBNaWNoZWwiKSwgCiAgICAgIHN1cm5hbWUoMSwiRHVyYW5kIiksIAogICAgICB0ZWwoMSwgIiszMyAoMCkgMTIzIDQ1NiA3ODkiKTsKCiAgICBuYW1lcy5wdXNoX2JhY2soIkplYW4iKTsgCiAgICBzdXJuYW1lLnB1c2hfYmFjaygiZGUgTGF0dHJlIGRlIFRhc3NpZ255Iik7CiAgICB0ZWwucHVzaF9iYWNrKCIrMzMgKDApIDk4NyA2NTQgMzIxIik7CgogICAgZm9yKHVuc2lnbmVkIGludCBpPTA7IGk8bmFtZXMuc2l6ZSgpOyArK2kpCiAgICAgIGNvdXQgPDwgZm9ybWF0KCIlMSUsICUyJSwgJXw0MHR8JTMlXG4iKSAlIG5hbWVzW2ldICUgc3VybmFtZVtpXSAlIHRlbFtpXTsKCiAgICAvKiBwcmludHMgOgoKICAgICAgIAogICAgTWFyYy1GcmFu529pcyBNaWNoZWwsIER1cmFuZCwgICAgICAgKzMzICgwKSAxMjMgNDU2IDc4OQogICAgSmVhbiwgZGUgTGF0dHJlIGRlIFRhc3NpZ255LCAgICAgICAgKzMzICgwKSA5ODcgNjU0IDMyMQogICAgCiAgICAKICAgICB0aGUgc2FtZSB1c2luZyB3aWR0aCBvbiBlYWNoIGZpZWxkIGxlYWQgdG8gdW5uZWNlc3NhcnkgdG9vIGxvbmcgbGluZXMsCiAgICAgd2hpbGUgJ1RhYnVsYXRpb25zJyBpbnN1cmUgYSBsb3dlciBib3VuZCBvbiB0aGUgKnN1bSogb2Ygd2lkdGhzLAogICAgIGFuZCB0aGF0J3Mgb2Z0ZW4gd2hhdCB3ZSByZWFsbHkgd2FudC4KICAgICovCgoKCiAgICBjZXJyIDw8ICJcblxuRXZlcnl0aGluZyB3ZW50IE9LLCBleGl0aW5nLiBcbiI7CiAgICByZXR1cm4gMDsKfQo=