XRlZCBTdGF0ZXMgYW5kL29yIG90aGVyIGNvdW50cmllcy5BZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZFJ5b2tvIE5JU0hJWlVLQSDopb/loZrmtrzlrZAgKGthbmEgJiBpZGVvZ3JhcGhzKTsgUGF1bCBELiBIdW50IChMYXRpbiwgR3JlZWsgJiBDeXJpbGxpYyk7IFdlbmxvbmcgWkhBTkcg5byg5paH6b6ZIChib3BvbW9mbyk7IFNhbmRvbGwgQ29tbXVuaWNhdGlvbiDsgrDrj4zsu6TrrqTri4jsvIDsnbTshZgsIFNvby15b3VuZyBKQU5HIOyepeyImOyYgSAmIEpvby15ZW9uIEtBTkcg6rCV7KO87JewIChoYW5ndWwgZWxlbWVudHMsIGxldHRlcnMgJiBzeWxsYWJsZXMpRHIuIEtlbiBMdW5kZSAocHJvamVjdCBhcmNoaXRlY3QsIGdseXBoIHNldCBkZWZpbml0aW9uICYgb3ZlcmFsbCBwcm9kdWN0aW9uKTsgTWFzYXRha2EgSEFUVE9SSSDmnI3pg6jmraPosrQgKHByb2R1Y3Rpb24gJiBpZGVvZ3JhcGggZWxlbWVudHMpaHR0cDovL3d3dy5hZG9iZS5jb20vdHlwZS9Db3B5cmlnaHQgwqkgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZA0KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC5odG1sDQpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLmh0bWxTb3VyY2UgSGFuIFNhbnMgQ