VGhlIGZvbGxvd2luZyBoYXZlIG1hZGUgbWlub3IgY29udHJpYnV0aW9ucyB0byB0aGUgQ2xhc3NwYXRoCnByb2plY3QsIHN1Y2ggYXMgdGVzdGluZywgYnVnIHN1Ym1pc3Npb24sIG9yIG1pbm9yIHBhdGNoZXMuIFNlZSBhbHNvCnRoZSBBVVRIT1JTIGZpbGUsIHdoaWNoIGxpc3RzIHBlb3BsZSB3aG8gaGF2ZSBzdWJtaXR0ZWQgbWFqb3IKcGF0Y2hlcy4gSWYgeW91ciBuYW1lIGRvZXMgbm90IGFwcGVhciBvbiBlaXRoZXIgbGlzdCwgYnV0IHNob3VsZCwgbGV0CnVzIGtub3cuIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBpbiBhbHBoYWJldGljIG9yZGVyLgoKQy4gU2NvdHQgQW5hbmlhbiAoY2FuYW5pYW5AbGVzc2VyLW1hZ29vLmxjcy5taXQuZWR1KQpYdWFuIEJhbGRhdWYgKGVudHdpY2tsdW5nLS1jbGFzc3BhdGgtLWdudS5vcmdAbWVkaXVtLm5ldCkKQXJ0dXIgQmllc2lhZG93c2tpIChhYmllc0BwZy5nZGEucGwpClBlciBCb3RobmVyIChwZXJAYm90aG5lci5jb20pCkNhcmxvcyBDYXZhbm5hIChjZGNhdmFubmFAeWFob28uY29tKQpBcmNoaWUgQ29iYnMgKGFyY2hpZUBwcmVjaXNpb25pby5jb20pClN0ZXBoZW4gQ3Jhd2xleSAoY3Jhd2xleUBkc3RjLmVkdS5hdSkKTW9zZXMgRGVKb25nIChkZWpvbmdAY3MudW1uLmVkdSkKUGF0cmljayBEb3lsZSAoZG95bGVwQGVlY2cudG9yb250by5lZHUpCkp1bGlhbiBEb2xieSAoZG9sYnlAdXMuaWJtLmNvbSkKUmFpbWFyIEZhbGtlIChoYXdrQGhhd2suc2hlZi5hYy51aykKUGhpbGlwIEZvbmcgKHB3bGZvbmdAdXNlcnMuc291cmNlZm9yZ2UubmV0KQpKZXJvZW4gRnJpanRlcnMgKGplcm9lbkBzdW1hdHJhLm5sKQpFdGllbm5lIE0uIEdhZ25vbiAoZXRpZW5uZS5nYWdub25AdXFhbS5jYSkKQnJpYW4gR291Z2ggKGJqZ0BuZXR3b3JrLXRoZW9yeS5jb20pCkZyZWQgR3JheSAoZmVncmF5QG5wbC51aXVjLmVkdSkKQ2hyaXN0aWFuIEdyb3Rob2ZmIDxncm90aG9mZkBjcy5wdXJkdWUuZWR1PgpEYXZpZCBQLiBHcm92ZSAoZ3JvdmVkQHVzLmlibS5jb20pCkFuZHJldyBIYWxleSAoYXBoQHJlZGhhdC5jb20pClN0ZXZlbiBIdWdnIChodWdnQHBvYm94LmNvbSkKam9ja2V5QGFyb21hc29mdC5jb20KSXNhYWMgSm9uZXMgKGlqb25lc0BjaXMub2hpby1zdGF0ZS5lZHUpCk9za2FyIExpbGplYmxhZCAob3NrQGhlbS5wYXNzYWdlbi5zZSkKVHJldm9yIExpbnRvbiAodGxpbnRvbkB4bWlzc2lvbi5jb20pCkNhc2V5IE1hcnNoYWxsIChyc2Rpb0BtZXRhc3RhdGljLm9yZykKU3RldmUgTWF5ZXIgKFNNYXllckBkeW5hbWljc29mdC5jb20pCk1hdHQgTXVja2xvIChtbXVja2xvQGp1bXBzbWFydC5jb20pCkpvc2VwaCBTLiBNeWVycyAoanNtMjhAY2FtLmFjLnVrKQpSYWlmIFMuIE5hZmZhaCAocmFpZkBmbC5uZXQuYXUpClNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKVGFrYXNoaSBPa2Ftb3RvICh0b3JhQGRlYmlhbi5vcmcpCkFsZXhhbmRyZSBPbGl2YSAob2xpdmFAZGNjLnVuaWNhbXAuYnIpCkRhbmllbCBSYWxsKGRsckB3ZXN0Lm5ldCkKUGF0cmlrIFJlYWxpIChyZWFsaUBpbmYuZXRoei5jaCkKUGV0dGVyIFJlaW5ob2xkdHNlbiAocGVyZUBodW5ncnkuY29tKQpKdWxpYW4gU2NoZWlkIChqdWxpYW4uc2NoZWlkQHNla3RvcjM3LmRlKQpNYXJ0aW4gU2NocvZkZXIgKG1zQGFydGNvbS1nbWJoLmRlKQpHYXV0ZSBTbWFhbGFuZCAoZ3NAc2V2ZW5tb3VudGFpbnMubm8pCk1pY2hhZWwgU21pdGggKG1zbWl0aEBzcGlubmFrZXJuZXQuY29tKQpKLiBSdXNzZWxsIFNteXRoIChkcmZpc2hAdXN3ZXN0Lm5ldCkKSWFuIEQuIFN0ZXdhcnQgKGlkc3Rld2FydEBzb2Z0aG9tZS5uZXQpCkplZmYgU3R1cm0gKGpzdHVybUBvbmUtcG9pbnQuY29tKQpTcmVlbml2YXMgU3VicmFtb25leSAoc3JlZW5pdmFzLnN1YnJhbW9uZXlAaW50ZWwuY29tKQpDaHJpcyBUb3Nob2sgKHRvc2hva0BodW5ncnkuY29tKQpXZWxkb24gV2FzaGJ1cm4gKHdlbGRvbi53YXNoYnVybkBpbnRlbC5jb20pCkFkYW0gV2VsYyAod2VsY0Bjcy5wdXJkdWUuZWR1KQpHYW5zaGEgV3UgKGdhbnNoYS53dUBpbnRlbC5jb20pClNodWh1YSBaaGFuZyAoU2h1aHVhLlpoYW5nQGVjaG9zdGFyLmNvbSkK