IyBDb3B5cmlnaHQgMTk5OS0yMDEwIEdlbnRvbyBGb3VuZGF0aW9uCiMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgojICRIZWFkZXI6IC92YXIvY3Zzcm9vdC9nZW50b28teDg2L3N5cy1wb3dlci9wbS11dGlscy9wbS11dGlscy0xLjQuMS5lYnVpbGQsdiAxLjEwIDIwMTAvMTIvMTIgMTY6NTA6MTIgYXJtaW43NiBFeHAgJAoKRUFQST0yCmluaGVyaXQgbXVsdGlsaWIKCkRFU0NSSVBUSU9OPSJTdXNwZW5kIGFuZCBoaWJlcm5hdGlvbiB1dGlsaXRpZXMiCkhPTUVQQUdFPSJodHRwOi8vcG0tdXRpbHMuZnJlZWRlc2t0b3Aub3JnLyIKU1JDX1VSST0iaHR0cDovL3BtLXV0aWxzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke1B9LnRhci5neiIKCkxJQ0VOU0U9IkdQTC0yIgpTTE9UPSIwIgpLRVlXT1JEUz0iYWxwaGEgYW1kNjQgYXJtIGlhNjQgcHBjIHBwYzY0IHNwYXJjIHg4NiIKSVVTRT0iYWxzYSBkZWJ1ZyBuZXR3b3JrbWFuYWdlciBudHAgdmlkZW9fY2FyZHNfaW50ZWwgdmlkZW9fY2FyZHNfcmFkZW9uIgoKdmJldG9vbD0iIXZpZGVvX2NhcmRzX2ludGVsPyAoIHN5cy1hcHBzL3ZiZXRvb2wgKSIKREVQRU5EPSIhPGFwcC1sYXB0b3AvbGFwdG9wLW1vZGUtdG9vbHMtMS41NS1yMQoJITxzeXMtcG93ZXIvcG93ZXJtZ210LWJhc2UtMS4zMQoJIT49c3lzLXBvd2VyL3Bvd2VybWdtdC1iYXNlLTEuMzFbLXBtLXV0aWxzXSIKUkRFUEVORD0iJHtERVBFTkR9CglzeXMtYXBwcy9kYnVzCgk+PXN5cy1hcHBzL3V0aWwtbGludXgtMi4xMwoJc3lzLXBvd2VyL3BtLXF1aXJrcwoJYWxzYT8gKCBtZWRpYS1zb3VuZC9hbHNhLXV0aWxzICkKCW5ldHdvcmttYW5hZ2VyPyAoIG5ldC1taXNjL25ldHdvcmttYW5hZ2VyICkKCW50cD8gKCB8fCAoIG5ldC1taXNjL250cCBuZXQtbWlzYy9vcGVubnRwZCApICkKCWFtZDY0PyAoICR7dmJldG9vbH0gKQoJeDg2PyAoICR7dmJldG9vbH0gKQoJdmlkZW9fY2FyZHNfcmFkZW9uPyAoIGFwcC1sYXB0b3AvcmFkZW9udG9vbCApIgoKc3JjX3ByZXBhcmUoKSB7Cglsb2NhbCBpZ25vcmU9IjAxZ3J1YiIKCXVzZSBuZXR3b3JrbWFuYWdlciB8fCBpZ25vcmUrPSIgNTVOZXR3b3JrTWFuYWdlciIKCXVzZSBudHAgfHwgaWdub3JlKz0iIDkwY2xvY2siCgoJIyB0aGlzIGtpbGxzIG91ciB1c2IgZXRoZXJuZXQgZGV2aWNlcwoJaWdub3JlKz0iIGRpc2FibGVfd29sIgoKCSMgZG9uJ3QgdG91Y2ggdm0gc2V0dGluZ3MKCWlnbm9yZSs9IiBsYXB0b3AtbW9kZSIKCgl1c2UgZGVidWcgJiYgZWNobyAnUE1fREVCVUc9InRydWUiJyA+ICIke1R9Ii9nZW50b28KCWVjaG8gIkhPT0tfQkxBQ0tMSVNUPVwiJHtpZ25vcmV9XCIiID4+ICIke1R9Ii9nZW50b28KfQoKc3JjX2NvbmZpZ3VyZSgpIHsKCWVjb25mIFwKCQktLWRvY2Rpcj0vdXNyL3NoYXJlL2RvYy8ke1BGfSBcCgkJLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgXAoJCS0tZGlzYWJsZS1kb2MKfQoKc3JjX2luc3RhbGwoKSB7CgllbWFrZSBERVNURElSPSIke0R9IiBpbnN0YWxsIHx8IGRpZQoJZG9kb2MgQVVUSE9SUyBDaGFuZ2VMb2cgTkVXUyBwbS9IT1dUTyogUkVBRE1FKiBUT0RPIHx8oGRpZQoJZG9tYW4gbWFuLyouezEsOH0gfHwgZGllCgoJaW5zaW50byAvZXRjL3BtL2NvbmZpZy5kCglkb2lucyAiJHtUfSIvZ2VudG9vIHx8IGRpZQp9Cg==