Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBGaWxlICAgOiAgc2l6ZV9saW5fbG9nLmhoCi8vIEF1dGhvciA6ICBMLiBQbGFnbmUgPGxhdXJlbnQucGxhZ25lQGVkZi5mcik+ICAgICAgICAKLy8gQ29weXJpZ2h0IChDKSBFREYgUiZELCAgbWFyIGTpYyAzIDE4OjU5OjM3IENFVCAyMDAyCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLy8gb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIAovLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQovLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQovLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQovLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLy8gCiNpZm5kZWYgU0laRV9MSU5fTE9HCiNkZWZpbmUgU0laRV9MSU5fTE9HCgojaW5jbHVkZSAic2l6ZV9sb2cuaGgiCgp0ZW1wbGF0ZTxjbGFzcyBWZWN0b3I+CnZvaWQgc2l6ZV9saW5fbG9nKGNvbnN0IGludCBuYl9wb2ludCwgY29uc3QgaW50IC8qc2l6ZV9taW4qLywgY29uc3QgaW50IHNpemVfbWF4LCBWZWN0b3IgJiBYKQp7CiAgaW50IHRlbj0xMDsKICBpbnQgbmluZT05OwoKICBYLnJlc2l6ZShuYl9wb2ludCk7CgogIGlmIChuYl9wb2ludD50ZW4pewoKICAgIGZvciAoaW50IGk9MDtpPG5pbmU7aSsrKXsKICAgICAgCiAgICAgIFhbaV09aSsxOwoKICAgIH0KCiAgICBWZWN0b3IgbG9nX3NpemU7CiAgICBzaXplX2xvZyhuYl9wb2ludC1uaW5lLHRlbixzaXplX21heCxsb2dfc2l6ZSk7CgogICAgZm9yIChpbnQgaT0wO2k8bmJfcG9pbnQtbmluZTtpKyspewogICAgICAKICAgICAgWFtpK25pbmVdPWxvZ19zaXplW2ldOwoKICAgIH0KICB9CiAgZWxzZXsKCiAgICBmb3IgKGludCBpPTA7aTxuYl9wb2ludDtpKyspewogICAgICAKICAgICAgWFtpXT1pKzE7CgogICAgfQogIH0KCiAvLyAgZm9yIChpbnQgaT0wO2k8bmJfcG9pbnQ7aSsrKXsKICAgIAovLyAgICAgICAgSU5GT1MoImNvbXB1dGVkIHNpemVzIDogWFsiPDxpPDwiXT0iPDxYW2ldKTsKICAgIAovLyAgIH0KCn0KICAKI2VuZGlmCiAgICAKCgo=