PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHRlbXBsYXRlLnBocAoJIwoJIyBBdXRob3I6IAkJRnJlZGR5IEFsbGlsYWlyZQoJIyBEYXRlOgkJCTIwMDUtMTItMDUKCSMKCSMgRGVzY3JpcHRpb246IFR5cGUgeW91ciBwYWdlIGNvbW1lbnRzIGhlcmUgLSB0aGVzZSBhcmUgbm90IHNlbnQgdG8gdGhlIGJyb3dzZXIKCSMKCSMKCSMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkKCSMKCSMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuIAoJJHBhZ2VUaXRsZSAJCT0gIkFNVyBQdWJsaWNhdGlvbnMiOwoJJHBhZ2VLZXl3b3Jkcwk9ICIiOwoJJHBhZ2VBdXRob3IJCT0gIkZyZWRkeSBBbGxpbGFpcmUiOwoJCgkjIFBhc3RlIHlvdXIgSFRNTCBjb250ZW50IGJldHdlZW4gdGhlIEVPSFRNTCBtYXJrZXJzIQkKCSRodG1sID0gPDw8RU9IVE1MCgo8IS0tIE1haW4gcGFydCAtLT4KCTxkaXYgaWQ9Im1pZGNvbHVtbiI+CgkJPHRhYmxlIHdpZHRoPSIxMDAlIj4KCQkJPHRyPgoJCQkJPHRkIHdpZHRoPSI1MCUiPgoJCQkJCTxoMT4kcGFnZVRpdGxlPC9oMT4KCQkJCTwvdGQ+CgkJCQk8dGQgYWxpZ249InJpZ2h0Ij4KCQkJCQk8aW1nIGFsdD0iQU1XIExvZ28iIHNyYz0icmVzb3VyY2VzL2Ftd0xvZ28ucG5nIiB2YWxpZ249InRvcCIgLz4KCQkJCTwvdGQ+CgkJCTwvdHI+CgkJPC90YWJsZT4KCQk8cD4KICAgICAgICAgIDx1bCBjbGFzcz0ibWlkbGlzdCI+CiAgICAgICAgICA8bGk+VGhlIGNvbXBsZXRlIGxpc3Qgb2YgdGVhbSdzIHB1YmxpY2F0aW9ucyBpcyBhdmFpbGFibGUgPGEgaHJlZj0iaHR0cDovL3d3dy5zY2llbmNlcy51bml2LW5hbnRlcy5mci9saW5hL2F0bC9wdWJsaWNhdGlvbnMvIj4KICAgICAgICAgIDxiPmhlcmU8L2I+PC9hPi48L3A+CiAgICAgICAgICBUaGUgPGEgaHJlZj0icmVmZXJlbmNlcy5waHAiPkV4dGVybmFsIFJlZmVyZW5jZXM8L2E+IHBhZ2UgaGFzIGEgbGlzdCBvZiB3b3JrcyB0aGF0IHJlZmVycyB0byB0aGUgQVRMQVMgTW9kZWwgV2VhdmVyIHByb2plY3QuCiAgICAgICAgICAKICAgICAgICAgIDwvbGk+CgkgIAk8YnIvPjxici8+CgoJICAJPGg0PjIwMDc8L2g0PgoKCSAgCTxsaT48YSBocmVmPSJodHRwOi8vd3d3LnNjaWVuY2VzLnVuaXYtbmFudGVzLmZyL2xpbmEvYXRsL2JpYmxpb2dyYXBoeS9TQUMwNyI+W1NBQzA3XTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICBEZWwgRmFicm8sIE1ELCBhbmQgVmFsZHVyaWV6LCBQIDoKICAgICAgICAgICAgICAgICAgICBTZW1pLWF1dG9tYXRpYyBNb2RlbCBJbnRlZ3JhdGlvbiB1c2luZyBNYXRjaGluZyBUcmFuc2Zvcm1hdGlvbnMgYW5kIFdlYXZpbmcgTW9kZWxzIC4KICAgICAgICAgICAgICAgICAgICAgIEluOiBUaGUgMjJ0aCBBbm51YWwgQUNNIFNBQywgTVQgMjAwNyAtIE1vZGVsIFRyYW5zZm9ybWF0aW9uIFRyYWNrLCBTZW91bCAoS29yZWEpLCAyMDA3LgogICAgICAgICAgICAgICAgICAgICAgIFRvIGFwcGVhci4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LnNjaWVuY2VzLnVuaXYtbmFudGVzLmZyL2xpbmEvYXRsL3d3dy9wYXBlcnMvZGlkb25ldC93ZWJfc2FjX21hdGNoaW5nLnBkZiI+KGxpbmspPC9hPiAKICAgICAgICAgPC9saT48YnIgLz4KCSAgCTxsaT48YSBocmVmPSJodHRwOi8vd3d3LnNjaWVuY2VzLnVuaXYtbmFudGVzLmZyL2xpbmEvYXRsL2JpYmxpb2dyYXBoeS9JQ1NFTTA3Ij5bSUNTRU0wN108L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgSm9zc2ljLCBBLCBEaWRvbmV0IERlbCBGYWJybywgTSwgTGVyYXQsIEpQLCBC6XppdmluLCBKLCBKb3VhdWx0LCBGLiBNb2RlbCBJbnRlZ3JhdGlvbiB3aXRoIE1vZGVsIFdlYXZpbmc6IGEgQ2FzZSBTdHVkeSBpbiBTeXN0ZW0gQXJjaGl0ZWN0dXJlIAogICAgICAgICAgICAgICAgICAgICAgSW46IElDU0VNJzA3IC0gSW50ZXJuYXRpb25hbCBDb25mZXJlbmNlIG9uIFN5c3RlbXMgRW5naW5lZXJpbmcgYW5kIE1vZGVsaW5nLiBJc3JhZWwsIDIwMDcuCiAgICAgICAgICAgICAgICAgICAgICAgVG8gYXBwZWFyLgogICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2NpZW5jZXMudW5pdi1uYW50ZXMuZnIvbGluYS9hdGwvd3d3L3BhcGVycy9kaWRvbmV0L01vZGVsSW50ZWdyYXRpb25JQ1NFTTA3X2RyYWZ0LnBkZiI+KGxpbmspPC9hPiAKICAgICAgICAgPC9saT4JICAJCgkgIAk8aDQ+MjAwNjwvaDQ+CgkgIAkKCQkgIDxsaT4KCQkgIAk8YSBocmVmPSJodHRwOi8vd3d3LnNjaWVuY2VzLnVuaXYtbmFudGVzLmZyL2xpbmEvYXRsL2JpYmxpb2dyYXBoeS9PREJBU0UwNiI+W09EQkFTRTIwMDZdPC9hPiAKCQkJRGlkb25ldCBEZWwgRmFicm8sIE0sIELpeml2aW4sIEosIGFuZCBWYWxkdXJpZXosIFAgOiBNb2RlbC1kcml2ZW4gVG9vbCBJbnRlcm9wZXJhYmlsaXR5OiAKCQkJYW4gQXBwbGljYXRpb24gaW4gQnVnIFRyYWNraW5nLiBJbjogT0RCQVNFJzA2KE9UTSBGZWRlcmF0ZWQgQ29uZmVyZW5jZXMpLiAyMDA2LiAgIAkKCQkgIDwvbGk+PGJyIC8+CgkJICA8bGk+CgkJICAJPGEgaHJlZj0iaHR0cDovL3d3dy5zY2llbmNlcy51bml2LW5hbnRlcy5mci9saW5hL2F0bC9iaWJsaW9ncmFwaHkvRVNVTU1JVF9BTVcwNiI+W0VTdW1taXQyMDA2XTwvYT4gCgkJCURpZG9uZXQgRGVsIEZhYnJvLCBNLCBC6XppdmluLCBKLCBhbmQgVmFsZHVyaWV6LCBQIDogV2VhdmluZyBNb2RlbHMgd2l0aCB0aGUgRWNsaXBzZSBBTVcgcGx1Z2luLiAKCQkJSW46IEVjbGlwc2UgTW9kZWxpbmcgU3ltcG9zaXVtLCBFY2xpcHNlIFN1bW1pdCBFdXJvcGUgMjAwNiwgRXNzbGluZ2VuLCBHZXJtYW55LCAyMDA2LiAgIAkKCQkgIDwvbGk+PGJyIC8+CSAgCgkJICA8bGk+CgkJICAJPGEgaHJlZj0iaHR0cDovL3d3dy5zY2llbmNlcy51bml2LW5hbnRlcy5mci9saW5hL2F0bC9iaWJsaW9ncmFwaHkvTUEwNiI+W0VDT09QMjAwNl08L2E+IEt1cnRldiwgSSwgYW5kIERpZG9uZXQgRGVsIEZhYnJvLCBNIDogQSBEU0wgZm9yIERlZmluaXRpb24gb2YgTW9kZWwgQ29tcG9zaXRpb24gT3BlcmF0b3JzLiAKCQkgIAlJbiAybmQgV29ya3Nob3Agb24gTW9kZWxzIGFuZCBBc3BlY3RzIC0gSGFuZGxpbmcgQ3Jvc3NjdXR0aW5nIENvbmNlcm5zIGluIE1EU0QsIEVDT09QIDIwMDYsIE5hbnRlcywgRnJhbmNlLiAyMDA2CgkJICA8L2xpPjxiciAvPgoJCSAgPGxpPgoJCQkgIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2NpZW5jZXMudW5pdi1uYW50ZXMuZnIvbGluYS9hdGwvYmlibGlvZ3JhcGh5L2VUWDIwMDZfMyI+W2VUWDIwMDZdPC9hPiAKCQkJICBEaWRvbmV0IERlbCBGYWJybywgTSwgQul6aXZpbiwgSiwgYW5kIFZhbGR1cmlleiwgUCA6IERlc2lnbmluZyBhbiBBZGFwdGl2ZSBXZWF2aW5nIFdvcmtiZW5jaCB1c2luZyAKCQkJICBFY2xpcHNlIENvbnRyaWJ1dGlvbnMuIAoJCQkgIEluOiBQcm9jZWVkaW5ncyBvZiB0aGUgRWNsaXBzZSBUZWNobm9sb2d5IGVYY2hhbmdlIHdvcmtzaG9wIChlVFgpIGF0IHRoZSBFQ09PUCAyMDA2IENvbmZlcmVuY2UsCgkJCSAgIE5hbnRlcywgRnJhbmNlLiAyMDA2LiAKCQkgIDwvbGk+PGJyIC8+ICAKCQkgIDxsaT4KCQkgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5zY2llbmNlcy51bml2LW5hbnRlcy5mci9saW5hL2F0bC9iaWJsaW9ncmFwaHkvRUNNREEwNiI+W0VDTURBMjAwNl08L2E+IELpeml2aW4gSiwgQm91eml0b3VuYSBTLCBEaWRvbmV0IERlbCBGYWJybyBNLCBHZXJ2YWlzIE0gUCwgSm91YXVsdCBGLCBLb2xvdm9zIEQsIEt1cnRldiBJLCBQYWlnZSBSIEYuIAoJCSAgICBBIENhbm9uaWNhbCBTY2hlbWUgZm9yIE1vZGVsIENvbXBvc2l0aW9uLCBJbiBQcm9jLiBFdXJvcGVhbiBDb25mZXJlbmNlIGluIE1vZGVsIERyaXZlbiBBcmNoaXRlY3R1cmUgKEVDLU1EQSkgMjAwNiwgCgkJICAgIEJpbGJhbywgU3BhaW4sIEp1bHkgMjAwNiA8YnIgLz4KCQkgIDwvbGk+CQkKCQkgIAoJICAJPGg0PjIwMDU8L2g0PgoJCSAgCgkJICA8bGk+CgkJCTxhIGhyZWY9Imh0dHA6Ly93d3cuc2NpZW5jZXMudW5pdi1uYW50ZXMuZnIvbGluYS9hdGwvYmlibGlvZ3JhcGh5L0JEQTA1Ij5bQkRBMjAwNV08L2E+CgkJCURpZG9uZXQgRGVsIEZhYnJvLCBNLCBC6XppdmluLCBKLCBKb3VhdWx0LCBGLCBhbmQgVmFsZHVyaWV6LCBQIDogQXBwbHlpbmcgR2VuZXJpYyBNb2RlbCBNYW5hZ2VtZW50IHRvIERhdGEgTWFwcGluZy4gSW46IFByb2NlZWRpbmdzIG9mIEJhc2VzIGRlIERvbm7pZXMgQXZhbmPpZXMgKEJEQTA1KSwgMTctMjAgb2N0b2JlciAyMDA1LCBTYWludC1NYWxvLCBGcmFuY2UuCgkJCQoJCSAgPC9saT48YnIgLz4KCQkgIDxsaT4KCQkJPGEgaHJlZj0iaHR0cDovL3d3dy5zY2llbmNlcy51bml2LW5hbnRlcy5mci9saW5hL2F0bC9iaWJsaW9ncmFwaHkvRUNPT1AyMDA1Ij5bRUNPT1AyMDA1XTwvYT4KCQkJQul6aXZpbiwgSiwgRGlkb25ldCBEZWwgRmFicm8sIE0sIEpvdWF1bHQsIEYsIGFuZCBWYWxkdXJpZXosIFAgOiBDb21iaW5pbmcgQ29uY2VybnMgd2l0aCBNb2RlbHMuIEluOiBGaXJzdCBXb3Jrc2hvcCBvbiBNb2RlbHMgYW5kIEFzcGVjdHMgLSBIYW5kbGluZyBDcm9zc2N1dHRpbmcgQ29uY2VybnMgaW4gTW9kZWwtRHJpdmVuIFNvZnR3YXJlIERldmVsb3BtZW50IChNRFNEKSwgRUNPT1AgMjAwNS4KCQkJCgkJPC9saT48YnIgLz4KCQk8bGk+CgkJCTxhIGhyZWY9Imh0dHA6Ly93d3cuc2NpZW5jZXMudW5pdi1uYW50ZXMuZnIvbGluYS9hdGwvYmlibGlvZ3JhcGh5L0dUVFNFMDVfRGlkb25ldCI+W0dUVFNFMjAwNV08L2E+CgkJCURpZG9uZXQgRGVsIEZhYnJvLCBNLCBhbmQgSm91YXVsdCwgRiA6IE1vZGVsIFRyYW5zZm9ybWF0aW9uIGFuZCBXZWF2aW5nIGluIHRoZSBBTU1BIFBsYXRmb3JtLiBJbjogUHJlLXByb2NlZWRpbmdzIG9mIHRoZSBHZW5lcmF0aXZlIGFuZCAKCQkJVHJhbnNmb3JtYXRpb25hbCBUZWNobmlxdWVzIGluIFNvZnR3YXJlIEVuZ2luZWVyaW5nIChHVFRTRSAwNSksIFdvcmtzaG9wLiBDZW50cm8gZGUgQ2nqbmNpYXMgZSBUZWNub2xvZ2lhcyBkZSBDb21wdXRh5+NvLCBEZXBhcnRlbWVudG8gZGUgSW5mb3JtYXRpY2EsIFVuaXZlcnNpZGFkZSBkbyBNaW5obywgQnJhZ2EsIFBvcnR1Z2FsLCBwYWdlcyA3MS0tNzcuCgkJCQoJCTwvbGk+PGJyIC8+CgkJPGxpPgoJCQk8YSBocmVmPSJodHRwOi8vd3d3LnNjaWVuY2VzLnVuaXYtbmFudGVzLmZyL2xpbmEvYXRsL2JpYmxpb2dyYXBoeS9NRFNEMDVfMSI+W01EU0QwNV08L2E+CgkJCUFib3V6YWhyYSwgQSwgQul6aXZpbiwgSiwgRGlkb25ldCBEZWwgRmFicm8sIE0sIGFuZCBKb3VhdWx0LCBGIDogQSBQcmFjdGljYWwgQXBwcm9hY2ggdG8gQnJpZGdpbmcgRG9tYWluIFNwZWNpZmljIExhbmd1YWdlcyB3aXRoIFVNTCBwcm9maWxlcy4gSW46IFByb2NlZWRpbmdzIG9mIHRoZSBCZXN0IFByYWN0aWNlcyBmb3IgTW9kZWwgRHJpdmVuIFNvZnR3YXJlIERldmVsb3BtZW50IGF0IE9PUFNMQSAwNSwgU2FuIERpZWdvLCBDYWxpZm9ybmlhLCBVU0EuCgkJCQoJCTwvbGk+PGJyIC8+CgkJPGxpPgoJCQk8YSBocmVmPSJodHRwOi8vd3d3LnNjaWVuY2VzLnVuaXYtbmFudGVzLmZyL2xpbmEvYXRsL2JpYmxpb2dyYXBoeS9JRE0yMDA1Ij5bSURNMjAwNV08L2E+CgkJCURpZG9uZXQgRGVsIEZhYnJvLCBNLCBC6XppdmluLCBKLCBKb3VhdWx0LCBGLCBCcmV0b24sIEUsIGFuZCBHdWVsdGFzLCBHIDogQU1XOiBhIGdlbmVyaWMgbW9kZWwgd2VhdmVyLiBJbjogUHJvY2VlZGluZ3Mgb2YgdGhlIDHocmVzIEpvdXJu6WVzIHN1ciBsJ0luZ+luaWVyaWUgRGlyaWfpZSBwYXIgbGVzIE1vZOhsZXMuCQkJCgkJPC9saT4KCSAgCTxoND4yMDA0PC9oND4JCQoJICAJCgkJPGxpPgoJCQk8YSBocmVmPSJodHRwOi8vd3d3LnNjaWVuY2VzLnVuaXYtbmFudGVzLmZyL2xpbmEvYXRsL3d3dy9wYXBlcnMvT09QU0xBMDQvYmV6aXZpbi1tb2RlbHdlYXZlci5wZGYiPltPT1BTTEEyMDA0XTwvYT4KCQkJQul6aXZpbiwgSi4sIEpvdWF1bHQsIEYuLCBWYWxkdXJpZXosIFAuIEZpcnN0IEV4cGVyaW1lbnRzIHdpdGggYSBNb2RlbFdlYXZlci4gT09QU0xBICYgR1BDRSBXb3Jrc2hvcCwgT2N0b2JlciAyMDA0CgkJCTxiciAvPjxiciAvPgoJCTwvbGk+CgkJICA8L3VsPgoJCTwvcD4KCgk8L2Rpdj4KCQpFT0hUTUw7CgoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4K