ZGlmZiAtLWdpdCBhL3RydW5rLy5naXRpZ25vcmUgYi90cnVuay8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzllZmMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNiBAQAorLnNldHRpbmdzCisuY2xhc3NwYXRoCisucHJvamVjdAordGFyZ2V0CisqLmk/PwordmVsb2NpdHkubG9nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdHJ1bmsvQlVJTERJTkcgYi90cnVuay9CVUlMRElORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjE4NTgxCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvQlVJTERJTkcKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitCdWlsZGluZyBBcGFjaGUgU2VydmljZU1peCA0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luaXRpYWwgU2V0dXAKKy0tLS0tLS0tLS0tLS0KKworMSkgSW5zdGFsbCBKMlNFIDUuMCBTREssIHdoaWNoIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gCisgICBodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG93bmxvYWQuanNwLiBVc2UgdmVyc2lvbiBvZiAxLjUuMF8wNiBKREsuCisKKzIpIE1ha2Ugc3VyZSB0aGF0IHlvdXIgSkFWQV9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0byB0aGUgbmV3bHkgaW5zdGFsbGVkIAorICAgSkRLIGxvY2F0aW9uLCBhbmQgdGhhdCB5b3VyIFBBVEggaW5jbHVkZXMgJUpBVkFfSE9NRSVcYmluICh3aW5kb3dzKSBvciAKKyAgICRKQVZBX0hPTUUkL2JpbiAodW5peCkuCisKKzMpIEluc3RhbGwgTWF2ZW4gMi4yLjEsIHdoaWNoIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gCisgICBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9kb3dubG9hZC5odG1sLiBNYWtlIHN1cmUgdGhhdCB5b3VyIFBBVEggaW5jbHVkZXMgCisgICB0aGUgTVZOX0hPTUUvYmluIGRpcmVjdG9yeS4gCisKKworQnVpbGRpbmcKKy0tLS0tLS0tCisKKzEpIENoYW5nZSB0byB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBvZiBBcGFjaGUgU2VydmljZU1peCA0IHNvdXJjZSBkaXN0cmlidXRpb24uCisyKSBSdW4KKyAgICAgICAgICQ+IG12bgorICAgVGhpcyB3aWxsIGNvbXBpbGUgQXBhY2hlIFNlcnZpY2VNaXggNCBhbmQgcnVuIGFsbCBvZiB0aGUgdGVzdHMgaW4gdGhlIAorICAgQXBhY2hlIFNlcnZpY2VNaXggS2VybmVsIHNvdXJjZSBkaXN0cmlidXRpb24uIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcnVuCisgICAgICAgICAkPiBtdm4gLVBmYXN0aW5zdGFsbAorICAgVGhpcyB3aWxsIGNvbXBpbGUgQXBhY2hlIFNlcnZpY2VNaXggNCB3aXRob3V0IHJ1bm5pbmcgdGhlIHRlc3RzIGFuZCB0YWtlcyBsZXNzCisgICB0aW1lIHRvIGJ1aWxkLgorICAgRGVwZW5kaW5nIG9uIHRoZSBsb2FkIG9mIHJlbW90ZSBNYXZlbiAyLjAgcmVwb3NpdG9yaWVzLCB5b3UgbWF5IGhhdmUgCisgICB0byBydW4gIm12biIgc2V2ZXJhbCB0aW1lcyB1bnRpbCB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSAKKyAgIGFsbCBsb2NhdGVkIGluIHlvdXIgbG9jYWwgbWF2ZW4gcmVwb3NpdG9yeS4gSXQgdXN1YWxseSB0YWtlcyBzb21lIHRpbWUgZm9yIAorICAgbWF2ZW4gdG8gZG93bmxvYWQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGluIHRoZSBmaXJzdCBidWlsZC4KKzMpIFRoZSBkaXN0cmlidXRpb25zIHdpbGwgYmUgYXZhaWxhYmxlIHVuZGVyICJhc3NlbWJseS90YXJnZXQiIGRpcmVjdG9yeS4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvTElDRU5TRSBiL3RydW5rL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwYjEyNwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL0xJQ0VOU0UKQEAgLTAsMCArMSwyMDMgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL3RydW5rL05PVElDRSBiL3RydW5rL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM4MGJmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvTk9USUNFCkBAIC0wLDAgKzEsMTEgQEAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICA9PSAgTk9USUNFIGZpbGUgZm9yIHVzZSB3aXRoIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAsICAgICAgICAgID09DQorICAgPT0gIGluIHRoaXMgY2FzZSBmb3IgdGhlIEFwYWNoZSBTZXJ2aWNlTWl4IGRpc3RyaWJ1dGlvbi4gICAgICAgICAgICAgICA9PQ0KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCisgICBUaGlzIHByb2R1Y3QgY29udGFpbnMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5DQorICAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4NCisNCisgICBUaGlzIHByb2R1Y3QgY29udGFpbnMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5DQorICAgT3BlbiBQYXJ0aWNpcGF0aW9uIFNvZnR3YXJlIGZvciBKYXZhIChodHRwOi8vd3d3Lm9wczRqLm9yZy8pLg0KKw0KZGlmZiAtLWdpdCBhL3RydW5rL1JFQURNRSBiL3RydW5rL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTliZjFlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvUkVBRE1FCkBAIC0wLDAgKzEsNTggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCisNCitXZWxjb21lIHRvIEFwYWNoZSBTZXJ2aWNlTWl4IDQgDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorQXBhY2hlIFNlcnZpY2VNaXggaXMgYW4gb3BlbiBzb3VyY2UgRVNCIChFbnRlcnByaXNlIFNlcnZpY2UgQnVzKSB0aGF0IGNvbWJpbmVzIA0KK3RoZSBmdW5jdGlvbmFsaXR5IG9mIGEgU2VydmljZSBPcmllbnRlZCBBcmNoaXRlY3R1cmUgKFNPQSkgYW5kIGFuIEV2ZW50IERyaXZlbg0KK0FyY2hpdGVjdHVyZSAoRURBKSAgdG8gY3JlYXRlIGFuIGFnaWxlLCBlbnRlcnByaXNlIEVTQi4NCisNCitBcGFjaGUgU2VydmljZU1peCBpcyBhbiBvcGVuIHNvdXJjZSBkaXN0cmlidXRlZCBFU0IgYnVpbHQgZnJvbSB0aGUgZ3JvdW5kIHVwIG9uIA0KK3RoZSAgSmF2YSBCdXNpbmVzcyBJbnRlZ3JhdGlvbiAoSkJJKSBzcGVjaWZpY2F0aW9uIEpTUiAyMDggYW5kIHJlbGVhc2VkIHVuZGVyIA0KK3RoZSBBcGFjaGUgbGljZW5zZS4gVGhlIGdvYWwgb2YgSkJJIGlzIHRvIGFsbG93IGNvbXBvbmVudHMgYW5kIHNlcnZpY2VzIHRvIGJlIA0KK2ludGVncmF0ZWQgaW4gYSB2ZW5kb3IgaW5kZXBlbmRlbnQgd2F5LCBhbGxvd2luZyB1c2VycyBhbmQgdmVuZG9ycyB0byBwbHVnIGFuZCANCitwbGF5Lg0KKw0KK0dldHRpbmcgU3RhcnRlZA0KKz09PT09PT09PT09PT09PQ0KK0ZvciBhbiBBcGFjaGUgU2VydmljZU1peCA0IHNvdXJjZSBkaXN0cmlidXRpb24sIHBsZWFzZSByZWFkIA0KK0JVSUxESU5HLnR4dCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nIEFwYWNoZSBTZXJ2aWNlTWl4IDQuIA0KKw0KK0ZvciBhbiBBcGFjaGUgU2VydmljZU1peCA0IGJpbmFyeSBkaXN0cmlidXRpb24sIHBsZWFzZSByZWFkIA0KK1JFTEVBU0UtTk9URVMudHh0IGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGFuZCBsaXN0IG9mIHN1cHBvcnRlZCANCithbmQgdW5zdXBwb3J0ZWQgZmVhdHVyZXMuDQorDQorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGZpbmQgb3V0IGhvdyB0byBnZXQgc3RhcnRlZCBoZXJlOg0KKyAgICBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NteDQvDQorDQorSWYgeW91IG5lZWQgbW9yZSBoZWxwIHRyeSB0YWxraW5nIHRvIHVzIG9uIG91ciBtYWlsaW5nIGxpc3RzDQorICAgIGh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvbWFpbGluZy1saXN0cy5odG1sDQorDQorSWYgeW91IGZpbmQgYW55IGlzc3VlcyB3aXRoIFNlcnZpY2VNaXggNCwgcGxlYXNlIHN1Ym1pdCByZXBvcnRzIA0KK3dpdGggSklSQSBoZXJlOg0KKyAgICBodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvYWN0aXZlbXEvYnJvd3NlL1NNWDQNCisNCitXZSB3ZWxjb21lIGNvbnRyaWJ1dGlvbnMsIGFuZCBlbmNvdXJhZ2UgeW91IHRvIGdldCBpbnZvbHZlZCBpbiB0aGUgDQorU2VydmljZU1peCBjb21tdW5pdHkuIElmIHlvdSdkIGxpa2UgdG8gbGVhcm4gbW9yZSBhYm91dCBob3cgeW91IGNhbiANCitjb250cmlidXRlLCBwbGVhc2Ugc2VlOg0KKyAgICBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2NvbnRyaWJ1dGluZy5odG1sDQorDQorTWFueSB0aGFua3MgZm9yIHVzaW5nIEFwYWNoZSBTZXJ2aWNlTWl4Lg0KKw0KKw0KK1RoZSBTZXJ2aWNlTWl4IFRlYW0NCitodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3RlYW0uaHRtbA0KZGlmZiAtLWdpdCBhL3RydW5rL1JFTEVBU0UtTk9URVMgYi90cnVuay9SRUxFQVNFLU5PVEVTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMTVkNDMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9SRUxFQVNFLU5PVEVTCkBAIC0wLDAgKzEsMTg2IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBTZXJ2aWNlTWl4IDQuMy4wDQorICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgT3ZlcnZpZXcNCisgLS0tLS0tLS0NCisNCitBcGFjaGUgU2VydmljZU1peCA0LjMuMCBpcyBhIG1ham9yIHJlbGVhc2Ugb2YgdGhlIE9TR2kgYmFzZWQgU2VydmljZU1peCBFU0IgcGxhdGZvcm0uICBUaGlzIHJlbGVhc2UgY29udGFpbnMgbWFueQ0KK2J1Z2ZpeGVzIGFuZCBmZWF0dXJlIGVuaGFuY2VtZW50cyBvdmVyIHRoZSA0LjIuMCByZWxlYXNlLiAgU2VydmljZU1peCA0LjMuMCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY2llczoNCisNCistIEFwYWNoZSBGZWxpeCBLYXJhZiAyLjEuMyAoaHR0cDovL2thcmFmLmFwYWNoZS5vcmcpDQorICBBIGxpZ2h0d2VpZ2h0IE9TR2kgY29udGFpbmVyIGJ1aWx0IG9uIHRvcCBvZiBBcGFjaGUgRmVsaXggT1NHaSBmcmFtZXdvcmsuICBLYXJhZiBwcm92aWRlcyBtdWNoIG9mIHRoZSBjb3JlIE9TR2kNCisgIGZ1bmN0aW9uYWxpdHkgYW5kIGZlYXR1cmVzIChTU0ggc2hlbGwsIGNvbnNvbGUgY29tbWFuZHMsIHByb3Zpc2lvbmluZywgYmx1ZXByaW50IFhNTCBzdXBwb3J0LCBldGMuLi4pDQorDQorLSBBcGFjaGUgU2VydmljZU1peCBOTVIgMS40LjANCisgIEFuIE9TR2kgYmFzZWQgTk1SIGFuZCBKQkkgY29udGFpbmVyLCB3aXRoIGEgbmV3IGNsdXN0ZXJpbmcgZW5naW5lIHJlYWR5IGZvciBlbnRlcnByaXNlIGRlcGxveW1lbnQNCisNCistIEFwYWNoZSBTZXJ2aWNlTWl4IENvbXBvbmVudHMgMjAxMS4wMQ0KKyAgT1NHaSBhbmQgSkJJIGNvbXBhdGlibGUgY29tcG9uZW50cyBmb3IgY29tbW9uIGludGVncmF0aW9uIGJpbmRpbmdzIHN1Y2ggYXMgRlRQLCBIVFRQLCBKTVMsIGV0Yy4gYXMgd2VsbCBhcw0KKyAgc2VydmljZSBlbmdpbmVzIHN1Y2ggYXMgQ2FtZWwgKEVudGVycHJpc2UgSW50ZWdyYXRpb24gUGF0dGVybnMpLCBRdWFydHosIEpTUi0yMjMgU2NyaXB0aW5nLCBldGMuDQorDQorDQorU2VydmljZU1peCA0LjMuMCBhbHNvIHNoaXBzIHdpdGggYSB3ZWIgY29uc29sZSBmb3IgYWRtaW5pc3RlcmluZyBhbmQgZGVwbG95aW5nIGVuZHBvaW50cyBhbmQgY29tcG9uZW50cywNCithZGRpdGlvbmFsIE9TR2kgYnVuZGxlcywgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBXZSBhbHNvIGluY2x1ZGUgc3VwcG9ydCBmb3IgcnVubmluZyBvdXRvZiB0aGUgYm94IHdlYiBhcHBsaWNhdGlvbnMNCit2aWEgV0FSIGZpbGUgZGVwbG95bWVudC4gIFRoaXMgcmVsZWFzZSBpbmNsdWRlcyBwcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIE9TR2kgRW50ZXJwcmlzZSBTcGVjaWZpY2F0aW9uIDQuMg0KK2FuZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBPU0dpIGZyYWdtZW50IGJ1bmRsZXMuICBPU0dpIGZyYW1ld29yayBzdXBwb3J0IGRlZmF1bHMgdG8gQXBhY2hlIEZlbGl4LCBidXQgY2FuIGJlIGNoYW5nZWQNCit2aWEgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBwYXJhbWF0ZXIgdG8gdXNlIEVjbGlwc2UgRXF1aW5veC4NCisNCisgQ2hhbmdlbG9nDQorIC0tLS0tLS0tLQ0KK1RoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyB0aGUgYnVnIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMgaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLg0KKw0KK1JlbGVhc2UgTm90ZXMgLSBTZXJ2aWNlTWl4IDQgLSBWZXJzaW9uIDQuMy4wDQorDQorKiogU3ViLXRhc2sNCisqIFtTTVg0LTU0M10gLSBJbXByb3ZlIENhbWVsIE5NUiBjb21wb25lbnQgdG8gbGV2ZXJhZ2UgYXN5bmMgY2FtZWwgcm91dGluZw0KKw0KKyoqIEJ1Zw0KKyogW1NNWDQtMzk4XSAtIG9wZW5qcGEgYnVuZGxlIHNob3VsZCBpbXBvcnQgdGhlIHRyYW5zYWN0aW9uIHBhY2thZ2Ugd2l0aG91dCBvcHRpb25hbCBmbGFnDQorKiBbU01YNC00MTVdIC0gbmVlZCBhZGQgam9zcWwgYnVuZGxlIHRvIGFjdGl2ZW1xIGZlYXR1cmUNCisqIFtTTVg0LTQxN10gLSBjYWxsaW5nIDxzZXRIZWFkZXI+IHdpdGggPGdyb292eT4gZXhwcmVzc2lvbiBjYW4gZGVsZXRlIG1lc3NhZ2UgYW5kIGhlYWRlcnMNCisqIFtTTVg0LTQ1NV0gLSBhY3RpdmVtcSBmZWF0dXJlIG1pc3NpbmcgZGVwZW5kZW5jaWVzOyBmYWlscyB0byBzdGFydCB0d28gYnVuZGxlcyB3aXRob3V0IGNhbWVsLWN4ZiBpbnN0YWxsZWQNCisqIFtTTVg0LTQ4OV0gLSBTZXJ2aWNlTWl4IDQueC8gRnVzZSA0LjIgaGFuZ3Mgd2hlbiB1c2luZyBjb21tYW5kIGRldjpzaG93LXRyZWUNCisqIFtTTVg0LTUxOV0gLSBBbGxvdyBjb25maWd1cmluZyBDYW1lbCBOTVIgZW5kcG9pbnQgdG8gYnlwYXNzIHRocmVhZCBwb29sIGZvciBoYW5kbGluZyBleGNoYW5nZXMNCisqIFtTTVg0LTUyMF0gLSBOTVIgRGVzdGluYXRpb24gc2hvdWxkIGNoZWNrIEV4Y2hhbmdlIFN0YXR1cyBhbmQgTWVwIFBhdHRlcm4NCisqIFtTTVg0LTUyMl0gLSBDYW1lbCBOTVIgY29tcG9uZW50OiByZXBvbnNlIE5NUiBtZXNzYWdlIGNvbnRhaW5zIHJlZmVyZW5jZSB0byBpdHNlbGYgaW4gcHJvcGVydHkNCisqIFtTTVg0LTUyN10gLSBjeGYgbm1yIHRyYW5zcG9ydCBzaG91bGQgY29weSBvdmVyIHByb3BlcnR5IGhlYWRlcnMgYW5kIGF0dGFjaG1lbnQgYmV0d2VlbiBjeGYgbWVzc2FnZSBhbmQgbm1yIG1lc3NhZ2UNCisqIFtTTVg0LTUzMF0gLSBzZXJ2aWNlbWl4LXZmcyBmYWlscyB3aXRoIHNmdHANCisqIFtTTVg0LTUzOV0gLSBJbmNvbnNpc3RlbnQgdXNlIG9mIEVuZHBvaW50LklOVEVSRkFDRV9OQU1FIGluIGN4ZiBubXIgdHJhbnNwb3J0DQorKiBbU01YNC01NDFdIC0gSmV0dHkgYnVuZGxlcyBleHBvcnQgcGFja2FnZSBpcyBub3QgY29ycmVjdA0KKyogW1NNWDQtNTQ4XSAtIHJlbW92ZSBqYXZheC5zY3JpcHQgcGFja2FnZSBmcm9tIGNvbmZpZy5wcm9wZXJ0aWVzIGZvciBqcmUgZXhwb3J0IHBhY2thZ2UNCisqIFtTTVg0LTU2MV0gLSBTZXJ2aWNlbWl4IGZsYXRwYWNrIGNvbXBvbmVudCBpcyBtaXNzaW5nIHRoZSBkZWZhdWx0IGZwY29udmVydC5wcm9wZXJ0aWVzLCBjYXVzaW5nIE51bGxQb2ludGVyRXhjZXB0aW9uDQorKiBbU01YNC01NjRdIC0gc3RhY2t0cmFjZSBkdW1wZWQgb24gY29uc29sZSB3aGVuIHNodXRkb3duIHNteA0KKyogW1NNWDQtNTc4XSAtIEVuc3VyZSB0aGF0IFNlY3VyaXR5U3ViamVjdCBpcyBwcm9wZXJseSBjb252ZXllZCBieSBjeGYtbm1yIHRyYW5zcG9ydA0KKyogW1NNWDQtNTgxXSAtIHhwcDMgYnVuZGxlIGlzIG1pc3NpbmcgTUVUQS1JTkYvc2VydmljZXMvb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckZhY3RvcnkgbmVlZGVkIHRvIHN1cHBvcnQgemVybyBjb25maWd1YXRpb24gb3BlcmF0aW9uIG1vZGUNCisqIFtTTVg0LTU4NV0gLSBpbmNvcnJlY3QgTVRPTSBtZXNzYWdlIGZvciBOTVIgdHJhbnNwb3J0DQorKiBbU01YNC02MDJdIC0gVXBkYXRlIEthcmFmIGpyZSBwYWNrYWdlDQorKiBbU01YNC02MDhdIC0gRHJvb2xzIHBhY2thZ2UgZG9lc24ndCBleHBvcnQgb3JnLmRyb29scy5ydW50aW1lLnJ1bGUNCisqIFtTTVg0LTY0OF0gLSBDYW1lbCBOTVIgY29tcG9uZW50IGRvZXMgbm90IHByb3BhZ2F0ZSBFeGNlcHRpb24gd2hlbiB1c2luZyBhbiBJbk9ubHkgTUVQDQorKiBbU01YNC02NDldIC0gY29uZmlnOiogY29tbWFuZHMgbm90IGF2YWlsYWJsZSBvdXQtb2YtdGhlLWJveA0KKyogW1NNWDQtNjUyXSAtIGNhbWVsIGV4YW1wbGUgZG9lc24ndCB3b3JrDQorKiBbU01YNC02NzRdIC0gQWN0aXZlTVEgNS40LjEgZmVhdHVyZSBoYXMgYSBtaXNzaW5nIGRlcGVuZGVuY3kNCisqIFtTTVg0LTcwNl0gLSBzcGVjaWZ5IHZlcnNpb24gZm9yIGN4Zi1jb2RlZ2VuLXBsdWdpbiBpbiBwbHVnaW5NYW5hZ2VtZW50IHRvIGF2b2lkIGRvd25sb2FkaW5nIGxhdGVzdCBzbmFwc2hvdCBjeGYtY29kZWdlbi1wbHVnaW4NCisqIFtTTVg0LTcwOF0gLSBOTVIgYWRkcyBudWxsIGhlYWRlciBpbiBDYW1lbCBFeGNoYW5nZSA/DQorKiBbU01YNC03MDldIC0gRmVhdHVyZXMgcG9tIGNvbnRhaW5zIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uDQorKiBbU01YNC03MTFdIC0gY2hlY2sgRXhjZXB0aW9uIGZyb20gQ2FtZWwgRXhjaGFuZ2UgYXQgdmVyeSBmaXJzdCBwbGFjZSB0byBob25vciBhc3luIHByb2Nlc3NvciBpbiBjYW1lbCAyLjUNCisqIFtTTVg0LTcyMF0gLSBTZXZlcmFsIHBvbXMgY29udGFpbiBvbGQgSklSQSBVUkwNCisqIFtTTVg0LTcyOV0gLSAiQXRoZXIgVVJMIEhhbmRsZXIgbm90IGF2YWlsYWJsZSIgbWVzc2FnZXMgaW4gdGhlIGxvZyBmaWxlDQorKiBbU01YNC03MzVdIC0gUHJvYmxlbSBvbiBpbnN0YWxsIGNhbWVsLWN4ZiBjb21wb25lbnQgZm9yIHVucmVzb2x2ZWQgZGVwZW5kZW5jeSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpzcjMxMS1hcGlfMS4wLzEuNi4wDQorKiBbU01YNC03MzldIC0gYWRkIG5tciBmZWF0dXJlcy54bWwgZGVwZW5kZW5jeSB0byBtYWtlIHRoZSBraXQgYnVpbGQgcGFzcw0KKyogW1NNWDQtNzQ4XSAtIEltcHJvdmUgbG9nZ2luZyBwb2xpY3kgdG8gYXZvaWQgaW1wYWN0IG9uIHBlcmZvcm1hbmNlcw0KKyogW1NNWDQtNzQ5XSAtIEpCSSBkZXBsb3llciB2ZXJzaW9uIHJhbmdlIGlzIG5vdCB1cCB0byBkYXRlDQorKiBbU01YNC03NjBdIC0gSkFYQiBBUEkgYW5kIGltcGxlbWVudGF0aW9uIHZlcnNpb24gbWlzbWF0Y2ggaW4gQ2FtZWwgZmVhdHVyZXMgZGVzY3JpcHRvcg0KKyogW1NNWDQtNzYxXSAtIGN4Zi1vc2dpIGV4YW1wbGUgbWlzcyBhIHBhY2thZ2UgaW1wb3J0IHdoaWNoIGNhdXNlIGl0IGZhaWwgd2l0aCBmZWxpeA0KKw0KKyoqIEltcHJvdmVtZW50DQorKiBbU01YNC01MTJdIC0gVXBncmFkZSB0byBBY3RpdmVNUSA1LjMuMQ0KKyogW1NNWDQtNTIzXSAtIFVzZSBDYW1lbCBTeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIE5NUiBleGNoYW5nZSBjYW4gYmUgaGFuZGxlZCBhc3luY2hyb25vdXNseQ0KKyogW1NNWDQtNTMxXSAtIFVwZGF0ZSB0aGUganNtcHAgYnVuZGxlIHRvIDIuMS4wDQorKiBbU01YNC01MzRdIC0gQWRkIHF1YXJ0eiAxLjguMSBidW5kbGUNCisqIFtTTVg0LTUzNl0gLSBBZGQgUXVhcnR6IDEuOC4yIGJ1bmRsZQ0KKyogW1NNWDQtNTM4XSAtIEFkZCBxdWFydHogMS44LjMgYnVuZGxlDQorKiBbU01YNC01NDRdIC0gVXBkYXRlIHBvbXMgdG8gbm90IGhhdmUgd2FybmluZ3Mgd2l0aCBNYXZlbiAzDQorKiBbU01YNC01NTFdIC0gdXBncmFkZSB0byBzcHJpbmcgMy54DQorKiBbU01YNC01NTJdIC0gVXBncmFkZSB0byBBY3RpdmVNUSA1LjQNCisqIFtTTVg0LTU1Nl0gLSBXcmFwIHRoZSBqYXhiIGltcGwgMi4xLjEzDQorKiBbU01YNC01NjBdIC0gUHJlcGFyZSB0aGUgdXBncmFkZSB0byBBY3RpdmVNUSA1LjQuMA0KKyogW1NNWDQtNTYyXSAtIFVwZGF0ZSBmbGF0cGFjayB0byAzLjIuMA0KKyogW1NNWDQtNTY1XSAtIFVwZ3JhZGUgdG8gS2FyYWYgMi4wLjANCisqIFtTTVg0LTU2N10gLSBOb3JtYWxpemUgU01YNCBuYW1pbmcgY29udmVudGlvbiBvZiByZXNvdXJjZXMNCisqIFtTTVg0LTU3M10gLSBSb21lIGJ1bmRsZSBzaG91bGQgdHJ5IHRvIGxvYWQgdGhlIGNvbmZpZ3VyZSBmaWxlIGZyb20gbG9jYWwgYnVuZGxlIGNsYXNzbG9hZGVyIGFzIGEgZmFsbGJhY2sNCisqIFtTTVg0LTU3Nl0gLSBFbnN1cmUgdGhhdCBTdWJqZWN0IGlzIHByb3Blcmx5IGNvbnZleWVkIGJ5IGNhbWVsLW5tciBjb21wb25lbnQNCisqIFtTTVg0LTU3OV0gLSBleHRyYWN0IGNvbW1vbiB1c2VkIGNsYXNzZXMgZm9yIGl0ZXN0cw0KKyogW1NNWDQtNTg0XSAtIFVwZ3JhZGUgdG8gdGhlIGxhdGVzdCByZWxlYXNlIG9mIFNlcnZpY2VNaXggQnVuZGxlcw0KKyogW1NNWDQtNTg2XSAtIFRoZSBDYW1lbCBleGFtcGxlcyB1c2VzIEBkZXByZWNhdGVkIG5hbWVzcGFjZQ0KKyogW1NNWDQtNTg4XSAtIHJlZmFjdG9yIE5NUk1lc3NhZ2VIZWxwZXIgdG8gdXNlIG5ldyBhcGkgZnJvbSBjeGYgU3RheFV0aXMNCisqIFtTTVg0LTU5MV0gLSBVcGdyYWRlIHRvIEFjdHZlTVEgNS40LjANCisqIFtTTVg0LTU5Ml0gLSBBZGQgaGliZXJuYXRlLXZhbGlkYXRvciA0LjEuMC5GaW5hbCBidW5kbGUNCisqIFtTTVg0LTU5OF0gLSBIU1FMREIgYnVuZGxlcy4NCisqIFtTTVg0LTU5OV0gLSBDcmVhdGUgZHJvb2xzLTUuMS4xIGJ1bmRsZSB3aXRoIG1pbmltYWwgc2V0IG9mIGRlcGVuZGVuY2llcw0KKyogW1NNWDQtNjAwXSAtIENyZWF0ZSBhbnRsci1ydW50aW1lIDMuMiBidW5kbGUNCisqIFtTTVg0LTYwMV0gLSBVcGdyYWRlIHRvIEthcmFmIDIuMS4wDQorKiBbU01YNC02MDNdIC0gVXBncmFkZSB0byBDYW1lbCAyLjUuMA0KKyogW1NNWDQtNjA0XSAtIFVwZ3JhZGUgdG8gQ1hGIDIuMi4xMQ0KKyogW1NNWDQtNjA2XSAtIE1ha2UgdGhlIGV4ZWN1dG9ycy90aHJlYWRwb29sIHZpZXdhYmxlIGFzIEpNWCBtYmVhbnMNCisqIFtTTVg0LTY2MF0gLSBDcmVhdGUgT1NHaSB3cmFwIGJ1bmRsZSBmb3IgSmV0dHkgNi4xLjI1DQorKiBbU01YNC02NjddIC0gVXBncmFkZSB0byBKQVhQIDEuNC40DQorKiBbU01YNC02NzNdIC0gVXBncmFkZSB0byBLYXJhZiAyLjEuMQ0KKyogW1NNWDQtNjc2XSAtIFVwZ3JhZGUgdG8gS2FyYWYgMi4xLjINCisqIFtTTVg0LTY4OV0gLSBVcGdyYWRlIHRvIEFjdGl2ZU1RIDUuNC4yDQorKiBbU01YNC03MTBdIC0gQWRkIENhbWVsIE5NUiBibHVlcHJpbnQgZXhhbXBsZQ0KKyogW1NNWDQtNzEzXSAtIHVwZ3JhZGUgdG8gY3hmIDIuMy4xDQorKiBbU01YNC03MTZdIC0gVXBncmFkZSB0byBTTVggY29tcG9uZW50cyAyMDEwLjAyDQorKiBbU01YNC03MTldIC0gTWFrZSBjYW1lbC1ibHVlcHJpbnQgZmVhdHVyZSBpbnN0YWxsZWQgYnkgZGVmYXVsdA0KKyogW1NNWDQtNzI4XSAtIEFkZCBhIENhbWVsIGJsdWVwcmludCBleGFtcGxlDQorKiBbU01YNC03MzhdIC0gcmVtb3ZlIG9yZy5hcGFjaGUuY2FtZWwub3NnaSBwYWNrYWdlIGltcG9ydCBmb3IgY2FtZWwtb3NnaSBleGFtcGxlDQorKiBbU01YNC03NDBdIC0gSkFYQi1JTVBMIDIuMS4xMyBSZWxlYXNlDQorKiBbU01YNC03NDFdIC0gVXBncmFkZSB0byBLYXJhZiAyLjEuMw0KKyogW1NNWDQtNzQyXSAtIFVwZ3JhZGUgdG8gU3ByaW5nIDMuMC41LlJFTEVBU0UNCisqIFtTTVg0LTc0NV0gLSBVcGdyYWRlIHRvIENhbWVsIDIuNi4wDQorKiBbU01YNC03NDZdIC0gVXBncmFkZSB0byBDWEYgMi4zLjINCisqIFtTTVg0LTc1NF0gLSBVcGdyYWRlIHRvIFNlcnZpY2VNaXggQ29tcG9uZW50cyAyMDExLjAxDQorKiBbU01YNC03NTVdIC0gVXBncmFkZSB0byBTZXJ2aWNlTWl4IE5NUiAxLjQuMA0KKyogW1NNWDQtNzU3XSAtIFVwZ3JhZGUgdG8gQXBhY2hlIE9ERSAxLjMuNQ0KKw0KKyoqIE5ldyBGZWF0dXJlDQorKiBbU01YNC01NThdIC0gQWRkIGEgd3JhcCBidW5kbGUgb2YgeG1sYmVhbnMgMi41LjANCisqIFtTTVg0LTU1OV0gLSBBZGQgdGhlIHdyYXAgYnVuZGxlIG9mIGpzY2gtMC4xLjQzDQorKiBbU01YNC01OTBdIC0gQ3JlYXRlIE9TR2kgYnVuZGxlIGZvciBKYXN5cHQgMS42DQorKiBbU01YNC02MTRdIC0gRG9jdW1lbnRhdGlvbjogQWRkIGEgR2V0dGluZyBTdGFydGVkIEd1aWRlDQorKiBbU01YNC02NzVdIC0gQnVuZGxlcyBmb3IgTW9uZ28gREINCisNCisqKiBUYXNrDQorKiBbU01YNC01MjRdIC0gdXBncmFkZSB0byBjeGYgMi4yLjcNCisqIFtTTVg0LTUyOF0gLSB1cGdyYWRlIHRvIGN4ZiAyLjIuOA0KKyogW1NNWDQtNTMzXSAtIHVwZ3JhZGUgdG8gY3hmIDIuMi45DQorKiBbU01YNC01NDJdIC0gVXBncmFkZSB0byBDYW1lbCAyLjQuMA0KKyogW1NNWDQtNTQ1XSAtIFVwZGF0ZSBTTVggdG8gdXNlIGFyaWVzIHZlcnNpb24gb2YgYmx1ZXByaW50IGFuZCBsYXRlc3QgRmVsaXgvS2FyYWYgc3R1ZmYgdGhhdCBhbHNvIHVzZXMgYXJpZXMNCisqIFtTTVg0LTU0N10gLSB1cGdyYWRlIHRvIHVzZSBuZXcga2FyYWYgYXJ0aWZhY3RzDQorKiBbU01YNC01NTNdIC0gVXBncmFkZSB0byBnb29nbGUgcHJvdG9idWYgMi4zLjANCisqIFtTTVg0LTU1N10gLSBVcGdyYWRlIHRvIFZlbG9jaXR5IDEuNi40DQorKiBbU01YNC01NjNdIC0gdXBncmFkZSBhcmllcyB0byAwLjEtcjk2NDcwMQ0KKyogW1NNWDQtNTc0XSAtIGFkZCBjb21tb25zLWRpZ2VzdGVyLTEuOCBidW5kbGUNCisqIFtTTVg0LTU3NV0gLSBhZGQgY29tbW9ucy1jb25maWd1cmF0aW9uLTEuNCBidW5kbGUNCisqIFtTTVg0LTU4Ml0gLSB1cGdyYWRlIHRvIGFjdGl2ZW1xIDUuNA0KKyogW1NNWDQtNTg3XSAtIHVwZ3JhZGUgdG8gY3hmIDIuMi4xMA0KKyogW1NNWDQtNTkzXSAtIENyZWF0ZSBCdW5kbGVzIGZvciBTSVAgQVBJIGFuZCBSSS4NCisqIFtTTVg0LTYwN10gLSBkb3duZ3JhZGUgZ2Vyb25pbW8tYW5ub3RhdGlvbiB2ZXJzaW9uIHRvIDEuMCBmcm9tIDEuMQ0KKyogW1NNWDQtNjEzXSAtIENyZWF0ZSBhIHdyYXAgYnVuZGxlIGRvemVyIDUuMy4wDQorKiBbU01YNC02NjhdIC0gVXBncmFkZSB0byBNVkVMIDIuMC4xOA0KKyogW1NNWDQtNjcxXSAtIGFkZCBzY2FsYSAyLjguMSBidW5kbGUNCisqIFtTTVg0LTY3Ml0gLSBDcmVhdGUgYSB3cmFwIGJ1bmRsZSBmb3IgSmV0dHkgNi4xLjI2DQorKiBbU01YNC03MDddIC0gRml4IHRoZSBjYW1lbC1ubXIgZmFpbGVkIHVuaXQgdGVzdHMNCisNCisqKiBUZXN0DQorKiBbU01YNC01NTRdIC0gZml4IGl0ZXN0cyBmYWlsdXJlDQorKiBbU01YNC01NjhdIC0gYWRkIGN4ZiBtdG9tIHRlc3QNCisqIFtTTVg0LTY1MF0gLSBmaXggbG9hbi1icm9rZXItZHJvb2xzLXN1IHRlc3QgZmFpbHVyZQ0KKyogW1NNWDQtNjUxXSAtIGFkZCBvc2dpIHNlcnZpY2UgcHJvcGVydHkgZm9yIGl0ZXN0cyB0ZXN0IGNsaWVudA0KKw0KKyoqIFdpc2gNCisqIFtTTVg0LTU0MF0gLSBKZXR0eSBidW5kbGUgNi4xLjI0DQorDQorDQorU2VlIHRoZSBSRUFETUUgZmlsZSBmb3IgbW9yZSBnZW5lcmFsIGluZm9ybWF0aW9ucyBhYm91dCBTZXJ2aWNlTWl4IDQuDQorDQorVGhhbmtzIHlvdSBmb3IgZG93bmxvYWRpbmcgU2VydmljZU1peC4gIEVuam95ICENCisNCitUaGUgU2VydmljZU1peCBUZWFtDQoraHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy90ZWFtLmh0bWwNCisNCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9wb20ueG1sIGIvdHJ1bmsvYXNzZW1ibHkvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTk4ZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYXNzZW1ibHkvcG9tLnhtbApAQCAtMCwwICsxLDk1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZmVhdHVyZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmZlYXR1cmVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5hcGFjaGUtc2VydmljZW1peDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEFzc2VtYmx5PC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgCisgICAgICAgIDwhLS0gS2FyYWYgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5rYXJhZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFwYWNoZS1rYXJhZjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx0eXBlPnppcDwvdHlwZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUua2FyYWY8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUta2FyYWY8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dHlwZT50YXIuZ3o8L3R5cGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmthcmFmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLWthcmFmPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+eG1sPC90eXBlPgorICAgICAgICAgICAgPGNsYXNzaWZpZXI+ZmVhdHVyZXM8L2NsYXNzaWZpZXI+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmthcmFmLmRlcGxveWVyPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5rYXJhZi5kZXBsb3llci53YXI8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDwhLS0gU2VydmljZU1peCBDb21wb25lbnRzIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtYmVhbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtY2FtZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWN4Zi1iYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtY3hmLXNlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1kcm9vbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWVpcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtZXhlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtZmlsZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtZnRwPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1odHRwPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1qbXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXNtcHA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LW1haWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LW9zd29ya2Zsb3c8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXF1YXJ0ejwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtc2F4b248L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXNjcmlwdGluZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtc25tcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdmFsaWRhdGlvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdmZzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC13c24yMDA1PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8IS0tIFNlcnZpY2VNaXggTk1SIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUtc2VydmljZW1peC1ubXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLXNlcnZpY2VtaXgtbm1yPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+dGFyLmd6PC90eXBlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFwYWNoZS1zZXJ2aWNlbWl4LW5tcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx0eXBlPnhtbDwvdHlwZT4KKyAgICAgICAgICAgIDxjbGFzc2lmaWVyPmZlYXR1cmVzPC9jbGFzc2lmaWVyPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgCisgICAgICAgIDwhLS0gU2VydmljZU1peCBTcGVjcyAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuYWN0aXZhdGlvbi1hcGktMS4xPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpheGItYXBpLSR7amF4Yi5hcGkudmVyc2lvbn08L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tamF4d3NfMi4yX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuanNyMzExLWFwaS0xLjE8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc2Fhai1hcGktMS4zPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNjcmlwdGluZy1hcGktMS4wPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnN0YXgtYXBpLTEuMDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBTZXJ2aWNlTWl4IFV0aWxzIGFuZCBTaGFyZWQgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1jb21tb248L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1zb2FwPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1zb2FwMjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBBcmllcyAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFyaWVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5hcmllcy51dGlsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hcmllcy50cmFuc2FjdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuYXJpZXMudHJhbnNhY3Rpb24ubWFuYWdlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBBY3RpdmVNUSAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtYmx1ZXByaW50PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvbnNvbGU8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1rYXJhZjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1wb29sPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLXJhPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmthaGFkYjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBDYW1lbCAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNhbWVsPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWwtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY2FtZWw8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC1zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDwhLS0gQ1hGIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLWJ1bmRsZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWJpbmRpbmdzLWpiaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LXRyYW5zcG9ydHMtamJpPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8IS0tIEdlcm9uaW1vIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1hbm5vdGF0aW9uXzEuMF9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWoyZWUtbWFuYWdlbWVudF8xLjFfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tanBhXzIuMF9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWp0YV8xLjFfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXdzLW1ldGFkYXRhXzIuMF9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8IS0tIFBBWCBXZWIgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9wczRqLnBheC53ZWI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYXgtd2ViLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vcHM0ai5wYXgud2ViPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGF4LXdlYi1leHRlbmRlci13YXI8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LndlYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC13ZWItZXh0ZW5kZXItd2hpdGVib2FyZDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vcHM0ai5wYXgud2ViPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGF4LXdlYi1qZXR0eTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vcHM0ai5wYXgud2ViPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGF4LXdlYi1qc3A8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LndlYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC13ZWItcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vcHM0ai5wYXgud2ViPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGF4LXdlYi1zcGk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDwhLS0gUEFYIFVSTCAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LnVybDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC11cmwtd2FyPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8IS0tIFNwcmluZyAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWFzbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYW9wPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1iZWFuczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctY29udGV4dDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctY29udGV4dC1zdXBwb3J0PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1leHByZXNzaW9uPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy10eDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBTcHJpbmcgT1NHaSAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2k8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctb3NnaS1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLW9zZ2ktZXh0ZW5kZXI8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2k8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctb3NnaS1pbzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBCdW5kbGVzIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYWJkZXJhPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hbnRsci1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hb3BhbGxpYW5jZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYXNtPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5iY2VsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jZ2xpYjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1iZWFudXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNvZGVjPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2RlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1jb2xsZWN0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1sYW5nPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWh0dHBjbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLW5ldDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbmV0PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXBvb2w8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtdmZzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5kcm9vbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmZhc3RpbmZvc2V0PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5ncm9vdnk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpheGItaW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamRvbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamR0LWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpldHR5PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qcnVieTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuanNtcHA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm12ZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm5lZXRoaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3BlbnNhbWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm9zY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3N3b3JrZmxvdzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3JvPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5wcm9wZXJ0eXNldDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMucXVhcnR6PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5yaGlubzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc2Fhai1pbXBsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zYXhvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc25tcDRqPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy52ZWxvY2l0eTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMud3NkbDRqPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54YWxhbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGVyY2VzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxiZWFuczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1sc2VjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxyZXNvbHZlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBPdGhlciBEZXBlbmRlbmNpZXMgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5jb2RlLnNjcmlwdGVuZ2luZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zY3JpcHRlbmdpbmVzLWphdmFzY3JpcHQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuc2NyaXB0ZW5naW5lczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNjcmlwdGVuZ2luZXMtanJ1Ynk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuc2NyaXB0ZW5naW5lczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNjcmlwdGVuZ2luZXMtZ3Jvb3Z5PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnN1bi54bWwucGFyc2VyczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheHAtcmk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5tYWlsPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWFpbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5mdXNlc291cmNlLmNvbW1vbm1hbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbWFuYWdlbWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY29tbW9uczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtamV4bDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUud3MuY29tbW9ucy5zY2hlbWE8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5YbWxTY2hlbWE8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuYXhpb208L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5heGlvbS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuYXhpb208L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5heGlvbS1pbXBsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS53cy5zZWN1cml0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndzczRqPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS54YmVhbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnhiZWFuLWJsdWVwcmludDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUueGJlYW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD54YmVhbi1jbGFzc2xvYWRlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUueGJlYW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD54YmVhbi1zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMuamV0dGlzb248L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qZXR0aXNvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0YXgyLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndvb2RzdG94LWNvcmUtYXNsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5vZGU8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vZGUtamJpLWthcmFmPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+eG1sPC90eXBlPgorICAgICAgICAgICAgPGNsYXNzaWZpZXI+ZmVhdHVyZXM8L2NsYXNzaWZpZXI+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm9kZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9kZS1qYmkta2FyYWY8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAKKyAgICA8YnVpbGQ+CisgICAgICAgIDxyZXNvdXJjZXM+CisgICAgICAgICAgICA8cmVzb3VyY2U+CisgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT4ke3Byb2plY3QuYmFzZWRpcn0vc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzPC9kaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgPGZpbHRlcmluZz50cnVlPC9maWx0ZXJpbmc+CisgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICA8L3Jlc291cmNlPgorICAgICAgICA8L3Jlc291cmNlcz4KKyAgICAgICAgPGZpbHRlcnM+CisgICAgICAgICAgICA8ZmlsdGVyPnRhcmdldC9maWx0ZXIudHh0PC9maWx0ZXI+CisgICAgICAgIDwvZmlsdGVycz4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmNyZWF0ZS1wcm9wPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhc2tzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFza2RlZiByZXNvdXJjZT0ibmV0L3NmL2FudGNvbnRyaWIvYW50Y29udHJpYi5wcm9wZXJ0aWVzIiBjbGFzc3BhdGhyZWY9Im1hdmVuLnBsdWdpbi5jbGFzc3BhdGgiIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhbnQucmVnZXhwLnJlZ2V4cGltcGwiIHZhbHVlPSJvcmcuYXBhY2hlLnRvb2xzLmFudC51dGlsLnJlZ2V4cC5KZGsxNFJlZ2V4cFJlZ2V4cCIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im12IiB2YWx1ZT0iJHtrYXJhZi52ZXJzaW9ufSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iTWF2ZW4gdmVyc2lvbjogJHttdn0iIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eXJlZ2V4IHByb3BlcnR5PSJvdi5wMSIgaW5wdXQ9IiR7bXZ9IiByZWdleHA9IihcZCspKD86XC4oXGQrKSg/OlwuKFxkKykpPyk/KD86W15hLXpBLVowLTldKC4qKSk/IiByZXBsYWNlPSJcMSIgZGVmYXVsdFZhbHVlPSIwIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHlyZWdleCBwcm9wZXJ0eT0ib3YucDIiIGlucHV0PSIke212fSIgcmVnZXhwPSIoXGQrKSg/OlwuKFxkKykoPzpcLihcZCspKT8pPyg/OlteYS16QS1aMC05XSguKikpPyIgcmVwbGFjZT0iLlwyIiBkZWZhdWx0VmFsdWU9Ii4wIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHlyZWdleCBwcm9wZXJ0eT0ib3YucDMiIGlucHV0PSIke212fSIgcmVnZXhwPSIoXGQrKSg/OlwuKFxkKykoPzpcLihcZCspKT8pPyg/OlteYS16QS1aMC05XSguKikpPyIgcmVwbGFjZT0iLlwzIiBkZWZhdWx0VmFsdWU9Ii4wIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHlyZWdleCBwcm9wZXJ0eT0ib3YucDQiIGlucHV0PSIke212fSIgcmVnZXhwPSIoXGQrKSg/OlwuKFxkKykoPzpcLihcZCspKT8pPyg/OlteYS16QS1aMC05XSguKikpPyIgcmVwbGFjZT0iLlw0IiBkZWZhdWx0VmFsdWU9IiIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5cmVnZXggcHJvcGVydHk9Im92LnAxYSIgaW5wdXQ9IiR7b3YucDF9IiByZWdleHA9IiguKykiIHJlcGxhY2U9IlwxIiBkZWZhdWx0VmFsdWU9IjAiIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eXJlZ2V4IHByb3BlcnR5PSJvdi5wMmEiIGlucHV0PSIke292LnAyfSIgcmVnZXhwPSIoXC4uKykiIHJlcGxhY2U9IlwxIiBkZWZhdWx0VmFsdWU9Ii4wIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHlyZWdleCBwcm9wZXJ0eT0ib3YucDNhIiBpbnB1dD0iJHtvdi5wM30iIHJlZ2V4cD0iKFwuLispIiByZXBsYWNlPSJcMSIgZGVmYXVsdFZhbHVlPSIuMCIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5cmVnZXggcHJvcGVydHk9Im92LnA0YSIgaW5wdXQ9IiR7b3YucDR9IiByZWdleHA9IihcLi4rKSIgcmVwbGFjZT0iXDEiIGRlZmF1bHRWYWx1ZT0iIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3YiIHZhbHVlPSIke292LnAxYX0ke292LnAyYX0ke292LnAzYX0ke292LnA0YX0iIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9Ik9TR2kgdmVyc2lvbjogJHtvdn0iIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxta2RpciBkaXI9InRhcmdldCIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0ia2FyYWYub3NnaS52ZXJzaW9uID0gJHtvdn0iIGZpbGU9InRhcmdldC9maWx0ZXIudHh0IiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFza3M+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUua2FyYWYudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5mZWF0dXJlcy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtrYXJhZi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hZGQtZmVhdHVyZXMtdG8tcmVwbzwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hZGQtZmVhdHVyZXMtdG8tcmVwbzwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yPm12bjpvcmcuYXBhY2hlLmthcmFmL2FwYWNoZS1rYXJhZi8ke2thcmFmLnZlcnNpb259L3htbC9mZWF0dXJlczwvZGVzY3JpcHRvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc2NyaXB0b3I+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIvYXBhY2hlLXNlcnZpY2VtaXgtbm1yLyR7c2VydmljZW1peC5ubXIudmVyc2lvbn0veG1sL2ZlYXR1cmVzPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcj5maWxlOiR7YmFzZWRpcn0vdGFyZ2V0L2NsYXNzZXMvYWN0aXZlbXEtZmVhdHVyZXMueG1sPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcj5maWxlOiR7YmFzZWRpcn0vdGFyZ2V0L2NsYXNzZXMvY2FtZWwtZmVhdHVyZXMueG1sPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcj5tdm46b3JnLmFwYWNoZS5vZGUvb2RlLWpiaS1rYXJhZi8ke29kZS52ZXJzaW9ufS94bWwvZmVhdHVyZXM8L2Rlc2NyaXB0b3I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yPmZpbGU6JHtiYXNlZGlyfS90YXJnZXQvY2xhc3Nlcy9mZWF0dXJlcy54bWw8L2Rlc2NyaXB0b3I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXNjcmlwdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPmFjdGl2ZW1xPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5hY3RpdmVtcS1ibHVlcHJpbnQ8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPmFjdGl2ZW1xLWJyb2tlcjwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+Y2FtZWw8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPmpiaS1jbHVzdGVyPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT53YXI8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VydmljZU1peCBDb21wb25lbnRzIC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5zZXJ2aWNlbWl4LWN4Zi1iYzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+c2VydmljZW1peC1maWxlPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5zZXJ2aWNlbWl4LWZ0cDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+c2VydmljZW1peC1odHRwPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5zZXJ2aWNlbWl4LWptczwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+c2VydmljZW1peC1tYWlsPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5zZXJ2aWNlbWl4LWJlYW48L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnNlcnZpY2VtaXgtY2FtZWw8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnNlcnZpY2VtaXgtY3hmLXNlPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5zZXJ2aWNlbWl4LWRyb29sczwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+c2VydmljZW1peC1laXA8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnNlcnZpY2VtaXgtb3N3b3JrZmxvdzwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+c2VydmljZW1peC1xdWFydHo8L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnNlcnZpY2VtaXgtc2NyaXB0aW5nPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5zZXJ2aWNlbWl4LXZhbGlkYXRpb248L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnNlcnZpY2VtaXgtc2F4b248L2ZlYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPnNlcnZpY2VtaXgtd3NuMjAwNTwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+c2VydmljZW1peC1zbm1wPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZT5zZXJ2aWNlbWl4LXZmczwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlYXR1cmU+c2VydmljZW1peC1zbXBwPC9mZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmVhdHVyZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcG9zaXRvcnk+dGFyZ2V0L2ZlYXR1cmVzLXJlcG88L3JlcG9zaXRvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcmVzb3VyY2VzLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5maWx0ZXI8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cmVzb3VyY2VzPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIAorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Y29weTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jb3B5PC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW1zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmZlYXR1cmVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmZlYXR1cmVzLmJyYW5kaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT50YXJnZXQvZGVwZW5kZW5jaWVzPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzdEZpbGVOYW1lPnNlcnZpY2VtaXgtdmVyc2lvbi5qYXI8L2Rlc3RGaWxlTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD51bnBhY2stdW5peDwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmthcmFmPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLWthcmFmPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGU+dGFyLmd6PC90eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT50YXJnZXQvZGVwZW5kZW5jaWVzL3VuaXg8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLXNlcnZpY2VtaXgtbm1yPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGU+dGFyLmd6PC90eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT50YXJnZXQvZGVwZW5kZW5jaWVzL3VuaXg8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD51bnBhY2std2luPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnVucGFjazwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUua2FyYWY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUta2FyYWY8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXMvd2luPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFwYWNoZS1zZXJ2aWNlbWl4LW5tcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlPnppcDwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+dGFyZ2V0L2RlcGVuZGVuY2llcy93aW48L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YnVpbGQtaGVscGVyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hdHRhY2gtYXJ0aWZhY3RzPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wYWNrYWdlPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hdHRhY2gtYXJ0aWZhY3Q8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGU+dGFyZ2V0L2NsYXNzZXMvZmVhdHVyZXMueG1sPC9maWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGU+eG1sIDwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzc2lmaWVyPmZlYXR1cmVzPC9jbGFzc2lmaWVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke21hdmVuLWFzc2VtYmx5LXBsdWdpbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD51bml4LWJpbjwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2luZ2xlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc2NyaXB0b3I+c3JjL21haW4vZGVzY3JpcHRvcnMvdW5peC1iaW4ueG1sPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbmFsTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH0tJHtwcm9qZWN0LnZlcnNpb259PC9maW5hbE5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhckxvbmdGaWxlTW9kZT5nbnU8L3RhckxvbmdGaWxlTW9kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+d2luZG93cy1iaW48L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNpbmdsZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yPnNyYy9tYWluL2Rlc2NyaXB0b3JzL3dpbmRvd3MtYmluLnhtbDwvZGVzY3JpcHRvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaW5hbE5hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9LSR7cHJvamVjdC52ZXJzaW9ufTwvZmluYWxOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD51bml4LXNyYzwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2luZ2xlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc2NyaXB0b3I+c3JjL21haW4vZGVzY3JpcHRvcnMvdW5peC1zcmMueG1sPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhckxvbmdGaWxlTW9kZT5nbnU8L3RhckxvbmdGaWxlTW9kZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+d2luZG93cy1zcmM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNpbmdsZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yPnNyYy9tYWluL2Rlc2NyaXB0b3JzL3dpbmRvd3Mtc3JjLnhtbDwvZGVzY3JpcHRvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKyAgICA8cHJvZmlsZXM+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmFzc2VtYmx5LXNyYzwvaWQ+CisgICAgICAgICAgICA8YnVpbGQ+CisgICAgICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hc3NlbWJseS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+dW5peC1zcmM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmF0dGFjaGVkPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcj5zcmMvbWFpbi9kZXNjcmlwdG9ycy91bml4LXNyYy54bWw8L2Rlc2NyaXB0b3I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlkPndpbmRvd3Mtc3JjPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hdHRhY2hlZDwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc2NyaXB0b3I+c3JjL21haW4vZGVzY3JpcHRvcnMvd2luZG93cy1zcmMueG1sPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXNjcmlwdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgICAgICAgICA8L2J1aWxkPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vYXBwZW5kZWQtcmVzb3VyY2VzL01FVEEtSU5GL0xJQ0VOU0Uudm0gYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9hcHBlbmRlZC1yZXNvdXJjZXMvTUVUQS1JTkYvTElDRU5TRS52bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZiNTliCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vYXBwZW5kZWQtcmVzb3VyY2VzL01FVEEtSU5GL0xJQ0VOU0Uudm0KQEAgLTAsMCArMSwzOSBAQAorIyMKKyMjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMjCisjIyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIworIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIyB1bmRlciB0aGUgTGljZW5zZS4KKyMjCisjIyAkRGF0ZTogMjAwOC0wMy0wOSAyMzoxNzowNiAtMDcwMCAoU3VuLCAwOSBNYXIgMjAwOCkgJCAkUmV2OiA2MzU0NDYgJAorIyMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FwYWNoZSBTZXJ2aWNlTWl4IGluY2x1ZGVzIGEgbnVtYmVyIG9mIGNvbXBvbmVudHMgYW5kIGxpYnJhcmllcyB3aXRoIAorc2VwYXJhdGUgY29weXJpZ2h0IG5vdGljZXMgYW5kIGxpY2Vuc2UgdGVybXMuIFlvdXIgdXNlIG9mIHRob3NlIAorY29tcG9uZW50cyBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGZvbGxvd2luZyAKK2xpY2Vuc2VzLiAKKworI3NldCAoICRhcGFjaGVUeHQgPSAiVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCIgKQorI2ZvcmVhY2ggKCAkcHJvamVjdCBpbiAkcHJvamVjdHMgKQorI2ZvcmVhY2ggKCAkbGljZW5zZSBpbiAkcHJvamVjdC5saWNlbnNlcykKKyNpZiAoICEgKCRhcGFjaGVUeHQgPT0gJGxpY2Vuc2UubmFtZSkgKSAKKworJHByb2plY3QubmFtZSAjaWYgKCRwcm9qZWN0LnVybCkoJHByb2plY3QudXJsKSNlbmQgJHByb2plY3QuYXJ0aWZhY3QKKyAgICBMaWNlbnNlOiAkbGljZW5zZS5uYW1lICNpZiAoJGxpY2Vuc2UudXJsKSAoJGxpY2Vuc2UudXJsKSNlbmQKKworI2VuZAorI2VuZAorI2VuZApkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vYXBwZW5kZWQtcmVzb3VyY2VzL01FVEEtSU5GL05PVElDRSBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2FwcGVuZGVkLXJlc291cmNlcy9NRVRBLUlORi9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4MzBlMwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2FwcGVuZGVkLXJlc291cmNlcy9NRVRBLUlORi9OT1RJQ0UKQEAgLTAsMCArMSwzNSBAQAorVGhpcyBwcm9kdWN0IGFsc28gaW5jbHVkZXMgc2NoZW1hcyBhbmQgc3BlY2lmaWNhdGlvbiBkZXZlbG9wZWQgYnk6CisgICAgICAtIHRoZSBXM0MgY29uc29ydGl1bSAoaHR0cDovL3d3dy53M2Mub3JnKQorICAgICAgKGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSkKKyAgICAgIAorVGhpcyBwcm9kdWN0IGFsc28gaW5jbHVkZXMgV1MtKiBzY2hlbWFzIGRldmVsb3BlZCBieSBJbnRlcm5hdGlvbmFsCisgICBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiwgTWljcm9zb2Z0IENvcnBvcmF0aW9uLCBCRUEgU3lzdGVtcywgCisgICBUSUJDTyBTb2Z0d2FyZSwgU0FQIEFHLCBTb25pYyBTb2Z0d2FyZSwgYW5kIFZlcmlTaWduCisgICAoaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8yMDAzLTAyLTExLnhzZCkKKyAgIChodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA0LzA4L2FkZHJlc3NpbmcvKQorICAgKGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvaHR0cCkKKyAgIChodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3dzcm0ueHNkKQorICAgKGh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZy93cy1hZGRyLnhzZCkKKworVGhpcyBwcm9kdWN0IGFsc28gaW5jbHVkZXMgTVRPU0kgd3NkbCBhbmQgc2NoZW1hcyBkZXZlbG9wZWQgYnkgdGhlCitUZWxlTWFuYWdlbWVudCBGb3J1bSAoaHR0cDovL3d3dy50bWZvcnVtLm9yZy9icm93c2UuYXNweCkuIFRoZSBvcmlnaW5hbAorTVRPU0kgd3NkbCBhbmQgc2NoZW1hcyBjYW4gYmUgZG93bmxvYWQgZnJvbQorKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbXRvc2ktcmkpCisKK0phdmEgY2xhc3NlcyAoc291cmNlIGFuZCBiaW5hcnkpIHVuZGVyIG9yZy5hcGFjaGUuY3hmLmpheHdzLmphdmFlZQorYXJlIGdlbmVyYXRlZCBmcm9tIHNjaGVtYSBhdmFpbGFibGUgaGVyZToKKyAgIChodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvamF2YWVlXzUueHNkKQorCitQb3J0aW9ucyBvZiB0aGUgaW5jbHVkZWQgWG1sU2NoZW1hIGxpYnJhcnkgYXJlIENvcHlyaWdodCAyMDA2IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4KKworQWRkaXRpb25hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgbGljZW5zZSB0ZXJtcyBhcHBsaWNhYmxlIGFyZQorcHJlc2VudCBpbiB0aGUgbGljZW5zZXMgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgorCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgSmF2YSBjbGFzc2VzIG9yaWdpbmFsbHkgcmVsZWFzZWQgdW5kZXIgdGhlIENvbW1vbiAKK0RldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgYW5kIHJlbGljZW5jZWQgaGVyZSB1bmRlciB0aGUKK0FwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLiBUaGVzZSBpbmNsdWRlOgorICBKYXZhIEFjdGl2YXRpb24gQVBJIChqYXZheC5hY3RpdmF0aW9uLiopCisgIEphdmEgUGVyc2lzdGVuY2UgQVBJIChqYXZheC5wZXJzaXN0ZW5jZS4qKQorICBKYXZhIEFQSSBmb3IgUkVTVGZ1bCBXZWIgU2VydmljZXMgKGphdmF4LnhtbC5ycy4qKQorQW55IGFkZGl0aW9uYWwgcmlnaHRzIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSB0aGlzIHByb2plY3QKK2Fsb25lLCBhbmQgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvci4gCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kZXNjcmlwdG9ycy91bml4LWJpbi54bWwgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kZXNjcmlwdG9ycy91bml4LWJpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0ODBjOAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rlc2NyaXB0b3JzL3VuaXgtYmluLnhtbApAQCAtMCwwICsxLDQ0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGFzc2VtYmx5PgorICAgIDxpZD48L2lkPiA8IS0tIGludGVudGlvbmFsbHkgbGVmdCBibGFuayAtPiBodHRwOi8vamlyYS5jb2RlaGF1cy5vcmcvYnJvd3NlL01BU1NFTUJMWS0zMDEgLS0+CisgICAgPGZvcm1hdHM+CisgICAgICAgIDxmb3JtYXQ+dGFyLmd6PC9mb3JtYXQ+CisgICAgPC9mb3JtYXRzPgorICAgIDxmaWxlU2V0cz4KKworICAgICAgICA8IS0tIEV4cGFuZGVkIFNlcnZpY2VNaXggUnVudGltZSAtLT4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXMvdW5peC9hcGFjaGUta2FyYWYtJHtrYXJhZi52ZXJzaW9ufTwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgIDxleGNsdWRlPioqL2RlbW9zLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICA8ZXhjbHVkZT5iaW4vKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgIDxleGNsdWRlPmV0Yy9zeXN0ZW0ucHJvcGVydGllczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+ZXRjL29yZy5hcGFjaGUua2FyYWYuZmVhdHVyZXMuY2ZnPC9leGNsdWRlPgorICAgICAgICAgICAgICA8ZXhjbHVkZT5ldGMvb3JnLm9wczRqLnBheC5sb2dnaW5nLmNmZzwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+ZXRjL3VzZXJzLnByb3BlcnRpZXM8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgIDxleGNsdWRlPmV0Yy9jdXN0b20ucHJvcGVydGllczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+ZXRjL2pyZS5wcm9wZXJ0aWVzPC9leGNsdWRlPgorICAgICAgICAgICAgICA8ZXhjbHVkZT5MSUNFTlNFPC9leGNsdWRlPgorICAgICAgICAgICAgICA8ZXhjbHVkZT5OT1RJQ0U8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgIDxleGNsdWRlPlJFQURNRTwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+UkVMRUFTRS1OT1RFUzwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+a2FyYWYtbWFudWFsKjwvZXhjbHVkZT4KKyAgICAgICAgICAgIDwvZXhjbHVkZXM+CisgICAgICAgIDwvZmlsZVNldD4KKworICAgICAgICA8IS0tIENvcHkgb3ZlciBiaW4vc2VydmljZW1peCBzZXBhcmF0ZWx5IHRvIGdldCB0aGUgY29ycmVjdCBmaWxlIG1vZGUgLS0+CisgICAgICAgIDxmaWxlU2V0PgorICAgICAgICAgICAgPGRpcmVjdG9yeT50YXJnZXQvZGVwZW5kZW5jaWVzL3VuaXgvYXBhY2hlLWthcmFmLSR7a2FyYWYudmVyc2lvbn08L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+Lzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICA8aW5jbHVkZT5iaW4vYWRtaW48L2luY2x1ZGU+CisgICAgICAgICAgICAgIDxpbmNsdWRlPmJpbi9rYXJhZjwvaW5jbHVkZT4gIDwhLS0gd2UgbmVlZCB0aGlzIG9uZSBpbiBoZXJlIGZvciBhZG1pbjpjcmVhdGUnZCBpbnN0YW5jZXMgdG8gd29yayAtLT4KKyAgICAgICAgICAgICAgPGluY2x1ZGU+YmluL3N0YXJ0PC9pbmNsdWRlPgorICAgICAgICAgICAgICA8aW5jbHVkZT5iaW4vc3RvcDwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDc1NTwvZmlsZU1vZGU+CisgICAgICAgIDwvZmlsZVNldD4KKworICAgICAgICA8IS0tIENvcHkgb3ZlciBrYXJhZiBkZW1vIHRvIGV4YW1wbGVzIGZvbGRlciAtLT4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXMvdW5peC9hcGFjaGUta2FyYWYtJHtrYXJhZi52ZXJzaW9ufS9kZW1vczwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMva2FyYWYtZGVtb3M8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgIDxpbmNsdWRlPnBvbS54bWw8L2luY2x1ZGU+CisgICAgICAgICAgICAgIDxpbmNsdWRlPioqL3dlYi8qKjwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZmlsZVNldD4KKyAgICAgICAKKyAgICAgICA8IS0tIENvcHkgb3ZlciBhbnQgZmlsZXMgLS0+CisgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXMvdW5peC9hcGFjaGUtc2VydmljZW1peC1ubXItJHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufS9hbnQ8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2FudDwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICA8L2ZpbGVTZXQ+CisKKyAgICAgICA8IS0tIENvcHkgb3ZlciBubXIgZXhhbXBsZXMgZmlsZXMgLS0+CisgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXMvdW5peC9hcGFjaGUtc2VydmljZW1peC1ubXItJHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufS9leGFtcGxlczwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+cG9tLnhtbDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9pdGVzdHMvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0LyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5jbGFzc3BhdGg8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLnByb2plY3Q8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLnNldHRpbmdzLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgPC9leGNsdWRlcz4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgPC9maWxlU2V0PgorCisgICAgICAgIDwhLS0gQ29weSBsaWNlbnNlIGFuZCBvdGhlciBmaWxlcyBmcm9tIHJvb3QgLS0+CisgICAgICAgIDxmaWxlU2V0PgorICAgICAgICAgICAgPGRpcmVjdG9yeT4ke2Jhc2VkaXJ9Ly4uPC9kaXJlY3Rvcnk+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5SRUFETUU8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+UkVMRUFTRSo8L2luY2x1ZGU+CisgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgPC9maWxlU2V0PgorCisgICAgICAgIDwhLS0gQ29weSBvdmVyIGphciBmaWxlcyAtLT4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXM8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5zZXJ2aWNlbWl4LXZlcnNpb24uamFyPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2xpYi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgPC9maWxlU2V0PgorCisgICAgICAgIDwhLS0gQ29weSBvdmVyIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBnZXQgdW5peCBsaW5lIGVuZGluZ3MgLS0+CisgICAgICAgIDxmaWxlU2V0PgorICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dDwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICA8L2ZpbGVTZXQ+ICAgICAgICAKKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9jbGFzc2VzL2V0YzwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXRjLzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgPC9maWxlU2V0PgorICAgICAgIDxmaWxlU2V0PgorICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9kaXN0cmlidXRpb24vdW5peC1zaGVsbDwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA3NTU8L2ZpbGVNb2RlPgorICAgICAgICA8L2ZpbGVTZXQ+CisKKyAgICAgICAgPCEtLSBDb3B5IG92ZXIgdGhlIGV4YW1wbGVzIC0tPgorICAgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS8uLi9leGFtcGxlczwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICAgICAgPGV4Y2x1ZGVzPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPnBvbS54bWw8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPCEtLXdlIG5lZWQgYWRkIGZpbHRlcmVkIFJFQURNRS50eHQsIHNvIGV4Y2x1ZGUgdGhlIHJhdyBvbmUgaGVyZS0tPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL1JFQURNRS50eHQ8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovaXRlc3RzLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8uY2xhc3NwYXRoPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5wcm9qZWN0PC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5zZXR0aW5ncy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi93c2RsLWZpcnN0LyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL2xvYW4tYnJva2VyLWJwZWwvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICA8L2ZpbGVTZXQ+CisgICAgICAgIAorICAgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9mZWF0dXJlcy1yZXBvPC9kaXJlY3Rvcnk+CisgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT5zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgPC9maWxlU2V0PgorCisgICAgPC9maWxlU2V0cz4KKworICAgIDxmaWxlcz4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vdGFyZ2V0L2RlcGVuZGVuY2llcy91bml4L2FwYWNoZS1rYXJhZi0ke2thcmFmLnZlcnNpb259L2Jpbi9rYXJhZjwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vYmluLzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGRlc3ROYW1lPnNlcnZpY2VtaXg8L2Rlc3ROYW1lPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA3NTU8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvZGVwZW5kZW5jaWVzL3NlcnZpY2VtaXgtdmVyc2lvbi5qYXI8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2xpYi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvY2xhc3Nlcy9mZWF0dXJlcy54bWw8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+c3lzdGVtL29yZy9hcGFjaGUvc2VydmljZW1peC8ke2FydGlmYWN0SWR9LyR7dmVyc2lvbn08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxkZXN0TmFtZT4ke2FydGlmYWN0SWR9LSR7dmVyc2lvbn0tZmVhdHVyZXMueG1sPC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vdGFyZ2V0L2NsYXNzZXMvYWN0aXZlbXEtZmVhdHVyZXMueG1sPC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PnN5c3RlbS9vcmcvYXBhY2hlL2FjdGl2ZW1xL2FjdGl2ZW1xLWthcmFmLyR7YWN0aXZlbXEudmVyc2lvbn08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxkZXN0TmFtZT5hY3RpdmVtcS1rYXJhZi0ke2FjdGl2ZW1xLnZlcnNpb259LWZlYXR1cmVzLnhtbDwvZGVzdE5hbWU+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9L3RhcmdldC9jbGFzc2VzL2NhbWVsLWZlYXR1cmVzLnhtbDwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT5zeXN0ZW0vb3JnL2FwYWNoZS9jYW1lbC9rYXJhZi9hcGFjaGUtY2FtZWwvJHtjYW1lbC52ZXJzaW9ufTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGRlc3ROYW1lPmFwYWNoZS1jYW1lbC0ke2NhbWVsLnZlcnNpb259LWZlYXR1cmVzLnhtbDwvZGVzdE5hbWU+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisKKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vdGFyZ2V0L21hdmVuLXNoYXJlZC1hcmNoaXZlLXJlc291cmNlcy9NRVRBLUlORi9MSUNFTlNFPC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxkZXN0TmFtZT5MSUNFTlNFPC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vdGFyZ2V0L21hdmVuLXNoYXJlZC1hcmNoaXZlLXJlc291cmNlcy9NRVRBLUlORi9OT1RJQ0U8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+Lzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGRlc3ROYW1lPk5PVElDRTwvZGVzdE5hbWU+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisKKyAgICAgICAgPCEtLWZpbHRlcmluZyBSRUFETUUudHh0LS0+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzLzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9icmlkZ2UvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvYnJpZGdlPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi1qYXhycy9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jeGYtamF4cnM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9icmlkZ2UtY2FtZWwvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvYnJpZGdlLWNhbWVsPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2NhbWVsL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2NhbWVsPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2NhbWVsLWJsdWVwcmludC9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQ8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3QvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Q8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY2FtZWwtb3NnaS9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jYW1lbC1vc2dpPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2NhbWVsLW5tci9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jYW1lbC1ubXI8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQ8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY3hmLW5tci9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jeGYtbm1yPC9vdXRwdXREaXJlY3Rvcnk+ICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi1vc2dpL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi1vc2dpPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi13cy1ybS9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jeGYtd3Mtcm08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKworICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXI8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvc2ltcGxlL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL3NpbXBsZTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvY2xhc3Nlcy9wb20ueG1sPC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICA8L2ZpbGVzPgorCisgICAgPGRlcGVuZGVuY3lTZXRzPgorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2xpYi9lbmRvcnNlZDwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPmNvbS5zdW4ueG1sLnBhcnNlcnM6amF4cC1yaTwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKyAgICAgICAgPGRlcGVuZGVuY3lTZXQ+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXRGaWxlTmFtZU1hcHBpbmc+b3JnL2FwYWNoZS9zZXJ2aWNlbWl4L25tci8ke2FydGlmYWN0LmFydGlmYWN0SWR9LyR7YXJ0aWZhY3QuYmFzZVZlcnNpb259LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0tJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0ke2Rhc2hDbGFzc2lmaWVyP30uJHthcnRpZmFjdC5leHRlbnNpb259PC9vdXRwdXRGaWxlTmFtZU1hcHBpbmc+CisgICAgICAgICAgICA8dW5wYWNrPmZhbHNlPC91bnBhY2s+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tcjphcGFjaGUtc2VydmljZW1peC1ubXI6eG1sOmZlYXR1cmVzPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgPC9kZXBlbmRlbmN5U2V0PgorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L3N5c3RlbTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dEZpbGVOYW1lTWFwcGluZz5vcmcvYXBhY2hlL29kZS8ke2FydGlmYWN0LmFydGlmYWN0SWR9LyR7YXJ0aWZhY3QuYmFzZVZlcnNpb259LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0tJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0ke2Rhc2hDbGFzc2lmaWVyP30uJHthcnRpZmFjdC5leHRlbnNpb259PC9vdXRwdXRGaWxlTmFtZU1hcHBpbmc+CisgICAgICAgICAgICA8dW5wYWNrPmZhbHNlPC91bnBhY2s+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5vZGU6b2RlLWpiaS1rYXJhZjp4bWw6ZmVhdHVyZXM8L2luY2x1ZGU+CisgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICA8L2RlcGVuZGVuY3lTZXQ+CisgICAgICAgIDxkZXBlbmRlbmN5U2V0PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vc3lzdGVtPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8dW5wYWNrPmZhbHNlPC91bnBhY2s+CisgICAgICAgICAgICA8dXNlUHJvamVjdEFydGlmYWN0PmZhbHNlPC91c2VQcm9qZWN0QXJ0aWZhY3Q+CisgICAgICAgICAgICA8b3V0cHV0RmlsZU5hbWVNYXBwaW5nPm9yZy9hcGFjaGUvZmVsaXgvJHthcnRpZmFjdC5hcnRpZmFjdElkfS8ke2FydGlmYWN0LmJhc2VWZXJzaW9ufS8ke2FydGlmYWN0LmFydGlmYWN0SWR9LSR7YXJ0aWZhY3QuYmFzZVZlcnNpb259JHtkYXNoQ2xhc3NpZmllcj99LiR7YXJ0aWZhY3QuZXh0ZW5zaW9ufTwvb3V0cHV0RmlsZU5hbWVNYXBwaW5nPgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuZmVsaXg6b3JnLm9zZ2kuY29tcGVuZGl1bTwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKyAgICAgICAgPGRlcGVuZGVuY3lTZXQ+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDx1bnBhY2s+ZmFsc2U8L3VucGFjaz4KKyAgICAgICAgICAgIDx1c2VQcm9qZWN0QXJ0aWZhY3Q+ZmFsc2U8L3VzZVByb2plY3RBcnRpZmFjdD4KKyAgICAgICAgICAgIDxvdXRwdXRGaWxlTmFtZU1hcHBpbmc+b3JnL3NwcmluZ2ZyYW1ld29yay8ke2FydGlmYWN0LmFydGlmYWN0SWR9LyR7YXJ0aWZhY3QuYmFzZVZlcnNpb259LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0tJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0ke2Rhc2hDbGFzc2lmaWVyP30uJHthcnRpZmFjdC5leHRlbnNpb259PC9vdXRwdXRGaWxlTmFtZU1hcHBpbmc+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLnNwcmluZ2ZyYW1ld29yazpzcHJpbmctYW9wPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5zcHJpbmdmcmFtZXdvcms6c3ByaW5nLWJlYW5zPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5zcHJpbmdmcmFtZXdvcms6c3ByaW5nLWNvbnRleHQ8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLnNwcmluZ2ZyYW1ld29yazpzcHJpbmctY29yZTwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuc3ByaW5nZnJhbWV3b3JrOnNwcmluZy10eDwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKyAgICAgICAgPGRlcGVuZGVuY3lTZXQ+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDx1bnBhY2s+ZmFsc2U8L3VucGFjaz4KKyAgICAgICAgICAgIDx1c2VQcm9qZWN0QXJ0aWZhY3Q+ZmFsc2U8L3VzZVByb2plY3RBcnRpZmFjdD4KKyAgICAgICAgICAgIDxvdXRwdXRGaWxlTmFtZU1hcHBpbmc+b3JnL3NwcmluZ2ZyYW1ld29yay9vc2dpLyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0vJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0vJHthcnRpZmFjdC5hcnRpZmFjdElkfS0ke2FydGlmYWN0LmJhc2VWZXJzaW9ufSR7ZGFzaENsYXNzaWZpZXI/fS4ke2FydGlmYWN0LmV4dGVuc2lvbn08L291dHB1dEZpbGVOYW1lTWFwcGluZz4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2k6c3ByaW5nLW9zZ2ktY29yZTwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2k6c3ByaW5nLW9zZ2ktZXh0ZW5kZXI8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpOnNwcmluZy1vc2dpLWlvPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgPC9kZXBlbmRlbmN5U2V0PgorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L3N5c3RlbTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPHVucGFjaz5mYWxzZTwvdW5wYWNrPgorICAgICAgICAgICAgPHVzZVByb2plY3RBcnRpZmFjdD5mYWxzZTwvdXNlUHJvamVjdEFydGlmYWN0PgorICAgICAgICAgICAgPG91dHB1dEZpbGVOYW1lTWFwcGluZz5vcmcvYXBhY2hlL2dlcm9uaW1vL3NwZWNzLyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0vJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0vJHthcnRpZmFjdC5hcnRpZmFjdElkfS0ke2FydGlmYWN0LmJhc2VWZXJzaW9ufSR7ZGFzaENsYXNzaWZpZXI/fS4ke2FydGlmYWN0LmV4dGVuc2lvbn08L291dHB1dEZpbGVOYW1lTWFwcGluZz4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzOmdlcm9uaW1vLXNlcnZsZXRfMy4wX3NwZWM8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczpnZXJvbmltby1hbm5vdGF0aW9uXzEuMF9zcGVjPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgPC9kZXBlbmRlbmN5U2V0PgorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L3N5c3RlbTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPHVucGFjaz5mYWxzZTwvdW5wYWNrPgorICAgICAgICAgICAgPHVzZVByb2plY3RBcnRpZmFjdD5mYWxzZTwvdXNlUHJvamVjdEFydGlmYWN0PgorICAgICAgICAgICAgPG91dHB1dEZpbGVOYW1lTWFwcGluZz5vcmcvYXBhY2hlL3NlcnZpY2VtaXgvYnVuZGxlcy8ke2FydGlmYWN0LmFydGlmYWN0SWR9LyR7YXJ0aWZhY3QuYmFzZVZlcnNpb259LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0tJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0ke2Rhc2hDbGFzc2lmaWVyP30uJHthcnRpZmFjdC5leHRlbnNpb259PC9vdXRwdXRGaWxlTmFtZU1hcHBpbmc+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW9wYWxsaWFuY2U8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY2dsaWI8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamF4cC1yaTwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcm88L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1qZXhsPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtdmZzPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29kZWM8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1odHRwY2xpZW50PC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgPC9kZXBlbmRlbmN5U2V0PgorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L3N5c3RlbTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPHVucGFjaz5mYWxzZTwvdW5wYWNrPgorICAgICAgICAgICAgPHVzZVByb2plY3RBcnRpZmFjdD5mYWxzZTwvdXNlUHJvamVjdEFydGlmYWN0PgorICAgICAgICAgICAgPG91dHB1dEZpbGVOYW1lTWFwcGluZz5vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc3BlY3MvJHthcnRpZmFjdC5hcnRpZmFjdElkfS8ke2FydGlmYWN0LmJhc2VWZXJzaW9ufS8ke2FydGlmYWN0LmFydGlmYWN0SWR9LSR7YXJ0aWZhY3QuYmFzZVZlcnNpb259JHtkYXNoQ2xhc3NpZmllcj99LiR7YXJ0aWZhY3QuZXh0ZW5zaW9ufTwvb3V0cHV0RmlsZU5hbWVNYXBwaW5nPgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4cC1hcGktMS40PC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc3RheC1hcGktMS4wPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgPC9kZXBlbmRlbmN5U2V0PgorCisgICAgPC9kZXBlbmRlbmN5U2V0cz4KKworPC9hc3NlbWJseT4KZGlmZiAtLWdpdCBhL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rlc2NyaXB0b3JzL3VuaXgtc3JjLnhtbCBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rlc2NyaXB0b3JzL3VuaXgtc3JjLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTk1YWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGVzY3JpcHRvcnMvdW5peC1zcmMueG1sCkBAIC0wLDAgKzEsMTI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGFzc2VtYmx5PgorICAgIDxpZD5zcmM8L2lkPgorICAgIDxmb3JtYXRzPgorICAgICAgICA8Zm9ybWF0PnRhci5nejwvZm9ybWF0PgorICAgIDwvZm9ybWF0cz4KKyAgICA8ZmlsZVNldHM+CisgICAgICAgIDwhLS0gQ29weSBsaWNlbnNlIGFuZCBvdGhlciBmaWxlcyBmcm9tIHJvb3QgLS0+CisgICAgICAgIDxmaWxlU2V0PgorICAgICAgICAgICAgPGRpcmVjdG9yeT4ke2Jhc2VkaXJ9Ly4uPC9kaXJlY3Rvcnk+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5CVUlMRElORy50eHQ8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+UkVBRE1FLnR4dDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5SRUxFQVNFKi50eHQ8L2luY2x1ZGU+CisgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlU2V0PgorCisgICAgICAgIDwhLS0gQmluYXJ5IEZpbGVzIC0tPgorICAgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS8uLjwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT5zcmM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmpwZWc8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5qcGc8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5naWY8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5wbmc8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5leGU8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5kbGw8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5qYXI8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5zbzwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmtzPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPioqLyoudHM8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5rZXlzdG9yZTwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmJpbjwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmpuaWxpYjwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmNlcnQ8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5qa3M8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+YXBhY2hlLXNlcnZpY2VtaXgvc3JjL21haW4vcmVsZWFzZS9iaW4vKi93cmFwcGVyPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgIDxleGNsdWRlcz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9lY2xpcHNlLWNsYXNzZXMvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0LyoqPC9leGNsdWRlPgorICAgICAgICAgICAgPC9leGNsdWRlcz4KKyAgICAgICAgPC9maWxlU2V0PgorCisgICAgICAgIDwhLS0gVGV4dCBGaWxlcyAtLT4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn0vLi48L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+c3JjPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKjwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5qcGVnPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouanBnPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouZ2lmPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyoucG5nPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouZXhlPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouZGxsPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouamFyPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouc288L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5rczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLnRzPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyoua2V5c3RvcmU8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5iaW48L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5qbmlsaWI8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5jZXJ0PC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPmFwYWNoZS1zZXJ2aWNlbWl4L3NyYy9tYWluL3JlbGVhc2UvYmluLyovd3JhcHBlcjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovYnVpbGQvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+YWN0aXZlbXEtZGF0YS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qL2FjdGl2ZW1xLWRhdGEvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovZWNsaXBzZS1jbGFzc2VzLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy4qLyoqPC9leGNsdWRlPgorCisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Kiovc3VyZWZpcmUqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3N2bi1jb21taXQqPC9leGNsdWRlPgorCisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5pbWw8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5pcHI8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5pd3M8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5qa3M8L2V4Y2x1ZGU+CisKKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9jb2JlcnR1cmEuc2VyPC9leGNsdWRlPgorCisgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlU2V0PgorICAgIDwvZmlsZVNldHM+CisgICAgPGZpbGVzPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvbWF2ZW4tc2hhcmVkLWFyY2hpdmUtcmVzb3VyY2VzL01FVEEtSU5GL0xJQ0VOU0U8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+Lzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGRlc3ROYW1lPkxJQ0VOU0UudHh0PC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPnVuaXg8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vdGFyZ2V0L21hdmVuLXNoYXJlZC1hcmNoaXZlLXJlc291cmNlcy9NRVRBLUlORi9OT1RJQ0U8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+Lzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGRlc3ROYW1lPk5PVElDRS50eHQ8L2Rlc3ROYW1lPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgIDwvZmlsZXM+Cis8L2Fzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGVzY3JpcHRvcnMvd2luZG93cy1iaW4ueG1sIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGVzY3JpcHRvcnMvd2luZG93cy1iaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MThhYmMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kZXNjcmlwdG9ycy93aW5kb3dzLWJpbi54bWwKQEAgLTAsMCArMSw0MzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxhc3NlbWJseT4KKyAgICA8aWQ+PC9pZD4gPCEtLSBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsgLT4gaHR0cDovL2ppcmEuY29kZWhhdXMub3JnL2Jyb3dzZS9NQVNTRU1CTFktMzAxIC0tPgorICAgIDxmb3JtYXRzPgorICAgICAgICA8Zm9ybWF0PnppcDwvZm9ybWF0PgorICAgIDwvZm9ybWF0cz4KKyAgICA8ZmlsZVNldHM+CisKKyAgICAgIDwhLS0gRXhwYW5kZWQgU2VydmljZU1peCBSdW50aW1lIC0tPgorICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgPGRpcmVjdG9yeT50YXJnZXQvZGVwZW5kZW5jaWVzL3dpbi9hcGFjaGUta2FyYWYtJHtrYXJhZi52ZXJzaW9ufTwvZGlyZWN0b3J5PgorICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+Lzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgIDxleGNsdWRlcz4KKyAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9kZW1vcy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICA8ZXhjbHVkZT5ldGMvc3lzdGVtLnByb3BlcnRpZXM8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgPGV4Y2x1ZGU+ZXRjL29yZy5hcGFjaGUua2FyYWYuZmVhdHVyZXMuY2ZnPC9leGNsdWRlPgorICAgICAgICAgICAgIDxleGNsdWRlPmV0Yy9vcmcub3BzNGoucGF4LmxvZ2dpbmcuY2ZnPC9leGNsdWRlPgorICAgICAgICAgICAgIDxleGNsdWRlPmV0Yy91c2Vycy5wcm9wZXJ0aWVzPC9leGNsdWRlPgorICAgICAgICAgICAgIDxleGNsdWRlPmV0Yy9jdXN0b20ucHJvcGVydGllczwvZXhjbHVkZT4KKyAgICAgICAgICAgICA8ZXhjbHVkZT5ldGMvanJlLnByb3BlcnRpZXM8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgPGV4Y2x1ZGU+TElDRU5TRTwvZXhjbHVkZT4KKyAgICAgICAgICAgICA8ZXhjbHVkZT5OT1RJQ0U8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgPGV4Y2x1ZGU+UkVBRE1FPC9leGNsdWRlPgorICAgICAgICAgICAgIDxleGNsdWRlPlJFTEVBU0UtTk9URVM8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgPGV4Y2x1ZGU+a2FyYWYtbWFudWFsKjwvZXhjbHVkZT4KKyAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgPC9maWxlU2V0PgorCisgICAgICA8IS0tIENvcHkgb3ZlciBrZXJuZWwgZGVtbyB0byBleGFtcGxlcyBmb2xkZXIgLS0+CisgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXMvd2luL2FwYWNoZS1rYXJhZi0ke2thcmFmLnZlcnNpb259L2RlbW9zPC9kaXJlY3Rvcnk+CisgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMva2FyYWYtZGVtb3M8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgPGluY2x1ZGU+cG9tLnhtbDwvaW5jbHVkZT4KKyAgICAgICAgICAgIDxpbmNsdWRlPioqL3dlYi8qKjwvaW5jbHVkZT4KKyAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgPC9maWxlU2V0PgorICAgICAgCisgICAgICA8IS0tIENvcHkgb3ZlciBhbnQgZmlsZXMgLS0+CisgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PnRhcmdldC9kZXBlbmRlbmNpZXMvd2luL2FwYWNoZS1zZXJ2aWNlbWl4LW5tci0ke3NlcnZpY2VtaXgubm1yLnZlcnNpb259L2FudDwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vYW50PC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgPC9maWxlU2V0PgorCisgICAgICA8IS0tIENvcHkgb3ZlciBubXIgZXhhbXBsZXMgZmlsZXMgLS0+CisgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICAgPGRpcmVjdG9yeT50YXJnZXQvZGVwZW5kZW5jaWVzL3dpbi9hcGFjaGUtc2VydmljZW1peC1ubXItJHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufS9leGFtcGxlczwvZGlyZWN0b3J5PgorICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgPGV4Y2x1ZGVzPgorICAgICAgICAgICAgICAgPGV4Y2x1ZGU+cG9tLnhtbDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgIDxleGNsdWRlPioqL2l0ZXN0cy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5jbGFzc3BhdGg8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8ucHJvamVjdDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5zZXR0aW5ncy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgPC9leGNsdWRlcz4KKyAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgPC9maWxlU2V0PgorCisgICAgICA8IS0tIENvcHkgbGljZW5zZSBhbmQgb3RoZXIgZmlsZXMgZnJvbSByb290IC0tPgorICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgPGRpcmVjdG9yeT4ke2Jhc2VkaXJ9Ly4uPC9kaXJlY3Rvcnk+CisgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICA8aW5jbHVkZT5SRUFETUU8L2luY2x1ZGU+CisgICAgICAgICAgICAgIDxpbmNsdWRlPlJFTEVBU0UqPC9pbmNsdWRlPgorICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgIDwvZmlsZVNldD4KKworICAgICAgPCEtLSBDb3B5IG92ZXIgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGdldCBkb3MgbGluZSBlbmRpbmdzIC0tPgorICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dDwvZGlyZWN0b3J5PgorICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+Lzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICA8L2ZpbGVTZXQ+ICAgICAgICAKKyAgICAgIDxmaWxlU2V0PgorICAgICAgICAgIDxkaXJlY3Rvcnk+dGFyZ2V0L2NsYXNzZXMvZXRjPC9kaXJlY3Rvcnk+CisgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXRjLzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICA8L2ZpbGVTZXQ+CisKKyAgICAgIDwhLS0gQ29weSBvdmVyIGphciBmaWxlcyAtLT4KKyAgICAgIDxmaWxlU2V0PgorICAgICAgICAgIDxkaXJlY3Rvcnk+dGFyZ2V0L2RlcGVuZGVuY2llczwvZGlyZWN0b3J5PgorICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgPGluY2x1ZGU+c2VydmljZW1peC12ZXJzaW9uLmphcjwvaW5jbHVkZT4KKyAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2xpYi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgIDwvZmlsZVNldD4KKworICAgICAgPCEtLSBDb3B5IG92ZXIgdGhlIGV4YW1wbGVzIC0tPgorICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgPGRpcmVjdG9yeT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzPC9kaXJlY3Rvcnk+CisgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICAgIDxleGNsdWRlcz4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+cG9tLnhtbDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPCEtLXdlIG5lZWQgYWRkIGZpbHRlcmVkIFJFQURNRS50eHQsIHNvIGV4Y2x1ZGUgdGhlIHJhdyBvbmUgaGVyZS0tPgorICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9SRUFETUUudHh0PC9leGNsdWRlPgorICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9pdGVzdHMvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmNsYXNzcGF0aDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLnByb2plY3Q8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5zZXR0aW5ncy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+Kiovd3NkbC1maXJzdC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovbG9hbi1icm9rZXItYnBlbC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgPC9maWxlU2V0PgorCisgICAgICA8ZmlsZVNldD4KKyAgICAgICAgPGRpcmVjdG9yeT50YXJnZXQvZmVhdHVyZXMtcmVwbzwvZGlyZWN0b3J5PgorICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PnN5c3RlbTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgPC9maWxlU2V0PgorICAgICAgCisgICAgPC9maWxlU2V0cz4KKworICAgIDxmaWxlcz4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vdGFyZ2V0L2RlcGVuZGVuY2llcy93aW4vYXBhY2hlLWthcmFmLSR7a2FyYWYudmVyc2lvbn0vYmluL2thcmFmLmJhdDwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vYmluLzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGRlc3ROYW1lPnNlcnZpY2VtaXguYmF0PC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNzU1PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvZGVwZW5kZW5jaWVzL3NlcnZpY2VtaXgtdmVyc2lvbi5qYXI8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2xpYi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvY2xhc3Nlcy9mZWF0dXJlcy54bWw8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+c3lzdGVtL29yZy9hcGFjaGUvc2VydmljZW1peC8ke2FydGlmYWN0SWR9LyR7dmVyc2lvbn08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxkZXN0TmFtZT4ke2FydGlmYWN0SWR9LSR7dmVyc2lvbn0tZmVhdHVyZXMueG1sPC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvY2xhc3Nlcy9hY3RpdmVtcS1mZWF0dXJlcy54bWw8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+c3lzdGVtL29yZy9hcGFjaGUvYWN0aXZlbXEvYWN0aXZlbXEta2FyYWYvJHthY3RpdmVtcS52ZXJzaW9ufTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGRlc3ROYW1lPmFjdGl2ZW1xLWthcmFmLSR7YWN0aXZlbXEudmVyc2lvbn0tZmVhdHVyZXMueG1sPC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvY2xhc3Nlcy9jYW1lbC1mZWF0dXJlcy54bWw8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+c3lzdGVtL29yZy9hcGFjaGUvY2FtZWwva2FyYWYvYXBhY2hlLWNhbWVsLyR7Y2FtZWwudmVyc2lvbn08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxkZXN0TmFtZT5hcGFjaGUtY2FtZWwtJHtjYW1lbC52ZXJzaW9ufS1mZWF0dXJlcy54bWw8L2Rlc3ROYW1lPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisKKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vdGFyZ2V0L21hdmVuLXNoYXJlZC1hcmNoaXZlLXJlc291cmNlcy9NRVRBLUlORi9MSUNFTlNFPC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi88L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxkZXN0TmFtZT5MSUNFTlNFPC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvbWF2ZW4tc2hhcmVkLWFyY2hpdmUtcmVzb3VyY2VzL01FVEEtSU5GL05PVElDRTwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZGVzdE5hbWU+Tk9USUNFPC9kZXN0TmFtZT4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICAKKyAgICAgICAgPCEtLWZpbHRlcmluZyBSRUFETUUudHh0LS0+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzLzwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisKKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9icmlkZ2UvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9icmlkZ2U8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmc8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi1qYXhycy9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi1qYXhyczwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2U8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2JyaWRnZS1jYW1lbDwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY2FtZWwvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jYW1lbDwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY2FtZWwtYmx1ZXByaW50L1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvY2FtZWwtYmx1ZXByaW50PC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0PC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9jYW1lbC1vc2dpL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvY2FtZWwtb3NnaTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICAgICAgPC9maWxlPgorICAgICAgICAgICAgPGZpbGU+CisgICAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9jYW1lbC1ubXIvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9leGFtcGxlcy9jYW1lbC1ubXI8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgICAgIDwvZmlsZT4KKyAgICAgICAgPGZpbGU+CisgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvUkVBRE1FLnR4dDwvc291cmNlPgorICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQ8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICAgICAgPGZpbGU+CisgICAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9jeGYtbm1yL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvY3hmLW5tcjwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgICA8ZmlsdGVyZWQ+dHJ1ZTwvZmlsdGVyZWQ+CisgICAgICAgICAgICAgIDxmaWxlTW9kZT4wNjQ0PC9maWxlTW9kZT4KKyAgICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICAgICAgPC9maWxlPgorICAgICAgICAgICAgPGZpbGU+CisgICAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS8uLi9leGFtcGxlcy9jeGYtb3NnaS9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi1vc2dpPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgICAgICA8L2ZpbGU+CisgICAgICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9Ly4uL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2k8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgICAgIDwvZmlsZT4KKyAgICAgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY3hmLXdzLXJtL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvY3hmLXdzLXJtPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgICAgICA8L2ZpbGU+CisKKyAgICAgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvY3hmLWNhbWVsLW5tci9SRUFETUUudHh0PC9zb3VyY2U+CisgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXI8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgPGZpbHRlcmVkPnRydWU8L2ZpbHRlcmVkPgorICAgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgICAgIDwvZmlsZT4KKyAgICAgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgICA8c291cmNlPiR7YmFzZWRpcn0vLi4vZXhhbXBsZXMvc2ltcGxlL1JFQURNRS50eHQ8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvc2ltcGxlPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgICAgICA8L2ZpbGU+CisgICAgICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9L3RhcmdldC9jbGFzc2VzL3BvbS54bWw8L3NvdXJjZT4KKyAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vZXhhbXBsZXMvPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgIDxmaWx0ZXJlZD50cnVlPC9maWx0ZXJlZD4KKyAgICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgICA8bGluZUVuZGluZz5kb3M8L2xpbmVFbmRpbmc+CisgICAgICAgICAgICA8L2ZpbGU+CisKKyAgICA8L2ZpbGVzPgorCisgICAgPGRlcGVuZGVuY3lTZXRzPgorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L2xpYi9lbmRvcnNlZDwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPmNvbS5zdW4ueG1sLnBhcnNlcnM6amF4cC1yaTwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4gICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L3N5c3RlbTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dEZpbGVOYW1lTWFwcGluZz5vcmcvYXBhY2hlL3NlcnZpY2VtaXgvbm1yLyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0vJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0vJHthcnRpZmFjdC5hcnRpZmFjdElkfS0ke2FydGlmYWN0LmJhc2VWZXJzaW9ufSR7ZGFzaENsYXNzaWZpZXI/fS4ke2FydGlmYWN0LmV4dGVuc2lvbn08L291dHB1dEZpbGVOYW1lTWFwcGluZz4KKyAgICAgICAgICAgIDx1bnBhY2s+ZmFsc2U8L3VucGFjaz4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yOmFwYWNoZS1zZXJ2aWNlbWl4LW5tcjp4bWw6ZmVhdHVyZXM8L2luY2x1ZGU+CisgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICA8L2RlcGVuZGVuY3lTZXQ+CisgICAgICAgIDxkZXBlbmRlbmN5U2V0PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vc3lzdGVtPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8b3V0cHV0RmlsZU5hbWVNYXBwaW5nPm9yZy9hcGFjaGUvb2RlLyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0vJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0vJHthcnRpZmFjdC5hcnRpZmFjdElkfS0ke2FydGlmYWN0LmJhc2VWZXJzaW9ufSR7ZGFzaENsYXNzaWZpZXI/fS4ke2FydGlmYWN0LmV4dGVuc2lvbn08L291dHB1dEZpbGVOYW1lTWFwcGluZz4KKyAgICAgICAgICAgIDx1bnBhY2s+ZmFsc2U8L3VucGFjaz4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLm9kZTpvZGUtamJpLWthcmFmOnhtbDpmZWF0dXJlczwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKyAgICAgICAgPGRlcGVuZGVuY3lTZXQ+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXRGaWxlTmFtZU1hcHBpbmc+b3JnL2FwYWNoZS9jYW1lbC9rYXJhZi8ke2FydGlmYWN0LmFydGlmYWN0SWR9LyR7YXJ0aWZhY3QuYmFzZVZlcnNpb259LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0tJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0ke2Rhc2hDbGFzc2lmaWVyP30uJHthcnRpZmFjdC5leHRlbnNpb259PC9vdXRwdXRGaWxlTmFtZU1hcHBpbmc+CisgICAgICAgICAgICA8dW5wYWNrPmZhbHNlPC91bnBhY2s+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5jYW1lbC5rYXJhZjphcGFjaGUtY2FtZWw6eG1sOmZlYXR1cmVzPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgPC9kZXBlbmRlbmN5U2V0PgorICAgICAgICA8ZGVwZW5kZW5jeVNldD4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+L3N5c3RlbTwvb3V0cHV0RGlyZWN0b3J5PgorICAgICAgICAgICAgPHVucGFjaz5mYWxzZTwvdW5wYWNrPgorICAgICAgICAgICAgPHVzZVByb2plY3RBcnRpZmFjdD5mYWxzZTwvdXNlUHJvamVjdEFydGlmYWN0PgorICAgICAgICAgICAgPG91dHB1dEZpbGVOYW1lTWFwcGluZz5vcmcvYXBhY2hlL2ZlbGl4LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0vJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0vJHthcnRpZmFjdC5hcnRpZmFjdElkfS0ke2FydGlmYWN0LmJhc2VWZXJzaW9ufSR7ZGFzaENsYXNzaWZpZXI/fS4ke2FydGlmYWN0LmV4dGVuc2lvbn08L291dHB1dEZpbGVOYW1lTWFwcGluZz4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLmZlbGl4Om9yZy5vc2dpLmNvbXBlbmRpdW08L2luY2x1ZGU+CisgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICA8L2RlcGVuZGVuY3lTZXQ+CisgICAgICAgIDxkZXBlbmRlbmN5U2V0PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vc3lzdGVtPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8dW5wYWNrPmZhbHNlPC91bnBhY2s+CisgICAgICAgICAgICA8dXNlUHJvamVjdEFydGlmYWN0PmZhbHNlPC91c2VQcm9qZWN0QXJ0aWZhY3Q+CisgICAgICAgICAgICA8b3V0cHV0RmlsZU5hbWVNYXBwaW5nPm9yZy9zcHJpbmdmcmFtZXdvcmsvJHthcnRpZmFjdC5hcnRpZmFjdElkfS8ke2FydGlmYWN0LmJhc2VWZXJzaW9ufS8ke2FydGlmYWN0LmFydGlmYWN0SWR9LSR7YXJ0aWZhY3QuYmFzZVZlcnNpb259JHtkYXNoQ2xhc3NpZmllcj99LiR7YXJ0aWZhY3QuZXh0ZW5zaW9ufTwvb3V0cHV0RmlsZU5hbWVNYXBwaW5nPgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5zcHJpbmdmcmFtZXdvcms6c3ByaW5nLWFvcDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuc3ByaW5nZnJhbWV3b3JrOnNwcmluZy1iZWFuczwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuc3ByaW5nZnJhbWV3b3JrOnNwcmluZy1jb250ZXh0PC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5zcHJpbmdmcmFtZXdvcms6c3ByaW5nLWNvcmU8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLnNwcmluZ2ZyYW1ld29yazpzcHJpbmctdHg8L2luY2x1ZGU+CisgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICA8L2RlcGVuZGVuY3lTZXQ+CisgICAgICAgIDxkZXBlbmRlbmN5U2V0PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vc3lzdGVtPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8dW5wYWNrPmZhbHNlPC91bnBhY2s+CisgICAgICAgICAgICA8dXNlUHJvamVjdEFydGlmYWN0PmZhbHNlPC91c2VQcm9qZWN0QXJ0aWZhY3Q+CisgICAgICAgICAgICA8b3V0cHV0RmlsZU5hbWVNYXBwaW5nPm9yZy9zcHJpbmdmcmFtZXdvcmsvb3NnaS8ke2FydGlmYWN0LmFydGlmYWN0SWR9LyR7YXJ0aWZhY3QuYmFzZVZlcnNpb259LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0tJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0ke2Rhc2hDbGFzc2lmaWVyP30uJHthcnRpZmFjdC5leHRlbnNpb259PC9vdXRwdXRGaWxlTmFtZU1hcHBpbmc+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpOnNwcmluZy1vc2dpLWNvcmU8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpOnNwcmluZy1vc2dpLWV4dGVuZGVyPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5zcHJpbmdmcmFtZXdvcmsub3NnaTpzcHJpbmctb3NnaS1pbzwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKyAgICAgICAgPGRlcGVuZGVuY3lTZXQ+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDx1bnBhY2s+ZmFsc2U8L3VucGFjaz4KKyAgICAgICAgICAgIDx1c2VQcm9qZWN0QXJ0aWZhY3Q+ZmFsc2U8L3VzZVByb2plY3RBcnRpZmFjdD4KKyAgICAgICAgICAgIDxvdXRwdXRGaWxlTmFtZU1hcHBpbmc+b3JnL2FwYWNoZS9nZXJvbmltby9zcGVjcy8ke2FydGlmYWN0LmFydGlmYWN0SWR9LyR7YXJ0aWZhY3QuYmFzZVZlcnNpb259LyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0tJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0ke2Rhc2hDbGFzc2lmaWVyP30uJHthcnRpZmFjdC5leHRlbnNpb259PC9vdXRwdXRGaWxlTmFtZU1hcHBpbmc+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczpnZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M6Z2Vyb25pbW8tYW5ub3RhdGlvbl8xLjBfc3BlYzwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKyAgICAgICAgPGRlcGVuZGVuY3lTZXQ+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDx1bnBhY2s+ZmFsc2U8L3VucGFjaz4KKyAgICAgICAgICAgIDx1c2VQcm9qZWN0QXJ0aWZhY3Q+ZmFsc2U8L3VzZVByb2plY3RBcnRpZmFjdD4KKyAgICAgICAgICAgIDxvdXRwdXRGaWxlTmFtZU1hcHBpbmc+b3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2J1bmRsZXMvJHthcnRpZmFjdC5hcnRpZmFjdElkfS8ke2FydGlmYWN0LmJhc2VWZXJzaW9ufS8ke2FydGlmYWN0LmFydGlmYWN0SWR9LSR7YXJ0aWZhY3QuYmFzZVZlcnNpb259JHtkYXNoQ2xhc3NpZmllcj99LiR7YXJ0aWZhY3QuZXh0ZW5zaW9ufTwvb3V0cHV0RmlsZU5hbWVNYXBwaW5nPgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFvcGFsbGlhbmNlPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNnbGliPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpheHAtcmk8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3JvPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtamV4bDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXZmczwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWNvZGVjPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtaHR0cGNsaWVudDwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKyAgICAgICAgPGRlcGVuZGVuY3lTZXQ+CisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5Pi9zeXN0ZW08L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDx1bnBhY2s+ZmFsc2U8L3VucGFjaz4KKyAgICAgICAgICAgIDx1c2VQcm9qZWN0QXJ0aWZhY3Q+ZmFsc2U8L3VzZVByb2plY3RBcnRpZmFjdD4KKyAgICAgICAgICAgIDxvdXRwdXRGaWxlTmFtZU1hcHBpbmc+b3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NwZWNzLyR7YXJ0aWZhY3QuYXJ0aWZhY3RJZH0vJHthcnRpZmFjdC5iYXNlVmVyc2lvbn0vJHthcnRpZmFjdC5hcnRpZmFjdElkfS0ke2FydGlmYWN0LmJhc2VWZXJzaW9ufSR7ZGFzaENsYXNzaWZpZXI/fS4ke2FydGlmYWN0LmV4dGVuc2lvbn08L291dHB1dEZpbGVOYW1lTWFwcGluZz4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpheHAtYXBpLTEuNDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnN0YXgtYXBpLTEuMDwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZGVwZW5kZW5jeVNldD4KKworICAgIDwvZGVwZW5kZW5jeVNldHM+CisKKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kZXNjcmlwdG9ycy93aW5kb3dzLXNyYy54bWwgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kZXNjcmlwdG9ycy93aW5kb3dzLXNyYy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjNjllMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rlc2NyaXB0b3JzL3dpbmRvd3Mtc3JjLnhtbApAQCAtMCwwICsxLDEyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxhc3NlbWJseT4KKyAgICA8aWQ+c3JjPC9pZD4KKyAgICA8Zm9ybWF0cz4KKyAgICAgICAgPGZvcm1hdD56aXA8L2Zvcm1hdD4KKyAgICA8L2Zvcm1hdHM+CisgICAgPGZpbGVTZXRzPgorICAgICAgICA8IS0tIENvcHkgbGljZW5zZSBhbmQgb3RoZXIgZmlsZXMgZnJvbSByb290IC0tPgorICAgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS8uLjwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+QlVJTERJTkcudHh0PC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPlJFQURNRS50eHQ8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+UkVMRUFTRSoudHh0PC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgIDxsaW5lRW5kaW5nPmRvczwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlU2V0PgorCisgICAgICAgIDwhLS0gQmluYXJ5IEZpbGVzIC0tPgorICAgICAgICA8ZmlsZVNldD4KKyAgICAgICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS8uLjwvZGlyZWN0b3J5PgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT5zcmM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmpwZWc8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5qcGc8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5naWY8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5wbmc8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5leGU8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5kbGw8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5qYXI8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5zbzwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmtzPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPioqLyoudHM8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5rZXlzdG9yZTwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmJpbjwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmpuaWxpYjwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qLmNlcnQ8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKi5qa3M8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+YXBhY2hlLXNlcnZpY2VtaXgvc3JjL21haW4vcmVsZWFzZS9iaW4vKi93cmFwcGVyPC9pbmNsdWRlPgorICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgIDxleGNsdWRlcz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9lY2xpcHNlLWNsYXNzZXMvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0LyoqPC9leGNsdWRlPgorICAgICAgICAgICAgPC9leGNsdWRlcz4KKyAgICAgICAgPC9maWxlU2V0PgorCisgICAgICAgIDwhLS0gVGV4dCBGaWxlcyAtLT4KKyAgICAgICAgPGZpbGVTZXQ+CisgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn0vLi48L2RpcmVjdG9yeT4KKyAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+c3JjPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKjwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5qcGVnPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouanBnPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouZ2lmPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyoucG5nPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouZXhlPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouZGxsPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouamFyPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouc288L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5rczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLnRzPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyoua2V5c3RvcmU8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5iaW48L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5qbmlsaWI8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5jZXJ0PC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPmFwYWNoZS1zZXJ2aWNlbWl4L3NyYy9tYWluL3JlbGVhc2UvYmluLyovd3JhcHBlcjwvZXhjbHVkZT4KKworICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9idWlsZC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5hY3RpdmVtcS1kYXRhLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPiovYWN0aXZlbXEtZGF0YS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9lY2xpcHNlLWNsYXNzZXMvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLiovKio8L2V4Y2x1ZGU+CisKKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9zdXJlZmlyZSo8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Kiovc3ZuLWNvbW1pdCo8L2V4Y2x1ZGU+CisKKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLmltbDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLmlwcjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLml3czwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLmprczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9jb2JlcnR1cmEuc2VyPC9leGNsdWRlPgorCisgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+ZG9zPC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGVTZXQ+CisgICAgPC9maWxlU2V0cz4KKyAgICA8ZmlsZXM+CisgICAgICAgIDxmaWxlPgorICAgICAgICAgICAgPHNvdXJjZT4ke2Jhc2VkaXJ9L3RhcmdldC9tYXZlbi1zaGFyZWQtYXJjaGl2ZS1yZXNvdXJjZXMvTUVUQS1JTkYvTElDRU5TRTwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZGVzdE5hbWU+TElDRU5TRS50eHQ8L2Rlc3ROYW1lPgorICAgICAgICAgICAgPGZpbGVNb2RlPjA2NDQ8L2ZpbGVNb2RlPgorICAgICAgICAgICAgPGxpbmVFbmRpbmc+dW5peDwvbGluZUVuZGluZz4KKyAgICAgICAgPC9maWxlPgorICAgICAgICA8ZmlsZT4KKyAgICAgICAgICAgIDxzb3VyY2U+JHtiYXNlZGlyfS90YXJnZXQvbWF2ZW4tc2hhcmVkLWFyY2hpdmUtcmVzb3VyY2VzL01FVEEtSU5GL05PVElDRTwvc291cmNlPgorICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4vPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICA8ZGVzdE5hbWU+Tk9USUNFLnR4dDwvZGVzdE5hbWU+CisgICAgICAgICAgICA8ZmlsZU1vZGU+MDY0NDwvZmlsZU1vZGU+CisgICAgICAgICAgICA8bGluZUVuZGluZz51bml4PC9saW5lRW5kaW5nPgorICAgICAgICA8L2ZpbGU+CisgICAgPC9maWxlcz4KKzwvYXNzZW1ibHk+CmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvYWN0aXZlbXEtYnJva2VyLnhtbCBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2V0Yy9hY3RpdmVtcS1icm9rZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDExNWIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvYWN0aXZlbXEtYnJva2VyLnhtbApAQCAtMCwwICsxLDEzMSBAQAorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8Ymx1ZXByaW50IHhtbG5zPSJodHRwOi8vd3d3Lm9zZ2kub3JnL3htbG5zL2JsdWVwcmludC92MS4wLjAiCisgICAgICAgICAgIHhtbG5zOmNtPSJodHRwOi8vYXJpZXMuYXBhY2hlLm9yZy9ibHVlcHJpbnQveG1sbnMvYmx1ZXByaW50LWNtL3YxLjAuMCIKKyAgICAgICAgICAgeG1sbnM6ZXh0PSJodHRwOi8vYXJpZXMuYXBhY2hlLm9yZy9ibHVlcHJpbnQveG1sbnMvYmx1ZXByaW50LWV4dC92MS4wLjAiCisgICAgICAgICAgIHhtbG5zOmFtcT0iaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvc2NoZW1hL2NvcmUiPgorCisgICAgPCEtLSBBbGxvd3MgdXMgdG8gdXNlIHN5c3RlbSBwcm9wZXJ0aWVzIGFzIHZhcmlhYmxlcyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSAtLT4KKyAgICA8ZXh0OnByb3BlcnR5LXBsYWNlaG9sZGVyIC8+CisKKyAgICA8YnJva2VyIHhtbG5zPSJodHRwOi8vYWN0aXZlbXEuYXBhY2hlLm9yZy9zY2hlbWEvY29yZSIgYnJva2VyTmFtZT0iZGVmYXVsdCIgZGF0YURpcmVjdG9yeT0iJHtrYXJhZi5kYXRhfS9hY3RpdmVtcS9kZWZhdWx0IiB1c2VTaHV0ZG93bkhvb2s9ImZhbHNlIj4KKworICAgICAgIDwhLS0KKyAgICAgICAgICAgIEZvciBiZXR0ZXIgcGVyZm9ybWFuY2VzIHVzZSBWTSBjdXJzb3IgYW5kIHNtYWxsIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGh0dHA6Ly9hY3RpdmVtcS5hcGFjaGUub3JnL21lc3NhZ2UtY3Vyc29ycy5odG1sCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFsc28sIGlmIHlvdXIgcHJvZHVjZXIgaXMgImhhbmdpbmciLCBpdCdzIHByb2JhYmx5IGR1ZSB0byBwcm9kdWNlciBmbG93IGNvbnRyb2wuCisgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgorICAgICAgICAgICAgaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvcHJvZHVjZXItZmxvdy1jb250cm9sLmh0bWwKKyAgICAgICAgLS0+CisgICAgICAgICAgICAgIAorICAgICAgICA8ZGVzdGluYXRpb25Qb2xpY3k+CisgICAgICAgICAgICA8cG9saWN5TWFwPgorICAgICAgICAgICAgICA8cG9saWN5RW50cmllcz4KKyAgICAgICAgICAgICAgICA8cG9saWN5RW50cnkgdG9waWM9Ij4iIHByb2R1Y2VyRmxvd0NvbnRyb2w9InRydWUiIG1lbW9yeUxpbWl0PSIxbWIiPgorICAgICAgICAgICAgICAgICAgPHBlbmRpbmdTdWJzY3JpYmVyUG9saWN5PgorICAgICAgICAgICAgICAgICAgICA8dm1DdXJzb3IgLz4KKyAgICAgICAgICAgICAgICAgIDwvcGVuZGluZ1N1YnNjcmliZXJQb2xpY3k+CisgICAgICAgICAgICAgICAgPC9wb2xpY3lFbnRyeT4KKyAgICAgICAgICAgICAgICA8cG9saWN5RW50cnkgcXVldWU9Ij4iIHByb2R1Y2VyRmxvd0NvbnRyb2w9InRydWUiIG1lbW9yeUxpbWl0PSIxbWIiPgorICAgICAgICAgICAgICAgICAgPCEtLSBVc2UgVk0gY3Vyc29yIGZvciBiZXR0ZXIgbGF0ZW5jeQorICAgICAgICAgICAgICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgorICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvbWVzc2FnZS1jdXJzb3JzLmh0bWwKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8cGVuZGluZ1F1ZXVlUG9saWN5PgorICAgICAgICAgICAgICAgICAgICA8dm1RdWV1ZUN1cnNvci8+CisgICAgICAgICAgICAgICAgICA8L3BlbmRpbmdRdWV1ZVBvbGljeT4KKyAgICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDwvcG9saWN5RW50cnk+CisgICAgICAgICAgICAgIDwvcG9saWN5RW50cmllcz4KKyAgICAgICAgICAgIDwvcG9saWN5TWFwPgorICAgICAgICA8L2Rlc3RpbmF0aW9uUG9saWN5PiAKKworICAgICAgICA8IS0tIFVzZSB0aGUgZm9sbG93aW5nIHRvIGNvbmZpZ3VyZSBob3cgQWN0aXZlTVEgaXMgZXhwb3NlZCBpbiBKTVggLS0+CisgICAgICAgIDxtYW5hZ2VtZW50Q29udGV4dD4KKyAgICAgICAgICAgIDxtYW5hZ2VtZW50Q29udGV4dCBjcmVhdGVDb25uZWN0b3I9ImZhbHNlIi8+CisgICAgICAgIDwvbWFuYWdlbWVudENvbnRleHQ+CisKKyAgICAgICAgPCEtLSAKKyAgICAgICAgICAgIENvbmZpZ3VyZSBtZXNzYWdlIHBlcnNpc3RlbmNlIGZvciB0aGUgYnJva2VyLiBUaGUgZGVmYXVsdCBwZXJzaXN0ZW5jZQorICAgICAgICAgICAgbWVjaGFuaXNtIGlzIHRoZSBLYWhhREIgc3RvcmUgKGlkZW50aWZpZWQgYnkgdGhlIGthaGFEQiB0YWcpLiAKKyAgICAgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6IAorICAgICAgICAgICAgCisgICAgICAgICAgICBodHRwOi8vYWN0aXZlbXEuYXBhY2hlLm9yZy9wZXJzaXN0ZW5jZS5odG1sIAorICAgICAgICAtLT4KKyAgICAgICAgPHBlcnNpc3RlbmNlQWRhcHRlcj4KKyAgICAgICAgICAgIDxrYWhhREIgZGlyZWN0b3J5PSIke2thcmFmLmRhdGF9L2FjdGl2ZW1xL2RlZmF1bHQva2FoYWRiIi8+CisgICAgICAgIDwvcGVyc2lzdGVuY2VBZGFwdGVyPgorCisgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlIHN5c3RlbVVzYWdlIGNvbnRyb2xzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzcGFjZSB0aGUgYnJva2VyIHdpbGwgCisgICAgICAgICAgICB1c2UgYmVmb3JlIHNsb3dpbmcgZG93biBwcm9kdWNlcnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGh0dHA6Ly9hY3RpdmVtcS5hcGFjaGUub3JnL3Byb2R1Y2VyLWZsb3ctY29udHJvbC5odG1sCisgICAgICAgICAgICAgCisgICAgICAgIDxzeXN0ZW1Vc2FnZT4KKyAgICAgICAgICAgIDxzeXN0ZW1Vc2FnZT4KKyAgICAgICAgICAgICAgICA8bWVtb3J5VXNhZ2U+CisgICAgICAgICAgICAgICAgICAgIDxtZW1vcnlVc2FnZSBsaW1pdD0iMjAgbWIiLz4KKyAgICAgICAgICAgICAgICA8L21lbW9yeVVzYWdlPgorICAgICAgICAgICAgICAgIDxzdG9yZVVzYWdlPgorICAgICAgICAgICAgICAgICAgICA8c3RvcmVVc2FnZSBsaW1pdD0iMSBnYiIgbmFtZT0iZm9vIi8+CisgICAgICAgICAgICAgICAgPC9zdG9yZVVzYWdlPgorICAgICAgICAgICAgICAgIDx0ZW1wVXNhZ2U+CisgICAgICAgICAgICAgICAgICAgIDx0ZW1wVXNhZ2UgbGltaXQ9IjEwMCBtYiIvPgorICAgICAgICAgICAgICAgIDwvdGVtcFVzYWdlPgorICAgICAgICAgICAgPC9zeXN0ZW1Vc2FnZT4KKyAgICAgICAgPC9zeXN0ZW1Vc2FnZT4KKyAgICAgICAgLS0+CisKKyAgICAgICAgPCEtLSBUaGUgdHJhbnNwb3J0IGNvbm5lY3RvcnMgQWN0aXZlTVEgd2lsbCBsaXN0ZW4gdG8gLS0+CisgICAgICAgIDx0cmFuc3BvcnRDb25uZWN0b3JzPgorICAgICAgICAgICAgPHRyYW5zcG9ydENvbm5lY3RvciBuYW1lPSJvcGVud2lyZSIgdXJpPSJ0Y3A6Ly9sb2NhbGhvc3Q6NjE2MTYiLz4KKyAgICAgICAgICAgIDx0cmFuc3BvcnRDb25uZWN0b3IgbmFtZT0ic3RvbXAiIHVyaT0ic3RvbXA6Ly9sb2NhbGhvc3Q6NjE2MTMiLz4KKyAgICAgICAgPC90cmFuc3BvcnRDb25uZWN0b3JzPgorCisgICAgPC9icm9rZXI+CisKKyAgICA8YmVhbiBpZD0iYWN0aXZlbXFDb25uZWN0aW9uRmFjdG9yeSIgY2xhc3M9Im9yZy5hcGFjaGUuYWN0aXZlbXEuQWN0aXZlTVFDb25uZWN0aW9uRmFjdG9yeSI+CisKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJyb2tlclVSTCIgdmFsdWU9InRjcDovL2xvY2FsaG9zdDo2MTYxNiIgLz4KKyAgICA8L2JlYW4+CisKKyAgICA8YmVhbiBpZD0icG9vbGVkQ29ubmVjdGlvbkZhY3RvcnkiIGNsYXNzPSJvcmcuYXBhY2hlLmFjdGl2ZW1xLnBvb2wuUG9vbGVkQ29ubmVjdGlvbkZhY3RvcnkiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibWF4Q29ubmVjdGlvbnMiIHZhbHVlPSI4IiAvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29ubmVjdGlvbkZhY3RvcnkiIHJlZj0iYWN0aXZlbXFDb25uZWN0aW9uRmFjdG9yeSIgLz4KKyAgICA8L2JlYW4+CisKKyAgICA8YmVhbiBpZD0icmVzb3VyY2VNYW5hZ2VyIiBjbGFzcz0ib3JnLmFwYWNoZS5hY3RpdmVtcS5wb29sLkFjdGl2ZU1RUmVzb3VyY2VNYW5hZ2VyIiBpbml0LW1ldGhvZD0icmVjb3ZlclJlc291cmNlIj4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idHJhbnNhY3Rpb25NYW5hZ2VyIiByZWY9InRyYW5zYWN0aW9uTWFuYWdlciIgLz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY29ubmVjdGlvbkZhY3RvcnkiIHJlZj0iYWN0aXZlbXFDb25uZWN0aW9uRmFjdG9yeSIgLz4KKyAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzb3VyY2VOYW1lIiB2YWx1ZT0iYWN0aXZlbXEuZGVmYXVsdCIgLz4KKyAgICA8L2JlYW4+CisKKyAgICA8cmVmZXJlbmNlIGlkPSJ0cmFuc2FjdGlvbk1hbmFnZXIiIGludGVyZmFjZT0iamF2YXgudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25NYW5hZ2VyIiAvPgorCisgICAgPHNlcnZpY2UgcmVmPSJwb29sZWRDb25uZWN0aW9uRmFjdG9yeSIgaW50ZXJmYWNlPSJqYXZheC5qbXMuQ29ubmVjdGlvbkZhY3RvcnkiPgorICAgICAgICA8c2VydmljZS1wcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGVudHJ5IGtleT0ibmFtZSIgdmFsdWU9ImxvY2FsaG9zdCIvPgorICAgICAgICA8L3NlcnZpY2UtcHJvcGVydGllcz4KKyAgICA8L3NlcnZpY2U+CisKKzwvYmx1ZXByaW50PgorCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvb3JnLmFwYWNoZS5hcmllcy50cmFuc2FjdGlvbi5jZmcgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvb3JnLmFwYWNoZS5hcmllcy50cmFuc2FjdGlvbi5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhkMzVhYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2V0Yy9vcmcuYXBhY2hlLmFyaWVzLnRyYW5zYWN0aW9uLmNmZwpAQCAtMCwwICsxLDIxIEBACisjCisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgorIyBpbXBsaWVkLgorIworIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIworYXJpZXMudHJhbnNhY3Rpb24udGltZW91dD02MDAKK2FyaWVzLnRyYW5zYWN0aW9uLmhvd2wubG9nRmlsZURpcj0ke2thcmFmLmRhdGF9L3R4bG9nLwpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvZXRjL29yZy5hcGFjaGUuc2VydmljZW1peC5qYmkuY2ZnIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvZXRjL29yZy5hcGFjaGUuc2VydmljZW1peC5qYmkuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjJlOGMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmpiaS5jZmcKQEAgLTAsMCArMSwzNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBXaGVuIHVzaW5nIGEgZm9yY2VkIHNodXRkb3duIG9mIGEgU0EsIGFsbCBwZW5kaW5nIHN5bmNocm9ub3VzIGV4Y2hhbmdlcyB3aWxsIGJlIGNhbmNlbGVkIGFmdGVyIHRoaXMgdGltZW91dAorIyBUaGUgdmFsdWUgaXMgc3BlY2lmaWVkIGluIG1zLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAwIHdpbGwgd2FpdCBpbmRlZmluaXRlbHkgZm9yIGFsbCBleGNoYW5nZXMgdG8gZmluaXNoCitzaHV0ZG93blRpbWVvdXQ9MAorCisjIFRoZSB2YWx1ZXMgYmVsb3cgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSB0aHJlYWQgcG9vbCBzaXplIGZvciB0aGUgU2VydmljZU1peCBKQkkgY29tcG9uZW50cy4KKyMgLSBjb3JlUG9vbFNpemUgZGVmaW5lcyB0aGUgY29yZSB0aHJlYWQgcG9vbCBzaXplIChkZWZhdWx0IGlzIDQpCisjIC0gbWF4aW11bVBvb2xTaXplIGRlZmluZXMgdGhlIG1heGltdW0gdGhyZWFkIHBvb2wgc2l6ZSwgLTEgbWVhbnMgYW4gdW5ib3VuZGVkIHRocmVhZCBwb29sIHNpemUgKGRlZmF1bHQgaXMgLTEpCisjIC0gcXVldWVTaXplIGRlZmluZXMgdGhlIGV4ZWN1dG9yIHF1ZXVlIHNpemUgKGRlZmF1bHQgaXMgMTAyNCkKKyMgLSBhbGxvd0NvcmVUaHJlYWRUaW1lb3V0IGFsbG93cyB0aGUgY29yZSB0aHJlYWRzIHRvIHRpbWVvdXQgKGRlZmF1bHRzIHRvIHRydWUpCisjIC0ga2VlcEFsaXZlVGltZSBpcyB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyBhIHRocmVhZCBpcyBrZXB0IGFsaXZlIHdoZW4gaWRsZSAoZGVmYXVsdHMgdG8gNjAwMDApCitjb3JlUG9vbFNpemU9NAorbWF4aW11bVBvb2xTaXplPS0xCitxdWV1ZVNpemU9MTAyNAorYWxsb3dDb3JlVGhyZWFkVGltZW91dD10cnVlCitrZWVwQWxpdmVUaW1lPTYwMDAwCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jZmcgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyNWNmZQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2V0Yy9vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmNmZwpAQCAtMCwwICsxLDM3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZSB2YWx1ZXMgYmVsb3cgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSB0aHJlYWQgcG9vbCBzaXplIGZvciBOTVIgZW5kcG9pbnRzLgorIyAtIGNvcmVQb29sU2l6ZSBkZWZpbmVzIHRoZSBjb3JlIHRocmVhZCBwb29sIHNpemUgKGRlZmF1bHQgaXMgNCkKKyMgLSBtYXhpbXVtUG9vbFNpemUgZGVmaW5lcyB0aGUgbWF4aW11bSB0aHJlYWQgcG9vbCBzaXplLCAtMSBtZWFucyBhbiB1bmJvdW5kZWQgdGhyZWFkIHBvb2wgc2l6ZSAoZGVmYXVsdCBpcyAtMSkKKyMgLSBxdWV1ZVNpemUgZGVmaW5lcyB0aGUgZXhlY3V0b3IgcXVldWUgc2l6ZSAoZGVmYXVsdCBpcyAxMDI0KQorIyAtIGFsbG93Q29yZVRocmVhZFRpbWVvdXQgYWxsb3dzIHRoZSBjb3JlIHRocmVhZHMgdG8gdGltZW91dCAoZGVmYXVsdHMgdG8gdHJ1ZSkKKyMgLSBrZWVwQWxpdmVUaW1lIGlzIHRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGEgdGhyZWFkIGlzIGtlcHQgYWxpdmUgd2hlbiBpZGxlIChkZWZhdWx0cyB0byA2MDAwMCkKKyMKKyMgRW5kcG9pbnRzIGFyZSBwcm92aWRlZCBhIFRocmVhZFBvb2wgd2l0aCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiAgSWYgbm8gY29uZmlndXJhdGlvbgorIyBjYW4gYmUgZm91bmQgZm9yIHRoZSBlbmRwb2ludCBuYW1lLCB0aGUgZGVmYXVsdCBvbmUgY2FuIGJlIHVzZWQuCisjIEEgZ2l2ZW4gdGhyZWFkIHBvb2wgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgcHJlZml4aW5nIHRoZSBhYm92ZSBwcm9wZXJ0aWVzIHdpdGggdGhlIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QuCisjIEZvciBleGFtcGxlOgorIyAgIGZvby5iYXIuY29yZVBvb2xTaXplPTE2CisjCitjb3JlUG9vbFNpemU9NAorbWF4aW11bVBvb2xTaXplPS0xCitxdWV1ZVNpemU9MTAyNAorYWxsb3dDb3JlVGhyZWFkVGltZW91dD10cnVlCitrZWVwQWxpdmVUaW1lPTYwMDAwCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvb3JnLm9wczRqLnBheC5sb2dnaW5nLmNmZyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2V0Yy9vcmcub3BzNGoucGF4LmxvZ2dpbmcuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWZkYzgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvb3JnLm9wczRqLnBheC5sb2dnaW5nLmNmZwpAQCAtMCwwICsxLDQ2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFJvb3QgbG9nZ2VyCitsb2c0ai5yb290TG9nZ2VyPUlORk8sIG91dCwgb3NnaTpWbUxvZ0FwcGVuZGVyCitsb2c0ai50aHJvd2FibGVSZW5kZXJlcj1vcmcuYXBhY2hlLmxvZzRqLk9zZ2lUaHJvd2FibGVSZW5kZXJlcgorCisjIENPTlNPTEUgYXBwZW5kZXIgbm90IHVzZWQgYnkgZGVmYXVsdAorbG9nNGouYXBwZW5kZXIuc3Rkb3V0PW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyCitsb2c0ai5hcHBlbmRlci5zdGRvdXQubGF5b3V0PW9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dAorbG9nNGouYXBwZW5kZXIuc3Rkb3V0LmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHtBQlNPTFVURX0gfCAlLTUuNXAgfCAlLTE2LjE2dCB8ICUtMzIuMzJjezF9IHwgJVh7YnVuZGxlLmlkfSAtICVYe2J1bmRsZS5uYW1lfSAtICVYe2J1bmRsZS52ZXJzaW9ufSB8ICVtJW4KKworIyBGaWxlIGFwcGVuZGVyCitsb2c0ai5hcHBlbmRlci5vdXQ9b3JnLmFwYWNoZS5sb2c0ai5Sb2xsaW5nRmlsZUFwcGVuZGVyCitsb2c0ai5hcHBlbmRlci5vdXQubGF5b3V0PW9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dAorbG9nNGouYXBwZW5kZXIub3V0LmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHtBQlNPTFVURX0gfCAlLTUuNXAgfCAlLTE2LjE2dCB8ICUtMzIuMzJjezF9IHwgJVh7YnVuZGxlLmlkfSAtICVYe2J1bmRsZS5uYW1lfSAtICVYe2J1bmRsZS52ZXJzaW9ufSB8ICVtJW4KK2xvZzRqLmFwcGVuZGVyLm91dC5maWxlPSR7a2FyYWYuZGF0YX0vbG9nL3NlcnZpY2VtaXgubG9nCitsb2c0ai5hcHBlbmRlci5vdXQuYXBwZW5kPXRydWUKK2xvZzRqLmFwcGVuZGVyLm91dC5tYXhGaWxlU2l6ZT0xTUIKK2xvZzRqLmFwcGVuZGVyLm91dC5tYXhCYWNrdXBJbmRleD0xMAorCisjIFNpZnQgYXBwZW5kZXIKK2xvZzRqLmFwcGVuZGVyLnNpZnQ9b3JnLmFwYWNoZS5sb2c0ai5zaWZ0Lk1EQ1NpZnRpbmdBcHBlbmRlcgorbG9nNGouYXBwZW5kZXIuc2lmdC5rZXk9YnVuZGxlLm5hbWUKK2xvZzRqLmFwcGVuZGVyLnNpZnQuZGVmYXVsdD1zZXJ2aWNlbWl4Citsb2c0ai5hcHBlbmRlci5zaWZ0LmFwcGVuZGVyPW9yZy5hcGFjaGUubG9nNGouRmlsZUFwcGVuZGVyCitsb2c0ai5hcHBlbmRlci5zaWZ0LmFwcGVuZGVyLmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKK2xvZzRqLmFwcGVuZGVyLnNpZnQuYXBwZW5kZXIubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVke0FCU09MVVRFfSB8ICUtNS41cCB8ICUtMTYuMTZ0IHwgJS0zMi4zMmN7MX0gfCAlbSVuCitsb2c0ai5hcHBlbmRlci5zaWZ0LmFwcGVuZGVyLmZpbGU9JHtrYXJhZi5kYXRhfS9sb2cvJFxce2J1bmRsZS5uYW1lXFx9LmxvZworbG9nNGouYXBwZW5kZXIuc2lmdC5hcHBlbmRlci5hcHBlbmQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvZXRjL3N5c3RlbS5wcm9wZXJ0aWVzIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvZXRjL3N5c3RlbS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTE1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvc3lzdGVtLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBUaGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoaXMgZmlsZSB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRocm91Z2ggc3lzdGVtCisjIHByb3BlcnRpZXMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBLYXJhZidzIGJvb3QgcHJvY2Vzcy4KKyMKKworCisjIExvZyBsZXZlbCB3aGVuIHRoZSBwYXgtbG9nZ2luZyBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUKKyMgVGhpcyBsZXZlbCB3aWxsIG9ubHkgYmUgdXNlZCB3aGlsZSB0aGUgcGF4LWxvZ2dpbmcgc2VydmljZSBidW5kbGUKKyMgaXMgbm90IGZ1bGx5IGF2YWlsYWJsZS4KKyMgVG8gY2hhbmdlIGxvZyBsZXZlbHMsIHBsZWFzZSByZWZlciB0byB0aGUgb3JnLm9wczRqLnBheC5sb2dnaW5nLmNmZyBmaWxlCisjIGluc3RlYWQuCitvcmcub3BzNGoucGF4LmxvZ2dpbmcuRGVmYXVsdFNlcnZpY2VMb2cubGV2ZWw9RVJST1IKKworIworIyBOYW1lIG9mIHRoaXMga2FyYWYgaW5zdGFuY2UuCisjCitrYXJhZi5uYW1lPXJvb3QKKworIworIyBEZWZhdWx0IHJlcG9zaXRvcnkgd2hlcmUgYnVuZGxlcyB3aWxsIGJlIGxvYWRlZCBmcm9tIGJlZm9yZSB1c2luZworIyBvdGhlciBtYXZlbiByZXBvc2l0b3JpZXMuICBGb3IgdGhlIGZ1bGwgbWF2ZW4gY29uZmlndXJhdGlvbiwgc2VlCisjIHRoZSBvcmcub3BzNGoucGF4LnVybC5tdm4uY2ZnIGZpbGUuCisjCitrYXJhZi5kZWZhdWx0LnJlcG9zaXRvcnk9c3lzdGVtCisKKyMKKyMgTG9jYXRpb24gb2YgYSBzaGVsbCBzY3JpcHQgdGhhdCB3aWxsIGJlIHJ1biB3aGVuIHN0YXJ0aW5nIGEgc2hlbGwKKyMgc2Vzc2lvbi4gIFRoaXMgc2NyaXB0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbGlhc2VzIGFuZCBkZWZpbmUKKyMgYWRkaXRpb25hbCBjb21tYW5kcy4KKyMKK2thcmFmLnNoZWxsLmluaXQuc2NyaXB0PSR7a2FyYWYuaG9tZX0vZXRjL3NoZWxsLmluaXQuc2NyaXB0CisKKyMKKyMgU2V0IHRoaXMgZW1wdHkgcHJvcGVydHkgdG8gYXZvaWQgZXJyb3JzIHdoZW4gdmFsaWRhdGluZyB4bWwgZG9jdW1lbnRzLgorIworeG1sLmNhdGFsb2cuZmlsZXM9CisKKyMKKyMgU3VwcHJlc3MgdGhlIGJlbGwgaW4gdGhlIGNvbnNvbGUgd2hlbiBoaXR0aW5nIGJhY2tzcGFjZSB0byBtYW55IHRpbWVzCisjIGZvciBleGFtcGxlCisjCitqbGluZS5ub2JlbGw9dHJ1ZQorCisjCisjIERlZmF1bHQgcG9ydCBmb3IgdGhlIE9TR0kgSFRUUCBTZXJ2aWNlCisjCitvcmcub3NnaS5zZXJ2aWNlLmh0dHAucG9ydD04MTgxCisKKyMKKyMgQWxsb3cgdXNhZ2Ugb2YgJHtzZXJ2aWNlbWl4LmhvbWV9IGFzIGFuIGFsaWFzIGZvciAke2thcmFmLmhvbWV9CisjCitzZXJ2aWNlbWl4LmhvbWU9JHtrYXJhZi5ob21lfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvZXRjL3VzZXJzLnByb3BlcnRpZXMgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9ldGMvdXNlcnMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzQ4ZmFlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvZXRjL3VzZXJzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworc214PXNteCxhZG1pbgpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvbGljZW5zZXMvYXNtLnR4dCBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2xpY2Vuc2VzL2FzbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmZjQzYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2xpY2Vuc2VzL2FzbS50eHQKQEAgLTAsMCArMSwzMCBAQAorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgSU5SSUEsIEZyYW5jZSBUZWxlY29tCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvbGljZW5zZXMvYnNkLnR4dCBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2xpY2Vuc2VzL2JzZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2OGJlMgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2xpY2Vuc2VzL2JzZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGhlIEJTRCBMaWNlbnNlCisKKyAgIENvcHlyaWdodCAoYykgPFlFQVI+LCA8T1dORVI+CisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxPUkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9saWNlbnNlcy9jZGRsLTEuMC50eHQgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9saWNlbnNlcy9jZGRsLTEuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzMGRhOQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2xpY2Vuc2VzL2NkZGwtMS4wLnR4dApAQCAtMCwwICsxLDM4NSBAQAorCitDT01NT04gREVWRUxPUE1FTlQgQU5EIERJU1RSSUJVVElPTiBMSUNFTlNFIChDRERMKSBWZXJzaW9uIDEuMAorCisKKyAgICAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAgICAgICAxLjEuIMOSQ29udHJpYnV0b3LDkyBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQKKyAgICAgICAgICAgIGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgICAgIDEuMi4gw5JDb250cmlidXRvciBWZXJzaW9uw5MgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZQorICAgICAgICAgICAgT3JpZ2luYWwgU29mdHdhcmUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhCisgICAgICAgICAgICBDb250cmlidXRvciAoaWYgYW55KSwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorICAgICAgICAgICAgcGFydGljdWxhciBDb250cmlidXRvci4KKworICAgICAgICAgICAgMS4zLiDDkkNvdmVyZWQgU29mdHdhcmXDkyBtZWFucyAoYSkgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvcgorICAgICAgICAgICAgKGIpIE1vZGlmaWNhdGlvbnMsIG9yIChjKSB0aGUgY29tYmluYXRpb24gb2YgZmlsZXMKKyAgICAgICAgICAgIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBmaWxlcyBjb250YWluaW5nCisgICAgICAgICAgICBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKyAgICAgICAgICAgIDEuNC4gw5JFeGVjdXRhYmxlw5MgbWVhbnMgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gYW55IGZvcm0KKyAgICAgICAgICAgIG90aGVyIHRoYW4gU291cmNlIENvZGUuIAorCisgICAgICAgICAgICAxLjUuIMOSSW5pdGlhbCBEZXZlbG9wZXLDkyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkKKyAgICAgICAgICAgIHRoYXQgZmlyc3QgbWFrZXMgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoaXMKKyAgICAgICAgICAgIExpY2Vuc2UuIAorICAgICAgICAgICAgCisgICAgICAgICAgICAxLjYuIMOSTGFyZ2VyIFdvcmvDkyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZAorICAgICAgICAgICAgU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZQorICAgICAgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgICAxLjcuIMOSTGljZW5zZcOTIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICAgICAgIDEuOC4gw5JMaWNlbnNhYmxlw5MgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlCisgICAgICAgICAgICBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbAorICAgICAgICAgICAgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzCisgICAgICAgICAgICBjb252ZXllZCBoZXJlaW4uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIDEuOS4gw5JNb2RpZmljYXRpb25zw5MgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlCisgICAgICAgICAgICBmb3JtIG9mIGFueSBvZiB0aGUgZm9sbG93aW5nOiAKKworICAgICAgICAgICAgICAgICAgQS4gQW55IGZpbGUgdGhhdCByZXN1bHRzIGZyb20gYW4gYWRkaXRpb24gdG8sCisgICAgICAgICAgICAgICAgICBkZWxldGlvbiBmcm9tIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgYQorICAgICAgICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICBNb2RpZmljYXRpb25zOyAKKworICAgICAgICAgICAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb247IG9yIAorCisgICAgICAgICAgICAgICAgICBDLiBBbnkgbmV3IGZpbGUgdGhhdCBpcyBjb250cmlidXRlZCBvciBvdGhlcndpc2UgbWFkZQorICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICAgIDEuMTAuIMOST3JpZ2luYWwgU29mdHdhcmXDkyBtZWFucyB0aGUgU291cmNlIENvZGUgYW5kCisgICAgICAgICAgICBFeGVjdXRhYmxlIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB0aGF0IGlzCisgICAgICAgICAgICBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gCisKKyAgICAgICAgICAgIDEuMTEuIMOSUGF0ZW50IENsYWltc8OTIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZAorICAgICAgICAgICAgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLAorICAgICAgICAgICAgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudAorICAgICAgICAgICAgTGljZW5zYWJsZSBieSBncmFudG9yLiAKKworICAgICAgICAgICAgMS4xMi4gw5JTb3VyY2UgQ29kZcOTIG1lYW5zIChhKSB0aGUgY29tbW9uIGZvcm0gb2YgY29tcHV0ZXIKKyAgICAgICAgICAgIHNvZnR3YXJlIGNvZGUgaW4gd2hpY2ggbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSBhbmQgKGIpCisgICAgICAgICAgICBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgaW4gb3Igd2l0aCBzdWNoIGNvZGUuCisKKyAgICAgICAgICAgIDEuMTMuIMOSWW91w5MgKG9yIMOSWW91csOTKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwKKyAgICAgICAgICAgIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZgorICAgICAgICAgICAgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgw5JZb3XDkworICAgICAgICAgICAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMKKyAgICAgICAgICAgIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcworICAgICAgICAgICAgZGVmaW5pdGlvbiwgw5Jjb250cm9sw5MgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yCisgICAgICAgICAgICBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2gKKyAgICAgICAgICAgIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAKKyAgICAgICAgICAgIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMKKyAgICAgICAgICAgIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAyLiBMaWNlbnNlIEdyYW50cy4gCisKKyAgICAgICAgICAgIDIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCisgICAgICAgICAgICBDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZAorICAgICAgICAgICAgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0aGUKKyAgICAgICAgICAgIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKKyAgICAgICAgICAgIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOiAKKworICAgICAgICAgICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIsCisgICAgICAgICAgICAgICAgICB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLAorICAgICAgICAgICAgICAgICAgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yCisgICAgICAgICAgICAgICAgICBwb3J0aW9ucyB0aGVyZW9mKSwgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgICBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyAgICAgICAgICAgICAgICAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLAorICAgICAgICAgICAgICAgICAgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBTb2Z0d2FyZSwgdG8gbWFrZSwgaGF2ZQorICAgICAgICAgICAgICAgICAgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3IKKyAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IKKyAgICAgICAgICAgICAgICAgIHBvcnRpb25zIHRoZXJlb2YpLiAKKworICAgICAgICAgICAgICAgICAgKGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMShhKSBhbmQgKGIpCisgICAgICAgICAgICAgICAgICBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0CisgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlcyBvciBvdGhlcndpc2UgbWFrZXMgdGhlIE9yaWdpbmFsIFNvZnR3YXJlCisgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgICAgICAgICAgICAgICAgTGljZW5zZS4gCisKKyAgICAgICAgICAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudAorICAgICAgICAgICAgICAgICAgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20KKyAgICAgICAgICAgICAgICAgIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKDIpIGZvciBpbmZyaW5nZW1lbnRzCisgICAgICAgICAgICAgICAgICBjYXVzZWQgYnk6IChpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgU29mdHdhcmUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgU29mdHdhcmUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLiAKKworICAgICAgICAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC4KKworICAgICAgICAgICAgQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQKKyAgICAgICAgICAgIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaAorICAgICAgICAgICAgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCisgICAgICAgICAgICBub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyAgICAgICAgICAgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yIHRvCisgICAgICAgICAgICAgICAgICB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlCisgICAgICAgICAgICAgICAgICBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2gKKyAgICAgICAgICAgICAgICAgIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgZWl0aGVyIG9uIGFuCisgICAgICAgICAgICAgICAgICB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzCisgICAgICAgICAgICAgICAgICBDb3ZlcmVkIFNvZnR3YXJlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLAorICAgICAgICAgICAgICAgICAgdXNpbmcsIG9yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKKyAgICAgICAgICAgICAgICAgIENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aAorICAgICAgICAgICAgICAgICAgaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2gKKyAgICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwKKyAgICAgICAgICAgICAgICAgIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAoMSkKKyAgICAgICAgICAgICAgICAgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucworICAgICAgICAgICAgICAgICAgdGhlcmVvZik7IGFuZCAoMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMKKyAgICAgICAgICAgICAgICAgIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uCisgICAgICAgICAgICAgICAgICAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuIAorCisgICAgICAgICAgICAgICAgICAoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZAorICAgICAgICAgICAgICAgICAgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QKKyAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgTW9kaWZpY2F0aW9ucworICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuIAorCisgICAgICAgICAgICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQKKyAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yCisgICAgICAgICAgICAgICAgICBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAoMikgZm9yCisgICAgICAgICAgICAgICAgICBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoaXJkIHBhcnR5CisgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24sIG9yIChpaSkgdGhlCisgICAgICAgICAgICAgICAgICBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvcgorICAgICAgICAgICAgICAgICAgd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciAoMykgdW5kZXIKKyAgICAgICAgICAgICAgICAgIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgU29mdHdhcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLiAKKworICAgICAgMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCisgICAgICAgICAgICAzLjEuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworICAgICAgICAgICAgQW55IENvdmVyZWQgU29mdHdhcmUgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZQorICAgICAgICAgICAgYXZhaWxhYmxlIGluIEV4ZWN1dGFibGUgZm9ybSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgIFNvdXJjZSBDb2RlIGZvcm0gYW5kIHRoYXQgU291cmNlIENvZGUgZm9ybSBtdXN0IGJlCisgICAgICAgICAgICBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0CisgICAgICAgICAgICBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZQorICAgICAgICAgICAgU291cmNlIENvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBZb3UgZGlzdHJpYnV0ZSBvcgorICAgICAgICAgICAgb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlLiBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZiBhbnkKKyAgICAgICAgICAgIHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gYXMgdG8gaG93IHRoZXkgY2FuCisgICAgICAgICAgICBvYnRhaW4gc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gaW4gYQorICAgICAgICAgICAgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkCisgICAgICAgICAgICBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCisKKyAgICAgICAgICAgIDMuMi4gTW9kaWZpY2F0aW9ucy4KKworICAgICAgICAgICAgVGhlIE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdQorICAgICAgICAgICAgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91CisgICAgICAgICAgICByZXByZXNlbnQgdGhhdCBZb3UgYmVsaWV2ZSBZb3VyIE1vZGlmaWNhdGlvbnMgYXJlIFlvdXIKKyAgICAgICAgICAgIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBZb3UgaGF2ZSBzdWZmaWNpZW50IHJpZ2h0cyB0bworICAgICAgICAgICAgZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICAgIDMuMy4gUmVxdWlyZWQgTm90aWNlcy4KKworICAgICAgICAgICAgWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBpbiBlYWNoIG9mIFlvdXIgTW9kaWZpY2F0aW9ucworICAgICAgICAgICAgdGhhdCBpZGVudGlmaWVzIFlvdSBhcyB0aGUgQ29udHJpYnV0b3Igb2YgdGhlIE1vZGlmaWNhdGlvbi4KKyAgICAgICAgICAgIFlvdSBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0LCBwYXRlbnQgb3IKKyAgICAgICAgICAgIHRyYWRlbWFyayBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIENvdmVyZWQgU29mdHdhcmUsIG9yCisgICAgICAgICAgICBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgb3IgYW55IGRlc2NyaXB0aXZlIHRleHQgZ2l2aW5nCisgICAgICAgICAgICBhdHRyaWJ1dGlvbiB0byBhbnkgQ29udHJpYnV0b3Igb3IgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorCisgICAgICAgICAgICAzLjQuIEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXMuCisKKyAgICAgICAgICAgIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IENvdmVyZWQKKyAgICAgICAgICAgIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZQorICAgICAgICAgICAgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c8OVCisgICAgICAgICAgICByaWdodHMgaGVyZXVuZGVyLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhCisgICAgICAgICAgICBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eQorICAgICAgICAgICAgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlLgorICAgICAgICAgICAgSG93ZXZlciwgeW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbgorICAgICAgICAgICAgYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdQorICAgICAgICAgICAgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwKKyAgICAgICAgICAgIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5CisgICAgICAgICAgICBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorICAgICAgICAgICAgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZAorICAgICAgICAgICAgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YKKyAgICAgICAgICAgIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKyAgICAgICAgICAKKworICAgICAgICAgICAgMy41LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworICAgICAgICAgICAgWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIGZvcm0gb2YgdGhlIENvdmVyZWQKKyAgICAgICAgICAgIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdW5kZXIgdGhlIHRlcm1zCisgICAgICAgICAgICBvZiBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zCisgICAgICAgICAgICBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorICAgICAgICAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlCisgICAgICAgICAgICBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSBmb3JtIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQKKyAgICAgICAgICAgIG9yIGFsdGVyIHRoZSByZWNpcGllbnTDlXMgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSBmb3JtCisgICAgICAgICAgICBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91CisgICAgICAgICAgICBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgZm9ybSB1bmRlciBhCisgICAgICAgICAgICBkaWZmZXJlbnQgbGljZW5zZSwgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQKKyAgICAgICAgICAgIGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91CisgICAgICAgICAgICBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvci4gWW91CisgICAgICAgICAgICBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkKKyAgICAgICAgICAgIENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsCisgICAgICAgICAgICBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcworICAgICAgICAgICAgWW91IG9mZmVyLgorCisgICAgICAgICAgICAzLjYuIExhcmdlciBXb3Jrcy4KKworICAgICAgICAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBTb2Z0d2FyZQorICAgICAgICAgICAgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCisgICAgICAgICAgICBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaAorICAgICAgICAgICAgYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UKKyAgICAgICAgICAgIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiAKKyAgICAgICAgICAgIAorICAgICAgNC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIAorCisgICAgICAgICAgICA0LjEuIE5ldyBWZXJzaW9ucy4KKworICAgICAgICAgICAgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpcyB0aGUgaW5pdGlhbCBsaWNlbnNlIHN0ZXdhcmQgYW5kCisgICAgICAgICAgICBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlCisgICAgICAgICAgICBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorICAgICAgICAgICAgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIEV4Y2VwdCBhcyBwcm92aWRlZCBpbgorICAgICAgICAgICAgU2VjdGlvbiA0LjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlIHN0ZXdhcmQgaGFzIHRoZQorICAgICAgICAgICAgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgTGljZW5zZS4gCisKKyAgICAgICAgICAgIDQuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworICAgICAgICAgICAgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZQorICAgICAgICAgICAgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZAorICAgICAgICAgICAgdGhlIENvdmVyZWQgU29mdHdhcmUuIElmIHRoZSBJbml0aWFsIERldmVsb3BlciBpbmNsdWRlcyBhCisgICAgICAgICAgICBub3RpY2UgaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHByb2hpYml0aW5nIGl0IGZyb20gYmVpbmcKKyAgICAgICAgICAgIGRpc3RyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhbnkKKyAgICAgICAgICAgIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG11c3QgZGlzdHJpYnV0ZSBhbmQKKyAgICAgICAgICAgIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQKKyAgICAgICAgICAgIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBPdGhlcndpc2UsIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8KKyAgICAgICAgICAgIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZQorICAgICAgICAgICAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgTGljZW5zZSBwdWJsaXNoZWQgYnkgdGhlIGxpY2Vuc2Ugc3Rld2FyZC4gCisKKyAgICAgICAgICAgIDQuMy4gTW9kaWZpZWQgVmVyc2lvbnMuCisKKyAgICAgICAgICAgIFdoZW4gWW91IGFyZSBhbiBJbml0aWFsIERldmVsb3BlciBhbmQgWW91IHdhbnQgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgIG5ldyBsaWNlbnNlIGZvciBZb3VyIE9yaWdpbmFsIFNvZnR3YXJlLCBZb3UgbWF5IGNyZWF0ZSBhbmQKKyAgICAgICAgICAgIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlmIFlvdTogKGEpIHJlbmFtZQorICAgICAgICAgICAgdGhlIGxpY2Vuc2UgYW5kIHJlbW92ZSBhbnkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCB0aGUgbGljZW5zZSBkaWZmZXJzCisgICAgICAgICAgICBmcm9tIHRoaXMgTGljZW5zZSk7IGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdAorICAgICAgICAgICAgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLgorICAgICAgICAgICAgCisKKyAgICAgIDUuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKyAgICAgIENPVkVSRUQgU09GVFdBUkUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIMOSQVMgSVPDkworICAgICAgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKyAgICAgIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQKKyAgICAgIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUgorICAgICAgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORAorICAgICAgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkKKyAgICAgIENPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUKKyAgICAgIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GCisgICAgICBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRgorICAgICAgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YKKyAgICAgIEFOWSBDT1ZFUkVEIFNPRlRXQVJFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCisgICAgICBESVNDTEFJTUVSLiAKKworICAgICAgNi4gVEVSTUlOQVRJT04uIAorCisgICAgICAgICAgICA2LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCisgICAgICAgICAgICB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcworICAgICAgICAgICAgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YKKyAgICAgICAgICAgIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCisgICAgICAgICAgICBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mCisgICAgICAgICAgICB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworICAgICAgICAgICAgNi4yLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nCisgICAgICAgICAgICBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yCisgICAgICAgICAgICBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdAorICAgICAgICAgICAgd2hvbSBZb3UgYXNzZXJ0IHN1Y2ggY2xhaW0gaXMgcmVmZXJyZWQgdG8gYXMgw5JQYXJ0aWNpcGFudMOTKQorICAgICAgICAgICAgYWxsZWdpbmcgdGhhdCB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgKG1lYW5pbmcgdGhlCisgICAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyBhIENvbnRyaWJ1dG9yCisgICAgICAgICAgICBvciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIHRoZQorICAgICAgICAgICAgSW5pdGlhbCBEZXZlbG9wZXIpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueQorICAgICAgICAgICAgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGRpcmVjdGx5IG9yCisgICAgICAgICAgICBpbmRpcmVjdGx5IHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50LCB0aGUgSW5pdGlhbAorICAgICAgICAgICAgRGV2ZWxvcGVyIChpZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBQYXJ0aWNpcGFudCkKKyAgICAgICAgICAgIGFuZCBhbGwgQ29udHJpYnV0b3JzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMKKyAgICAgICAgICAgIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudAorICAgICAgICAgICAgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGV4cGlyYXRpb24KKyAgICAgICAgICAgIG9mIHN1Y2ggNjAgZGF5IG5vdGljZSBwZXJpb2QsIHVubGVzcyBpZiB3aXRoaW4gc3VjaCA2MCBkYXkKKyAgICAgICAgICAgIHBlcmlvZCBZb3Ugd2l0aGRyYXcgWW91ciBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgICAgICAgICBQYXJ0aWNpcGFudCBTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQgZWl0aGVyCisgICAgICAgICAgICB1bmlsYXRlcmFsbHkgb3IgcHVyc3VhbnQgdG8gYSB3cml0dGVuIGFncmVlbWVudCB3aXRoCisgICAgICAgICAgICBQYXJ0aWNpcGFudC4KKworICAgICAgICAgICAgNi4zLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgNi4xIG9yIDYuMgorICAgICAgICAgICAgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlcyB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQKKyAgICAgICAgICAgIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uCisgICAgICAgICAgICAoZXhjbHVkaW5nIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IGJ5IGFueSBkaXN0cmlidXRvcikKKyAgICAgICAgICAgIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKyAgICAgIDcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCisgICAgICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVAorICAgICAgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUKKyAgICAgIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRgorICAgICAgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFCisgICAgICBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUgorICAgICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUCisgICAgICBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NUIFBST0ZJVFMsIExPU1MgT0YgR09PRFdJTEwsIFdPUksKKyAgICAgIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUgorICAgICAgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTgorICAgICAgSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCisgICAgICBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwKKyAgICAgIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZw5VTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVAorICAgICAgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPCisgICAgICBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IKKyAgICAgIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVAorICAgICAgQVBQTFkgVE8gWU9VLgorCisgICAgICA4LiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisgICAgICBUaGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBhIMOSY29tbWVyY2lhbCBpdGVtLMOTIGFzIHRoYXQgdGVybSBpcworICAgICAgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2Ygw5Jjb21tZXJjaWFsCisgICAgICBjb21wdXRlciBzb2Z0d2FyZcOTIChhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBhdCA0OCBDLkYuUi4gwqQKKyAgICAgIDI1Mi4yMjctNzAxNChhKSgxKSkgYW5kIMOSY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZQorICAgICAgZG9jdW1lbnRhdGlvbsOTIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4KKyAgICAgIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEKKyAgICAgIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMKKyAgICAgIGFjcXVpcmUgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisgICAgICBUaGlzIFUuUy4gR292ZXJubWVudCBSaWdodHMgY2xhdXNlIGlzIGluIGxpZXUgb2YsIGFuZCBzdXBlcnNlZGVzLAorICAgICAgYW55IG90aGVyIEZBUiwgREZBUiwgb3Igb3RoZXIgY2xhdXNlIG9yIHByb3Zpc2lvbiB0aGF0IGFkZHJlc3NlcworICAgICAgR292ZXJubWVudCByaWdodHMgaW4gY29tcHV0ZXIgc29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgICA5LiBNSVNDRUxMQU5FT1VTLgorCisgICAgICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdAorICAgICAgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQorICAgICAgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUKKyAgICAgIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlCisgICAgICBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBqdXJpc2RpY3Rpb24gc3BlY2lmaWVkIGluIGEgbm90aWNlCisgICAgICBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAoZXhjZXB0IHRvIHRoZSBleHRlbnQKKyAgICAgIGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBzdWNoCisgICAgICBqdXJpc2RpY3Rpb27DlXMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIEFueSBsaXRpZ2F0aW9uCisgICAgICByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mCisgICAgICB0aGUgY291cnRzIGxvY2F0ZWQgaW4gdGhlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgc3BlY2lmaWVkIGluIGEKKyAgICAgIG5vdGljZSBjb250YWluZWQgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgd2l0aCB0aGUgbG9zaW5nCisgICAgICBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydAorICAgICAgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzw5UgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZQorICAgICAgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUKKyAgICAgIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IKKyAgICAgIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbAorICAgICAgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKyAgICAgIFlvdSBhZ3JlZSB0aGF0IFlvdSBhbG9uZSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUKKyAgICAgIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlIGV4cG9ydAorICAgICAgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpIHdoZW4gWW91IHVzZSwKKyAgICAgIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGFueSBDb3ZlcmVkIFNvZnR3YXJlLgorCisgICAgICAxMC4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworICAgICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcworICAgICAgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvcgorICAgICAgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlCisgICAgICBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvCisgICAgICBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nCisgICAgICBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbgorICAgICAgb2YgbGlhYmlsaXR5LgpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvbGljZW5zZXMvY3BsLTEuMC50eHQgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9kaXN0cmlidXRpb24vdGV4dC9saWNlbnNlcy9jcGwtMS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTk5MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZGlzdHJpYnV0aW9uL3RleHQvbGljZW5zZXMvY3BsLTEuMC50eHQKQEAgLTAsMCArMSwyMTMgQEAKK0NvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NTU9OIFBVQkxJQworTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNCitDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworICAgIGEpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZAorZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCisKKyAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CisKKyAgICBpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKworICAgIGlpKSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07CisKKyAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlCitkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEKK0NvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUKK2FjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0bwordGhlIFByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbgorY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKyJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMgIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZQorbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4KK2NvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyJQcm9ncmFtIiBtZWFucyB0aGUgQ29udHJpYnV0aW9ucyBkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsCitpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKKyAgICBhKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bworcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sCitkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaAorZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCisKKyAgICBiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZAorUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZQorQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCitUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUKK1Byb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCithZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlCitMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMKK3doaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworICAgIGMpIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcwordG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55CitDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0bworUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZgoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlCityaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlCityZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuCitGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8KK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlCitiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorCisgICAgZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudAorY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQKK2ZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMKK293biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworICAgIGEpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKKworICAgIGIpIGl0cyBsaWNlbnNlIGFncmVlbWVudDoKKworICAgIGkpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kCitub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZAorZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CisKKyAgICBpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IKK2RhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsCitkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKworICAgIGlpaSkgc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQKK2J5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorCisgICAgaXYpIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoCitDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvcgordGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4gCisKK1doZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworICAgIGEpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCisgICAgYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIAorCitDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlCitQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmCithbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZQorb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoCityZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvCitpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIKK3doaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYKK2EgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2gKK0NvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkKK2V2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMKK2FuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwKK2FjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZQorZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8KK2NvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueQorcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbgorYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0CitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcworcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaAorQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIKK0NvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQKK3JlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwKK05PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaAorUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZgorcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YKK3Byb2dyYW0gZXJyb3JzLCBjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLAorcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZCitDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QKK1BST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZQorbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZQordGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoCitwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvCithIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYQorbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQKK3VuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluCithZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5CisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbQoraXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpCitpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlcgorU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvCitjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMKK25vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2YKK3N1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsCitSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMKK3JlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50CithbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZAorc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4KK29yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcyBjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUKK21vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCitwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuCitObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuCitJQk0gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50IFN0ZXdhcmQuIElCTSBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZQorYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZworQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK3VuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudAoraXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cworQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucworMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMKK0FncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhcgorYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4KK2FueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KZGlmZiAtLWdpdCBhL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9hY3RpdmVtcS1mZWF0dXJlcy54bWwgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9maWx0ZXJlZC1yZXNvdXJjZXMvYWN0aXZlbXEtZmVhdHVyZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjViMzYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9maWx0ZXJlZC1yZXNvdXJjZXMvYWN0aXZlbXEtZmVhdHVyZXMueG1sCkBAIC0wLDAgKzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxmZWF0dXJlcyBuYW1lPSJhY3RpdmVtcS0ke2FjdGl2ZW1xLnZlcnNpb259Ij4KKyAgICA8cmVwb3NpdG9yeT5tdm46b3JnLmFwYWNoZS5rYXJhZi9hcGFjaGUta2FyYWYvJHtrYXJhZi52ZXJzaW9ufS94bWwvZmVhdHVyZXM8L3JlcG9zaXRvcnk+CisgICAgCisgICAgPGZlYXR1cmUgbmFtZT0iYWN0aXZlbXEiIHZlcnNpb249IiR7YWN0aXZlbXEudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWFubm90YXRpb25fMS4wX3NwZWMvJHtnZXJvbmltby1hbm5vdGF0aW9uLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tanRhXzEuMV9zcGVjLyR7Z2Vyb25pbW8tanRhLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tam1zXzEuMV9zcGVjLyR7Z2Vyb25pbW8tam1zLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tajJlZS1tYW5hZ2VtZW50XzEuMV9zcGVjLyR7Z2Vyb25pbW8tajJlZS1tYW5hZ2VtZW50LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtcG9vbC8ke2NvbW1vbnMtcG9vbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1jb2xsZWN0aW9ucy8ke2NvbW1vbnMtY29sbGVjdGlvbnMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtbGFuZy8ke2NvbW1vbnMtbGFuZy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46Y29tbW9ucy1jb2RlYy9jb21tb25zLWNvZGVjLyR7Y29tbW9ucy1jb2RlYy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3JvLyR7b3JvLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy52ZWxvY2l0eS8ke3ZlbG9jaXR5LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qYXN5cHQvJHtqYXN5cHQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEvYWN0aXZlbXEtY29yZS8ke2FjdGl2ZW1xLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEva2FoYWRiLyR7YWN0aXZlbXEudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5hY3RpdmVtcS9hY3RpdmVtcS1jb25zb2xlLyR7YWN0aXZlbXEudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5hY3RpdmVtcS9hY3RpdmVtcS1yYS8ke2FjdGl2ZW1xLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEvYWN0aXZlbXEtcG9vbC8ke2FjdGl2ZW1xLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEvYWN0aXZlbXEta2FyYWYvJHthY3RpdmVtcS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmFyaWVzLnRyYW5zYWN0aW9uL29yZy5hcGFjaGUuYXJpZXMudHJhbnNhY3Rpb24ubWFuYWdlci8ke2FyaWVzLnRyYW5zYWN0aW9uLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIAorICAgIDxmZWF0dXJlIG5hbWU9ImFjdGl2ZW1xLXNwcmluZyIgdmVyc2lvbj0iJHthY3RpdmVtcS52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c3ByaW5nLm9zZ2kudmVyc2lvbn0iPnNwcmluZy1kbTwvZmVhdHVyZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHthY3RpdmVtcS52ZXJzaW9ufSI+YWN0aXZlbXE8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEvYWN0aXZlbXEtc3ByaW5nLyR7YWN0aXZlbXEudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS54YmVhbi94YmVhbi1zcHJpbmcvJHt4YmVhbi52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICAKKyAgICA8ZmVhdHVyZSBuYW1lPSJhY3RpdmVtcS1ibHVlcHJpbnQiIHZlcnNpb249IiR7YWN0aXZlbXEudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2FjdGl2ZW1xLnZlcnNpb259Ij5hY3RpdmVtcTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5zY3JpcHRpbmctYXBpLTEuMC8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jb21tb25zL2NvbW1vbnMtamV4bC8ke2NvbW1vbnMtamV4bC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnhiZWFuL3hiZWFuLWJsdWVwcmludC8ke3hiZWFuLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEvYWN0aXZlbXEtYmx1ZXByaW50LyR7YWN0aXZlbXEudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgCisgICAgPCEtLSBkbyAiZmVhdHVyZXM6aW5zdGFsbCB3YXIiIGJlZm9yZSBpbnN0YWxsaW5nIHRoaXMgb25lIC0tPgorICAgIDxmZWF0dXJlIG5hbWU9ImFjdGl2ZW1xLXdlYi1jb25zb2xlIiB2ZXJzaW9uPSIke2FjdGl2ZW1xLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT53YXI6bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEvYWN0aXZlbXEtd2ViLWNvbnNvbGUvJHthY3RpdmVtcS52ZXJzaW9ufS93YXI/V2ViYXBwLUNvbnRleHQ9YWN0aXZlbXEtd2ViLWNvbnNvbGU8L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgCis8L2ZlYXR1cmVzPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL2NhbWVsLWZlYXR1cmVzLnhtbCBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9jYW1lbC1mZWF0dXJlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjMjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9jYW1lbC1mZWF0dXJlcy54bWwKQEAgLTAsMCArMSw1OTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxmZWF0dXJlcz4KKyAgICA8cmVwb3NpdG9yeT5tdm46b3JnLmFwYWNoZS5rYXJhZi9hcGFjaGUta2FyYWYvJHtrYXJhZi52ZXJzaW9ufS94bWwvZmVhdHVyZXM8L3JlcG9zaXRvcnk+CisgICAgPGZlYXR1cmUgbmFtZT0nY2FtZWwnIHZlcnNpb249JyR7Y2FtZWwudmVyc2lvbn0nPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPScke2NhbWVsLnZlcnNpb259Jz5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPScke2NhbWVsLnZlcnNpb259Jz5jYW1lbC1zcHJpbmc8L2ZlYXR1cmU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249JyR7Y2FtZWwudmVyc2lvbn0nPmNhbWVsLWJsdWVwcmludDwvZmVhdHVyZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0nY2FtZWwtY29yZScgdmVyc2lvbj0nJHtjYW1lbC52ZXJzaW9ufSc+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c3ByaW5nLnZlcnNpb259Ij5zcHJpbmc8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuYWN0aXZhdGlvbi1hcGktMS4xLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpheGItYXBpLTIuMi8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5zdGF4LWFwaS0xLjAvJHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpheGItaW1wbC8ke2pheGItaW1wbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmZ1c2Vzb3VyY2UuY29tbW9ubWFuL2NvbW1vbnMtbWFuYWdlbWVudC8ke2NvbW1vbnMtbWFuYWdlbWVudC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWNvcmUvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSdjYW1lbC1zcHJpbmcnIHZlcnNpb249JyR7Y2FtZWwudmVyc2lvbn0nPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWp0YV8xLjFfc3BlYy8ke2dlcm9uaW1vLWp0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPScke3NwcmluZy52ZXJzaW9ufSc+c3ByaW5nPC9mZWF0dXJlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPScke3NwcmluZy5vc2dpLnZlcnNpb259Jz5zcHJpbmctZG08L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLXR4LyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249JyR7Y2FtZWwudmVyc2lvbn0nPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtc3ByaW5nLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtYmx1ZXByaW50IiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1ibHVlcHJpbnQvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmFyaWVzLmJsdWVwcmludC9vcmcuYXBhY2hlLmFyaWVzLmJsdWVwcmludC8ke2FyaWVzLmJsdWVwcmludC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSdjYW1lbC10ZXN0JyB2ZXJzaW9uPScke2NhbWVsLnZlcnNpb259Jz4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0nJHtjYW1lbC52ZXJzaW9ufSc+Y2FtZWwtc3ByaW5nPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qdW5pdC8ke2p1bml0LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXRlc3QvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSdjYW1lbC1jeGYnIHZlcnNpb249JyR7Y2FtZWwudmVyc2lvbn0nPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXBvb2wvJHtjb21tb25zLXBvb2wuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tam1zXzEuMV9zcGVjLyR7Z2Vyb25pbW8tam1zLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWptcy8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hc20vJHthc20uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmZhc3RpbmZvc2V0LyR7ZmFzdGluZm9zZXQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tc2VydmxldF8zLjBfc3BlYy8ke2dlcm9uaW1vLXNlcnZsZXQudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamV0dHkvJHtqZXR0eS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamRvbS8ke2pkb20uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtY29kZWMvY29tbW9ucy1jb2RlYy8ke2NvbW1vbnMtY29kZWMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5jb2RlaGF1cy5qZXR0aXNvbi9qZXR0aXNvbi8ke2pldHRpc29uLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFudC8ke2FudC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYmNlbC8ke2JjZWwuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhhbGFuLyR7eGFsYW4uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhlcmNlcy8ke3hlcmNlcy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1sYmVhbnMvJHt4bWxiZWFucy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1sc2VjLyR7eG1sc2VjLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxyZXNvbHZlci8ke3htbHJlc29sdmVyLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuY29kZWhhdXMud29vZHN0b3gvd29vZHN0b3gtY29yZS1hc2wvJHt3b29kc3RveC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuY29kZWhhdXMud29vZHN0b3gvc3RheDItYXBpLyR7d29vZHN0b3guc3RheDItYXBpLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUud3MuY29tbW9ucy5zY2hlbWEvWG1sU2NoZW1hLyR7eG1sc2NoZW1hLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtbGFuZy8ke2NvbW1vbnMtbGFuZy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1jb2xsZWN0aW9ucy8ke2NvbW1vbnMtY29sbGVjdGlvbnMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFudGxyLyR7YW50bHIyLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcm8vJHtvcm8uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnZlbG9jaXR5LyR7dmVsb2NpdHkuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmphdmF4Lm1haWwvbWFpbC8ke2phdmF4Lm1haWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMubmVldGhpLyR7bmVldGhpLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hYmRlcmEvJHthYmRlcmEuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4d3MtYXBpLSR7amF4d3MtYXBpLnZlcnNpb259LyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWFubm90YXRpb25fMS4wX3NwZWMvJHtnZXJvbmltby1hbm5vdGF0aW9uLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc2Fhai1hcGktMS4zLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zYWFqLWltcGwvJHtzYWFqLWltcGwuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLndzZGw0ai8ke3dzZGw0ai5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS53cy5zZWN1cml0eS93c3M0ai8ke3dzczRqLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm9wZW5zYW1sLyR7b3BlbnNhbWwuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuanNyMzExLWFwaS0xLjEvJHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWMvJHtnZXJvbmltby13cy1tZXRhZGF0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmN4Zi9jeGYtYnVuZGxlLyR7Y3hmLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtaW8vJHtjb21tb25zLWlvLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1zcHJpbmc8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtY3hmLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0nY2FtZWwtY2FjaGUnIHZlcnNpb249JyR7Y2FtZWwudmVyc2lvbn0nPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPScke2NhbWVsLnZlcnNpb259Jz5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5laGNhY2hlLyR7ZWhjYWNoZS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamRvbS8ke2pkb20uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtY2FjaGUvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSdjYW1lbC1jYXN0b3InIHZlcnNpb249JyR7Y2FtZWwudmVyc2lvbn0nPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPScke2NhbWVsLnZlcnNpb259Jz5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcm8vJHtvcm8uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnJlZ2V4cC8ke3JlZ2V4cC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY2FzdG9yLyR7Y2FzdG9yLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWNhc3Rvci8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWNyeXB0byIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtY29kZWMvY29tbW9ucy1jb2RlYy8ke2NvbW1vbnMtY29kZWMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtY3J5cHRvLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtaHR0cCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtaHR0cGNsaWVudC8ke2NvbW1vbnMtaHR0cGNsaWVudC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46Y29tbW9ucy1jb2RlYy9jb21tb25zLWNvZGVjLyR7Y29tbW9ucy1jb2RlYy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjLyR7Z2Vyb25pbW8tc2VydmxldC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWh0dHAvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1odHRwNCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMvaHR0cGNvcmUtb3NnaS8ke2h0dHBjb21wb25lbnRzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMvaHR0cGNsaWVudC1vc2dpLyR7aHR0cGNvbXBvbmVudHMudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjLyR7Z2Vyb25pbW8tc2VydmxldC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWh0dHA0LyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtbWluYSIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm1pbmEvJHttaW5hLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLW1pbmEvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1qZXR0eSIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tc2VydmxldF8zLjBfc3BlYy8ke2dlcm9uaW1vLXNlcnZsZXQudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktdXRpbC8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LWlvLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktaHR0cC8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LWNsaWVudC8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LWNvbnRpbnVhdGlvbi8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LWpteC8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZlci8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlY3VyaXR5LyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VydmxldC8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZsZXRzLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHkteG1sLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktd2ViYXBwLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtaHR0cDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1qZXR0eS8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXNlcnZsZXQiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZXMgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtaHR0cDwvZmVhdHVyZXM+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtc2VydmxldC8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWptcyIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWNvcmUvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctYmVhbnMvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctY29udGV4dC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy10eC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWp0YV8xLjFfc3BlYy8ke2dlcm9uaW1vLWp0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXBvb2wvJHtjb21tb25zLXBvb2wuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tam1zXzEuMV9zcGVjLyR7Z2Vyb25pbW8tam1zLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWptcy8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWptcy8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWFtcXAiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWxhbmcvJHtjb21tb25zLWxhbmcuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29sbGVjdGlvbnMvJHtjb21tb25zLWNvbGxlY3Rpb25zLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5taW5hLyR7bWluYS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMucXBpZC8ke3FwaWQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWptczwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1hbXFwLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtYXRvbSIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFiZGVyYS8ke2FiZGVyYS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46Y29tbW9ucy1jb2RlYy9jb21tb25zLWNvZGVjLyR7Y29tbW9ucy1jb2RlYy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1hdG9tLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtYmFtIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctdHgvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctd2ViLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tanRhXzEuMV9zcGVjLyR7Z2Vyb25pbW8tanRhLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWpkYmMvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1wb29sLyR7Y29tbW9ucy1wb29sLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpjb21tb25zLWRiY3AvY29tbW9ucy1kYmNwLyR7Y29tbW9ucy1kYmNwLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtbGFuZy8ke2NvbW1vbnMtbGFuZy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1qbXNfMS4xX3NwZWMvJHtnZXJvbmltby1qbXMudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY2dsaWIvJHtjZ2xpYi5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXZhLXBlcnNpc3RlbmNlLWFwaS0xLjEuMS8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctb3JtLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm9zY2FjaGUvJHtvc2NhY2hlLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5pYmF0aXMtc3FsbWFwLyR7aWJhdGlzLXNxbG1hcC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1iYW0vJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1iZWFuLXZhbGlkYXRvciIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuanNyMzAzLWFwaS0xLjAuMC8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5zY3JpcHRpbmctYXBpLTEuMC8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuaGliZXJuYXRlLXZhbGlkYXRvci8ke2hpYmVybmF0ZS12YWxpZGF0b3IuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtYmVhbi12YWxpZGF0b3IvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1iaW5keSIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtYmluZHkvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1jb21ldGQiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLXNlcnZsZXRfMy4wX3NwZWMvJHtnZXJvbmltby1zZXJ2bGV0LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LXV0aWwvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1pby8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LWh0dHAvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1jbGllbnQvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1jb250aW51YXRpb24vJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1zZXJ2ZXIvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1zZWN1cml0eS8ke2pldHR5LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZsZXQvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21ldGQtamF2YS1zZXJ2ZXIvJHtjb21ldGQtamF2YS1zZXJ2ZXIuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtY29tZXRkLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtY3N2IiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1jc3YvJHtjb21tb25zLWNzdi5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1jc3YvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1kb3plciIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5vcHM0ai5wYXgud2ViL3BheC13ZWItanNwLyR7cGF4LndlYi52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5kb3plci8ke2RvemVyLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWxhbmcvJHtjb21tb25zLWxhbmcuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29sbGVjdGlvbnMvJHtjb21tb25zLWNvbGxlY3Rpb25zLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxiZWFucy8ke3htbGJlYW5zLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWJlYW51dGlscy8ke2NvbW1vbnMtYmVhbnV0aWxzLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWRvemVyLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtZXhlYyIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY29tbW9ucy9jb21tb25zLWV4ZWMvJHtjb21tb25zLWV4ZWMudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1pby8ke2NvbW1vbnMtaW8uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtZXhlYy8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWZsYXRwYWNrIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtc3ByaW5nPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qZG9tLyR7amRvbS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamV4Y2VsYXBpLyR7amV4Y2VsYXBpLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5mbGF0cGFjay8ke2ZsYXRwYWNrLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWZsYXRwYWNrLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtZnJlZW1hcmtlciIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLXNwcmluZzwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuZnJlZW1hcmtlci8ke2ZyZWVtYXJrZXIuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtZnJlZW1hcmtlci8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWZ0cCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtbmV0L2NvbW1vbnMtbmV0LyR7Y29tbW9ucy1uZXQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpzY2gvJHtqc2NoLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWZ0cC8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWd1aWNlIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1hbm5vdGF0aW9uXzEuMF9zcGVjLyR7Z2Vyb25pbW8tYW5ub3RhdGlvbi52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hb3BhbGxpYW5jZS8ke2FvcGFsbGlhbmNlLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5ndWljZS8ke2d1aWNleWZydWl0LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWd1aWNlLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtZ3Jvb3Z5IiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50LyR7YW50LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNjcmlwdGluZy1hcGktMS4wLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuY29kZWhhdXMuZ3Jvb3Z5L2dyb292eS1hbGwvJHtncm9vdnkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1ncm9vdnkvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1obDciIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxyZXNvbHZlci8ke3htbHJlc29sdmVyLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWp0YV8xLjFfc3BlYy8ke2dlcm9uaW1vLWp0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWptc18xLjFfc3BlYy8ke2dlcm9uaW1vLWptcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5iY2VsLyR7YmNlbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGVyY2VzLyR7eGVyY2VzLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qZG9tLyR7amRvbS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGFsYW4vJHt4YWxhbi5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuaGFwaS8ke2hhcGkuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm1pbmEvJHttaW5hLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWhsNy8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWhhd3RkYiIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOmh0dHA6Ly9yZXBvLmZ1c2Vzb3VyY2UuY29tL25leHVzL2NvbnRlbnQvZ3JvdXBzL3B1YmxpYyFvcmcuZnVzZXNvdXJjZS5oYXd0ZGIvaGF3dGRiLyR7aGF3dGRiLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmh0dHA6Ly9yZXBvLmZ1c2Vzb3VyY2UuY29tL25leHVzL2NvbnRlbnQvZ3JvdXBzL3B1YmxpYyFvcmcuZnVzZXNvdXJjZS5oYXd0YnVmL2hhd3RidWYvJHtoYXd0YnVmLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtaGF3dGRiLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtaWJhdGlzIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtc3ByaW5nPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXBvb2wvJHtjb21tb25zLXBvb2wuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tc2VydmxldF8zLjBfc3BlYy8ke2dlcm9uaW1vLXNlcnZsZXQudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46Y29tbW9ucy1kYmNwL2NvbW1vbnMtZGJjcC8ke2NvbW1vbnMtZGJjcC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vc2NhY2hlLyR7b3NjYWNoZS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY2dsaWIvJHtjZ2xpYi5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuaWJhdGlzLXNxbG1hcC8ke2liYXRpcy1zcWxtYXAuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtaWJhdGlzLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtaXJjIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuaXJjbGliLyR7aXJjbGliLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWlyYy8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWphY2tzb24iIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuY29kZWhhdXMuamFja3Nvbi9qYWNrc29uLWNvcmUtYXNsLyR7amFja3Nvbi52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuY29kZWhhdXMuamFja3Nvbi9qYWNrc29uLW1hcHBlci1hc2wvJHtqYWNrc29uLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtamFja3Nvbi8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWphc3lwdCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtamFzeXB0LyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1sYW5nLyR7Y29tbW9ucy1sYW5nLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpjb21tb25zLWNvZGVjL2NvbW1vbnMtY29kZWMvJHtjb21tb25zLWNvZGVjLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qYXN5cHQvJHtqYXN5cHQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWpheGIiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWpheGIvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1qY3IiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qY3ItYXBpLyR7amNyLWFwaS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5qYWNrcmFiYml0L2phY2tyYWJiaXQtamNyLWNvbW1vbnMvJHtqYWNrcmFiYml0LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtamNyLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtamluZyIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLXNwcmluZzwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50LyR7YW50LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5pc29yZWxheC8ke2lzb3JlbGF4LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qaW5nLyR7amluZy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1qaW5nLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtamRiYyIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtamRiYy8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWpvc3FsIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuam9zcWwvJHtqb3NxbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1qb3NxbC8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLWpwYSIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF2YS1wZXJzaXN0ZW5jZS1hcGktMS4xLjEvJHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLXR4LyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tZWxfMS4wX3NwZWMvJHtnZXJvbmltby1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWp0YV8xLjFfc3BlYy8ke2dlcm9uaW1vLWp0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy1qZGJjLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtbGFuZy8ke2NvbW1vbnMtbGFuZy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1jb2xsZWN0aW9ucy8ke2NvbW1vbnMtY29sbGVjdGlvbnMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtcG9vbC8ke2NvbW1vbnMtcG9vbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46Y29tbW9ucy1kYmNwL2NvbW1vbnMtZGJjcC8ke2NvbW1vbnMtZGJjcC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hbnQvJHthbnQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnNlcnAvJHtzZXJwLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWptc18xLjFfc3BlYy8ke2dlcm9uaW1vLWptcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcGVuanBhLyR7b3BlbmpwYS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctb3JtLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtanBhLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtanhwYXRoIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjLyR7Z2Vyb25pbW8tc2VydmxldC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWVsXzEuMF9zcGVjLyR7Z2Vyb25pbW8tZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1qc3BfMi4xX3NwZWMvJHtnZXJvbmltby1qc3AudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1iZWFudXRpbHMvJHtjb21tb25zLWJlYW51dGlscy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamRvbS8ke2pkb20uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtanhwYXRoL2NvbW1vbnMtanhwYXRoLyR7Y29tbW9ucy1qeHBhdGgudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1qeHBhdGgvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1qdWVsIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLm9wczRqLnBheC53ZWIvcGF4LXdlYi1qc3AvJHtwYXgud2ViLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmp1ZWwvJHtqdWVsLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWp1ZWwvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1sZGFwIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1sZGFwLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtbHVjZW5lIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMubHVjZW5lLyR7bHVjZW5lLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLWx1Y2VuZS8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLW1haWwiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy1jb250ZXh0LyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWNvbnRleHQtc3VwcG9ydC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpqYXZheC5tYWlsL21haWwvJHtqYXZheC5tYWlsLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtbWFpbC8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLW1zdiIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhtbHJlc29sdmVyLyR7eG1scmVzb2x2ZXIuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhlcmNlcy8ke3hlcmNlcy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50LyR7YW50LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5pc29yZWxheC8ke2lzb3JlbGF4LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLW1zdi8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLXNwcmluZzwvZmVhdHVyZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtbXZlbCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm12ZWwvJHttdmVsLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLW12ZWwvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1uYWdpb3MiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qc2VuZG5zY2EtY29yZS8ke2pzZW5kbnNjYS1jb3JlLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLW5hZ2lvcy8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLW5ldHR5IiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMubmV0dHkvJHtuZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLW5ldHR5LyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtb2dubCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm9nbmwvJHtvZ25sLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpodHRwOi8vcmVwb3NpdG9yeS5zcHJpbmdzb3VyY2UuY29tL21hdmVuL2J1bmRsZXMvZXh0ZXJuYWwhb3JnLmpib3NzLmphdmFzc2lzdC9jb20uc3ByaW5nc291cmNlLmphdmFzc2lzdC8ke2phdmFzc2lzdC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLW9nbmwvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1wcmludGVyIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1wcmludGVyLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtcHJvdG9idWYiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5wcm90b2J1Zi1qYXZhLyR7cHJvdG9idWYtamF2YS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1wcm90b2J1Zi8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXF1YXJ0eiIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29sbGVjdGlvbnMvJHtjb21tb25zLWNvbGxlY3Rpb25zLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXBvb2wvJHtjb21tb25zLXBvb2wuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtZGJjcC9jb21tb25zLWRiY3AvJHtjb21tb25zLWRiY3AudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1qdGFfMS4xX3NwZWMvJHtnZXJvbmltby1qdGEudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1iZWFudXRpbHMvJHtjb21tb25zLWJlYW51dGlscy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMucXVhcnR6LyR7cXVhcnR6LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXF1YXJ0ei8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXJlc3RsZXQiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXJlc3RsZXQvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpodHRwOi8vbWF2ZW4ucmVzdGxldC5vcmchb3JnLnJlc3RsZXQvb3JnLnJlc3RsZXQvJHtyZXN0bGV0LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmh0dHA6Ly9tYXZlbi5yZXN0bGV0Lm9yZyFjb20ubm9lbGlvcy5yZXN0bGV0L2NvbS5ub2VsaW9zLnJlc3RsZXQvJHtyZXN0bGV0LnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXJtaSIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtcm1pLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtcnNzIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtYXRvbTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamRvbS8ke2pkb20uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnJvbWUvJHtyb21lLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXJzcy8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXNheG9uIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtc3ByaW5nPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zYXhvbi8ke3NheG9uLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXNheG9uLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtc2NhbGEiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zY2FsYS1saWJyYXJ5LyR7c2NhbGEtbGlicmFyeS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1zY2FsYS8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXNjcmlwdCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc2NyaXB0aW5nLWFwaS0xLjAvJHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtc2NyaXB0LyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtc2lwIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYWluLXNpcC1hcGktMS4yLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorCSAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qYWluLXNpcC1yaS8ke2phaW4tc2lwLXJpLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXNpcC8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXNoaXJvIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1iZWFudXRpbHMvJHtjb21tb25zLWJlYW51dGlscy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc2hpcm8vJHtzaGlyby5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1zaGlyby8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXNtcHAiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qc21wcC8ke2pzbXBwLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXNtcHAvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1zbm1wIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc25tcDRqLyR7c25tcDRqLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXNubXAvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1zb2FwIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtamF4YjwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby13cy1tZXRhZGF0YV8yLjBfc3BlYy8ke2dlcm9uaW1vLXdzLW1ldGFkYXRhLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4d3MtYXBpLSR7amF4d3MtYXBpLnZlcnNpb259LyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNhYWotYXBpLTEuMy8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1zb2FwLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtc3ByaW5nLWludGVncmF0aW9uIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46aHR0cDovL3JlcG9zaXRvcnkuc3ByaW5nc291cmNlLmNvbS9tYXZlbi9idW5kbGVzL3JlbGVhc2Uhb3JnLnNwcmluZ2ZyYW1ld29yay5pbnRlZ3JhdGlvbi9vcmcuc3ByaW5nZnJhbWV3b3JrLmludGVncmF0aW9uLzEuMC40LlJFTEVBU0UKKyAgICAgICAgPC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLXNwcmluZzwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1zcHJpbmctaW50ZWdyYXRpb24vJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1zcHJpbmctamF2YWNvbmZpZyIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNnbGliLyR7Y2dsaWIuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLXNwcmluZzwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctdGVzdC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXNwcmluZy1qYXZhY29uZmlnLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtc3ByaW5nLXNlY3VyaXR5IiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtc3ByaW5nPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5L3NwcmluZy1zZWN1cml0eS1jb3JlLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkvc3ByaW5nLXNlY3VyaXR5LWNvbmZpZy8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXNwcmluZy1zZWN1cml0eS8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXNxbCIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLXR4LyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tanRhXzEuMV9zcGVjLyR7Z2Vyb25pbW8tanRhLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWpkYmMvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtY29yZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC1zcWwvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1zdHJlYW0iIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXN0cmVhbS8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXN0cmluZy10ZW1wbGF0ZSIgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLXNwcmluZzwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50bHIvJHthbnRscjIuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnN0cmluZ3RlbXBsYXRlLyR7c3RyaW5ndGVtcGxhdGUuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtc3RyaW5ndGVtcGxhdGUvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC10YWdzb3VwIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMudGFnc291cC8ke3RhZ3NvdXAuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwtdGFnc291cC8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXZlbG9jaXR5IiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjLyR7Z2Vyb25pbW8tc2VydmxldC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWxhbmcvJHtjb21tb25zLWxhbmcuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29sbGVjdGlvbnMvJHtjb21tb25zLWNvbGxlY3Rpb25zLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qZG9tLyR7amRvbS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50LyR7YW50LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hbnRsci8ke2FudGxyMi5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMud2Vya2VuLXhwYXRoLyR7d2Vya2VuLXhwYXRoLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcm8vJHtvcm8uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnZlbG9jaXR5LyR7dmVsb2NpdHkuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLXNwcmluZzwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC12ZWxvY2l0eS8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXhtbGJlYW5zIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50LyR7YW50LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxiZWFucy8ke3htbGJlYW5zLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1jb3JlPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmNhbWVsL2NhbWVsLXhtbGJlYW5zLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwteG1sc2VjdXJpdHkiIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54YWxhbi8ke3hhbGFuLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxzZWMvJHt4bWxzZWMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhlcmNlcy8ke3hlcmNlcy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1scmVzb2x2ZXIvJHt4bWxyZXNvbHZlci5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYmNlbC8ke2JjZWwuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwteG1sc2VjdXJpdHkvJHtjYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC14bXBwIiB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueHBwMy8ke3hwcDMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnNtYWNrLyR7c21hY2suYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY2FtZWwvY2FtZWwteG1wcC8ke2NhbWVsLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImNhbWVsLXhzdHJlYW0iIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuY29kZWhhdXMuamV0dGlzb24vamV0dGlzb24vMS4yPC9idW5kbGU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7Y2FtZWwudmVyc2lvbn0iPmNhbWVsLWNvcmU8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhwcDMvJHt4cHAzLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qb2RhLXRpbWUvJHtqb2RhLXRpbWUuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpkb20vJHtqZG9tLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5kb200ai8ke2RvbTRqLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54c3RyZWFtLyR7eHN0cmVhbS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jYW1lbC9jYW1lbC14c3RyZWFtLyR7Y2FtZWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+Cis8L2ZlYXR1cmVzPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL2V0Yy9jdXN0b20ucHJvcGVydGllcyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9ldGMvY3VzdG9tLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjMjU5NAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9ldGMvY3VzdG9tLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBZb3UgY2FuIHBsYWNlIGFueSBjdXN0b21pemVkIGNvbmZpZ3VyYXRpb24gaGVyZS4KKyMgQWxsIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGhlcmUgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZS4KKyMKKwora2FyYWYuc3lzdGVtQnVuZGxlc1N0YXJ0TGV2ZWw9NTAKKworb2JyLnJlcG9zaXRvcnkudXJsPWh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2Yvc2VydmljZW1peC9zbXg0L29ici1yZXBvL3JlcG9zaXRvcnkueG1sCisKK29yZy5vc2dpLmZyYW1ld29yay5zeXN0ZW0ucGFja2FnZXMuZXh0cmEgPSBcCisgIG9yZy5hcGFjaGUua2FyYWYuYnJhbmRpbmc7IFwKKyAgY29tLnN1bi5vcmcuYXBhY2hlLnhhbGFuLmludGVybmFsLnhzbHRjLnRyYXg7IFwKKyAgY29tLnN1bi5vcmcuYXBhY2hlLnhlcmNlcy5pbnRlcm5hbC5kb207IFwKKyAgY29tLnN1bi5vcmcuYXBhY2hlLnhlcmNlcy5pbnRlcm5hbC5qYXhwOyBcCisgIGNvbS5zdW4ub3JnLmFwYWNoZS54ZXJjZXMuaW50ZXJuYWwueG5pOyBcCisgIGNvbS5zdW4uam5kaS5sZGFwCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9maWx0ZXJlZC1yZXNvdXJjZXMvZXRjL2pyZS5wcm9wZXJ0aWVzIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL2V0Yy9qcmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc3OWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL2V0Yy9qcmUucHJvcGVydGllcwpAQCAtMCwwICsxLDMxNSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBKYXZhIHBsYXRmb3JtIHBhY2thZ2UgZXhwb3J0IHByb3BlcnRpZXMuCisjCisKKworIyBTdGFuZGFyZCBwYWNrYWdlIHNldC4gIE5vdGUgdGhhdDoKKyMgICAtIGphdmF4LnRyYW5zYWN0aW9uKiBpcyBleHBvcnRlZCB3aXRoIGEgbWFuZGF0b3J5IGF0dHJpYnV0ZSAKK2pyZS0xLjU9IFwKKyBqYXZheC5hY2Nlc3NpYmlsaXR5LCBcCisgamF2YXguYWN0aXZpdHksIFwKKyBqYXZheC5jcnlwdG8sIFwKKyBqYXZheC5jcnlwdG8uaW50ZXJmYWNlcywgXAorIGphdmF4LmNyeXB0by5zcGVjLCBcCisgamF2YXguaW1hZ2VpbywgXAorIGphdmF4LmltYWdlaW8uZXZlbnQsIFwKKyBqYXZheC5pbWFnZWlvLm1ldGFkYXRhLCBcCisgamF2YXguaW1hZ2Vpby5wbHVnaW5zLmJtcCwgXAorIGphdmF4LmltYWdlaW8ucGx1Z2lucy5qcGVnLCBcCisgamF2YXguaW1hZ2Vpby5zcGksIFwKKyBqYXZheC5pbWFnZWlvLnN0cmVhbSwgXAorIGphdmF4Lm1hbmFnZW1lbnQsIFwKKyBqYXZheC5tYW5hZ2VtZW50LmxvYWRpbmcsIFwKKyBqYXZheC5tYW5hZ2VtZW50Lm1vZGVsbWJlYW4sIFwKKyBqYXZheC5tYW5hZ2VtZW50Lm1vbml0b3IsIFwKKyBqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbiwgXAorIGphdmF4Lm1hbmFnZW1lbnQucmVsYXRpb24sIFwKKyBqYXZheC5tYW5hZ2VtZW50LnJlbW90ZSwgXAorIGphdmF4Lm1hbmFnZW1lbnQucmVtb3RlLnJtaSwgXAorIGphdmF4Lm1hbmFnZW1lbnQudGltZXIsIFwKKyBqYXZheC5uYW1pbmcsIFwKKyBqYXZheC5uYW1pbmcuZGlyZWN0b3J5LCBcCisgamF2YXgubmFtaW5nLmV2ZW50LCBcCisgamF2YXgubmFtaW5nLmxkYXAsIFwKKyBqYXZheC5uYW1pbmcuc3BpLCBcCisgamF2YXgubmV0LCBcCisgamF2YXgubmV0LnNzbCwgXAorIGphdmF4LnByaW50LCBcCisgamF2YXgucHJpbnQuYXR0cmlidXRlLCBcCisgamF2YXgucHJpbnQuYXR0cmlidXRlLnN0YW5kYXJkLCBcCisgamF2YXgucHJpbnQuZXZlbnQsIFwKKyBqYXZheC5ybWksIFwKKyBqYXZheC5ybWkuQ09SQkEsIFwKKyBqYXZheC5ybWkuc3NsLCBcCisgamF2YXguc2VjdXJpdHkuYXV0aCwgXAorIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2ssIFwKKyBqYXZheC5zZWN1cml0eS5hdXRoLmtlcmJlcm9zLCBcCisgamF2YXguc2VjdXJpdHkuYXV0aC5sb2dpbiwgXAorIGphdmF4LnNlY3VyaXR5LmF1dGguc3BpLCBcCisgamF2YXguc2VjdXJpdHkuYXV0aC54NTAwLCBcCisgamF2YXguc2VjdXJpdHkuY2VydCwgXAorIGphdmF4LnNlY3VyaXR5LnNhc2wsIFwKKyBqYXZheC5zb3VuZC5taWRpLCBcCisgamF2YXguc291bmQubWlkaS5zcGksIFwKKyBqYXZheC5zb3VuZC5zYW1wbGVkLCBcCisgamF2YXguc291bmQuc2FtcGxlZC5zcGksIFwKKyBqYXZheC5zcWwsIFwKKyBqYXZheC5zcWwucm93c2V0LCBcCisgamF2YXguc3FsLnJvd3NldC5zZXJpYWwsIFwKKyBqYXZheC5zcWwucm93c2V0LnNwaSwgXAorIGphdmF4LnN3aW5nLCBcCisgamF2YXguc3dpbmcuYm9yZGVyLCBcCisgamF2YXguc3dpbmcuY29sb3JjaG9vc2VyLCBcCisgamF2YXguc3dpbmcuZXZlbnQsIFwKKyBqYXZheC5zd2luZy5maWxlY2hvb3NlciwgXAorIGphdmF4LnN3aW5nLnBsYWYsIFwKKyBqYXZheC5zd2luZy5wbGFmLmJhc2ljLCBcCisgamF2YXguc3dpbmcucGxhZi5tZXRhbCwgXAorIGphdmF4LnN3aW5nLnBsYWYubXVsdGksIFwKKyBqYXZheC5zd2luZy5wbGFmLnN5bnRoLCBcCisgamF2YXguc3dpbmcudGFibGUsIFwKKyBqYXZheC5zd2luZy50ZXh0LCBcCisgamF2YXguc3dpbmcudGV4dC5odG1sLCBcCisgamF2YXguc3dpbmcudGV4dC5odG1sLnBhcnNlciwgXAorIGphdmF4LnN3aW5nLnRleHQucnRmLCBcCisgamF2YXguc3dpbmcudHJlZSwgXAorIGphdmF4LnN3aW5nLnVuZG8sIFwKKyBqYXZheC50cmFuc2FjdGlvbjsgamF2YXgudHJhbnNhY3Rpb24ueGE7IHBhcnRpYWw9dHJ1ZTsgbWFuZGF0b3J5Oj1wYXJ0aWFsLCBcCisgamF2YXgueG1sLCBcCisgamF2YXgueG1sLmRhdGF0eXBlLCBcCisgamF2YXgueG1sLm5hbWVzcGFjZSwgXAorIGphdmF4LnhtbC5wYXJzZXJzLCBcCisgamF2YXgueG1sLnRyYW5zZm9ybSwgXAorIGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLCBcCisgamF2YXgueG1sLnRyYW5zZm9ybS5zYXgsIFwKKyBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbSwgXAorIGphdmF4LnhtbC52YWxpZGF0aW9uLCBcCisgamF2YXgueG1sLnhwYXRoLCBcCisgb3JnLmlldGYuamdzcywgXAorIG9yZy5vbWcuQ09SQkEsIFwKKyBvcmcub21nLkNPUkJBXzJfMywgXAorIG9yZy5vbWcuQ09SQkFfMl8zLnBvcnRhYmxlLCBcCisgb3JnLm9tZy5DT1JCQS5EeW5BbnlQYWNrYWdlLCBcCisgb3JnLm9tZy5DT1JCQS5PUkJQYWNrYWdlLCBcCisgb3JnLm9tZy5DT1JCQS5wb3J0YWJsZSwgXAorIG9yZy5vbWcuQ09SQkEuVHlwZUNvZGVQYWNrYWdlLCBcCisgb3JnLm9tZy5Db3NOYW1pbmcsIFwKKyBvcmcub21nLkNvc05hbWluZy5OYW1pbmdDb250ZXh0RXh0UGFja2FnZSwgXAorIG9yZy5vbWcuQ29zTmFtaW5nLk5hbWluZ0NvbnRleHRQYWNrYWdlLCBcCisgb3JnLm9tZy5EeW5hbWljLCBcCisgb3JnLm9tZy5EeW5hbWljQW55LCBcCisgb3JnLm9tZy5EeW5hbWljQW55LkR5bkFueUZhY3RvcnlQYWNrYWdlLCBcCisgb3JnLm9tZy5EeW5hbWljQW55LkR5bkFueVBhY2thZ2UsIFwKKyBvcmcub21nLklPUCwgXAorIG9yZy5vbWcuSU9QLkNvZGVjRmFjdG9yeVBhY2thZ2UsIFwKKyBvcmcub21nLklPUC5Db2RlY1BhY2thZ2UsIFwKKyBvcmcub21nLk1lc3NhZ2luZywgXAorIG9yZy5vbWcuUG9ydGFibGVJbnRlcmNlcHRvciwgXAorIG9yZy5vbWcuUG9ydGFibGVJbnRlcmNlcHRvci5PUkJJbml0SW5mb1BhY2thZ2UsIFwKKyBvcmcub21nLlBvcnRhYmxlU2VydmVyLCBcCisgb3JnLm9tZy5Qb3J0YWJsZVNlcnZlci5DdXJyZW50UGFja2FnZSwgXAorIG9yZy5vbWcuUG9ydGFibGVTZXJ2ZXIuUE9BTWFuYWdlclBhY2thZ2UsIFwKKyBvcmcub21nLlBvcnRhYmxlU2VydmVyLlBPQVBhY2thZ2UsIFwKKyBvcmcub21nLlBvcnRhYmxlU2VydmVyLnBvcnRhYmxlLCBcCisgb3JnLm9tZy5Qb3J0YWJsZVNlcnZlci5TZXJ2YW50TG9jYXRvclBhY2thZ2UsIFwKKyBvcmcub21nLlNlbmRpbmdDb250ZXh0LCBcCisgb3JnLm9tZy5zdHViLmphdmEucm1pLCBcCisgb3JnLm9tZy5zdHViLmphdmF4Lm1hbmFnZW1lbnQucmVtb3RlLnJtaSwgXAorIG9yZy53M2MuZG9tLCBcCisgb3JnLnczYy5kb20uYm9vdHN0cmFwLCBcCisgb3JnLnczYy5kb20uY3NzLCBcCisgb3JnLnczYy5kb20uZXZlbnRzLCBcCisgb3JnLnczYy5kb20uaHRtbCwgXAorIG9yZy53M2MuZG9tLmxzLCBcCisgb3JnLnczYy5kb20ucmFuZ2VzLCBcCisgb3JnLnczYy5kb20uc3R5bGVzaGVldHMsIFwKKyBvcmcudzNjLmRvbS50cmF2ZXJzYWwsIFwKKyBvcmcudzNjLmRvbS52aWV3cywgXAorIG9yZy54bWwuc2F4LCBcCisgb3JnLnhtbC5zYXguZXh0LCBcCisgb3JnLnhtbC5zYXguaGVscGVycworCisjIFN0YW5kYXJkIHBhY2thZ2Ugc2V0LiAgTm90ZSB0aGF0OgorIyAgIC0gamF2YXgudHJhbnNhY3Rpb24qIGlzIGV4cG9ydGVkIHdpdGggYSBtYW5kYXRvcnkgYXR0cmlidXRlIAorIyAgIC0gamF2YXguYWN0aXZhdGlvbiwgamF2YXguYW5ub3RhdGlvbiosIGphdmF4Lmp3cyosIGphdmF4LnNjcmlwdCosIGphdmF4LnhtbC5iaW5kKiwgamF2YXgueG1sLnNvYXAsIGphdmF4LnhtbC53cyogcGFja2FnZXMgYXJlIG5vdCBleHBvcnRlZAoranJlLTEuNj0gXAorIGNvbS5zdW4ub3JnLmFwYWNoZS54YWxhbi5pbnRlcm5hbC54c2x0Yy50cmF4LCBcCisgY29tLnN1bi5vcmcuYXBhY2hlLnhlcmNlcy5pbnRlcm5hbC5kb20sIFwKKyBjb20uc3VuLm9yZy5hcGFjaGUueGVyY2VzLmludGVybmFsLmpheHAsIFwKKyBjb20uc3VuLm9yZy5hcGFjaGUueGVyY2VzLmludGVybmFsLnhuaSwgXAorIGNvbS5zdW4uam5kaS5sZGFwLCBcCisgamF2YXguYWNjZXNzaWJpbGl0eSwgXAorIyBqYXZheC5hY3RpdmF0aW9uLCBcCisgamF2YXguYWN0aXZpdHksIFwKKyMgamF2YXguYW5ub3RhdGlvbiwgXAorIyBqYXZheC5hbm5vdGF0aW9uLnByb2Nlc3NpbmcsIFwKKyBqYXZheC5jcnlwdG8sIFwKKyBqYXZheC5jcnlwdG8uaW50ZXJmYWNlcywgXAorIGphdmF4LmNyeXB0by5zcGVjLCBcCisgamF2YXguaW1hZ2VpbywgXAorIGphdmF4LmltYWdlaW8uZXZlbnQsIFwKKyBqYXZheC5pbWFnZWlvLm1ldGFkYXRhLCBcCisgamF2YXguaW1hZ2Vpby5wbHVnaW5zLmJtcCwgXAorIGphdmF4LmltYWdlaW8ucGx1Z2lucy5qcGVnLCBcCisgamF2YXguaW1hZ2Vpby5zcGksIFwKKyBqYXZheC5pbWFnZWlvLnN0cmVhbSwgXAorIyBqYXZheC5qd3MsIFwKKyMgamF2YXguandzLnNvYXAsIFwKKyBqYXZheC5sYW5nLm1vZGVsLCBcCisgamF2YXgubGFuZy5tb2RlbC5lbGVtZW50LCBcCisgamF2YXgubGFuZy5tb2RlbC50eXBlLCBcCisgamF2YXgubGFuZy5tb2RlbC51dGlsLCBcCisgamF2YXgubWFuYWdlbWVudCwgXAorIGphdmF4Lm1hbmFnZW1lbnQubG9hZGluZywgXAorIGphdmF4Lm1hbmFnZW1lbnQubW9kZWxtYmVhbiwgXAorIGphdmF4Lm1hbmFnZW1lbnQubW9uaXRvciwgXAorIGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLCBcCisgamF2YXgubWFuYWdlbWVudC5yZWxhdGlvbiwgXAorIGphdmF4Lm1hbmFnZW1lbnQucmVtb3RlLCBcCisgamF2YXgubWFuYWdlbWVudC5yZW1vdGUucm1pLCBcCisgamF2YXgubWFuYWdlbWVudC50aW1lciwgXAorIGphdmF4Lm5hbWluZywgXAorIGphdmF4Lm5hbWluZy5kaXJlY3RvcnksIFwKKyBqYXZheC5uYW1pbmcuZXZlbnQsIFwKKyBqYXZheC5uYW1pbmcubGRhcCwgXAorIGphdmF4Lm5hbWluZy5zcGksIFwKKyBqYXZheC5uZXQsIFwKKyBqYXZheC5uZXQuc3NsLCBcCisgamF2YXgucHJpbnQsIFwKKyBqYXZheC5wcmludC5hdHRyaWJ1dGUsIFwKKyBqYXZheC5wcmludC5hdHRyaWJ1dGUuc3RhbmRhcmQsIFwKKyBqYXZheC5wcmludC5ldmVudCwgXAorIGphdmF4LnJtaSwgXAorIGphdmF4LnJtaS5DT1JCQSwgXAorIGphdmF4LnJtaS5zc2wsIFwKKyBqYXZheC5zZWN1cml0eS5hdXRoLCBcCisgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjaywgXAorIGphdmF4LnNlY3VyaXR5LmF1dGgua2VyYmVyb3MsIFwKKyBqYXZheC5zZWN1cml0eS5hdXRoLmxvZ2luLCBcCisgamF2YXguc2VjdXJpdHkuYXV0aC5zcGksIFwKKyBqYXZheC5zZWN1cml0eS5hdXRoLng1MDAsIFwKKyBqYXZheC5zZWN1cml0eS5jZXJ0LCBcCisgamF2YXguc2VjdXJpdHkuc2FzbCwgXAorIGphdmF4LnNvdW5kLm1pZGksIFwKKyBqYXZheC5zb3VuZC5taWRpLnNwaSwgXAorIGphdmF4LnNvdW5kLnNhbXBsZWQsIFwKKyBqYXZheC5zb3VuZC5zYW1wbGVkLnNwaSwgXAorIGphdmF4LnNxbCwgXAorIGphdmF4LnNxbC5yb3dzZXQsIFwKKyBqYXZheC5zcWwucm93c2V0LnNlcmlhbCwgXAorIGphdmF4LnNxbC5yb3dzZXQuc3BpLCBcCisgamF2YXguc3dpbmcsIFwKKyBqYXZheC5zd2luZy5ib3JkZXIsIFwKKyBqYXZheC5zd2luZy5jb2xvcmNob29zZXIsIFwKKyBqYXZheC5zd2luZy5ldmVudCwgXAorIGphdmF4LnN3aW5nLmZpbGVjaG9vc2VyLCBcCisgamF2YXguc3dpbmcucGxhZiwgXAorIGphdmF4LnN3aW5nLnBsYWYuYmFzaWMsIFwKKyBqYXZheC5zd2luZy5wbGFmLm1ldGFsLCBcCisgamF2YXguc3dpbmcucGxhZi5tdWx0aSwgXAorIGphdmF4LnN3aW5nLnBsYWYuc3ludGgsIFwKKyBqYXZheC5zd2luZy50YWJsZSwgXAorIGphdmF4LnN3aW5nLnRleHQsIFwKKyBqYXZheC5zd2luZy50ZXh0Lmh0bWwsIFwKKyBqYXZheC5zd2luZy50ZXh0Lmh0bWwucGFyc2VyLCBcCisgamF2YXguc3dpbmcudGV4dC5ydGYsIFwKKyBqYXZheC5zd2luZy50cmVlLCBcCisgamF2YXguc3dpbmcudW5kbywgXAorIGphdmF4LnRvb2xzLCBcCisgamF2YXgudHJhbnNhY3Rpb247IGphdmF4LnRyYW5zYWN0aW9uLnhhOyBwYXJ0aWFsPXRydWU7IG1hbmRhdG9yeTo9cGFydGlhbCwgXAorIGphdmF4LnhtbCwgXAorIyBqYXZheC54bWwuYmluZCwgXAorIyBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLCBcCisjIGphdmF4LnhtbC5iaW5kLmFubm90YXRpb24uYWRhcHRlcnMsIFwKKyMgamF2YXgueG1sLmJpbmQuYXR0YWNobWVudCwgXAorIyBqYXZheC54bWwuYmluZC5oZWxwZXJzLCBcCisjIGphdmF4LnhtbC5iaW5kLnV0aWwsIFwKKyBqYXZheC54bWwuY3J5cHRvLCBcCisgamF2YXgueG1sLmNyeXB0by5kb20sIFwKKyBqYXZheC54bWwuY3J5cHRvLmRzaWcsIFwKKyBqYXZheC54bWwuY3J5cHRvLmRzaWcuZG9tLCBcCisgamF2YXgueG1sLmNyeXB0by5kc2lnLmtleWluZm8sIFwKKyBqYXZheC54bWwuY3J5cHRvLmRzaWcuc3BlYywgXAorIGphdmF4LnhtbC5kYXRhdHlwZSwgXAorIGphdmF4LnhtbC5uYW1lc3BhY2UsIFwKKyBqYXZheC54bWwucGFyc2VycywgXAorIyBqYXZheC54bWwuc29hcCwgXAorIyBqYXZheC54bWwuc3RyZWFtLCBcCisjIGphdmF4LnhtbC5zdHJlYW0uZXZlbnRzLCBcCisjIGphdmF4LnhtbC5zdHJlYW0udXRpbCwgXAorIGphdmF4LnhtbC50cmFuc2Zvcm0sIFwKKyBqYXZheC54bWwudHJhbnNmb3JtLmRvbSwgXAorIGphdmF4LnhtbC50cmFuc2Zvcm0uc2F4LCBcCisgamF2YXgueG1sLnRyYW5zZm9ybS5zdGF4LCBcCisgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0sIFwKKyBqYXZheC54bWwudmFsaWRhdGlvbiwgXAorIyBqYXZheC54bWwud3MsIFwKKyMgamF2YXgueG1sLndzLmhhbmRsZXIsIFwKKyMgamF2YXgueG1sLndzLmhhbmRsZXIuc29hcCwgXAorIyBqYXZheC54bWwud3MuaHR0cCwgXAorIyBqYXZheC54bWwud3Muc29hcCwgXAorIyBqYXZheC54bWwud3Muc3BpLCBcCisgamF2YXgueG1sLnhwYXRoLCBcCisgb3JnLmlldGYuamdzcywgXAorIG9yZy5vbWcuQ09SQkEsIFwKKyBvcmcub21nLkNPUkJBXzJfMywgXAorIG9yZy5vbWcuQ09SQkFfMl8zLnBvcnRhYmxlLCBcCisgb3JnLm9tZy5DT1JCQS5EeW5BbnlQYWNrYWdlLCBcCisgb3JnLm9tZy5DT1JCQS5PUkJQYWNrYWdlLCBcCisgb3JnLm9tZy5DT1JCQS5wb3J0YWJsZSwgXAorIG9yZy5vbWcuQ09SQkEuVHlwZUNvZGVQYWNrYWdlLCBcCisgb3JnLm9tZy5Db3NOYW1pbmcsIFwKKyBvcmcub21nLkNvc05hbWluZy5OYW1pbmdDb250ZXh0RXh0UGFja2FnZSwgXAorIG9yZy5vbWcuQ29zTmFtaW5nLk5hbWluZ0NvbnRleHRQYWNrYWdlLCBcCisgb3JnLm9tZy5EeW5hbWljLCBcCisgb3JnLm9tZy5EeW5hbWljQW55LCBcCisgb3JnLm9tZy5EeW5hbWljQW55LkR5bkFueUZhY3RvcnlQYWNrYWdlLCBcCisgb3JnLm9tZy5EeW5hbWljQW55LkR5bkFueVBhY2thZ2UsIFwKKyBvcmcub21nLklPUCwgXAorIG9yZy5vbWcuSU9QLkNvZGVjRmFjdG9yeVBhY2thZ2UsIFwKKyBvcmcub21nLklPUC5Db2RlY1BhY2thZ2UsIFwKKyBvcmcub21nLk1lc3NhZ2luZywgXAorIG9yZy5vbWcuUG9ydGFibGVJbnRlcmNlcHRvciwgXAorIG9yZy5vbWcuUG9ydGFibGVJbnRlcmNlcHRvci5PUkJJbml0SW5mb1BhY2thZ2UsIFwKKyBvcmcub21nLlBvcnRhYmxlU2VydmVyLCBcCisgb3JnLm9tZy5Qb3J0YWJsZVNlcnZlci5DdXJyZW50UGFja2FnZSwgXAorIG9yZy5vbWcuUG9ydGFibGVTZXJ2ZXIuUE9BTWFuYWdlclBhY2thZ2UsIFwKKyBvcmcub21nLlBvcnRhYmxlU2VydmVyLlBPQVBhY2thZ2UsIFwKKyBvcmcub21nLlBvcnRhYmxlU2VydmVyLnBvcnRhYmxlLCBcCisgb3JnLm9tZy5Qb3J0YWJsZVNlcnZlci5TZXJ2YW50TG9jYXRvclBhY2thZ2UsIFwKKyBvcmcub21nLlNlbmRpbmdDb250ZXh0LCBcCisgb3JnLm9tZy5zdHViLmphdmEucm1pLCBcCisgb3JnLm9tZy5zdHViLmphdmF4Lm1hbmFnZW1lbnQucmVtb3RlLnJtaSwgXAorIG9yZy53M2MuZG9tLCBcCisgb3JnLnczYy5kb20uYm9vdHN0cmFwLCBcCisgb3JnLnczYy5kb20uY3NzLCBcCisgb3JnLnczYy5kb20uZXZlbnRzLCBcCisgb3JnLnczYy5kb20uaHRtbCwgXAorIG9yZy53M2MuZG9tLmxzLCBcCisgb3JnLnczYy5kb20ucmFuZ2VzLCBcCisgb3JnLnczYy5kb20uc3R5bGVzaGVldHMsIFwKKyBvcmcudzNjLmRvbS50cmF2ZXJzYWwsIFwKKyBvcmcudzNjLmRvbS52aWV3cywgXAorIG9yZy53M2MuZG9tLnhwYXRoLCBcCisgb3JnLnhtbC5zYXgsIFwKKyBvcmcueG1sLnNheC5leHQsIFwKKyBvcmcueG1sLnNheC5oZWxwZXJzCmRpZmYgLS1naXQgYS90cnVuay9hc3NlbWJseS9zcmMvbWFpbi9maWx0ZXJlZC1yZXNvdXJjZXMvZXRjL29yZy5hcGFjaGUua2FyYWYuZmVhdHVyZXMuY2ZnIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL2V0Yy9vcmcuYXBhY2hlLmthcmFmLmZlYXR1cmVzLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDZjMzUzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL2V0Yy9vcmcuYXBhY2hlLmthcmFmLmZlYXR1cmVzLmNmZwpAQCAtMCwwICsxLDI5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHJlcG9zaXRvcmllcyB0byByZWdpc3RlciBieSBkZWZhdWx0CisjCitmZWF0dXJlc1JlcG9zaXRvcmllcz1tdm46b3JnLmFwYWNoZS5rYXJhZi9hcGFjaGUta2FyYWYvJHtrYXJhZi52ZXJzaW9ufS94bWwvZmVhdHVyZXMsbXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIvYXBhY2hlLXNlcnZpY2VtaXgtbm1yLyR7c2VydmljZW1peC5ubXIudmVyc2lvbn0veG1sL2ZlYXR1cmVzLG12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvYXBhY2hlLXNlcnZpY2VtaXgvJHt2ZXJzaW9ufS94bWwvZmVhdHVyZXMsbXZuOm9yZy5hcGFjaGUuY2FtZWwua2FyYWYvYXBhY2hlLWNhbWVsLyR7Y2FtZWwudmVyc2lvbn0veG1sL2ZlYXR1cmVzLG12bjpvcmcuYXBhY2hlLm9kZS9vZGUtamJpLWthcmFmLyR7b2RlLnZlcnNpb259L3htbC9mZWF0dXJlcyxtdm46b3JnLmFwYWNoZS5hY3RpdmVtcS9hY3RpdmVtcS1rYXJhZi8ke2FjdGl2ZW1xLnZlcnNpb259L3htbC9mZWF0dXJlcworCisjCisjIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZlYXR1cmVzIHRvIGluc3RhbGwgYXQgc3RhcnR1cAorIworZmVhdHVyZXNCb290PWNvbmZpZyxhY3RpdmVtcS1icm9rZXIsY2FtZWwsY2FtZWwtYWN0aXZlbXEsamJpLWNsdXN0ZXIsd2FyLHNlcnZpY2VtaXgtY3hmLWJjLHNlcnZpY2VtaXgtZmlsZSxzZXJ2aWNlbWl4LWZ0cCxzZXJ2aWNlbWl4LWh0dHAsc2VydmljZW1peC1qbXMsc2VydmljZW1peC1tYWlsLHNlcnZpY2VtaXgtc21wcCxzZXJ2aWNlbWl4LXNubXAsc2VydmljZW1peC12ZnMsc2VydmljZW1peC1iZWFuLHNlcnZpY2VtaXgtY2FtZWwsc2VydmljZW1peC1jeGYtc2Usc2VydmljZW1peC1kcm9vbHMsc2VydmljZW1peC1laXAsc2VydmljZW1peC1vc3dvcmtmbG93LHNlcnZpY2VtaXgtcXVhcnR6LHNlcnZpY2VtaXgtc2NyaXB0aW5nLHNlcnZpY2VtaXgtdmFsaWRhdGlvbixzZXJ2aWNlbWl4LXNheG9uLHNlcnZpY2VtaXgtd3NuMjAwNSxzZXJ2aWNlbWl4LWV4ZWMKKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL2ZlYXR1cmVzLnhtbCBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9mZWF0dXJlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzNDFhYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9mZWF0dXJlcy54bWwKQEAgLTAsMCArMSwzNTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxmZWF0dXJlcz4KKyAgICA8cmVwb3NpdG9yeT5tdm46b3JnLmFwYWNoZS5rYXJhZi9hcGFjaGUta2FyYWYvJHtrYXJhZi52ZXJzaW9ufS94bWwvZmVhdHVyZXM8L3JlcG9zaXRvcnk+CisgICAgPHJlcG9zaXRvcnk+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIvYXBhY2hlLXNlcnZpY2VtaXgtbm1yLyR7c2VydmljZW1peC5ubXIudmVyc2lvbn0veG1sL2ZlYXR1cmVzPC9yZXBvc2l0b3J5PgorICAgIDxyZXBvc2l0b3J5Pm12bjpvcmcuYXBhY2hlLmNhbWVsLmthcmFmL2FwYWNoZS1jYW1lbC8ke2NhbWVsLnZlcnNpb259L3htbC9mZWF0dXJlczwvcmVwb3NpdG9yeT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjb25uZWN0b3IiIHZlcnNpb249IiR7dmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2FyaWVzLnRyYW5zYWN0aW9uLnZlcnNpb259Ij50cmFuc2FjdGlvbjwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1qMmVlLWNvbm5lY3Rvcl8xLjVfc3BlYy8ke2dlcm9uaW1vLWoyZWUtY29ubmVjdG9yLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uY29tcG9uZW50cy9nZXJvbmltby1jb25uZWN0b3IvJHtnZXJvbmltby1jb25uZWN0b3IudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1qbXNfMS4xX3NwZWMvJHtnZXJvbmltby1qbXMudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjLyR7Z2Vyb25pbW8tc2VydmxldC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy10eC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy1iZWFucy8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy1jb250ZXh0LyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWFvcC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjeGYiIHZlcnNpb249IiR7Y3hmLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmU+dHJhbnNhY3Rpb248L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuYWN0aXZhdGlvbi1hcGktMS4xLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWFubm90YXRpb25fMS4wX3NwZWMvJHtnZXJvbmltby1hbm5vdGF0aW9uLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWMvJHtnZXJvbmltby13cy1tZXRhZGF0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNhYWotYXBpLTEuMy8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXhiLWFwaS0ke2pheGIuYXBpLnZlcnNpb259LyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpheHdzLWFwaS0ke2pheHdzLWFwaS52ZXJzaW9ufS8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5zdGF4LWFwaS0xLjAvJHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmphdmF4Lm1haWwvbWFpbC8ke2phdmF4Lm1haWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYXNtLyR7YXNtLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5mYXN0aW5mb3NldC8ke2Zhc3RpbmZvc2V0LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qYXhiLWltcGwvJHtqYXhiLWltcGwuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm5lZXRoaS8ke25lZXRoaS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc2Fhai1pbXBsLyR7c2Fhai1pbXBsLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuY29kZWhhdXMud29vZHN0b3gvc3RheDItYXBpLyR7d29vZHN0b3guc3RheDItYXBpLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5jb2RlaGF1cy53b29kc3RveC93b29kc3RveC1jb3JlLWFzbC8ke3dvb2RzdG94LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLndzZGw0ai8ke3dzZGw0ai5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS53cy5jb21tb25zLnNjaGVtYS9YbWxTY2hlbWEvJHt4bWxzY2hlbWEudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1scmVzb2x2ZXIvJHt4bWxyZXNvbHZlci5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGVyY2VzLyR7eGVyY2VzLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5iY2VsLyR7YmNlbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGFsYW4vJHt4YWxhbi5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qc3IzMTEtYXBpLTEuMS8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1sc2VjLyR7eG1sc2VjLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcGVuc2FtbC8ke29wZW5zYW1sLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLndzLnNlY3VyaXR5L3dzczRqLyR7d3NzNGoudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1sYmVhbnMvJHt4bWxiZWFucy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1sYW5nLyR7Y29tbW9ucy1sYW5nLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWNvbGxlY3Rpb25zLyR7Y29tbW9ucy1jb2xsZWN0aW9ucy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3JvLyR7b3JvLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy52ZWxvY2l0eS8ke3ZlbG9jaXR5LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hYmRlcmEvJHthYmRlcmEuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtY29kZWMvY29tbW9ucy1jb2RlYy8ke2NvbW1vbnMtY29kZWMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5jb2RlaGF1cy5qZXR0aXNvbi9qZXR0aXNvbi8ke2pldHRpc29uLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpkb20vJHtqZG9tLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLndzLmNvbW1vbnMuYXhpb20vYXhpb20taW1wbC8ke2F4aW9tLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUud3MuY29tbW9ucy5heGlvbS9heGlvbS1hcGkvJHtheGlvbS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLXNlcnZsZXRfMy4wX3NwZWMvJHtnZXJvbmltby1zZXJ2bGV0LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuY3hmL2N4Zi1idW5kbGUvJHtjeGYudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY3hmLW9zZ2kiIHZlcnNpb249IiR7dmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2N4Zi52ZXJzaW9ufSI+Y3hmPC9mZWF0dXJlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2thcmFmLnZlcnNpb259Ij53YXI8L2ZlYXR1cmU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImN4Zi1qYXhycyIgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7dmVyc2lvbn0iPmN4Zi1vc2dpPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hYmRlcmEvJHthYmRlcmEuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5jb2RlaGF1cy5qZXR0aXNvbi9qZXR0aXNvbi8ke2pldHRpc29uLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhtbGJlYW5zLyR7eG1sYmVhbnMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImN4Zi1ubXIiIHZlcnNpb249IiR7dmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2N4Zi52ZXJzaW9ufSI+Y3hmPC9mZWF0dXJlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgubm1yLnZlcnNpb259Ij5ubXI8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yLyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi9vcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iY2FtZWwtbm1yIiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWw8L2ZlYXR1cmU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC5ubXIudmVyc2lvbn0iPm5tcjwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXh3cy1hcGktJHtqYXh3cy1hcGkudmVyc2lvbn0vJHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWMvJHtnZXJvbmltby13cy1tZXRhZGF0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNhYWotYXBpLTEuMy8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsL29yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5jb21wb25lbnQvJHt2ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJjYW1lbC1hY3RpdmVtcSIgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7YWN0aXZlbXEudmVyc2lvbn0iPmFjdGl2ZW1xPC9mZWF0dXJlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2NhbWVsLnZlcnNpb259Ij5jYW1lbC1qbXM8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuYWN0aXZlbXEvYWN0aXZlbXEtY2FtZWwvJHthY3RpdmVtcS52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKworICAgIDwhLS0KKyAgICAgIC0KKyAgICAgIC0gIEV4YW1wbGVzCisgICAgICAtCisgICAgLS0+CisKKyAgICA8ZmVhdHVyZSBuYW1lPSJleGFtcGxlcy1jeGYtb3NnaSIgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7dmVyc2lvbn0iPmN4Zi1vc2dpPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpiaS1hcGktMS4wLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC11dGlscy8ke3NlcnZpY2VtaXgtdXRpbHMudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctYmVhbnMvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzL2N4Zi1vc2dpLyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iZXhhbXBsZXMtY3hmLWpheHJzIiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+Y3hmLWpheHJzPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy1iZWFucy8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWh0dHBjbGllbnQvJHtjb21tb25zLWh0dHBjbGllbnQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy9jeGYtamF4cnMvJHt2ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJleGFtcGxlcy1jeGYtbm1yIiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+Y3hmLW5tcjwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctYmVhbnMvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzL2N4Zi1ubXIvJHt2ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJleGFtcGxlcy1jYW1lbC1vc2dpIiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWw8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy9jYW1lbC1vc2dpLyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iZXhhbXBsZXMtY2FtZWwtYmx1ZXByaW50IiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtYmx1ZXByaW50PC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMvY2FtZWwtYmx1ZXByaW50LyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iZXhhbXBsZXMtY2FtZWwtbm1yIiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+Y2FtZWwtbm1yPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMvY2FtZWwtbm1yLyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iZXhhbXBsZXMtY2FtZWwtbm1yLWJsdWVwcmludCIgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7dmVyc2lvbn0iPmNhbWVsLW5tcjwvZmVhdHVyZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWwtYmx1ZXByaW50PC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMvY2FtZWwtbm1yLWJsdWVwcmludC8ke3ZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImV4YW1wbGVzLWN4Zi1jYW1lbC1ubXIiIHZlcnNpb249IiR7dmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3ZlcnNpb259Ij5jYW1lbC1ubXI8L2ZlYXR1cmU+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7dmVyc2lvbn0iPmN4Zi1ubXI8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWJlYW5zLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy9jeGYtY2FtZWwtbm1yLyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iZXhhbXBsZXMtY3hmLXdzLWFkZHJlc3NpbmciIHZlcnNpb249IiR7dmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZT5jeGYtb3NnaTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYmktYXBpLTEuMC8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtdXRpbHMvJHtzZXJ2aWNlbWl4LXV0aWxzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy8ke3ZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWJlYW5zLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9ImV4YW1wbGVzLWN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZSIgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1jeGYtYmMudmVyc2lvbn0iPnNlcnZpY2VtaXgtY3hmLWJjPC9mZWF0dXJlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtY3hmLXNlLnZlcnNpb259Ij5zZXJ2aWNlbWl4LWN4Zi1zZTwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctYmVhbnMvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZmJjLWJ1bmRsZS8ke3ZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZzZS1idW5kbGUvJHt2ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJleGFtcGxlcy1jeGYtd3Mtc2VjdXJpdHktb3NnaSIgdmVyc2lvbj0iJHt2ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlPmN4Zi1vc2dpPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpiaS1hcGktMS4wLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC11dGlscy8ke3NlcnZpY2VtaXgtdXRpbHMudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctYmVhbnMvJHtzcHJpbmcudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpLyR7dmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0iZXhhbXBsZXMtY3hmLXdzLXJtIiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzL2N4Zi13cy1ybS8ke3ZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorCisgICAgPCEtLQorICAgICAgLQorICAgICAgLSAgSkJJIENvbXBvbmVudHMKKyAgICAgIC0KKyAgICAtLT4KKworICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtc2hhcmVkIiB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufSI+amJpPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy53c2RsNGovJHt3c2RsNGouYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUueGJlYW4veGJlYW4tc3ByaW5nLyR7eGJlYW4udmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS54YmVhbi94YmVhbi1jbGFzc2xvYWRlci8ke3hiZWFuLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LXV0aWxzLyR7c2VydmljZW1peC11dGlscy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC1jb21tb24vJHtzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LWN4Zi1iYyIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LWN4Zi1iYy52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn0iPnNlcnZpY2VtaXgtc2hhcmVkPC9mZWF0dXJlPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke2N4Zi52ZXJzaW9ufSI+Y3hmPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS11dGlsLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktaW8vJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1odHRwLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktY2xpZW50LyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktY29udGludWF0aW9uLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktam14LyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VydmVyLyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VjdXJpdHkvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1zZXJ2bGV0LyR7amV0dHkudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VydmxldHMvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS14bWwvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS13ZWJhcHAvJHtqZXR0eS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuc3ByaW5nZnJhbWV3b3JrL3NwcmluZy10eC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWptc18xLjFfc3BlYy8ke2dlcm9uaW1vLWptcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC1zb2FwMi8ke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LWN4Zi1iYy8ke3NlcnZpY2VtaXgtY3hmLWJjLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtZmlsZSIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LWZpbGUudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtZmlsZS8ke3NlcnZpY2VtaXgtZmlsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LWZ0cCIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LWZ0cC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn0iPnNlcnZpY2VtaXgtc2hhcmVkPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcm8vJHtvcm8uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtbmV0L2NvbW1vbnMtbmV0LyR7Y29tbW9ucy1uZXQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtcG9vbC8ke2NvbW1vbnMtcG9vbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtZnRwLyR7c2VydmljZW1peC1mdHAudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0ic2VydmljZW1peC1odHRwIiB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtaHR0cC52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn0iPnNlcnZpY2VtaXgtc2hhcmVkPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLXNlcnZsZXRfMy4wX3NwZWMvJHtnZXJvbmltby1zZXJ2bGV0LnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbW1vbnMtY29kZWMvY29tbW9ucy1jb2RlYy8ke2NvbW1vbnMtY29kZWMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtaHR0cGNsaWVudC8ke2NvbW1vbnMtaHR0cGNsaWVudC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS53cy5jb21tb25zLnNjaGVtYS9YbWxTY2hlbWEvJHt4bWxzY2hlbWEudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueG1sc2VjLyR7eG1sc2VjLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLndzLnNlY3VyaXR5L3dzczRqLyR7d3NzNGoudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamV0dHkvJHtqZXR0eS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtc29hcC8ke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LXNvYXAyLyR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtaHR0cC8ke3NlcnZpY2VtaXgtaHR0cC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LWptcyIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LWptcy52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn0iPnNlcnZpY2VtaXgtc2hhcmVkPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLndzLmNvbW1vbnMuc2NoZW1hL1htbFNjaGVtYS8ke3htbHNjaGVtYS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxzZWMvJHt4bWxzZWMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUud3Muc2VjdXJpdHkvd3NzNGovJHt3c3M0ai52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC1zb2FwLyR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtc29hcDIvJHtzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzL2dlcm9uaW1vLWoyZWUtY29ubmVjdG9yXzEuNV9zcGVjLyR7Z2Vyb25pbW8tajJlZS1jb25uZWN0b3IudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcy9nZXJvbmltby1qbXNfMS4xX3NwZWMvJHtnZXJvbmltby1qbXMudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLnNwcmluZ2ZyYW1ld29yay9zcHJpbmctam1zLyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLXR4LyR7c3ByaW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LWptcy8ke3NlcnZpY2VtaXgtam1zLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtbWFpbCIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LW1haWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5hY3RpdmF0aW9uLWFwaS0xLjEvJHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmphdmF4Lm1haWwvbWFpbC8ke2phdmF4Lm1haWwudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtbWFpbC8ke3NlcnZpY2VtaXgtbWFpbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LWJlYW4iIHZlcnNpb249IiR7c2VydmljZW1peC1iZWFuLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9ufSI+c2VydmljZW1peC1zaGFyZWQ8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8tYW5ub3RhdGlvbl8xLjBfc3BlYy8ke2dlcm9uaW1vLWFubm90YXRpb24udmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtYmVhbi8ke3NlcnZpY2VtaXgtYmVhbi52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LWNhbWVsIiB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtY2FtZWwudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjYW1lbC52ZXJzaW9ufSI+Y2FtZWw8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LWNhbWVsLyR7c2VydmljZW1peC1jYW1lbC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LWRyb29scyIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LWRyb29scy52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn0iPnNlcnZpY2VtaXgtc2hhcmVkPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qZHQtY29yZS8ke2pkdC1jb3JlLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hbnRsci1ydW50aW1lLyR7YW50bHItcnVudGltZS5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuZHJvb2xzLyR7ZHJvb2xzLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5tdmVsLyR7bXZlbC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtZHJvb2xzLyR7c2VydmljZW1peC1kcm9vbHMudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0ic2VydmljZW1peC1jeGYtc2UiIHZlcnNpb249IiR7c2VydmljZW1peC1jeGYtc2UudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtjeGYudmVyc2lvbn0iPmN4ZjwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5jeGYvY3hmLXJ0LWJpbmRpbmdzLWpiaS8ke2N4Zi52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLmN4Zi9jeGYtcnQtdHJhbnNwb3J0cy1qYmkvJHtjeGYudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtY3hmLXNlLyR7c2VydmljZW1peC1jeGYtc2UudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0ic2VydmljZW1peC1laXAiIHZlcnNpb249IiR7c2VydmljZW1peC1laXAudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtZWlwLyR7c2VydmljZW1peC1laXAudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisgICAgPGZlYXR1cmUgbmFtZT0ic2VydmljZW1peC1vc3dvcmtmbG93IiB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtb3N3b3JrZmxvdy52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn0iPnNlcnZpY2VtaXgtc2hhcmVkPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hbnRsci8ke2FudGxyLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWNvbGxlY3Rpb25zLyR7Y29tbW9ucy1jb2xsZWN0aW9ucy5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMucXVhcnR6LyR7cXVhcnR6LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vc2NvcmUvJHtvc2NvcmUuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnByb3BlcnR5c2V0LyR7cHJvcGVydHlzZXQuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm9zd29ya2Zsb3cvJHtvc3dvcmtmbG93LmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC1vc3dvcmtmbG93LyR7c2VydmljZW1peC1vc3dvcmtmbG93LnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtcXVhcnR6IiB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtcXVhcnR6LnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9ufSI+c2VydmljZW1peC1zaGFyZWQ8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29sbGVjdGlvbnMvJHtjb21tb25zLWNvbGxlY3Rpb25zLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5xdWFydHovJHtxdWFydHouYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5zcHJpbmdmcmFtZXdvcmsvc3ByaW5nLWNvbnRleHQtc3VwcG9ydC8ke3NwcmluZy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC1xdWFydHovJHtzZXJ2aWNlbWl4LXF1YXJ0ei52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LXNjcmlwdGluZyIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXNjcmlwdGluZy52ZXJzaW9ufSI+CisgICAgICAgIDxmZWF0dXJlIHZlcnNpb249IiR7c2VydmljZW1peC1zaGFyZWQudmVyc2lvbn0iPnNlcnZpY2VtaXgtc2hhcmVkPC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNjcmlwdGluZy1hcGktMS4wLyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hc20vJHthc20uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFudGxyLyR7YW50bHIyLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5ncm9vdnkvJHtncm9vdnkuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnJoaW5vLyR7cmhpbm8uYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpydWJ5LyR7anJ1YnkuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbS5nb29nbGUuY29kZS5zY3JpcHRlbmdpbmVzL3NjcmlwdGVuZ2luZXMtZ3Jvb3Z5LyR7c2NyaXB0ZW5naW5lcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpjb20uZ29vZ2xlLmNvZGUuc2NyaXB0ZW5naW5lcy9zY3JpcHRlbmdpbmVzLWphdmFzY3JpcHQvJHtzY3JpcHRlbmdpbmVzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOmNvbS5nb29nbGUuY29kZS5zY3JpcHRlbmdpbmVzL3NjcmlwdGVuZ2luZXMtanJ1YnkvJHtzY3JpcHRlbmdpbmVzLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LXNjcmlwdGluZy8ke3NlcnZpY2VtaXgtc2NyaXB0aW5nLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtdmFsaWRhdGlvbiIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXZhbGlkYXRpb24udmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtdmFsaWRhdGlvbi8ke3NlcnZpY2VtaXgtdmFsaWRhdGlvbi52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LXNheG9uIiB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2F4b24udmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc2F4b24vJHtzYXhvbi5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtc2F4b24vJHtzZXJ2aWNlbWl4LXNheG9uLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtd3NuMjAwNSIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXdzbjIwMDUudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHthY3RpdmVtcS52ZXJzaW9ufSI+YWN0aXZlbXE8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MvZ2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWMvJHtnZXJvbmltby13cy1tZXRhZGF0YS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNhYWotYXBpLTEuMy8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzL29yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXhiLWFwaS0ke2pheGIuYXBpLnZlcnNpb259LyR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Mvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpheHdzLWFwaS0ke2pheHdzLWFwaS52ZXJzaW9ufS8ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamF4Yi1pbXBsLyR7amF4Yi1pbXBsLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC13c24yMDA1LyR7c2VydmljZW1peC13c24yMDA1LnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtc25tcCIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXNubXAudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc25tcDRqLyR7c25tcDRqLmJ1bmRsZS52ZXJzaW9ufTwvYnVuZGxlPgorICAgICAgICA8YnVuZGxlPm12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXgvc2VydmljZW1peC1zbm1wLyR7c2VydmljZW1peC1zbm1wLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtdmZzIiB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtdmZzLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9ufSI+c2VydmljZW1peC1zaGFyZWQ8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzL29yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtdmZzLyR7Y29tbW9ucy12ZnMuYnVuZGxlLnZlcnNpb259PC9idW5kbGU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LXZmcy8ke3NlcnZpY2VtaXgtdmZzLnZlcnNpb259PC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorICAgIDxmZWF0dXJlIG5hbWU9InNlcnZpY2VtaXgtc21wcCIgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXNtcHAudmVyc2lvbn0iPgorICAgICAgICA8ZmVhdHVyZSB2ZXJzaW9uPSIke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259Ij5zZXJ2aWNlbWl4LXNoYXJlZDwvZmVhdHVyZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuanNtcHAvJHtqc21wcC5idW5kbGUudmVyc2lvbn08L2J1bmRsZT4KKyAgICAgICAgPGJ1bmRsZT5tdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4L3NlcnZpY2VtaXgtc21wcC8ke3NlcnZpY2VtaXgtc21wcC52ZXJzaW9ufTwvYnVuZGxlPgorICAgIDwvZmVhdHVyZT4KKyAgICA8ZmVhdHVyZSBuYW1lPSJzZXJ2aWNlbWl4LWV4ZWMiIHZlcnNpb249IiR7c2VydmljZW1peC1leGVjLnZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHtzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9ufSI+c2VydmljZW1peC1zaGFyZWQ8L2ZlYXR1cmU+CisgICAgICAgIDxidW5kbGU+bXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9zZXJ2aWNlbWl4LWV4ZWMvJHtzZXJ2aWNlbWl4LWV4ZWMudmVyc2lvbn08L2J1bmRsZT4KKyAgICA8L2ZlYXR1cmU+CisKKyAgICA8IS0tIERlZmF1bHQgYnJva2VyIGNvbmZpZ3VyYXRpb24gLS0+CisgICAgPGZlYXR1cmUgbmFtZT0iYWN0aXZlbXEtYnJva2VyIiB2ZXJzaW9uPSIke3ZlcnNpb259Ij4KKyAgICAgICAgPGZlYXR1cmUgdmVyc2lvbj0iJHthY3RpdmVtcS52ZXJzaW9ufSI+YWN0aXZlbXEtYmx1ZXByaW50PC9mZWF0dXJlPgorICAgICAgICA8YnVuZGxlPmJsdWVwcmludDpmaWxlOmV0Yy9hY3RpdmVtcS1icm9rZXIueG1sPC9idW5kbGU+CisgICAgPC9mZWF0dXJlPgorPC9mZWF0dXJlcz4KZGlmZiAtLWdpdCBhL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9wb20ueG1sIGIvdHJ1bmsvYXNzZW1ibHkvc3JjL21haW4vZmlsdGVyZWQtcmVzb3VyY2VzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzMTgyZQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2Fzc2VtYmx5L3NyYy9tYWluL2ZpbHRlcmVkLXJlc291cmNlcy9wb20ueG1sCkBAIC0wLDAgKzEsNTIgQEAKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZmVhdHVyZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmZlYXR1cmVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggRXhhbXBsZXM8L25hbWU+CisKKyAgICA8bW9kdWxlcz4KKyAgICAgICAgPG1vZHVsZT5icmlkZ2U8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5icmlkZ2UtY2FtZWw8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jYW1lbDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi13c2RsLWZpcnN0PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2FtZWwtbm1yPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2FtZWwtb3NnaTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi1jYW1lbC1ubXI8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtbm1yPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y3hmLW9zZ2k8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtd3MtYWRkcmVzc2luZzwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi1qYXhyczwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi13cy1zZWN1cml0eS1vc2dpPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y3hmLXdzLXJtPC9tb2R1bGU+IAorICAgPC9tb2R1bGVzPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9icmFuZGluZy9wb20ueG1sIGIvdHJ1bmsvYnJhbmRpbmcvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2Y2YzM5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvYnJhbmRpbmcvcG9tLnhtbApAQCAtMCwwICsxLDY1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5mZWF0dXJlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZmVhdHVyZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmZlYXR1cmVzLmJyYW5kaW5nPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+YnVuZGxlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogQnJhbmRpbmcgU3VwcG9ydDwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+QnJhbmRpbmcgZm9yIEFwYWNoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzPC9kZXNjcmlwdGlvbj4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHJlc291cmNlcz4KKyAgICAgICAgICAgIDxyZXNvdXJjZT4KKyAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7cHJvamVjdC5iYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXM8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICA8ZmlsdGVyaW5nPnRydWU8L2ZpbHRlcmluZz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPioqLyo8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgIDwvcmVzb3VyY2U+CisgICAgICAgIDwvcmVzb3VyY2VzPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1EZXNjcmlwdGlvbj4ke3Byb2plY3QuZGVzY3JpcHRpb259PC9CdW5kbGUtRGVzY3JpcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+KjwvSW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8UHJpdmF0ZS1QYWNrYWdlPiEqPC9Qcml2YXRlLVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8RXhwb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5rYXJhZi5icmFuZGluZyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFNwcmluZy1Db250ZXh0Pio7cHVibGlzaC1jb250ZXh0Oj1mYWxzZTwvU3ByaW5nLUNvbnRleHQ+CisgICAgICAgICAgICAgICAgICAgIDwvaW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvYnJhbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUva2FyYWYvYnJhbmRpbmcvYnJhbmRpbmcucHJvcGVydGllcyBiL3RydW5rL2JyYW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL2thcmFmL2JyYW5kaW5nL2JyYW5kaW5nLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiZjdmMAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2JyYW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL2thcmFmL2JyYW5kaW5nL2JyYW5kaW5nLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKword2VsY29tZSA9IFwKK1x1MDAxQlszNm0gX19fXyAgICAgICAgICAgICAgICAgIF8gICAgICAgICAgX18gIF9fIF8gICAgICBcdTAwMUJbMG1cblwKK1x1MDAxQlszNm0vIF9fX3wgIF9fXyBfIF9fX18gICBfKF8pIF9fXyBfX198ICBcXC8gIChfKV8gIF9fXHUwMDFCWzBtXG5cCitcdTAwMUJbMzZtXFxfX18gXFwgLyBfIFxcICdfX1xcIFxcIC8gLyB8LyBfXy8gXyBcXCB8XFwvfCB8IFxcIFxcLyAvXHUwMDFCWzBtXG5cCitcdTAwMUJbMzZtIF9fXykgfCAgX18vIHwgICBcXCBWIC98IHwgKF98ICBfXy8gfCAgfCB8IHw+ICA8IFx1MDAxQlswbVxuXAorXHUwMDFCWzM2bXxfX19fLyBcXF9fX3xffCAgICBcXF8vIHxffFxcX19fXFxfX198X3wgIHxffF8vXy9cXF9cXFx1MDAxQlswbVxuXAorXG5cCitcdTAwMUJbMW0gIEFwYWNoZSBTZXJ2aWNlTWl4XHUwMDFCWzBtICgke3BvbS52ZXJzaW9ufSlcblwKK1xuXAorSGl0ICdcdTAwMUJbMW08dGFiPlx1MDAxQlswbScgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHNcblwKKyAgIGFuZCAnXHUwMDFCWzFtW2NtZF0gLS1oZWxwXHUwMDFCWzBtJyBmb3IgaGVscCBvbiBhIHNwZWNpZmljIGNvbW1hbmQuXG4KK0hpdCAnPGN0cmwtZD4nIG9yICdvc2dpOnNodXRkb3duJyB0byBzaHV0ZG93biBTZXJ2aWNlTWl4LlxuCisKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3BvbS54bWwgYi90cnVuay9jYW1lbC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTA0NmQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9wb20ueG1sCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmZlYXR1cmVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5mZWF0dXJlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWw8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+Y2FtZWw8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBDYW1lbCBTdXBwb3J0PC9uYW1lPgorCisgICAgPG1vZHVsZXM+CisgICAgICAgIDxtb2R1bGU+c2VydmljZW1peC1jYW1lbDwvbW9kdWxlPgorICAgIDwvbW9kdWxlcz4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9wb20ueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNGRlZjQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3BvbS54bWwKQEAgLTAsMCArMSwyNDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLmNvbXBvbmVudDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IENhbWVsIFN1cHBvcnQgOjogQ29tcG9uZW50PC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5BcGFjaGUgQ2FtZWwgY29tcG9uZW50IHRpZ2h0IGludGVncmF0ZWQgaW4gdGhlIE5NUjwvZGVzY3JpcHRpb24+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLm9zZ2k8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3NnaTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5vc2dpLmNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLXNwcmluZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY2FtZWw8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC1jeGY8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC10cmFuc3BvcnRzLWh0dHA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC10cmFuc3BvcnRzLWh0dHAtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC10cmFuc3BvcnRzLWxvY2FsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtZnJvbnRlbmQtc2ltcGxlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtZnJvbnRlbmQtamF4d3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC1tYW5hZ2VtZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtdGVzdHV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtdG9vbHMtY29tbW9uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtZnJvbnRlbmQtamF4cnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNhbWVsPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWwtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNhbWVsPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWwtaHR0cDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY2FtZWw8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC10ZXN0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXRlc3R1dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLWJ1bmRsZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmJvdW5jeWNhc3RsZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmJjcHJvdi1qZGsxNDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qYXh3c18yLjJfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPnhmaXJlPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3BlbnNhbWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuLnhtbC5wYXJzZXJzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4cC1yaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndvb2RzdG94LWNvcmUtYXNsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dHlwZT50ZXN0LWphcjwvdHlwZT4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmxvZzRqPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9nNGo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4qPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yKjwvRXhwb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLURlc2NyaXB0aW9uPiR7cHJvamVjdC5kZXNjcmlwdGlvbn08L0J1bmRsZS1EZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxmb3JrTW9kZT5wZXJ0ZXN0PC9mb3JrTW9kZT4KKyAgICAgICAgICAgICAgICAgICAgPHN5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+amF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+Y29tLnN1bi5vcmcuYXBhY2hlLnhlcmNlcy5pbnRlcm5hbC5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsPC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+amF2YXgueG1sLmRhdGF0eXBlLkRhdGF0eXBlRmFjdG9yeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+Y29tLnN1bi5vcmcuYXBhY2hlLnhlcmNlcy5pbnRlcm5hbC5qYXhwLmRhdGF0eXBlLkRhdGF0eXBlRmFjdG9yeUltcGw8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5jb20uc3VuLm9yZy5hcGFjaGUueGVyY2VzLmludGVybmFsLmpheHAuU0FYUGFyc2VyRmFjdG9yeUltcGw8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwuc3RyZWFtLlhNTElucHV0RmFjdG9yeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+Y29tLmN0Yy53c3R4LnN0YXguV3N0eElucHV0RmFjdG9yeTwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmphdmF4LnhtbC5zdHJlYW0uWE1MT3V0cHV0RmFjdG9yeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+Y29tLmN0Yy53c3R4LnN0YXguV3N0eE91dHB1dEZhY3Rvcnk8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC9zeXN0ZW1Qcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtY29kZWdlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjeGYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtdGVzdC1zb3VyY2VzPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VSb290PiR7YmFzZWRpcn0vdGFyZ2V0L2dlbmVyYXRlZC90ZXN0L2phdmE8L3NvdXJjZVJvb3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbE9wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsPiR7YmFzZWRpcn0vc3JjL3Rlc3QvcmVzb3VyY2VzL3BlcnNvbi53c2RsPC93c2RsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dHJhYXJncz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0cmFhcmc+LXZlcmJvc2U8L2V4dHJhYXJnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRyYWFyZ3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3NkbE9wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzZGwyamF2YTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPCEtLSBleGNsdWRlIGdlbmVyYXRlZCBjbGFzcyBmcm9tIGN4Zi1jb2RlZ2VuLXBsdWdpbiAtLT4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29iZXJ0dXJhLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy93c2RsX2ZpcnN0LyouY2xhc3M8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NlcnZpY2VNaXhCaW5kaW5nLmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TZXJ2aWNlTWl4QmluZGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MGU0YzMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TZXJ2aWNlTWl4QmluZGluZy5qYXZhCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXI7CisKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBqYXZheC5hY3RpdmF0aW9uLkRhdGFIYW5kbGVyOworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdDsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuQ2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5FeGNoYW5nZVBhdHRlcm47CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5NZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuaW1wbC5EZWZhdWx0RXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5pbXBsLkRlZmF1bHRNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkNoYW5uZWw7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuUGF0dGVybjsKKworLyoqCisgKiBUaGUgYmluZGluZyBvYmplY3Qgd2lsbCBoZWxwIHVzIHRvIGRlYWwgd2l0aCBjb3B5aW5nIGJldHdlZW4gdGhlIE5NUiBleGNoYW5nZSBhbmQgY2FtZWwgZXhjaGFuZ2UKKyAqLworcHVibGljIGNsYXNzIFNlcnZpY2VNaXhCaW5kaW5nIHsKKyAgICBwcml2YXRlIGZpbmFsIHRyYW5zaWVudCBMb2cgTE9HID0gTG9nRmFjdG9yeS5nZXRMb2coU2VydmljZU1peEJpbmRpbmcuY2xhc3MpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5NUl9NRVNTQUdFID0gIm5tck1lc3NhZ2UiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5NUl9FWENIQU5HRSA9ICJubXJFeGNoYW5nZSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk1SX09QRVJBVElPTiA9ICJubXJPcGVyYXRpb24iOworICAgIAorICAgIHB1YmxpYyB2b2lkIGNvcHlDYW1lbE1lc3NhZ2VUb05tck1lc3NhZ2Uob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTWVzc2FnZSBubXJNZXNzYWdlLCBNZXNzYWdlIGNhbWVsTWVzc2FnZSkgeworICAgICAgICBpZiAobm1yTWVzc2FnZSAhPSBudWxsICYmIGNhbWVsTWVzc2FnZSAhPSBudWxsKSB7CisgICAgICAgICAgICBubXJNZXNzYWdlLnNldEJvZHkoY2FtZWxNZXNzYWdlLmdldEJvZHkoKSk7CisgICAgICAgICAgICBubXJNZXNzYWdlLmdldEhlYWRlcnMoKS5jbGVhcigpOworICAgICAgICAgICAgYWRkTm1ySGVhZGVycyhubXJNZXNzYWdlLCBjYW1lbE1lc3NhZ2UpOworICAgICAgICAgICAgbm1yTWVzc2FnZS5nZXRBdHRhY2htZW50cygpLmNsZWFyKCk7CisgICAgICAgICAgICBubXJNZXNzYWdlLmdldEF0dGFjaG1lbnRzKCkucHV0QWxsKGNhbWVsTWVzc2FnZS5nZXRBdHRhY2htZW50cygpKTsKKyAgICAgICAgICAgIC8vYWRkU2VjdXJpdHlTdWJqZWN0KG5tck1lc3NhZ2UsIGNhbWVsTWVzc2FnZSk7CisKKyAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgc2VjdXJpdHkgc3ViamVjdAorICAgICAgICAgICAgaWYgKGNhbWVsTWVzc2FnZS5nZXRIZWFkZXIoRXhjaGFuZ2UuQVVUSEVOVElDQVRJT04sIFN1YmplY3QuY2xhc3MpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBubXJNZXNzYWdlLnNldFNlY3VyaXR5U3ViamVjdChjYW1lbE1lc3NhZ2UuZ2V0SGVhZGVyKEV4Y2hhbmdlLkFVVEhFTlRJQ0FUSU9OLCBTdWJqZWN0LmNsYXNzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjb3B5Tm1yTWVzc2FnZVRvQ2FtZWxNZXNzYWdlKG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk1lc3NhZ2Ugbm1yTWVzc2FnZSwgTWVzc2FnZSBjYW1lbE1lc3NhZ2UpIHsKKyAgICAgICAgY2FtZWxNZXNzYWdlLnNldEJvZHkobm1yTWVzc2FnZS5nZXRCb2R5KCkpOworICAgICAgICBjYW1lbE1lc3NhZ2Uuc2V0SGVhZGVyKE5NUl9NRVNTQUdFLCBubXJNZXNzYWdlKTsKKyAgICAgICAgY2FtZWxNZXNzYWdlLmdldEhlYWRlcnMoKS5wdXRBbGwobm1yTWVzc2FnZS5nZXRIZWFkZXJzKCkpOworICAgICAgICBhZGRDYW1lbEF0dGFjaG1lbnRzKG5tck1lc3NhZ2UsIGNhbWVsTWVzc2FnZSk7CisKKyAgICAgICAgLy8gY29weSB0aGUgc2VjdXJpdHkgc3ViamVjdAorICAgICAgICBpZiAobm1yTWVzc2FnZS5nZXRTZWN1cml0eVN1YmplY3QoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBjYW1lbE1lc3NhZ2Uuc2V0SGVhZGVyKEV4Y2hhbmdlLkFVVEhFTlRJQ0FUSU9OLCBubXJNZXNzYWdlLmdldFNlY3VyaXR5U3ViamVjdCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2UgcG9wdWxhdGVObXJFeGNoYW5nZUZyb21DYW1lbEV4Y2hhbmdlKEV4Y2hhbmdlIGNhbWVsRXhjaGFuZ2UsIENoYW5uZWwgY2xpZW50KSAgeworICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZSBlID0gY2xpZW50LmNyZWF0ZUV4Y2hhbmdlKAorICAgICAgICAgICAgICAgIFBhdHRlcm4uZnJvbVdzZGxVcmkoY2FtZWxFeGNoYW5nZS5nZXRQYXR0ZXJuKCkuZ2V0V3NkbFVyaSgpKSk7CisgICAgICAgIGUuZ2V0UHJvcGVydGllcygpLnB1dEFsbChjYW1lbEV4Y2hhbmdlLmdldFByb3BlcnRpZXMoKSk7CisgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk1lc3NhZ2UgaW5NZXNzYWdlID0gZS5nZXRJbigpOworICAgICAgICBjb3B5Q2FtZWxNZXNzYWdlVG9ObXJNZXNzYWdlKGluTWVzc2FnZSwgY2FtZWxFeGNoYW5nZS5nZXRJbigpKTsKKyAgICAgICAgcmV0dXJuIGU7CisgICAgICAgICAgICAgICAgICAgCisgICAgfQorICAgIAorICAgIAorICAgIHB1YmxpYyBFeGNoYW5nZSBwb3B1bGF0ZUNhbWVsRXhjaGFuZ2VGcm9tTm1yRXhjaGFuZ2UoQ2FtZWxDb250ZXh0IGNvbnRleHQsIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlIG5tckV4Y2hhbmdlKSB7CisgICAgICAgIEV4Y2hhbmdlIGFuc3dlciA9IG5ldyBEZWZhdWx0RXhjaGFuZ2UoY29udGV4dCk7CisgICAgICAgIGFuc3dlci5zZXRQYXR0ZXJuKEV4Y2hhbmdlUGF0dGVybi5mcm9tV3NkbFVyaShubXJFeGNoYW5nZS5nZXRQYXR0ZXJuKCkuZ2V0V3NkbFVyaSgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBjb3B5IHRoZSBubXJFeGNoYW5nZSdzIHByb3BlcnRpZXMKKyAgICAgICAgYW5zd2VyLmdldFByb3BlcnRpZXMoKS5wdXRBbGwobm1yRXhjaGFuZ2UuZ2V0UHJvcGVydGllcygpKTsKKworICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlIGluTWVzc2FnZSA9IG5tckV4Y2hhbmdlLmdldEluKCk7CisgICAgICAgIGlmIChpbk1lc3NhZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gbmV3IERlZmF1bHRNZXNzYWdlKCk7CisgICAgICAgICAgICBjb3B5Tm1yTWVzc2FnZVRvQ2FtZWxNZXNzYWdlKGluTWVzc2FnZSwgbWVzc2FnZSk7CisgICAgICAgICAgICBhbnN3ZXIuc2V0SW4obWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGFuc3dlci5zZXRQcm9wZXJ0eShOTVJfRVhDSEFOR0UsIG5tckV4Y2hhbmdlKTsKKyAgICAgICAgaWYgKG5tckV4Y2hhbmdlICE9IG51bGwgJiYgbm1yRXhjaGFuZ2UuZ2V0T3BlcmF0aW9uKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgYW5zd2VyLnNldFByb3BlcnR5KE5NUl9PUEVSQVRJT04sIG5tckV4Y2hhbmdlLmdldE9wZXJhdGlvbigpLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgcmV0dXJuIGFuc3dlcjsKKyAgICB9CisgICAgCisgICAgCisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgYWRkTm1ySGVhZGVycyhvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlIG5tck1lc3NhZ2UsIE1lc3NhZ2UgY2FtZWxNZXNzYWdlKSB7CisgICAgICAgIC8vIGdldCBoZWFkZXJzIGZyb20gdGhlIENhbWVsIGluIG1lc3NhZ2UKKyAgICAgICAgU2V0PE1hcC5FbnRyeTxTdHJpbmcsIE9iamVjdD4+IGVudHJpZXMgPSBjYW1lbE1lc3NhZ2UuZ2V0SGVhZGVycygpLmVudHJ5U2V0KCk7CisgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgT2JqZWN0PiBlbnRyeSA6IGVudHJpZXMpIHsKKyAgICAgICAgICAgIC8vIHNraXAgdGhlIGNhbWVsIGhlYWRlcidzIG5vcm1hbGl6ZWQgTWVzc2FnZQorICAgICAgICAgICAgaWYgKGVudHJ5LmdldEtleSgpLmVxdWFscyhOTVJfTUVTU0FHRSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vY2hlY2sgaWYgdmFsdWUgaXMgU2VyaWFsaXphYmxlLCBhbmQgaWYgdmFsdWUgaXMgTWFwIG9yIGNvbGxlY3Rpb24sCisgICAgICAgICAgICAvL2p1c3QgZXhjbHVkZSBpdCBzaW5jZSB0aGUgZW50cnkgb2YgaXQgbWF5IG5vdCBiZSBTZXJpYWxpemFibGUgYXMgd2VsbAorICAgICAgICAgICAgaWYgKGVudHJ5LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBTZXJpYWxpemFibGUKKyAgICAgICAgICAgICAgICAgICAgJiYgIShlbnRyeS5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgTWFwKQorICAgICAgICAgICAgICAgICAgICAmJiAhKGVudHJ5LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSkgeworICAgICAgICAgICAgICAgIG5tck1lc3NhZ2Uuc2V0SGVhZGVyKGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgIAorICAgIH0KKyAgCisgICAgcHJvdGVjdGVkIHZvaWQgYWRkQ2FtZWxBdHRhY2htZW50cyhvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlIG5tck1lc3NhZ2UsIE1lc3NhZ2UgY2FtZWxNZXNzYWdlKSB7CisgICAgICAgIFNldDxTdHJpbmc+IG5hbWVzID0gbm1yTWVzc2FnZS5nZXRBdHRhY2htZW50cygpLmtleVNldCgpOworICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDogbmFtZXMpIHsKKyAgICAgICAgICAgIGlmIChubXJNZXNzYWdlLmdldEF0dGFjaG1lbnQobmFtZSkgaW5zdGFuY2VvZiBEYXRhSGFuZGxlcikgeworICAgICAgICAgICAgICAgIERhdGFIYW5kbGVyIGRhdGFIYW5kbGVyID0gKERhdGFIYW5kbGVyKSBubXJNZXNzYWdlLmdldEF0dGFjaG1lbnQobmFtZSk7ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhbWVsTWVzc2FnZS5hZGRBdHRhY2htZW50KG5hbWUsIGRhdGFIYW5kbGVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTE9HLndhcm4oIk5NUiBhdHRhY2hlbWVudCBvZiAiICsgbmFtZSArICIgaXMgbm90IGEgaW5zdGFuY2Ugb2YgRGF0YUhhbmRsZXIsIGNhbm5vdCBjb3B5IGl0IGludG8gQ2FtZWwgbWVzc2FnZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFeHRyYWN0IHRoZSB1bmRlcmx5aW5nIE5NUiB7QGxpbmsgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTWVzc2FnZX0gZm9yIGEgQ2FtZWwgbWVzc2FnZQorICAgICAqCisgICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIENhbWVsIE1lc3NhZ2UKKyAgICAgKiBAcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIE5NUiBtZXNzYWdlCisgICAgICovCisgICAgcHVibGljIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk1lc3NhZ2UgZ2V0Tm1yTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0SGVhZGVyKE5NUl9NRVNTQUdFKSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZS5nZXRIZWFkZXIoTk1SX01FU1NBR0UsIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk1lc3NhZ2UuY2xhc3MpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEV4dHJhY3QgdGhlIE5NUiBFeGNoYW5nZSBmcm9tIHRoZSBDYW1lbCBFeGNoYW5nZQorICAgICAqCisgICAgICogQHBhcmFtIGNhbWVsIHRoZSBDYW1lbCBFeGNoYW5nZQorICAgICAqIEByZXR1cm4gdGhlIE5NUiBFeGNoYW5nZQorICAgICAqLworICAgIHB1YmxpYyBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZSBleHRyYWN0Tm1yRXhjaGFuZ2UoRXhjaGFuZ2UgY2FtZWwpIHsKKyAgICAgICAgcmV0dXJuIChvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZSkgY2FtZWwuZ2V0UHJvcGVydGllcygpLnJlbW92ZShOTVJfRVhDSEFOR0UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NlcnZpY2VNaXhDb21wb25lbnQuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NlcnZpY2VNaXhDb21wb25lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDE0NWFhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VydmljZU1peENvbXBvbmVudC5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLkVuZHBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuaW1wbC5EZWZhdWx0Q29tcG9uZW50OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUjsKKworLyoqCisgKiBBIGNhbWVsIGNvbXBvbmVudCB0byBicmlkZ2UgU2VydmljZU1peCBOTVIgd2l0aCBDYW1lbC4KKyAqLworcHVibGljIGNsYXNzIFNlcnZpY2VNaXhDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0Q29tcG9uZW50IHsKKworICAgIHByaXZhdGUgTk1SIG5tcjsKKyAgICBwcml2YXRlIFNlcnZpY2VNaXhCaW5kaW5nIGJpbmRpbmc7CisgICAgCisgICAgcHVibGljIFNlcnZpY2VNaXhDb21wb25lbnQoKSB7CisgICAgfQorICAgCisgICAgcHVibGljIFNlcnZpY2VNaXhCaW5kaW5nIGdldEJpbmRpbmcoKSB7CisgICAgICAgIGlmIChiaW5kaW5nID09IG51bGwpIHsKKyAgICAgICAgICAgIGJpbmRpbmcgPSBuZXcgU2VydmljZU1peEJpbmRpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmluZGluZzsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nKFNlcnZpY2VNaXhCaW5kaW5nIGJpbmRpbmcpIHsKKyAgICAgICAgdGhpcy5iaW5kaW5nID0gYmluZGluZzsKKyAgICB9CisKKyAgICBwdWJsaWMgTk1SIGdldE5tcigpIHsKKyAgICAgICAgaWYgKG5tciA9PSBudWxsKSB7CisgICAgICAgICAgICBubXIgPSBnZXRDYW1lbENvbnRleHQoKS5nZXRSZWdpc3RyeSgpLmxvb2t1cChOTVIuY2xhc3MuZ2V0TmFtZSgpLCBOTVIuY2xhc3MpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBubXI7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Tm1yKE5NUiBubXIpIHsKKyAgICAgICAgdGhpcy5ubXIgPSBubXI7CisgICAgfQorCisgICAgcHJvdGVjdGVkIEVuZHBvaW50IGNyZWF0ZUVuZHBvaW50KFN0cmluZyB1cmksIFN0cmluZyByZW1haW5pbmcsIE1hcCBwYXJhbWV0ZXJzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlTWl4RW5kcG9pbnQodGhpcywgdXJpLCByZW1haW5pbmcpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRW5kcG9pbnQob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRW5kcG9pbnQgZW5kcG9pbnQsIE1hcDxTdHJpbmcsID8+IHByb3BlcnRpZXMpIHsKKyAgICAgICAgZ2V0Tm1yKCkuZ2V0RW5kcG9pbnRSZWdpc3RyeSgpLnJlZ2lzdGVyKGVuZHBvaW50LCBwcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyRW5kcG9pbnQob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRW5kcG9pbnQgZW5kcG9pbnQsIE1hcDxTdHJpbmcsID8+IHByb3BlcnRpZXMpIHsKKyAgICAgICAgZ2V0Tm1yKCkuZ2V0RW5kcG9pbnRSZWdpc3RyeSgpLnVucmVnaXN0ZXIoZW5kcG9pbnQsIHByb3BlcnRpZXMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NlcnZpY2VNaXhDb25zdW1lci5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VydmljZU1peENvbnN1bWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4NzY3NQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NlcnZpY2VNaXhDb25zdW1lci5qYXZhCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5Bc3luY0NhbGxiYWNrOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuQ29uc3VtZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5Qcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5pbXBsLkRlZmF1bHRDb25zdW1lcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLnNwaS5TeW5jaHJvbml6YXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuQ2hhbm5lbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FbmRwb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5TdGF0dXM7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuc2VydmljZS5TZXJ2aWNlSGVscGVyOworCisvKioKKyAqIEEge0BsaW5rIENvbnN1bWVyfSB0aGF0IHJlY2VpdmVzIE5NUiB7QGxpbmsgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2V9cyBhbmQgaW52b2tlcyB0aGUgQ2FtZWwgcm91dGUKKyAqLworcHVibGljIGNsYXNzIFNlcnZpY2VNaXhDb25zdW1lciBleHRlbmRzIERlZmF1bHRDb25zdW1lciBpbXBsZW1lbnRzIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkVuZHBvaW50LCBTeW5jaHJvbml6YXRpb24geworCisgICAgcHJpdmF0ZSBDaGFubmVsIGNoYW5uZWw7CisKKyAgICBwdWJsaWMgU2VydmljZU1peENvbnN1bWVyKFNlcnZpY2VNaXhFbmRwb2ludCBlbmRwb2ludCwgUHJvY2Vzc29yIHByb2Nlc3NvcikgeworICAgICAgICBzdXBlcihlbmRwb2ludCwgcHJvY2Vzc29yKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2VydmljZU1peEVuZHBvaW50IGdldEVuZHBvaW50KCkgeworICAgICAgICByZXR1cm4gKFNlcnZpY2VNaXhFbmRwb2ludCkgc3VwZXIuZ2V0RW5kcG9pbnQoKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1N0YXJ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLmRvU3RhcnQoKTsKKyAgICAgICAgZ2V0RW5kcG9pbnQoKS5nZXRDb21wb25lbnQoKS5yZWdpc3RlckVuZHBvaW50KHRoaXMsIGNyZWF0ZUVuZHBvaW50TWFwKCkpOworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIGRvU3RvcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBnZXRFbmRwb2ludCgpLmdldENvbXBvbmVudCgpLnVucmVnaXN0ZXJFbmRwb2ludCh0aGlzLCBjcmVhdGVFbmRwb2ludE1hcCgpKTsKKyAgICAgICAgc3VwZXIuZG9TdG9wKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLD8+IGNyZWF0ZUVuZHBvaW50TWFwKCkgeworICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3VsdCA9IFNlcnZpY2VIZWxwZXIuY3JlYXRlTWFwKEVuZHBvaW50Lk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RW5kcG9pbnQoKS5nZXRFbmRwb2ludE5hbWUoKSk7CisgICAgICAgIHJlc3VsdC5wdXQoRW5kcG9pbnQuQ0hBTk5FTF9TWU5DX0RFTElWRVJZLCBnZXRFbmRwb2ludCgpLmlzU3luY2hyb25vdXMoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q2hhbm5lbChDaGFubmVsIGNoYW5uZWwpIHsKKyAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9jZXNzIGFuIE5NUiB7QGxpbmsgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2V9IGJ5IGNyZWF0aW5nIGFuZCBzZW5kaW5nIGEgQ2FtZWwge0BsaW5rIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlfQorICAgICAqIHRocm91Z2ggdGhlIGRlZmluZWQgcm91dGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwcm9jZXNzKEV4Y2hhbmdlIGV4Y2hhbmdlKSB7CisgICAgICAgIGlmIChleGNoYW5nZS5nZXRTdGF0dXMoKSA9PSBTdGF0dXMuQWN0aXZlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY2FtZWwuRXhjaGFuZ2UgY2FtZWxFeGNoYW5nZSA9IGdldEVuZHBvaW50KCkuY3JlYXRlRXhjaGFuZ2UoZXhjaGFuZ2UpOworICAgICAgICAgICAgICAgIGNhbWVsRXhjaGFuZ2UuYWRkT25Db21wbGV0aW9uKHRoaXMpOworCisgICAgICAgICAgICAgICAgZ2V0QXN5bmNQcm9jZXNzb3IoKS5wcm9jZXNzKGNhbWVsRXhjaGFuZ2UsIG5ldyBBc3luY0NhbGxiYWNrKCkgeworCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvbmUoYm9vbGVhbiBkb25lU3luYykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGJ5IHRoZSBvbkNvbXBsZXRlL29uRmFpbHVyZSBtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBleGNoYW5nZS5zZXRFcnJvcihlKTsKKyAgICAgICAgICAgICAgICBleGNoYW5nZS5zZXRTdGF0dXMoU3RhdHVzLkVycm9yKTsKKyAgICAgICAgICAgICAgICBjaGFubmVsLnNlbmQoZXhjaGFuZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGFuZGxlIHRoZSBDYW1lbCB7QGxpbmsgb3JnLmFwYWNoZS5jYW1lbC5FeGNoYW5nZSkgcmVzcG9uc2UgYnkgdXBkYXRpbmcgdGhlIG1hdGNoaW5nIE5NUiB7QGxpbmsgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2V9CisgICAgICogYW5kIGZpbmlzaGluZyB0aGUgTk1SIE1FUAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVDYW1lbFJlc3BvbnNlKEV4Y2hhbmdlIGV4Y2hhbmdlLCBvcmcuYXBhY2hlLmNhbWVsLkV4Y2hhbmdlIGNhbWVsRXhjaGFuZ2UpIHsKKyAgICAgICAgLy8ganVzdCBjb3B5IHRoZSBjYW1lbEV4Y2hhbmdlIGJhY2sgdG8gdGhlIG5tciBleGNoYW5nZQorICAgICAgICBleGNoYW5nZS5nZXRQcm9wZXJ0aWVzKCkucHV0QWxsKGNhbWVsRXhjaGFuZ2UuZ2V0UHJvcGVydGllcygpKTsKKyAgICAgICAgaWYgKGNhbWVsRXhjaGFuZ2UuZ2V0RXhjZXB0aW9uKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgZXhjaGFuZ2Uuc2V0RXJyb3IoY2FtZWxFeGNoYW5nZS5nZXRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBleGNoYW5nZS5zZXRTdGF0dXMoU3RhdHVzLkVycm9yKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYW1lbEV4Y2hhbmdlLmhhc091dCgpICYmICFjYW1lbEV4Y2hhbmdlLmdldE91dCgpLmlzRmF1bHQoKSkgeworICAgICAgICAgICAgZ2V0RW5kcG9pbnQoKS5nZXRDb21wb25lbnQoKS5nZXRCaW5kaW5nKCkuCisgICAgICAgICAgICAgICAgY29weUNhbWVsTWVzc2FnZVRvTm1yTWVzc2FnZShleGNoYW5nZS5nZXRPdXQoKSwgY2FtZWxFeGNoYW5nZS5nZXRPdXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2FtZWxFeGNoYW5nZS5oYXNPdXQoKSAmJiBjYW1lbEV4Y2hhbmdlLmdldE91dCgpLmlzRmF1bHQoKSkgeworICAgICAgICAgICAgZ2V0RW5kcG9pbnQoKS5nZXRDb21wb25lbnQoKS5nZXRCaW5kaW5nKCkuCisgICAgICAgICAgICAgICAgY29weUNhbWVsTWVzc2FnZVRvTm1yTWVzc2FnZShleGNoYW5nZS5nZXRGYXVsdCgpLCBjYW1lbEV4Y2hhbmdlLmdldE91dCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4Y2hhbmdlLnNldFN0YXR1cyhTdGF0dXMuRG9uZSk7CisgICAgICAgIH0KKyAgICAgICAgY2hhbm5lbC5zZW5kKGV4Y2hhbmdlKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEhhbmRsZSBhIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgQ2FtZWwgRXhjaGFuZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkNvbXBsZXRlKG9yZy5hcGFjaGUuY2FtZWwuRXhjaGFuZ2UgZXhjaGFuZ2UpIHsKKyAgICAgICAgRXhjaGFuZ2Ugbm1yID0gZ2V0RW5kcG9pbnQoKS5nZXRDb21wb25lbnQoKS5nZXRCaW5kaW5nKCkuZXh0cmFjdE5tckV4Y2hhbmdlKGV4Y2hhbmdlKTsKKyAgICAgICAgaGFuZGxlQ2FtZWxSZXNwb25zZShubXIsIGV4Y2hhbmdlKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEhhbmRsZSBhIENhbWwgZXhjaGFuZ2UgZmFpbHVyZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uRmFpbHVyZShvcmcuYXBhY2hlLmNhbWVsLkV4Y2hhbmdlIGV4Y2hhbmdlKSB7CisgICAgICAgIEV4Y2hhbmdlIG5tciA9IGdldEVuZHBvaW50KCkuZ2V0Q29tcG9uZW50KCkuZ2V0QmluZGluZygpLmV4dHJhY3RObXJFeGNoYW5nZShleGNoYW5nZSk7CisgICAgICAgIGhhbmRsZUNhbWVsUmVzcG9uc2Uobm1yLCBleGNoYW5nZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VydmljZU1peEVuZHBvaW50LmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TZXJ2aWNlTWl4RW5kcG9pbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTRiMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VydmljZU1peEVuZHBvaW50LmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuaW1wbC5EZWZhdWx0RW5kcG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5FbmRwb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuUHJvZHVjZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5Db25zdW1lcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLlByb2Nlc3NvcjsKKworLyoqCisgKiBBIENhbWVsIHtAbGluayBFbmRwb2ludH0gdG8gaW50ZXJhY3Qgd2l0aCB0aGUgU2VydmljZU1peCBOTVIgZnJvbSB3aXRoaW4gYSBDYW1lbCByb3V0ZQorICogCisgKiBAb3JnLmFwYWNoZS54YmVhbi5YQmVhbiBlbGVtZW50PSJzbXhFbmRwb2ludCIKKyAqLworcHVibGljIGNsYXNzIFNlcnZpY2VNaXhFbmRwb2ludCBleHRlbmRzIERlZmF1bHRFbmRwb2ludCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lOQ0hST05PVVMgPSAic3luY2hyb25vdXMiOworCisgICAgcHJpdmF0ZSBTdHJpbmcgZW5kcG9pbnROYW1lOworICAgIHByaXZhdGUgYm9vbGVhbiBzeW5jaHJvbm91czsKKworICAgIHB1YmxpYyBTZXJ2aWNlTWl4RW5kcG9pbnQoU2VydmljZU1peENvbXBvbmVudCBjb21wb25lbnQsIFN0cmluZyB1cmksIFN0cmluZyBlbmRwb2ludE5hbWUpIHsKKyAgICAgICAgc3VwZXIodXJpLCBjb21wb25lbnQpOworICAgICAgICB0aGlzLmVuZHBvaW50TmFtZSA9IGVuZHBvaW50TmFtZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBjb25maWd1cmVQcm9wZXJ0aWVzKE1hcDxTdHJpbmcsIE9iamVjdD4gb3B0aW9ucykgeworICAgICAgICBzeW5jaHJvbm91cyA9IEJvb2xlYW4udmFsdWVPZigoU3RyaW5nKSBvcHRpb25zLnJlbW92ZShTWU5DSFJPTk9VUykpOworICAgIH0KKworICAgIHB1YmxpYyBTZXJ2aWNlTWl4Q29tcG9uZW50IGdldENvbXBvbmVudCgpIHsKKyAgICAgICAgcmV0dXJuIChTZXJ2aWNlTWl4Q29tcG9uZW50KXN1cGVyLmdldENvbXBvbmVudCgpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzU2luZ2xldG9uKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNocm9ub3VzKCkgeworICAgICAgICByZXR1cm4gc3luY2hyb25vdXM7CisgICAgfQorCisgICAgcHVibGljIFByb2R1Y2VyIGNyZWF0ZVByb2R1Y2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgU2VydmljZU1peFByb2R1Y2VyKHRoaXMsIGdldENvbXBvbmVudCgpLmdldE5tcigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29uc3VtZXIgY3JlYXRlQ29uc3VtZXIoUHJvY2Vzc29yIHByb2Nlc3NvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgU2VydmljZU1peENvbnN1bWVyKHRoaXMsIHByb2Nlc3Nvcik7CisgICAgfQorCisgICAgcHVibGljIEV4Y2hhbmdlIGNyZWF0ZUV4Y2hhbmdlKG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlIG5tckV4Y2hhbmdlKSB7CisgICAgICAgIHJldHVybiBnZXRDb21wb25lbnQoKS5nZXRCaW5kaW5nKCkucG9wdWxhdGVDYW1lbEV4Y2hhbmdlRnJvbU5tckV4Y2hhbmdlKGdldENhbWVsQ29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubXJFeGNoYW5nZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RW5kcG9pbnROYW1lKFN0cmluZyBlbmRwb2ludE5hbWUpIHsKKyAgICAgICAgdGhpcy5lbmRwb2ludE5hbWUgPSBlbmRwb2ludE5hbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRFbmRwb2ludE5hbWUoKSB7CisgICAgICAgIHJldHVybiBlbmRwb2ludE5hbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VydmljZU1peFByb2R1Y2VyLmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TZXJ2aWNlTWl4UHJvZHVjZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDc3MTcwCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VydmljZU1peFByb2R1Y2VyLmphdmEKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuQXN5bmNDYWxsYmFjazsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLkFzeW5jUHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuaW1wbC5EZWZhdWx0UHJvZHVjZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS4qOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLnNlcnZpY2UuU2VydmljZUhlbHBlcjsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5VVUlEOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOworCisvKioKKyAqIEEge0BsaW5rIG9yZy5hcGFjaGUuY2FtZWwuUHJvZHVjZXJ9IHRoYXQgaGFuZGxlcyBpbmNvbWluZyBDYW1lbCBleGNoYW5nZXMgYnkgc2VuZGluZy9yZWNlaXZpbmcgYW4gTk1SIHtAbGluayBvcmcuYXBhY2hlLmNhbWVsLkV4Y2hhbmdlfQorICovCitwdWJsaWMgY2xhc3MgU2VydmljZU1peFByb2R1Y2VyIGV4dGVuZHMgRGVmYXVsdFByb2R1Y2VyIGltcGxlbWVudHMgRW5kcG9pbnQsIEFzeW5jUHJvY2Vzc29yIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfRU5EUE9JTlRfTkFNRSA9ICJUQVJHRVRfRU5EUE9JTlRfTkFNRSI7CisKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIENvbnRpbnVhdGlvbj4gY29udGludWF0aW9ucyA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDxTdHJpbmcsIENvbnRpbnVhdGlvbj4oKTsKKyAgICBwcml2YXRlIGZpbmFsIE5NUiBubXI7CisKKyAgICBwcml2YXRlIENoYW5uZWwgY2hhbm5lbDsKKworICAgIHB1YmxpYyBTZXJ2aWNlTWl4UHJvZHVjZXIoU2VydmljZU1peEVuZHBvaW50IGVuZHBvaW50LCBOTVIgbm1yKSB7CisgICAgICAgIHN1cGVyKGVuZHBvaW50KTsKKyAgICAgICAgdGhpcy5ubXIgPSBubXI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBTeW5jaHJvbm91c2x5IHByb2Nlc3MgdGhlIENhbWVsIGV4Y2hhbmdlICh1c2luZyBzZW5kU3luYyB0byBzZW5kIGFuZCByZWNlaXZlIHRoZSBOTVIgRXhjaGFuZ2UpCisgICAgICovCisgICAgcHVibGljIHZvaWQgcHJvY2VzcyhFeGNoYW5nZSBleGNoYW5nZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE5NUiBubXIgPSBnZXRFbmRwb2ludCgpLmdldENvbXBvbmVudCgpLmdldE5tcigpOworCisgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlIGUgPQorICAgICAgICAgICAgZ2V0RW5kcG9pbnQoKS5nZXRDb21wb25lbnQoKS5nZXRCaW5kaW5nKCkucG9wdWxhdGVObXJFeGNoYW5nZUZyb21DYW1lbEV4Y2hhbmdlKGV4Y2hhbmdlLCBjaGFubmVsKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZS5zZXRUYXJnZXQobm1yLmdldEVuZHBvaW50UmVnaXN0cnkoKS5sb29rdXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUhlbHBlci5jcmVhdGVNYXAob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRW5kcG9pbnQuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRFbmRwb2ludCgpLmdldEVuZHBvaW50TmFtZSgpKSkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisKKyAgICAgICAgY2hhbm5lbC5zZW5kU3luYyhlKTsKKworICAgICAgICBoYW5kbGVSZXNwb25zZShleGNoYW5nZSwgY2hhbm5lbCwgZSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBc3luY2hyb25vdXNseSBwcm9jZXNzIHRoZSBDYW1lbCBleGNoYW5nZSAodXNpbmcgc2VuZCB0byBzZW5kIHRoZSBOTVIgRXhjaGFuZ2UpCisgICAgICogKE5NUiByZXNwb25zZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSB7QGxpbmsgI3Byb2Nlc3Mob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2UpfSBtZXRob2QKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzKEV4Y2hhbmdlIGV4Y2hhbmdlLCBBc3luY0NhbGxiYWNrIGFzeW5jQ2FsbGJhY2spIHsKKyAgICAgICAgTk1SIG5tciA9IGdldEVuZHBvaW50KCkuZ2V0Q29tcG9uZW50KCkuZ2V0Tm1yKCk7CisKKyAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2UgZQorICAgICAgICAgICAgICAgID0gZ2V0RW5kcG9pbnQoKS5nZXRDb21wb25lbnQoKS5nZXRCaW5kaW5nKCkucG9wdWxhdGVObXJFeGNoYW5nZUZyb21DYW1lbEV4Y2hhbmdlKGV4Y2hhbmdlLCBjaGFubmVsKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZS5zZXRUYXJnZXQobm1yLmdldEVuZHBvaW50UmVnaXN0cnkoKS5sb29rdXAoCisgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VIZWxwZXIuY3JlYXRlTWFwKG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkVuZHBvaW50Lk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RW5kcG9pbnQoKS5nZXRFbmRwb2ludE5hbWUoKSkpKTsKKworICAgICAgICAgICAgY29udGludWF0aW9ucy5wdXQoZS5nZXRJZCgpLCBuZXcgQ29udGludWF0aW9uKGV4Y2hhbmdlLCBhc3luY0NhbGxiYWNrKSk7CisgICAgICAgICAgICBjaGFubmVsLnNlbmQoZSk7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBsb2cud2FybigiRXJyb3Igb2NjdXJlZCB3aGlsZSBzZW5kaW5nIE5NUiBleGNoYW5nZSIsIGV4KTsKKworICAgICAgICAgICAgY29udGludWF0aW9ucy5yZW1vdmUoZS5nZXRJZCgpKTsKKworICAgICAgICAgICAgZXhjaGFuZ2Uuc2V0RXhjZXB0aW9uKGV4KTsKKyAgICAgICAgICAgIGFzeW5jQ2FsbGJhY2suZG9uZSh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGFuZGxlIGluY29taW5nIE5NUiBleGNoYW5nZXMgKHJlc3BvbnNlcyB0byB0aGUgZXhjaGFuZ2VzIHNlbnQgaW4ge0BsaW5rICNwcm9jZXNzKG9yZy5hcGFjaGUuY2FtZWwuRXhjaGFuZ2UsIG9yZy5hcGFjaGUuY2FtZWwuQXN5bmNDYWxsYmFjayl9CisgICAgICovCisgICAgcHVibGljIHZvaWQgcHJvY2VzcyhvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZSBleGNoYW5nZSkgeworICAgICAgICBDb250aW51YXRpb24gY29udGludWF0aW9uID0gY29udGludWF0aW9ucy5yZW1vdmUoZXhjaGFuZ2UuZ2V0SWQoKSk7CisKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICBsb2cuZXJyb3IoIlVua25vd24gZXhjaGFuZ2UgcmVjZWl2ZWQ6ICIgKyBleGNoYW5nZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBoYW5kbGVSZXNwb25zZShjb250aW51YXRpb24uZXhjaGFuZ2UsIGNoYW5uZWwsIGV4Y2hhbmdlKTsKKyAgICAgICAgICAgIGNvbnRpbnVhdGlvbi5jYWxsYmFjay5kb25lKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogSGFuZGxlIHRoZSBOTVIgRXhjaGFuZ2UgYnk6CisgICAgICogLSB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBDYW1lbCBFeGNoYW5nZQorICAgICAqIC0gZmluaXNoaW5nIHRoZSBOTVIgRXhjaGFuZ2UgTUVQCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVJlc3BvbnNlKEV4Y2hhbmdlIGV4Y2hhbmdlLCBDaGFubmVsIGNsaWVudCwgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2UgZSkgeworICAgICAgICBpZiAoZS5nZXRFcnJvcigpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGhhbmRsZUVycm9yUmVzcG9uc2UoZXhjaGFuZ2UsIGNsaWVudCwgZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzUmVzcG9uc2UoZXhjaGFuZ2UsIGNsaWVudCwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlKEV4Y2hhbmdlIGV4Y2hhbmdlLCBDaGFubmVsIGNsaWVudCwgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2UgZSkgeworICAgICAgICBpZiAoZS5nZXRQYXR0ZXJuKCkgIT0gUGF0dGVybi5Jbk9ubHkpIHsKKyAgICAgICAgICAgIGV4Y2hhbmdlLmdldFByb3BlcnRpZXMoKS5wdXRBbGwoZS5nZXRQcm9wZXJ0aWVzKCkpOworICAgICAgICAgICAgaWYgKGUuZ2V0RmF1bHQoKS5nZXRCb2R5KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGV4Y2hhbmdlLmdldE91dCgpLnNldEZhdWx0KHRydWUpOworICAgICAgICAgICAgICAgIGdldEVuZHBvaW50KCkuZ2V0Q29tcG9uZW50KCkuZ2V0QmluZGluZygpLmNvcHlObXJNZXNzYWdlVG9DYW1lbE1lc3NhZ2UoZS5nZXRGYXVsdCgpLCBleGNoYW5nZS5nZXRPdXQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdldEVuZHBvaW50KCkuZ2V0Q29tcG9uZW50KCkuZ2V0QmluZGluZygpLmNvcHlObXJNZXNzYWdlVG9DYW1lbE1lc3NhZ2UoZS5nZXRPdXQoKSwgZXhjaGFuZ2UuZ2V0T3V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZS5zZXRTdGF0dXMoU3RhdHVzLkRvbmUpOworICAgICAgICAgICAgY2hhbm5lbC5zZW5kKGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUVycm9yUmVzcG9uc2UoRXhjaGFuZ2UgY2FtZWwsIENoYW5uZWwgY2xpZW50LCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZSBubXIpIHsKKyAgICAgICAgY2FtZWwuc2V0RXhjZXB0aW9uKG5tci5nZXRFcnJvcigpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1N0YXJ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkucmVnaXN0ZXIodGhpcywgY3JlYXRlRW5kcG9pbnRNYXAoKSk7CisgICAgICAgIHN1cGVyLmRvU3RhcnQoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBkb1N0b3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuZG9TdG9wKCk7CisgICAgICAgIG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkudW5yZWdpc3Rlcih0aGlzLCBjcmVhdGVFbmRwb2ludE1hcCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBY2Nlc3MgdGhlIG1hdGNoaW5nIHtAbGluayBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLlNlcnZpY2VNaXhFbmRwb2ludH0KKyAgICAgKi8KKyAgICBwdWJsaWMgU2VydmljZU1peEVuZHBvaW50IGdldEVuZHBvaW50KCkgeworICAgICAgICByZXR1cm4gKFNlcnZpY2VNaXhFbmRwb2ludCkgc3VwZXIuZ2V0RW5kcG9pbnQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDaGFubmVsKENoYW5uZWwgY2hhbm5lbCkgeworICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsOworICAgIH0KKworICAgIC8qCisgICAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBlbmRwb2ludCBtYXAsIGNvbnRhaW5pbmcgdGhlIGVuZHBvaW50IG5hbWUgYXMgd2VsbCBhcyBhIHByb3BlcnR5IHJlZmVycmluZyB0byB0aGUKKyAgICAgKiB0YXJnZXQgZW5kcG9pbnQgbmFtZQorICAgICAqLworICAgIHByaXZhdGUgTWFwPFN0cmluZyxPYmplY3Q+IGNyZWF0ZUVuZHBvaW50TWFwKCkgeworICAgICAgICByZXR1cm4gU2VydmljZUhlbHBlci5jcmVhdGVNYXAob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRW5kcG9pbnQuTkFNRSwKKyAgICAgICAgICAgICAgICBTZXJ2aWNlTWl4UHJvZHVjZXIuY2xhc3MuZ2V0TmFtZSgpICsgIi0iICsgVVVJRC5yYW5kb21VVUlEKCksCisgICAgICAgICAgICAgICAgVEFSR0VUX0VORFBPSU5UX05BTUUsCisgICAgICAgICAgICAgICAgZ2V0RW5kcG9pbnQoKS5nZXRFbmRwb2ludE5hbWUoKSk7CisKKyAgICB9CisKKyAgICAvKgorICAgICAqIEFjY2VzcyBhbiB1bm1vZGlmaWFibGUgY29weSBvZiB0aGUgcGVuZGluZyBjb250aW51YXRpb25zIG1hcAorICAgICAqLworICAgIHByb3RlY3RlZCBNYXA8U3RyaW5nLCBDb250aW51YXRpb24+IGdldENvbnRpbnVhdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAoY29udGludWF0aW9ucyk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBFbmNhcHN1bGF0ZXMgYWxsIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBjb250aW51ZSBhIENhbWVsIHtAbGluayBFeGNoYW5nZX0gCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDb250aW51YXRpb24geworCisgICAgICAgIHByaXZhdGUgZmluYWwgRXhjaGFuZ2UgZXhjaGFuZ2U7CisgICAgICAgIHByaXZhdGUgZmluYWwgQXN5bmNDYWxsYmFjayBjYWxsYmFjazsKKworICAgICAgICBwcml2YXRlIENvbnRpbnVhdGlvbihFeGNoYW5nZSBleGNoYW5nZSwgQXN5bmNDYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIHRoaXMuZXhjaGFuZ2UgPSBleGNoYW5nZTsKKyAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy9hcGFjaGUvY2FtZWwvY29tcG9uZW50L25tciBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy9hcGFjaGUvY2FtZWwvY29tcG9uZW50L25tcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2UyZjkyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnL2FwYWNoZS9jYW1lbC9jb21wb25lbnQvbm1yCkBAIC0wLDAgKzEsMTggQEAKKyMKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitjbGFzcz1vcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLlNlcnZpY2VNaXhDb21wb25lbnQKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy9hcGFjaGUvY2FtZWwvY29tcG9uZW50L3NteCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy9hcGFjaGUvY2FtZWwvY29tcG9uZW50L3NteApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2UyZjkyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnL2FwYWNoZS9jYW1lbC9jb21wb25lbnQvc214CkBAIC0wLDAgKzEsMTggQEAKKyMKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitjbGFzcz1vcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLlNlcnZpY2VNaXhDb21wb25lbnQKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvY2FtZWwtbm1yLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvY2FtZWwtbm1yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzlhYWU4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9jYW1lbC1ubXIueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgeG1sbnM6b3NnaT0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpIgorICAgICAgIHhtbG5zOmNhbWVsLW9zZ2k9Imh0dHA6Ly9hY3RpdmVtcS5hcGFjaGUub3JnL2NhbWVsL3NjaGVtYS9vc2dpIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy0yLjAueHNkCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kvc3ByaW5nLW9zZ2kueHNkCisgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9jYW1lbC9zY2hlbWEvc3ByaW5nL2NhbWVsLXNwcmluZy54c2QKKyAgICAgICBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvb3NnaSBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvb3NnaS9jYW1lbC1vc2dpLnhzZCI+CisKKyAgICA8YmVhbiBpZD0ibm1yIiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci5TZXJ2aWNlTWl4Q29tcG9uZW50Ij4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5tciI+CisgICAgICAgICAgICA8b3NnaTpyZWZlcmVuY2UgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVIiIC8+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9iZWFuPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvQWJzdHJhY3RDb21wb25lbnRUZXN0LmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9BYnN0cmFjdENvbXBvbmVudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2VhZWFkCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvQWJzdHJhY3RDb21wb25lbnRUZXN0LmphdmEKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuQ29udGV4dFRlc3RTdXBwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuaW1wbC5KbmRpUmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4ZWN1dG9ycy5FeGVjdXRvckZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4ZWN1dG9ycy5pbXBsLkV4ZWN1dG9yQ29uZmlnOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5leGVjdXRvcnMuaW1wbC5FeGVjdXRvckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkNoYW5uZWw7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRW5kcG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuZXZlbnQuRXhjaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5zZXJ2aWNlLlNlcnZpY2VIZWxwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jb3JlLkludGVybmFsRW5kcG9pbnRXcmFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuY29yZS5TZXJ2aWNlTWl4OworCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgYnVpbGRpbmcgTk1SIGNvbXBvbmVudCB1bml0IHRlc3RzCisgKiAtIHRoZSBOTVIgY29tcG9uZW50IGlzIGF2YWlsYWJsZSB3aXRoIFVSSSBwcmVmaXggbm1yOgorICogLSBhIGNsaWVudCBjaGFubmVsIHRvIHRoZSBOTVIgY2FuIGJlIG9idGFpbmVkIHdpdGggdGhlIHtAbGluayAjZ2V0Q2hhbm5lbCgpfSBtZXRob2QKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q29tcG9uZW50VGVzdCBleHRlbmRzIENvbnRleHRUZXN0U3VwcG9ydCBpbXBsZW1lbnRzIEV4Y2hhbmdlTGlzdGVuZXIgeworCisgICAgcHJpdmF0ZSBTZXJ2aWNlTWl4IG5tcjsKKyAgICBwcml2YXRlIFNlcnZpY2VNaXhDb21wb25lbnQgY29tcG9uZW50OworICAgIHByaXZhdGUgQ2hhbm5lbCBjaGFubmVsOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm1yID0gbmV3IFNlcnZpY2VNaXgoKTsKKyAgICAgICAgbm1yLnNldEV4ZWN1dG9yRmFjdG9yeShjcmVhdGVFeGVjdXRvckZhY3RvcnkoKSk7CisgICAgICAgIG5tci5pbml0KCk7CisgICAgICAgIAorICAgICAgICBubXIuZ2V0TGlzdGVuZXJSZWdpc3RyeSgpLnJlZ2lzdGVyKHRoaXMsIFNlcnZpY2VIZWxwZXIuY3JlYXRlTWFwKCkpOworCisgICAgICAgIGNvbXBvbmVudCA9IG5ldyBTZXJ2aWNlTWl4Q29tcG9uZW50KCk7CisgICAgICAgIGNvbXBvbmVudC5zZXRObXIobm1yKTsKKworICAgICAgICBzdXBlci5zZXRVcCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZvciAoU2VydmljZU1peFByb2R1Y2VyIHByb2R1Y2VyIDogZmluZEVuZHBvaW50cyhTZXJ2aWNlTWl4UHJvZHVjZXIuY2xhc3MpKSB7CisgICAgICAgICAgICBpZiAocHJvZHVjZXIuZ2V0Q29udGludWF0aW9ucygpLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBsZXQncyB3YWl0IGZvciBhIG1vbWVudCB0byBnaXZlIHRoZSBsYXN0IGV4Y2hhbmdlcyB0aGUgdGltZSB0byBnZXQgRG9uZQorICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCg1MDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJUaGVyZSBzaG91bGQgYmUgbm8gbW9yZSBwZW5kaW5nIENhbWVsIGV4Y2hhbmdlcyBpbiB0aGUgcHJvZHVjZXIgZW5kcG9pbnRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwcm9kdWNlci5nZXRDb250aW51YXRpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5tci5zaHV0ZG93bigpOworICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgIH0KKworICAgIHByaXZhdGUgPEUgZXh0ZW5kcyBFbmRwb2ludD4gTGlzdDxFPiBmaW5kRW5kcG9pbnRzKENsYXNzPEU+IHR5cGUpIHsKKyAgICAgICAgTGlzdDxFPiByZXN1bHQgPSBuZXcgTGlua2VkTGlzdDxFPigpOworCisgICAgICAgIGZvciAoRW5kcG9pbnQgZW5kcG9pbnQgOiBubXIuZ2V0RW5kcG9pbnRSZWdpc3RyeSgpLmdldFNlcnZpY2VzKCkpIHsKKyAgICAgICAgICAgIGlmIChlbmRwb2ludCBpbnN0YW5jZW9mIEludGVybmFsRW5kcG9pbnRXcmFwcGVyKSB7CisgICAgICAgICAgICAgICAgSW50ZXJuYWxFbmRwb2ludFdyYXBwZXIgd3JhcHBlciA9IChJbnRlcm5hbEVuZHBvaW50V3JhcHBlcikgZW5kcG9pbnQ7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUuaXNBc3NpZ25hYmxlRnJvbSh3cmFwcGVyLmdldEVuZHBvaW50KCkuZ2V0Q2xhc3MoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZCh0eXBlLmNhc3Qod3JhcHBlci5nZXRFbmRwb2ludCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDcmVhdGUgdGhlIEV4ZWN1dG9yRmFjdG9yeSBmb3IgdGhlIHVuaXQgdGVzdAorICAgICAqIGJhc2VkIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdXNlZCBpbiBTZXJ2aWNlTWl4IDQKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgRXhlY3V0b3JGYWN0b3J5IGNyZWF0ZUV4ZWN1dG9yRmFjdG9yeSgpIHsKKyAgICAgICAgRXhlY3V0b3JGYWN0b3J5SW1wbCBmYWN0b3J5ID0gbmV3IEV4ZWN1dG9yRmFjdG9yeUltcGwoKTsKKworICAgICAgICBFeGVjdXRvckNvbmZpZyBjb25maWcgPSBmYWN0b3J5LmdldERlZmF1bHRDb25maWcoKTsKKyAgICAgICAgY29uZmlnLnNldENvcmVQb29sU2l6ZSgxKTsKKyAgICAgICAgY29uZmlnLnNldE1heGltdW1Qb29sU2l6ZSgxNik7CisgICAgICAgIGNvbmZpZy5zZXRRdWV1ZVNpemUoMCk7CisgICAgICAgIGNvbmZpZy5zZXRCeXBhc3NJZlN5bmNocm9ub3VzKHRydWUpOworCisgICAgICAgIHJldHVybiBmYWN0b3J5OworICAgIH07CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgSm5kaVJlZ2lzdHJ5IGNyZWF0ZVJlZ2lzdHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEpuZGlSZWdpc3RyeSByZWdpc3RyeSA9IHN1cGVyLmNyZWF0ZVJlZ2lzdHJ5KCk7CisgICAgICAgIHJlZ2lzdHJ5LmJpbmQoIm5tciIsIGNvbXBvbmVudCk7CisgICAgICAgIHJldHVybiByZWdpc3RyeTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBjbGllbnQgY2hhbm5lbCB0byBhY2Nlc3MgdGhlIE5NUiB1c2VkIGZvciB0ZXN0aW5nCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBjbGllbnQgY2hhbm5lbAorICAgICAqLworICAgIHByb3RlY3RlZCBDaGFubmVsIGdldENoYW5uZWwoKSB7CisgICAgICAgIGlmIChjaGFubmVsID09IG51bGwpIHsKKyAgICAgICAgICAgIGNoYW5uZWwgPSBubXIuY3JlYXRlQ2hhbm5lbCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNoYW5uZWw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZXhjaGFuZ2VTZW50KEV4Y2hhbmdlIGV4Y2hhbmdlKSB7CisgICAgICAgIC8vIGdyYWNpb3VzbHkgZG8gbm90aGluZworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGV4Y2hhbmdlRGVsaXZlcmVkKEV4Y2hhbmdlIGV4Y2hhbmdlKSB7CisgICAgICAgIC8vIGdyYWNpb3VzbHkgZG8gbm90aGluZworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGV4Y2hhbmdlRmFpbGVkKEV4Y2hhbmdlIGV4Y2hhbmdlKSB7CisgICAgICAgIC8vIGdyYWNpb3VzbHkgZG8gbm90aGluZworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0F0dGFjaG1lbnRUZXN0LmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9BdHRhY2htZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTQ0YmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9BdHRhY2htZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXI7CisKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlByb3h5OworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlVuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb247CisKK2ltcG9ydCBqYXZheC5hY3RpdmF0aW9uLkRhdGFIYW5kbGVyOworaW1wb3J0IGphdmF4Lm1haWwudXRpbC5CeXRlQXJyYXlEYXRhU291cmNlOworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLndzLkJpbmRpbmdQcm92aWRlcjsKK2ltcG9ydCBqYXZheC54bWwud3MuSG9sZGVyOworaW1wb3J0IGphdmF4LnhtbC53cy5zb2FwLlNPQVBCaW5kaW5nOworCitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5DYW1lbENvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5idWlsZGVyLlJvdXRlQnVpbGRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLnNwcmluZy5TcHJpbmdDYW1lbENvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC50ZXN0LkNhbWVsVGVzdFN1cHBvcnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1c0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZW5kcG9pbnQuQ2xpZW50OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LkNsaWVudEltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4d3MuSmF4V3NDbGllbnRQcm94eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5qYXh3cy5iaW5kaW5nLnNvYXAuU09BUEJpbmRpbmdJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHdzLnN1cHBvcnQuSmF4V3NFbmRwb2ludEltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4d3Muc3VwcG9ydC5KYXhXc1NlcnZpY2VGYWN0b3J5QmVhbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5taW1lLlRlc3RNdG9tOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UuU2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLmZhY3RvcnkuUmVmbGVjdGlvblNlcnZpY2VGYWN0b3J5QmVhbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkVuZHBvaW50SW5mbzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdFhtbEFwcGxpY2F0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5DbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQ7CisKK3B1YmxpYyBjbGFzcyBBdHRhY2htZW50VGVzdCBleHRlbmRzIENhbWVsVGVzdFN1cHBvcnQgeworICAgIAorICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfQUREUkVTUyA9ICJsb2NhbDovL3NteC9hdHRhY2htZW50IjsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBST1VURVJfQUREUkVTUyA9ICJodHRwOi8vbG9jYWxob3N0OjkwMzYvbWltZS10ZXN0IjsKKyAgICAKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0NMQVNTID0gInNlcnZpY2VDbGFzcz1vcmcuYXBhY2hlLmN4Zi5taW1lLlRlc3RNdG9tIjsKKyAgICAgCisgICAgCisgICAgCisgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBNVE9NX1BPUlQgPSBuZXcgUU5hbWUoCisgICAgICAgICAgICAiaHR0cDovL2N4Zi5hcGFjaGUub3JnL21pbWUiLCAiVGVzdE10b21Qb3J0Iik7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIE1UT01fU0VSVklDRSA9IG5ldyBRTmFtZSgKKyAgICAgICAgICAgICJodHRwOi8vY3hmLmFwYWNoZS5vcmcvbWltZSIsICJUZXN0TXRvbVNlcnZpY2UiKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgQWJzdHJhY3RYbWxBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OworICAgIAorICAgIAorICAgICAgICAgICAKKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQgPSBjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsgICAgICAgIAorICAgICAgICBhc3NlcnROb3ROdWxsKCJTaG91bGQgaGF2ZSBjcmVhdGVkIGEgdmFsaWQgc3ByaW5nIGNvbnRleHQiLCBhcHBsaWNhdGlvbkNvbnRleHQpOworCisgICAgICAgIHN0YXJ0U2VydmljZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAKKyAgICAgICAgaWYgKGFwcGxpY2F0aW9uQ29udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQuZGVzdHJveSgpOworICAgICAgICB9CisgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHN0YXJ0U2VydmljZSgpIHsKKyAgICAgICAgLy9zdGFydCBhIHNlcnZpY2UKKyAgICAgICAgT2JqZWN0IGltcGxlbWVudG9yID0gbmV3IE10b21JbXBsKCk7CisgICAgICAgIAorICAgICAgICBqYXZheC54bWwud3MuRW5kcG9pbnQucHVibGlzaChTRVJWSUNFX0FERFJFU1MsIGltcGxlbWVudG9yKTsKKyAgICB9CisgICAgCisgICAKKyAgCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgeworICAgICAgICAgICAgICAgIGZyb20oImN4ZjpiZWFuOnJvdXRlckVuZHBvaW50IikudG8oInNteDp0ZXN0RW5kcG9pbnQiKTsKKyAgICAgICAgICAgICAgICBmcm9tKCJzbXg6dGVzdEVuZHBvaW50IikudG8oImN4ZjpiZWFuOnNlcnZpY2VFbmRwb2ludCIpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgQ2FtZWxDb250ZXh0IGNyZWF0ZUNhbWVsQ29udGV4dCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gU3ByaW5nQ2FtZWxDb250ZXh0LnNwcmluZ0NhbWVsQ29udGV4dChhcHBsaWNhdGlvbkNvbnRleHQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBwcm90ZWN0ZWQgQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQoIm9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9zcHJpbmcvbXRvbS54bWwiKTsKKyAgICB9CisKKyAgICAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXR0YWNobWVudCgpIHRocm93cyBFeGNlcHRpb24geyAgCisgICAgICAgIFRlc3RNdG9tIG10b21Qb3J0ID0gY3JlYXRlUG9ydChNVE9NX1NFUlZJQ0UsIE1UT01fUE9SVCwgVGVzdE10b20uY2xhc3MsCisgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEhvbGRlcjxEYXRhSGFuZGxlcj4gcGFyYW0gPSBuZXcgSG9sZGVyPERhdGFIYW5kbGVyPigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IG5ldyBEYXRhSGFuZGxlcihuZXcgQnl0ZUFycmF5RGF0YVNvdXJjZSgiZm9vYmFyIi5nZXRCeXRlcygpLCAKKyAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBIb2xkZXI8U3RyaW5nPiBuYW1lID0gbmV3IEhvbGRlcjxTdHJpbmc+KCJjYWxsIGRldGFpbCIpOworICAgICAgICAgICAgbXRvbVBvcnQudGVzdFhvcChuYW1lLCBwYXJhbSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNhbGwgZGV0YWlsZm9vYmFyIiwKKyAgICAgICAgICAgICAgICAgICAgbmFtZS52YWx1ZSk7CisgICAgICAgICAgICBhc3NlcnROb3ROdWxsKHBhcmFtLnZhbHVlKTsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGJpcyA9IHBhcmFtLnZhbHVlLmdldERhdGFTb3VyY2UoKS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICAgICAgYnl0ZSBiW10gPSBuZXcgYnl0ZVsxMF07CisgICAgICAgICAgICBiaXMucmVhZChiLCAwLCAxMCk7CisgICAgICAgICAgICBTdHJpbmcgYXR0YWNoQ29udGVudCA9IG5ldyBTdHJpbmcoYik7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoYXR0YWNoQ29udGVudCwgInRlc3Rmb29iYXIiKTsKKyAgICAgICAgfSBjYXRjaCAoVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgKEV4Y2VwdGlvbikgZXguZ2V0Q2F1c2UoKTsKKyAgICAgICAgfSAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgfQorICAgIAorICAgIHByaXZhdGUgPFQ+IFQgY3JlYXRlUG9ydChRTmFtZSBzZXJ2aWNlTmFtZSwgUU5hbWUgcG9ydE5hbWUsCisgICAgICAgICAgICBDbGFzczxUPiBzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UsIGJvb2xlYW4gZW5hYmxlTVRPTSkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEJ1cyBidXMgPSBCdXNGYWN0b3J5LmdldERlZmF1bHRCdXMoKTsKKyAgICAgICAgUmVmbGVjdGlvblNlcnZpY2VGYWN0b3J5QmVhbiBzZXJ2aWNlRmFjdG9yeSA9IG5ldyBKYXhXc1NlcnZpY2VGYWN0b3J5QmVhbigpOworICAgICAgICBzZXJ2aWNlRmFjdG9yeS5zZXRCdXMoYnVzKTsKKyAgICAgICAgc2VydmljZUZhY3Rvcnkuc2V0U2VydmljZU5hbWUoc2VydmljZU5hbWUpOworICAgICAgICBzZXJ2aWNlRmFjdG9yeS5zZXRTZXJ2aWNlQ2xhc3Moc2VydmljZUVuZHBvaW50SW50ZXJmYWNlKTsKKyAgICAgICAgc2VydmljZUZhY3Rvcnkuc2V0V3NkbFVSTChnZXRDbGFzcygpLmdldFJlc291cmNlKCIvd3NkbC9tdG9tX3hvcC53c2RsIikpOworICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBzZXJ2aWNlRmFjdG9yeS5jcmVhdGUoKTsKKyAgICAgICAgRW5kcG9pbnRJbmZvIGVpID0gc2VydmljZS5nZXRFbmRwb2ludEluZm8ocG9ydE5hbWUpOworICAgICAgICBKYXhXc0VuZHBvaW50SW1wbCBqYXh3c0VuZHBvaW50ID0gbmV3IEpheFdzRW5kcG9pbnRJbXBsKGJ1cywgc2VydmljZSwKKyAgICAgICAgICAgICAgICBlaSk7CisgICAgICAgIFNPQVBCaW5kaW5nIGpheFdzU29hcEJpbmRpbmcgPSBuZXcgU09BUEJpbmRpbmdJbXBsKGVpLmdldEJpbmRpbmcoKSwgamF4d3NFbmRwb2ludCk7CisgICAgICAgIGpheFdzU29hcEJpbmRpbmcuc2V0TVRPTUVuYWJsZWQoZW5hYmxlTVRPTSk7CisKKyAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnRJbXBsKGJ1cywgamF4d3NFbmRwb2ludCk7CisgICAgICAgIEludm9jYXRpb25IYW5kbGVyIGloID0gbmV3IEpheFdzQ2xpZW50UHJveHkoY2xpZW50LCBqYXh3c0VuZHBvaW50CisgICAgICAgICAgICAgICAgLmdldEpheHdzQmluZGluZygpKTsKKyAgICAgICAgT2JqZWN0IG9iaiA9IFByb3h5Lm5ld1Byb3h5SW5zdGFuY2Uoc2VydmljZUVuZHBvaW50SW50ZXJmYWNlCisgICAgICAgICAgICAgICAgLmdldENsYXNzTG9hZGVyKCksIG5ldyBDbGFzc1tdIHtzZXJ2aWNlRW5kcG9pbnRJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRpbmdQcm92aWRlci5jbGFzc30sIGloKTsKKyAgICAgICAgcmV0dXJuIHNlcnZpY2VFbmRwb2ludEludGVyZmFjZS5jYXN0KG9iaik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvQ2FtZWxBc3luY1JvdXRlVGVzdC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvQ2FtZWxBc3luY1JvdXRlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNDhjZmEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9DYW1lbEFzeW5jUm91dGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OworCitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLlByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmJ1aWxkZXIuUm91dGVCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuY29tcG9uZW50Lm1vY2suTW9ja0VuZHBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlN0YXR1czsKKworLyoqCisgKiBUZXN0IGNhc2UgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIGNvbXBvbmVudCBiZWhhdmVzIHByb3Blcmx5IGlmIHRoZSBDYW1lbCByb3V0ZSBpcyB1c2luZworICogYXN5bmNocm9ub3VzIGVsZW1lbnRzIChlLmcuIHRocmVhZHMgb3Igc2VkYSBxdWV1ZXMpCisgKi8KK3B1YmxpYyBjbGFzcyBDYW1lbEFzeW5jUm91dGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnRUZXN0IHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIQU5ETEVEX0JZX1RIUkVBRCA9ICJIYW5kbGVkQnlUaHJlYWQiOworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT1VOVCA9IDEwMDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBERUxBWSA9IDYwMDAwOworCisgICAgLyogTGF0Y2ggdG8gY291bnQgTk1SIERvbmUgRXhjaGFuZ2VzICovCisgICAgcHJpdmF0ZSBDb3VudERvd25MYXRjaCBkb25lOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKworICAgICAgICBkb25lID0gbmV3IENvdW50RG93bkxhdGNoKENPVU5UKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZWxUaHJlYWRzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgZXhwZWN0RGVmYXVsdE1lc3NhZ2VDb3VudCgibW9jazpzZW50Iik7CisgICAgICAgIGV4cGVjdERlZmF1bHRNZXNzYWdlQ291bnQoIm1vY2s6dGhyZWFkcyIpLndoZW5BbnlFeGNoYW5nZVJlY2VpdmVkKG5ldyBBc3NlcnRIYW5kbGVkQnlDYW1lbFRocmVhZFByb2Nlc3NvcigpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IENPVU5UIDsgaSsrKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZS5hc3luY1NlbmRCb2R5KCJkaXJlY3Q6dGhyZWFkcyIsICJTaW1wbGUgbWVzc2FnZSBib2R5ICIgKyBpKTsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydE1vY2tFbmRwb2ludHNTYXRpc2ZpZWQoKTsKKworICAgICAgICBhc3NlcnRUcnVlKCJBbGwgTk1SIGV4Y2hhbmdlcyBzaG91bGQgaGF2ZSBiZWVuIG1hcmtlZCBET05FIiwKKyAgICAgICAgICAgICAgICAgICBkb25lLmF3YWl0KERFTEFZLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZWxTZWRhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgZXhwZWN0RGVmYXVsdE1lc3NhZ2VDb3VudCgibW9jazpzZW50Iik7CisgICAgICAgIGV4cGVjdERlZmF1bHRNZXNzYWdlQ291bnQoIm1vY2s6c2VkYSIpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IENPVU5UIDsgaSsrKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZS5hc3luY1NlbmRCb2R5KCJzZWRhOnNlZGEiLCAiU2ltcGxlIG1lc3NhZ2UgYm9keSAiICsgaSk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRNb2NrRW5kcG9pbnRzU2F0aXNmaWVkKCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiQWxsIE5NUiBleGNoYW5nZXMgc2hvdWxkIGhhdmUgYmVlbiBtYXJrZWQgRE9ORSIsCisgICAgICAgICAgICAgICAgICAgZG9uZS5hd2FpdChERUxBWSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDb25maWd1cmUgdGhlIG1vY2sgZW5kcG9pbnQgdG8gZXhwZWN0IHtAdmFsdWUgI0NPVU5UfSBtZXNzYWdlcyB0byBhcnJpdmUgaW4ge0B2YWx1ZSAjREVMQVl9bXMKKyAgICAgKi8KKyAgICBwcml2YXRlIE1vY2tFbmRwb2ludCBleHBlY3REZWZhdWx0TWVzc2FnZUNvdW50KFN0cmluZyBlbmRwb2ludCkgeworICAgICAgICBmaW5hbCBNb2NrRW5kcG9pbnQgbW9jayA9IGdldE1vY2tFbmRwb2ludChlbmRwb2ludCk7CisgICAgICAgIG1vY2suc2V0UmVzdWx0V2FpdFRpbWUoREVMQVkpOworICAgICAgICBtb2NrLmV4cGVjdGVkTWVzc2FnZUNvdW50KENPVU5UKTsKKyAgICAgICAgcmV0dXJuIG1vY2s7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIoKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgZnJvbSgiZGlyZWN0OnRocmVhZHMiKS50bygibW9jazpzZW50IikudG8oIm5tcjp0aHJlYWRzIik7CisgICAgICAgICAgICAgICAgZnJvbSgibm1yOnRocmVhZHMiKQorICAgICAgICAgICAgICAgICAgICAudGhyZWFkcyg1KQorICAgICAgICAgICAgICAgICAgICAucHJvY2VzcyhuZXcgUHJvY2Vzc29yKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcHJvY2VzcyhFeGNoYW5nZSBleGNoYW5nZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjaGFuZ2Uuc2V0UHJvcGVydHkoSEFORExFRF9CWV9USFJFQUQsIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAudG8oIm1vY2s6dGhyZWFkcyIpOworCisgICAgICAgICAgICAgICAgZnJvbSgic2VkYTpzZWRhP2NvbmN1cnJlbnRDb25zdW1lcnM9MTAiKS50bygibW9jazpzZW50IikudG8oIm5tcjpzZWRhIik7CisgICAgICAgICAgICAgICAgZnJvbSgibm1yOnNlZGEiKS50bygic2VkYTpzZWRhLWludGVybmFsP3dhaXRGb3JUYXNrVG9Db21wbGV0ZT1OZXZlciIpOworICAgICAgICAgICAgICAgIGZyb20oInNlZGE6c2VkYS1pbnRlcm5hbCIpLnRvKCJtb2NrOnNlZGEiKTsKKworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGV4Y2hhbmdlRGVsaXZlcmVkKG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlIGV4Y2hhbmdlKSB7CisgICAgICAgIGlmIChleGNoYW5nZS5nZXRTdGF0dXMoKS5lcXVhbHMoU3RhdHVzLkRvbmUpKSB7CisgICAgICAgICAgICBkb25lLmNvdW50RG93bigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBQcm9jZXNzb3IgdG8gZW5zdXJlIHRoYXQgdGhlIGV4Y2hhbmdlIGhhcyBiZWVuIGhhbmRsZWQgYnkgYSBDYW1lbCB0aHJlYWQgaW5zdGVhZCBvZiBhbiBOTVIgdGhyZWFkCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgQXNzZXJ0SGFuZGxlZEJ5Q2FtZWxUaHJlYWRQcm9jZXNzb3IgaW1wbGVtZW50cyBQcm9jZXNzb3IgeworCisgICAgICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoRXhjaGFuZ2UgZXhjaGFuZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgVGhyZWFkIHRocmVhZCA9IGV4Y2hhbmdlLmdldFByb3BlcnR5KEhBTkRMRURfQllfVEhSRUFELCBUaHJlYWQuY2xhc3MpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgicHJvY2Vzc29yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdGhlIENhbWVsICd0aHJlYWRzJyB0aHJlYWQgcG9vbCBpbnN0ZWFkIG9mICIgKyB0aHJlYWQuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuZ2V0TmFtZSgpLmNvbnRhaW5zKCJDYW1lbCIpICYmIHRocmVhZC5nZXROYW1lKCkuY29udGFpbnMoIlRocmVhZCIpKTsKKyAgICAgICAgfQorCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvQ2FtZWxUcnlDYXRjaFRlc3QuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0NhbWVsVHJ5Q2F0Y2hUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY3YmJkMAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0NhbWVsVHJ5Q2F0Y2hUZXN0LmphdmEKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yOworCitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLlByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmJ1aWxkZXIuUm91dGVCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuY29tcG9uZW50Lm1vY2suTW9ja0VuZHBvaW50OworCisvKioKKyAqIEEgdmVyeSBiYXNpYyBOTVIgdGVzdCwganVzdCB0ZXN0aW5nIGlmIHRoZSBFeGNoYW5nZSBjYW4gZmxvdyB0aHJvdWdoIHRoZSBOTVIKKyAqIGZyb20gb25lIENhbWVsIHJvdXRlIHRvIHRoZSBuZXh0IG9uZQorICovCitwdWJsaWMgY2xhc3MgQ2FtZWxUcnlDYXRjaFRlc3QgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfTUVTU0FHRSA9ICJTaW1wbGUgbWVzc2FnZSBib2R5IjsKKworICAgIHB1YmxpYyB2b2lkIHRlc3RJbk9ubHlUcnlDYXRjaCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgICAgIE1vY2tFbmRwb2ludCBtb2NrID0gZ2V0TW9ja0VuZHBvaW50KCJtb2NrOmNhdWdodCIpOworICAgICAgICBtb2NrLmV4cGVjdGVkTWVzc2FnZUNvdW50KDEpOworCisgICAgICAgIHRlbXBsYXRlLnNlbmRCb2R5KCJkaXJlY3Q6aW5vbmx5IiwgUkVRVUVTVF9NRVNTQUdFKTsKKworICAgICAgICBhc3NlcnRNb2NrRW5kcG9pbnRzU2F0aXNmaWVkKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEluT3V0VHJ5Q2F0Y2goKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgICAgICBNb2NrRW5kcG9pbnQgbW9jayA9IGdldE1vY2tFbmRwb2ludCgibW9jazpjYXVnaHQiKTsKKyAgICAgICAgbW9jay5leHBlY3RlZE1lc3NhZ2VDb3VudCgxKTsKKworICAgICAgICB0ZW1wbGF0ZS5yZXF1ZXN0Qm9keSgiZGlyZWN0Omlub3V0IiwgUkVRVUVTVF9NRVNTQUdFKTsKKworICAgICAgICBhc3NlcnRNb2NrRW5kcG9pbnRzU2F0aXNmaWVkKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIoKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgZnJvbSgiZGlyZWN0Omlub25seSIpCisgICAgICAgICAgICAgICAgICAgIC5kb1RyeSgpCisgICAgICAgICAgICAgICAgICAgICAgICAudG8oIm5tcjp0aHJvd3NFeGNlcHRpb24iKQorICAgICAgICAgICAgICAgICAgICAuZG9DYXRjaChDdXN0b21CdXNpbmVzc0V4Y2VwdGlvbi5jbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIC50bygibW9jazpjYXVnaHQiKTsKKworICAgICAgICAgICAgICAgIGZyb20oImRpcmVjdDppbm91dCIpCisgICAgICAgICAgICAgICAgICAgIC5kb1RyeSgpCisgICAgICAgICAgICAgICAgICAgICAgICAudG8oIm5tcjp0aHJvd3NFeGNlcHRpb24iKQorICAgICAgICAgICAgICAgICAgICAuZG9DYXRjaChDdXN0b21CdXNpbmVzc0V4Y2VwdGlvbi5jbGFzcykKKyAgICAgICAgICAgICAgICAgICAgICAgIC50bygibW9jazpjYXVnaHQiKTsKKworICAgICAgICAgICAgICAgIGZyb20oIm5tcjp0aHJvd3NFeGNlcHRpb24iKQorICAgICAgICAgICAgICAgICAgICAuZXJyb3JIYW5kbGVyKG5vRXJyb3JIYW5kbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihuZXcgQ3VzdG9tQnVzaW5lc3NFeGNlcHRpb24oKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDdXN0b20gYnVzaW5lc3MgZXhjZXB0aW9uIGZvciB0ZXN0aW5nIHB1cnBvc2VzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgQ3VzdG9tQnVzaW5lc3NFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvQ3hmTWVzc2FnZVRlc3QuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0N4Zk1lc3NhZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyODAzMgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0N4Zk1lc3NhZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IGphdmEubmV0LlVSTDsKKworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLndzLkVuZHBvaW50OworaW1wb3J0IGphdmF4LnhtbC53cy5Ib2xkZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmJ1aWxkZXIuUm91dGVCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwudGVzdC5DYW1lbFNwcmluZ1Rlc3RTdXBwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuQ2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LlNlcnZlckltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZnJvbnRlbmQuQ2xpZW50UHJveHk7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ0luSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ091dEludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uU2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5DbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQ7CisKKworcHVibGljIGNsYXNzIEN4Zk1lc3NhZ2VUZXN0IGV4dGVuZHMgQ2FtZWxTcHJpbmdUZXN0U3VwcG9ydCB7CisgICAgICAgCisgICAgCisgICAgcHJpdmF0ZSBTZXJ2ZXJJbXBsIHNlcnZlcjsKKworICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLnNldFVwKCk7ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgc3RhcnRTZXJ2aWNlKCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIENsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4dCBjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0KCJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL0N4Zk1lc3NhZ2VCZWFucy54bWwiKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBhc3NlcnRWYWxpZENvbnRleHQoQ2FtZWxDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiTm8gY29udGV4dCBmb3VuZCEiLCBjb250ZXh0KTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBzdGFydFNlcnZpY2UoKSB7CisgICAgICAgICBPYmplY3QgaW1wbGVtZW50b3IgPSBuZXcgUGVyc29uSW1wbCgpOworICAgICAgICBTdHJpbmcgYWRkcmVzcyA9ICJodHRwOi8vbG9jYWxob3N0OjE5MDAwL1BlcnNvblNlcnZpY2UvIjsKKyAgICAgICAgRW5kcG9pbnQucHVibGlzaChhZGRyZXNzLCBpbXBsZW1lbnRvcik7CisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgc2VydmVyLnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgIH0KKyAgCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgeworICAgICAgICAgICAgICAgIC8vZnJvbShyb3V0ZXJFbmRwb2ludFVSSSkudG8oInNteDp0ZXN0RW5kcG9pbnQiKTsvLyBsaWtlIHdoYXQgZG8gaW4gYmluZGluZyBjb21wb25lbnQKKyAgICAgICAgICAgICAgICAvL2Zyb20oInNteDp0ZXN0RW5kcG9pbnQiKS50byhzZXJ2aWNlRW5kcG9pbnRVUkkpOy8vIGxpa2Ugd2hhdCBkbyBpbiBzZQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW52b2tpbmdTZXJ2aWNlRnJvbUNYRkNsaWVudCgpIHRocm93cyBFeGNlcHRpb24geyAgCisgICAgIAorICAgICAgICBVUkwgd3NkbFVSTCA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZSgicGVyc29uLndzZGwiKTsKKyAgICAgICAgCisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHdzZGxVUkwpOworICAgICAgICBQZXJzb25TZXJ2aWNlIHNzID0gbmV3IFBlcnNvblNlcnZpY2Uod3NkbFVSTCwgbmV3IFFOYW1lKCJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdCIsIAorICAgICAgICAgICAgIlBlcnNvblNlcnZpY2UiKSk7CisgICAgICAgIFBlcnNvbiBjbGllbnQgPSBzcy5nZXRTb2FwKCk7CisgICAgICAgIENsaWVudFByb3h5LmdldENsaWVudChjbGllbnQpLmdldE91dEludGVyY2VwdG9ycygpLmFkZChuZXcgTG9nZ2luZ091dEludGVyY2VwdG9yKCkpOworICAgICAgICBDbGllbnRQcm94eS5nZXRDbGllbnQoY2xpZW50KS5nZXRJbkludGVyY2VwdG9ycygpLmFkZChuZXcgTG9nZ2luZ0luSW50ZXJjZXB0b3IoKSk7CisgICAgICAgIEhvbGRlcjxTdHJpbmc+IHBlcnNvbklkID0gbmV3IEhvbGRlcjxTdHJpbmc+KCk7CisgICAgICAgIHBlcnNvbklkLnZhbHVlID0gIndvcmxkIjsKKyAgICAgICAgSG9sZGVyPFN0cmluZz4gc3NuID0gbmV3IEhvbGRlcjxTdHJpbmc+KCk7CisgICAgICAgIEhvbGRlcjxTdHJpbmc+IG5hbWUgPSBuZXcgSG9sZGVyPFN0cmluZz4oKTsKKyAgICAgICAgY2xpZW50LmdldFBlcnNvbihwZXJzb25JZCwgc3NuLCBuYW1lKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3ZSBzaG91bGQgZ2V0IHRoZSByaWdodCBhbnN3ZXIgZnJvbSByb3V0ZXIiLCAiQm9uam91ciIsIG5hbWUudmFsdWUpOworICAgIH0KKyAgICAKKyAgICAgICAgCisgICAgCit9CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9FeGNlcHRpb25IYW5kbGVUZXN0LmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9FeGNlcHRpb25IYW5kbGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhYjZmOAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0V4Y2VwdGlvbkhhbmRsZVRlc3QuamF2YQpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yOworCitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqYXZheC5uYW1pbmcuQ29udGV4dDsKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworaW1wb3J0IGphdmF4LnhtbC53cy5CaW5kaW5nUHJvdmlkZXI7CitpbXBvcnQgamF2YXgueG1sLndzLnNvYXAuU09BUEJpbmRpbmc7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLkNhbWVsQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmJ1aWxkZXIuUm91dGVCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuY29tcG9uZW50LmN4Zi50cmFuc3BvcnQuQ2FtZWxUcmFuc3BvcnRGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuaW1wbC5EZWZhdWx0Q2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwudGVzdC5DYW1lbFRlc3RTdXBwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1czsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5CdXNGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmZyb250ZW5kLkNsaWVudFByb3h5OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LkNvbmR1aXRJbml0aWF0b3JNYW5hZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkJhZFJlY29yZExpdEZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuR3JlZXRlckltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuTm9TdWNoQ29kZUxpdEZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLlNPQVBTZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmNvcmUuU2VydmljZU1peDsKKworCitwdWJsaWMgY2xhc3MgRXhjZXB0aW9uSGFuZGxlVGVzdCBleHRlbmRzIENhbWVsVGVzdFN1cHBvcnQgeworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJPVVRFUl9BRERSRVNTID0gImNhbWVsOi8vamV0dHk6aHR0cDovL2xvY2FsaG9zdDoxOTAwMC9Tb2FwQ29udGV4dC9Tb2FwUG9ydCI7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9BRERSRVNTID0gImxvY2FsOi8vc214L2hlbGxvX3dvcmxkIjsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0NMQVNTID0gInNlcnZpY2VDbGFzcz1vcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC5HcmVldGVyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NETF9MT0NBVElPTiA9ICJ3c2RsVVJMPS93c2RsL2hlbGxvX3dvcmxkLndzZGwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX05BTUUgPSAic2VydmljZU5hbWU9JTdiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwJTdkU09BUFNlcnZpY2UiOworCisgICAgcHJpdmF0ZSBTdHJpbmcgcm91dGVyRW5kcG9pbnRVUkkgPSAiY3hmOi8vIiArIFJPVVRFUl9BRERSRVNTICsgIj8iICsgU0VSVklDRV9DTEFTUyAKKyAgICAgICAgKyAiJiIgKyBXU0RMX0xPQ0FUSU9OICsgIiYiICsgU0VSVklDRV9OQU1FICsgIiZkYXRhRm9ybWF0PVBPSk8mYnVzPSNCdXMiOworICAgIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VFbmRwb2ludFVSSSA9ICJjeGY6Ly8iICsgU0VSVklDRV9BRERSRVNTICsgIj8iICsgU0VSVklDRV9DTEFTUworICAgICAgICArICImIiArIFdTRExfTE9DQVRJT04gKyAiJiIgKyBTRVJWSUNFX05BTUUgKyAiJmRhdGFGb3JtYXQ9UE9KTyZidXM9I0J1cyI7CisKKyAgICBwcml2YXRlIENhbWVsQ29udGV4dCBjYW1lbENvbnRleHQ7CisgICAgcHJpdmF0ZSBTZXJ2aWNlTWl4Q29tcG9uZW50IHNteENvbXBvbmVudDsKKyAgICBwcml2YXRlIE5NUiBubXI7CisgICAgcHJpdmF0ZSBqYXZheC54bWwud3MuRW5kcG9pbnQgZW5kcG9pbnQ7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOyAgICAgICAgCisgICAgICAgIE9iamVjdCBpbXBsZW1lbnRvciA9IG5ldyBHcmVldGVySW1wbCgpOworICAgICAgICBlbmRwb2ludCA9IGphdmF4LnhtbC53cy5FbmRwb2ludC5wdWJsaXNoKFNFUlZJQ0VfQUREUkVTUywgaW1wbGVtZW50b3IpOworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAoY2FtZWxDb250ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNhbWVsQ29udGV4dC5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZHBvaW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGVuZHBvaW50LnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgICAgICAvLyBOb3Qgc3VyZSB3aHkgd2UgbmVlZCBhIHRpbWVvdXQgaGVyZQorICAgICAgICAvLyBidXQgaWYgd2UgZG9uJ3QsIHRoZSBqZXR0eSBzZXJ2ZXIgaXMgbm90IGZ1bGx5CisgICAgICAgIC8vIHN0b3BwZWQsIHNvIHRoZSBuZXh0IHRlc3QgZmFpbHMuIAorICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisgICAgfQorICAKKyAgICBwcm90ZWN0ZWQgUm91dGVCdWlsZGVyIGNyZWF0ZVJvdXRlQnVpbGRlcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjb25maWd1cmUoKSB7CisgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyKG5vRXJyb3JIYW5kbGVyKCkpOworICAgICAgICAgICAgICAgIGZyb20ocm91dGVyRW5kcG9pbnRVUkkpLnRvKCJzbXg6dGVzdEVuZHBvaW50Iik7Ly8gbGlrZSB3aGF0IGRvIGluIGJpbmRpbmcgY29tcG9uZW50CisgICAgICAgICAgICAgICAgZnJvbSgic214OnRlc3RFbmRwb2ludCIpLnRvKHNlcnZpY2VFbmRwb2ludFVSSSk7Ly8gbGlrZSB3aGF0IGRvIGluIHNlCisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBDYW1lbENvbnRleHQgY3JlYXRlQ2FtZWxDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGNhbWVsQ29udGV4dCA9IG5ldyBEZWZhdWx0Q2FtZWxDb250ZXh0KGNyZWF0ZUpuZGlDb250ZXh0KCkpOworICAgICAgICBCdXMgYnVzID0gQnVzRmFjdG9yeS5nZXREZWZhdWx0QnVzKCk7CisgICAgICAgIENhbWVsVHJhbnNwb3J0RmFjdG9yeSBjYW1lbFRyYW5zcG9ydEZhY3RvcnkgPSAoQ2FtZWxUcmFuc3BvcnRGYWN0b3J5KSBidXMuZ2V0RXh0ZW5zaW9uKENvbmR1aXRJbml0aWF0b3JNYW5hZ2VyLmNsYXNzKQorICAgICAgICAgICAgLmdldENvbmR1aXRJbml0aWF0b3IoQ2FtZWxUcmFuc3BvcnRGYWN0b3J5LlRSQU5TUE9SVF9JRCk7CisgICAgICAgIGNhbWVsVHJhbnNwb3J0RmFjdG9yeS5zZXRDYW1lbENvbnRleHQoY2FtZWxDb250ZXh0KTsKKyAgICAgICAgc214Q29tcG9uZW50ID0gbmV3IFNlcnZpY2VNaXhDb21wb25lbnQoKTsKKyAgICAgICAgbm1yID0gbmV3IFNlcnZpY2VNaXgoKTsKKyAgICAgICAgKChTZXJ2aWNlTWl4KW5tcikuaW5pdCgpOworICAgICAgICBzbXhDb21wb25lbnQuc2V0Tm1yKG5tcik7CisgICAgICAgIGNhbWVsQ29udGV4dC5hZGRDb21wb25lbnQoInNteCIsIHNteENvbXBvbmVudCk7CisgICAgICAgIHJldHVybiBjYW1lbENvbnRleHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIENvbnRleHQgY3JlYXRlSm5kaUNvbnRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgQ29udGV4dCBjdHggPSBzdXBlci5jcmVhdGVKbmRpQ29udGV4dCgpOworICAgICAgICBjdHguYmluZCgiQnVzIiwgQnVzRmFjdG9yeS5nZXREZWZhdWx0QnVzKCkpOworICAgICAgICByZXR1cm4gY3R4OyAgICAvL1RvIGNoYW5nZSBib2R5IG9mIG92ZXJyaWRkZW4gbWV0aG9kcyB1c2UgRmlsZSB8IFNldHRpbmdzIHwgRmlsZSBUZW1wbGF0ZXMuCisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkwgd3NkbCA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2UoIi93c2RsL2hlbGxvX3dvcmxkLndzZGwiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCh3c2RsKTsKKyAgICAgICAgU09BUFNlcnZpY2Ugc2VydmljZTEgPSBuZXcgU09BUFNlcnZpY2Uod3NkbCwgbmV3IFFOYW1lKAorICAgICAgICAgICAgICAgICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiLCAiU09BUFNlcnZpY2UiKSk7CisgICAgICAgIFFOYW1lIGVuZHBvaW50ID0gbmV3IFFOYW1lKCJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiLCAiU29hcFBvcnQiKTsKKyAgICAgICAgc2VydmljZTEuYWRkUG9ydChlbmRwb2ludCwgCisgICAgICAgICAgICAgICAgU09BUEJpbmRpbmcuU09BUDEySFRUUF9CSU5ESU5HLCAiaHR0cDovL2xvY2FsaG9zdDoxOTAwMC9Tb2FwQ29udGV4dC9Tb2FwUG9ydCIpOworICAgICAgICBHcmVldGVyIGdyZWV0ZXIgPSBzZXJ2aWNlMS5nZXRQb3J0KGVuZHBvaW50LCBHcmVldGVyLmNsYXNzKTsKKyAgICAgICAgQ2xpZW50UHJveHkuZ2V0Q2xpZW50KGdyZWV0ZXIpLmdldEluSW50ZXJjZXB0b3JzKCkuYWRkKG5ldyBMb2dnaW5nSW5JbnRlcmNlcHRvcigpKTsKKyAgICAgICAgQ2xpZW50UHJveHkuZ2V0Q2xpZW50KGdyZWV0ZXIpLmdldE91dEludGVyY2VwdG9ycygpLmFkZChuZXcgTG9nZ2luZ091dEludGVyY2VwdG9yKCkpOworICAgICAgICBTdHJpbmcgcmV0ID0gZ3JlZXRlci5zYXlIaSgpOworICAgICAgICBhc3NlcnRFcXVhbHMocmV0LCAiQm9uam91ciIpOworICAgICAgICBTdHJpbmcgbm9TdWNoQ29kZUZhdWx0ID0gIk5vU3VjaENvZGVMaXRGYXVsdCI7CisgICAgICAgIFN0cmluZyBiYWRSZWNvcmRGYXVsdCA9ICJCYWRSZWNvcmRMaXRGYXVsdCI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBncmVldGVyLnRlc3REb2NMaXRGYXVsdChub1N1Y2hDb2RlRmF1bHQpOworICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIE5vU3VjaENvZGVMaXRGYXVsdCBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoQ29kZUxpdEZhdWx0IG5zbGYpIHsKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwobnNsZi5nZXRGYXVsdEluZm8oKSk7CisgICAgICAgICAgICBhc3NlcnROb3ROdWxsKG5zbGYuZ2V0RmF1bHRJbmZvKCkuZ2V0Q29kZSgpKTsKKyAgICAgICAgfSAKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBncmVldGVyLnRlc3REb2NMaXRGYXVsdChiYWRSZWNvcmRGYXVsdCk7CisgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gQmFkUmVjb3JkTGl0RmF1bHQgZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKEJhZFJlY29yZExpdEZhdWx0IGJybGYpIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBCaW5kaW5nUHJvdmlkZXIgYnAgPSAoQmluZGluZ1Byb3ZpZGVyKWdyZWV0ZXI7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlQ29udGV4dCA9IGJwLmdldFJlc3BvbnNlQ29udGV4dCgpOworICAgICAgICAgICAgSW50ZWdlciByZXNwb25zZUNvZGUgPSAoSW50ZWdlcikgcmVzcG9uc2VDb250ZXh0LmdldChNZXNzYWdlLlJFU1BPTlNFX0NPREUpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgcmVzcG9uc2VDb2RlLmludFZhbHVlKCkpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoYnJsZi5nZXRGYXVsdEluZm8oKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkJhZFJlY29yZExpdEZhdWx0IiwgYnJsZi5nZXRGYXVsdEluZm8oKSk7CisgICAgICAgIH0KKyAgICB9IAorICAgIAorICAgIHB1YmxpYyB2b2lkIHRlc3RPbmV3YXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMIHdzZGwgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKCIvd3NkbC9oZWxsb193b3JsZC53c2RsIik7CisgICAgICAgIGFzc2VydE5vdE51bGwod3NkbCk7CisgICAgICAgIFNPQVBTZXJ2aWNlIHNlcnZpY2UxID0gbmV3IFNPQVBTZXJ2aWNlKHdzZGwsIG5ldyBRTmFtZSgKKyAgICAgICAgICAgICAgICAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIiwgIlNPQVBTZXJ2aWNlIikpOworICAgICAgICBRTmFtZSBlbmRwb2ludCA9IG5ldyBRTmFtZSgiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIiwgIlNvYXBQb3J0Iik7CisgICAgICAgIHNlcnZpY2UxLmFkZFBvcnQoZW5kcG9pbnQsIAorICAgICAgICAgICAgICAgIFNPQVBCaW5kaW5nLlNPQVAxMkhUVFBfQklORElORywgImh0dHA6Ly9sb2NhbGhvc3Q6MTkwMDAvU29hcENvbnRleHQvU29hcFBvcnQiKTsKKyAgICAgICAgR3JlZXRlciBncmVldGVyID0gc2VydmljZTEuZ2V0UG9ydChlbmRwb2ludCwgR3JlZXRlci5jbGFzcyk7CisgICAgICAgIENsaWVudFByb3h5LmdldENsaWVudChncmVldGVyKS5nZXRJbkludGVyY2VwdG9ycygpLmFkZChuZXcgTG9nZ2luZ0luSW50ZXJjZXB0b3IoKSk7CisgICAgICAgIENsaWVudFByb3h5LmdldENsaWVudChncmVldGVyKS5nZXRPdXRJbnRlcmNlcHRvcnMoKS5hZGQobmV3IExvZ2dpbmdPdXRJbnRlcmNlcHRvcigpKTsKKyAgICAgICAgZ3JlZXRlci5ncmVldE1lT25lV2F5KCJ0ZXN0IG9uZXdheSIpOworICAgICAgICAvLyBOZWVkIHRvIHNsZWVwIGEgd2hpbGUgYXMgQ2FtZWwgaXMgdXNpbmcgQXN5bmMgRW5naW5lLCAKKyAgICAgICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGNhbWVsIGNvbnRleHQgaXMgbm90IHNodXRkb3duIHJpZ2h0bHkuCisgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsgCisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRUcmFuc3BvcnRGYWN0b3J5RnJvbUJ1cygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBCdXMgYnVzID0gQnVzRmFjdG9yeS5nZXREZWZhdWx0QnVzKCk7CisgICAgICAgIGFzc2VydE5vdE51bGwoYnVzLmdldEV4dGVuc2lvbihDb25kdWl0SW5pdGlhdG9yTWFuYWdlci5jbGFzcykKKyAgICAgICAgICAgIC5nZXRDb25kdWl0SW5pdGlhdG9yKENhbWVsVHJhbnNwb3J0RmFjdG9yeS5UUkFOU1BPUlRfSUQpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9IZWxsb1NlcnZpY2UuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0hlbGxvU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGRiN2YKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9IZWxsb1NlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworcHVibGljIGludGVyZmFjZSBIZWxsb1NlcnZpY2UgeworICAgIFN0cmluZyBzYXlIZWxsbygpOworCisgICAgdm9pZCBwaW5nKCk7CisKKyAgICBTdHJpbmcgZWNobyhTdHJpbmcgdGV4dCk7Cit9CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9IZWxsb1NlcnZpY2VJbXBsLmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9IZWxsb1NlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdiZDIwZQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL0hlbGxvU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworcHVibGljIGNsYXNzIEhlbGxvU2VydmljZUltcGwgaW1wbGVtZW50cyBIZWxsb1NlcnZpY2UgeworICAgIHB1YmxpYyBTdHJpbmcgZWNobyhTdHJpbmcgdGV4dCkgeyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbCBmb3IgZWNobyB3aXRoICIgKyB0ZXh0KTsKKyAgICAgICAgcmV0dXJuIHRleHQgKyAiIGVjaG8iOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHBpbmcoKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgeworICAgICAgICByZXR1cm4gImhlbGxvIjsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL010b21JbXBsLmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9NdG9tSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzFjYmMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9NdG9tSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKKworaW1wb3J0IGphdmF4LmFjdGl2YXRpb24uRGF0YUhhbmRsZXI7CitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CitpbXBvcnQgamF2YXgubWFpbC51dGlsLkJ5dGVBcnJheURhdGFTb3VyY2U7CitpbXBvcnQgamF2YXgueG1sLndzLkhvbGRlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1pbWUudHlwZXMuWG9wU3RyaW5nVHlwZTsKKworQFdlYlNlcnZpY2Uoc2VydmljZU5hbWUgPSAiVGVzdE10b21TZXJ2aWNlIiwgCisgICAgICAgIHBvcnROYW1lID0gIlRlc3RNdG9tUG9ydCIsIAorICAgICAgICB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2N4Zi5hcGFjaGUub3JnL21pbWUiLCAKKyAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5jeGYubWltZS5UZXN0TXRvbSIsCisgICAgICAgICAgICB3c2RsTG9jYXRpb24gPSAidGVzdHV0aWxzL210b21feG9wLndzZGwiKQorcHVibGljIGNsYXNzIE10b21JbXBsIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0WG9wKEhvbGRlcjxTdHJpbmc+IG5hbWUsIEhvbGRlcjxEYXRhSGFuZGxlcj4gYXR0YWNoaW5mbykgeworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGJpcyA9IGF0dGFjaGluZm8udmFsdWUuZ2V0RGF0YVNvdXJjZSgpLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgICAgICBieXRlIGJbXSA9IG5ldyBieXRlWzZdOworICAgICAgICAgICAgYmlzLnJlYWQoYiwgMCwgNik7CisgICAgICAgICAgICBTdHJpbmcgYXR0YWNoQ29udGVudCA9IG5ldyBTdHJpbmcoYik7CisgICAgICAgICAgICBuYW1lLnZhbHVlID0gbmFtZS52YWx1ZSArIGF0dGFjaENvbnRlbnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJ5dGVBcnJheURhdGFTb3VyY2Ugc291cmNlID0gCisgICAgICAgICAgICAgICAgbmV3IEJ5dGVBcnJheURhdGFTb3VyY2UoKCJ0ZXN0IiArIGF0dGFjaENvbnRlbnQpLmdldEJ5dGVzKCksICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKKyAgICAgICAgICAgIGF0dGFjaGluZm8udmFsdWUgPSBuZXcgRGF0YUhhbmRsZXIoc291cmNlKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgcHVibGljIFhvcFN0cmluZ1R5cGUgdGVzdFhvcFN0cmluZyhYb3BTdHJpbmdUeXBlIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL011bHRpcGxlUHJvZHVjZXJzVGVzdC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvTXVsdGlwbGVQcm9kdWNlcnNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkMzkyYgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL011bHRpcGxlUHJvZHVjZXJzVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5Qcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5idWlsZGVyLlJvdXRlQnVpbGRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmNvbXBvbmVudC5tb2NrLk1vY2tFbmRwb2ludDsKKworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNhbGxhYmxlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7CisKKy8qKgorICogVGVzdCBjYXNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb21wb25lbnQgY2FuIGRlYWwgd2l0aCBtdWx0aXBsZSB7QGxpbmsgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci5TZXJ2aWNlTWl4UHJvZHVjZXJ9CisgKiBpbnN0YW5jZXMgZm9yIHRoZSBzYW1lIGVuZHBvaW50IG5hbWUgYmVpbmcgdXNlZCBjb25jdXJyZW50bHkuCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBsZVByb2R1Y2Vyc1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPVU5UID0gMTAwOworCisgICAgcHVibGljIHZvaWQgdGVzdENvbmN1cnJlbnRseVVzaW5nVGhlU2FtZVByb2R1Y2VyTmFtZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgICAgIGdldE1vY2tFbmRwb2ludCgibW9jazpoYW5kbGVyIikuZXhwZWN0ZWRNZXNzYWdlQ291bnQoMiAqIENPVU5UKTsKKworICAgICAgICBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3Rml4ZWRUaHJlYWRQb29sKDEwKTsKKworICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAxMDAgOyBpKyspIHsKKyAgICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJSZXBseWluZyB0byBHdWlsbGF1bWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUucmVxdWVzdEJvZHkoImRpcmVjdDphIiwgIkd1aWxsYXVtZSIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJSZXBseWluZyB0byBDaHJpcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5yZXF1ZXN0Qm9keSgiZGlyZWN0OmEiLCAiQ2hyaXMiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRNb2NrRW5kcG9pbnRzU2F0aXNmaWVkKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIoKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgZnJvbSgiZGlyZWN0OmEiKS50bygibm1yOmhhbmRsZXIiKTsKKyAgICAgICAgICAgICAgICBmcm9tKCJkaXJlY3Q6YiIpLnRvKCJubXI6aGFuZGxlciIpOworCisgICAgICAgICAgICAgICAgZnJvbSgibm1yOmhhbmRsZXIiKS5zZXRCb2R5KHNpbXBsZSgiUmVwbHlpbmcgdG8gJHtib2R5fSIpKS50bygibW9jazpoYW5kbGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvUGVyc29uSW1wbC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvUGVyc29uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzZlOWEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9QZXJzb25JbXBsLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CitpbXBvcnQgamF2YXgueG1sLndzLkhvbGRlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuVW5rbm93blBlcnNvbkZhdWx0OworCitAV2ViU2VydmljZShzZXJ2aWNlTmFtZSA9ICJQZXJzb25TZXJ2aWNlIiwKKyAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0IiwKKyAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC5QZXJzb24iKQorcHVibGljIGNsYXNzIFBlcnNvbkltcGwgaW1wbGVtZW50cyBQZXJzb24geworCisgICAgcHVibGljIHZvaWQgZ2V0UGVyc29uKEhvbGRlcjxTdHJpbmc+IHBlcnNvbklkLCBIb2xkZXI8U3RyaW5nPiBzc24sCisgICAgICAgICAgICBIb2xkZXI8U3RyaW5nPiBuYW1lKSB0aHJvd3MgVW5rbm93blBlcnNvbkZhdWx0IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aGUgc2VydmVyIGlzIGludm9rZWQgIik7CisgICAgICAgIGlmIChwZXJzb25JZC52YWx1ZSA9PSBudWxsIHx8IHBlcnNvbklkLnZhbHVlLmxlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QudHlwZXMuVW5rbm93blBlcnNvbkZhdWx0CisgICAgICAgICAgICAgICAgZmF1bHQgPSBuZXcgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC50eXBlcy5Vbmtub3duUGVyc29uRmF1bHQoKTsKKyAgICAgICAgICAgIGZhdWx0LnNldFBlcnNvbklkKHBlcnNvbklkLnZhbHVlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBVbmtub3duUGVyc29uRmF1bHQobnVsbCwgZmF1bHQpOworICAgICAgICB9CisgICAgICAgIG5hbWUudmFsdWUgPSAiQm9uam91ciI7CisgICAgICAgIHNzbi52YWx1ZSA9ICIwMDAtMDAwLTAwMDAiOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VjdXJpdHlTdWJqZWN0VGVzdC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VjdXJpdHlTdWJqZWN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhODllZDkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TZWN1cml0eVN1YmplY3RUZXN0LmphdmEKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5FeGNoYW5nZVBhdHRlcm47CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5Qcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5idWlsZGVyLlJvdXRlQnVpbGRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmNvbXBvbmVudC5tb2NrLk1vY2tFbmRwb2ludDsKKworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdDsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LlByaW5jaXBhbDsKKworLyoqCisgKiBUZXN0IGNhc2UgdG8gZW5zdXJlIHRoZSBDYW1lbCBOTVIgY29tcG9uZW50IGlzIGNhcGFibGUgb2YgY29udmV5aW5nIHNlY3VyaXR5IGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IENhbWVsCisgKi8KK3B1YmxpYyBjbGFzcyBTZWN1cml0eVN1YmplY3RUZXN0IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnRUZXN0IHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUX01FU1NBR0UgPSAiU2ltcGxlIG1lc3NhZ2UgYm9keSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1BPTlNFX01FU1NBR0UgPSAiU2ltcGxlIG1lc3NhZ2UgcmVwbHkiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUHJpbmNpcGFsIENMQVJLX0tFTlQgPSBuZXcgUHJpbmNpcGFsSW1wbCgiQ2xhcmsgS2VudCIpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFByaW5jaXBhbCBTVVBFUk1BTiA9IG5ldyBQcmluY2lwYWxJbXBsKCJTdXBlcm1hbiIpOworCisgICAgLyoKKyAgICAgKiBUZXN0IGNhc2UgZm9yIGNvbnZleWluZyBzZWN1cml0eSBzdWJqZWN0IGluZm9ybWF0aW9uIGluIGFuIEluT25seSBNRVAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW5Pbmx5V2l0aFNlY3VyaXR5U3ViamVjdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdWJqZWN0IHN1YmplY3QgPSBjcmVhdGVTdWJqZWN0KENMQVJLX0tFTlQpOworCisgICAgICAgIE1vY2tFbmRwb2ludCBtb2NrID0gZ2V0TW9ja0VuZHBvaW50KCJtb2NrOnNpbXBsZSIpOworICAgICAgICBtb2NrLmV4cGVjdGVkQm9kaWVzUmVjZWl2ZWQoUkVRVUVTVF9NRVNTQUdFKTsKKworICAgICAgICB0ZW1wbGF0ZS5zZW5kQm9keUFuZEhlYWRlcigiZGlyZWN0OnNpbXBsZSIsIFJFUVVFU1RfTUVTU0FHRSwKKyAgICAgICAgICAgICAgICBFeGNoYW5nZS5BVVRIRU5USUNBVElPTiwgc3ViamVjdCk7CisKKyAgICAgICAgYXNzZXJ0TW9ja0VuZHBvaW50c1NhdGlzZmllZCgpOworICAgIH0KKworICAgIC8qCisgICAgICogVGVzdCBjYXNlIGZvciBjb252ZXlpbmcgc2VjdXJpdHkgc3ViamVjdCBpbmZvcm1hdGlvbiBpbiBhbiBJbk91dCBNRVAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW5PdXRXaXRoU2VjdXJpdHlTdWJqZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCA9IGNyZWF0ZVN1YmplY3QoQ0xBUktfS0VOVCk7CisKKyAgICAgICAgRXhjaGFuZ2UgcmVzdWx0ID0gdGVtcGxhdGUucmVxdWVzdCgiZGlyZWN0OnNpbXBsZSIsIG5ldyBQcm9jZXNzb3IoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBwcm9jZXNzKEV4Y2hhbmdlIGV4Y2hhbmdlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBleGNoYW5nZS5nZXRJbigpLnNldEJvZHkoUkVRVUVTVF9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICBleGNoYW5nZS5nZXRJbigpLnNldEhlYWRlcihFeGNoYW5nZS5BVVRIRU5USUNBVElPTiwgc3ViamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGFzc2VydFNlY3VyaXR5U3ViamVjdChTVVBFUk1BTiwgcmVzdWx0LmdldE91dCgpLmdldEhlYWRlcihFeGNoYW5nZS5BVVRIRU5USUNBVElPTiwgU3ViamVjdC5jbGFzcykpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBSb3V0ZUJ1aWxkZXIgY3JlYXRlUm91dGVCdWlsZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKCkgeworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgIGZyb20oImRpcmVjdDpzaW1wbGUiKS50bygibm1yOnNpbXBsZSIpOworICAgICAgICAgICAgICAgIGZyb20oIm5tcjpzaW1wbGUiKS5wcm9jZXNzKGFzc2VydFNlY3VyaXR5U3ViamVjdCgpKS50bygibW9jazpzaW1wbGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEJ1aWxkIGEgc2ltcGxlIHtAbGluayBQcm9jZXNzb3J9IHRvIGVuc3VyZSBvdXIgZXhjaGFuZ2UgY29udGFpbnMgdGhlIGNvcnJlY3Qgc2VjdXJpdHkgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIFByb2Nlc3NvciBhc3NlcnRTZWN1cml0eVN1YmplY3QoKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc29yKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcHJvY2VzcyhFeGNoYW5nZSBleGNoYW5nZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0ID0gZXhjaGFuZ2UuZ2V0SW4oKS5nZXRIZWFkZXIoRXhjaGFuZ2UuQVVUSEVOVElDQVRJT04sIFN1YmplY3QuY2xhc3MpOworICAgICAgICAgICAgICAgIGFzc2VydFNlY3VyaXR5U3ViamVjdChDTEFSS19LRU5ULCBzdWJqZWN0KTsKKworICAgICAgICAgICAgICAgIGlmIChFeGNoYW5nZVBhdHRlcm4uSW5PdXQuZXF1YWxzKGV4Y2hhbmdlLmdldFBhdHRlcm4oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gd293LCBDbGFyayBLZW50IGlzIFN1cGVybWFuLCB3aG8gd291bGQgaGF2ZSB0aG91Z2h0IHRoYXQ/CisgICAgICAgICAgICAgICAgICAgIGV4Y2hhbmdlLmdldE91dCgpLmNvcHlGcm9tKGV4Y2hhbmdlLmdldEluKCkpOworICAgICAgICAgICAgICAgICAgICBleGNoYW5nZS5nZXRPdXQoKS5zZXRCb2R5KFJFU1BPTlNFX01FU1NBR0UpOworICAgICAgICAgICAgICAgICAgICBleGNoYW5nZS5nZXRPdXQoKS5zZXRIZWFkZXIoRXhjaGFuZ2UuQVVUSEVOVElDQVRJT04sIGNyZWF0ZVN1YmplY3QoU1VQRVJNQU4pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZXhjaGFuZ2VTZW50KG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlIGV4Y2hhbmdlKSB7CisgICAgICAgIHN1cGVyLmV4Y2hhbmdlU2VudChleGNoYW5nZSk7CisKKyAgICAgICAgLy8gbGV0J3MgY2hlY2sgdGhlIHN1YmplY3QgaW5zaWRlIHRoZSBOTVIgYXMgd2VsbAorICAgICAgICBpZiAoZXhjaGFuZ2UuZ2V0SW4oZmFsc2UpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGFzc2VydFNlY3VyaXR5U3ViamVjdChDTEFSS19LRU5ULCBleGNoYW5nZS5nZXRJbigpLmdldFNlY3VyaXR5U3ViamVjdCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhjaGFuZ2UuZ2V0T3V0KGZhbHNlKSAhPSBudWxsKSB7CisgICAgICAgICAgICBhc3NlcnRTZWN1cml0eVN1YmplY3QoU1VQRVJNQU4sIGV4Y2hhbmdlLmdldE91dCgpLmdldFNlY3VyaXR5U3ViamVjdCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgKiBFbnN1cmUgdGhhdCB0aGUgU3ViamVjdCBpcyB2YWxpZCBhbmQgbWF0Y2hlcyB0aGUgcHJpbmNpcGFsCisgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYXNzZXJ0U2VjdXJpdHlTdWJqZWN0KFByaW5jaXBhbCBleHBlY3RlZCwgU3ViamVjdCBzdWJqZWN0KSB7CisgICAgICAgIGFzc2VydE5vdE51bGwoc3ViamVjdCk7CisgICAgICAgIGFzc2VydFRydWUoIlN1YmplY3Qgc2hvdWxkIGhhdmUgY29udGFpbmVkICIgKyBleHBlY3RlZCwgc3ViamVjdC5nZXRQcmluY2lwYWxzKCkuY29udGFpbnMoZXhwZWN0ZWQpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIG5ldyBTdWJqZWN0LCBjb250YWluaW5nIHRoZSBwcm92aWRlZCBwcmluY2lwYWwgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIFN1YmplY3QgY3JlYXRlU3ViamVjdChQcmluY2lwYWwgcHJpbmNpcGFsKSB7CisgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7CisgICAgICAgIHN1YmplY3QuZ2V0UHJpbmNpcGFscygpLmFkZChwcmluY2lwYWwpOworICAgICAgICByZXR1cm4gc3ViamVjdDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNpbXBsZSB7QGxpbmsgUHJpbmNpcGFsfSBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0aW5nCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgUHJpbmNpcGFsSW1wbCBpbXBsZW1lbnRzIFByaW5jaXBhbCB7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKKworICAgICAgICBwdWJsaWMgUHJpbmNpcGFsSW1wbChTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiUHJpbmNpcGFsIFslc10iLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NlcnZpY2VNaXhCaW5kaW5nVGVzdC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2VydmljZU1peEJpbmRpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyMTMzMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NlcnZpY2VNaXhCaW5kaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuaW1wbC5EZWZhdWx0Q2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlBhdHRlcm47CisKKy8qKgorICogVGVzdCBjYXNlcyBmb3Ige0BsaW5rIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIuU2VydmljZU1peEJpbmRpbmd9CisgKi8KK3B1YmxpYyBjbGFzcyBTZXJ2aWNlTWl4QmluZGluZ1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWSA9ICJ0ZXN0LmtleSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFID0gInRlc3QudmFsdWUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFID0gIk1lc3NhZ2UgY29udGVudCI7CisKKyAgICBwcml2YXRlIFNlcnZpY2VNaXhCaW5kaW5nIGJpbmRpbmcgPSBuZXcgU2VydmljZU1peEJpbmRpbmcoKTsKKworICAgIHB1YmxpYyB2b2lkIHRlc3RUb0NhbWVsQW5kQmFja1RvTm1yKCkgeworICAgICAgICBFeGNoYW5nZSBubXIgPSBnZXRDaGFubmVsKCkuY3JlYXRlRXhjaGFuZ2UoUGF0dGVybi5Jbk9ubHkpOworICAgICAgICBubXIuc2V0UHJvcGVydHkoS0VZLCBWQUxVRSk7CisgICAgICAgIG5tci5nZXRJbigpLnNldEJvZHkoTUVTU0FHRSk7CisgICAgICAgIG5tci5nZXRJbigpLnNldEhlYWRlcihLRVksIFZBTFVFKTsKKworICAgICAgICBvcmcuYXBhY2hlLmNhbWVsLkV4Y2hhbmdlIGNhbWVsID0KKyAgICAgICAgICAgICAgICBiaW5kaW5nLnBvcHVsYXRlQ2FtZWxFeGNoYW5nZUZyb21ObXJFeGNoYW5nZShuZXcgRGVmYXVsdENhbWVsQ29udGV4dCgpLCBubXIpOworCisgICAgICAgIGFzc2VydEVxdWFscyhWQUxVRSwgY2FtZWwuZ2V0UHJvcGVydHkoS0VZKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhWQUxVRSwgY2FtZWwuZ2V0SW4oKS5nZXRIZWFkZXIoS0VZKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhNRVNTQUdFLCBjYW1lbC5nZXRJbigpLmdldEJvZHkoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiTk1SIEV4Y2hhbmdlIHNob3VsZCBiZSBhdmFpbGFibGUgb24gdGhlIENhbWVsIEV4Y2hhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgIG5tciwgY2FtZWwuZ2V0UHJvcGVydHkoU2VydmljZU1peEJpbmRpbmcuTk1SX0VYQ0hBTkdFKSk7CisKKyAgICAgICAgYXNzZXJ0U2FtZShubXIsIGJpbmRpbmcuZXh0cmFjdE5tckV4Y2hhbmdlKGNhbWVsKSk7CisgICAgICAgIGFzc2VydE51bGwoIk5NUiBFeGNoYW5nZSBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQ2FtZWwgRXhjaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgIGNhbWVsLmdldFByb3BlcnR5KFNlcnZpY2VNaXhCaW5kaW5nLk5NUl9FWENIQU5HRSkpOworICAgICAgICAKKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2hvdWxkUnVuU3luY2hyb25vdXNseVRlc3QuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1Nob3VsZFJ1blN5bmNocm9ub3VzbHlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4MTAzZAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1Nob3VsZFJ1blN5bmNocm9ub3VzbHlUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yOworCitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLlByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmJ1aWxkZXIuUm91dGVCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuY29tcG9uZW50Lm1vY2suTW9ja0VuZHBvaW50OworCisvKioKKyAqIFRlc3QgY2FzZSBmb3IgdGhlID9zeW5jaHJvbm91cz10cnVlIHNldHRpbmcgb24gYSBjYW1lbCBjb25zdW1lciBlbmRwb2ludAorICovCitwdWJsaWMgY2xhc3MgU2hvdWxkUnVuU3luY2hyb25vdXNseVRlc3QgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhBTkRMRURfQllfVEhSRUFEID0gIkhhbmRsZWRCeVRocmVhZCI7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvY2Vzc2luZ09uU2FtZVRocmVhZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgICAgIE1vY2tFbmRwb2ludCBtb2NrID0gZ2V0TW9ja0VuZHBvaW50KCJtb2NrOnNpbXBsZSIpOworICAgICAgICBtb2NrLmV4cGVjdGVkQm9kaWVzUmVjZWl2ZWQoIlNpbXBsZSBtZXNzYWdlIGJvZHkiKTsKKworICAgICAgICB0ZW1wbGF0ZS5zZW5kQm9keSgiZGlyZWN0OnNpbXBsZSIsICJTaW1wbGUgbWVzc2FnZSBib2R5Iik7CisKKyAgICAgICAgYXNzZXJ0TW9ja0VuZHBvaW50c1NhdGlzZmllZCgpOworCisgICAgICAgIFRocmVhZCB0aHJlYWQgPSBtb2NrLmdldEV4Y2hhbmdlcygpLmdldCgwKS5nZXRQcm9wZXJ0eShIQU5ETEVEX0JZX1RIUkVBRCwgVGhyZWFkLmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCh0aHJlYWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk5vIHRocmVhZCBjb250ZXh0IHN3aXRjaGluZyBzaG91bGQgaGF2ZSBvY2N1cnJlZCIsCisgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLCB0aHJlYWQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBSb3V0ZUJ1aWxkZXIgY3JlYXRlUm91dGVCdWlsZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKCkgeworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgIGZyb20oImRpcmVjdDpzaW1wbGUiKS50bygibm1yOnNpbXBsZSIpOworICAgICAgICAgICAgICAgIGZyb20oIm5tcjpzaW1wbGU/c3luY2hyb25vdXM9dHJ1ZSIpLnByb2Nlc3MobmV3IFByb2Nlc3NvcigpIHsKKworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBwcm9jZXNzKEV4Y2hhbmdlIGV4Y2hhbmdlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2hhbmdlLnNldFByb3BlcnR5KEhBTkRMRURfQllfVEhSRUFELCBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSkudG8oIm1vY2s6c2ltcGxlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2ltcGxlTm1yVGVzdC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU2ltcGxlTm1yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNTQ2NWUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TaW1wbGVObXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5Qcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5idWlsZGVyLlJvdXRlQnVpbGRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmNvbXBvbmVudC5tb2NrLk1vY2tFbmRwb2ludDsKKworLyoqCisgKiBBIHZlcnkgYmFzaWMgTk1SIHRlc3QsIGp1c3QgdGVzdGluZyBpZiB0aGUgRXhjaGFuZ2UgY2FuIGZsb3cgdGhyb3VnaCB0aGUgTk1SCisgKiBmcm9tIG9uZSBDYW1lbCByb3V0ZSB0byB0aGUgbmV4dCBvbmUKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZU5tclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfTUVTU0FHRSA9ICJTaW1wbGUgbWVzc2FnZSBib2R5IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTUE9OU0VfTUVTU0FHRSA9ICJTaW1wbGUgbWVzc2FnZSByZXBseSI7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlSW5Pbmx5KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgTW9ja0VuZHBvaW50IG1vY2sgPSBnZXRNb2NrRW5kcG9pbnQoIm1vY2s6c2ltcGxlIik7CisgICAgICAgIG1vY2suZXhwZWN0ZWRCb2RpZXNSZWNlaXZlZChSRVFVRVNUX01FU1NBR0UpOworCisgICAgICAgIHRlbXBsYXRlLnNlbmRCb2R5KCJkaXJlY3Q6c2ltcGxlIiwgUkVRVUVTVF9NRVNTQUdFKTsKKworICAgICAgICBhc3NlcnRNb2NrRW5kcG9pbnRzU2F0aXNmaWVkKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUluT25seVdpdGhNdWx0aXBsZUhvcHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTW9ja0VuZHBvaW50IG1vY2sgPSBnZXRNb2NrRW5kcG9pbnQoIm1vY2s6aG9wcyIpOworICAgICAgICBtb2NrLmV4cGVjdGVkQm9kaWVzUmVjZWl2ZWQoUkVRVUVTVF9NRVNTQUdFKTsKKworICAgICAgICB0ZW1wbGF0ZS5zZW5kQm9keSgiZGlyZWN0OmhvcHMiLCBSRVFVRVNUX01FU1NBR0UpOworCisgICAgICAgIGFzc2VydE1vY2tFbmRwb2ludHNTYXRpc2ZpZWQoKTsgICAgICAgIAorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVJbk91dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgICAgIE1vY2tFbmRwb2ludCBtb2NrID0gZ2V0TW9ja0VuZHBvaW50KCJtb2NrOnNpbXBsZSIpOworICAgICAgICBtb2NrLmV4cGVjdGVkQm9kaWVzUmVjZWl2ZWQoUkVRVUVTVF9NRVNTQUdFKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXF1ZXN0Qm9keSgiZGlyZWN0OnNpbXBsZSIsIFJFUVVFU1RfTUVTU0FHRSwgU3RyaW5nLmNsYXNzKTsKKworICAgICAgICBhc3NlcnRNb2NrRW5kcG9pbnRzU2F0aXNmaWVkKCk7CisgICAgICAgIGFzc2VydEVxdWFscygiUmVjZWl2aW5nIGJhY2sgdGhlIHJlcGx5IHNldCBieSB0aGUgc2Vjb25kIHJvdXRlIiwKKyAgICAgICAgICAgICAgICAgICAgIFJFU1BPTlNFX01FU1NBR0UsIHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlSW5PdXRXaXRoTXVsdGlwbGVIb3BzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgTW9ja0VuZHBvaW50IG1vY2sgPSBnZXRNb2NrRW5kcG9pbnQoIm1vY2s6aG9wcyIpOworICAgICAgICBtb2NrLmV4cGVjdGVkQm9kaWVzUmVjZWl2ZWQoUkVRVUVTVF9NRVNTQUdFKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXF1ZXN0Qm9keSgiZGlyZWN0OmhvcHMiLCBSRVFVRVNUX01FU1NBR0UsIFN0cmluZy5jbGFzcyk7CisKKyAgICAgICAgYXNzZXJ0TW9ja0VuZHBvaW50c1NhdGlzZmllZCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlJlY2VpdmluZyBiYWNrIHRoZSByZXBseSBzZXQgYnkgdGhlIHNlY29uZCByb3V0ZSIsCisgICAgICAgICAgICAgICAgICAgICBSRVNQT05TRV9NRVNTQUdFLCByZXNwb25zZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNpbXBsZUludmFsaWRFbmRwb2ludCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgICAgIEV4Y2hhbmdlIGV4Y2hhbmdlID0gdGVtcGxhdGUuc2VuZCgiZGlyZWN0OmVycm9yIiwgbmV3IFByb2Nlc3NvcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHByb2Nlc3MoRXhjaGFuZ2UgZXhjaGFuZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgIGV4Y2hhbmdlLmdldEluKCkuc2V0Qm9keShSRVFVRVNUX01FU1NBR0UpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBhc3NlcnRUcnVlKCJTZW5kaW5nIHRvIGFuIGludmFsaWQgTk1SIGVuZHBvaW50IHNob3VsZCBoYXZlIGZhaWxlZCIsIGV4Y2hhbmdlLmlzRmFpbGVkKCkpOworICAgIH0KKworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIoKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgZnJvbSgiZGlyZWN0OnNpbXBsZSIpLnRvKCJubXI6c2ltcGxlIik7CisgICAgICAgICAgICAgICAgZnJvbSgibm1yOnNpbXBsZSIpLnRvKCJtb2NrOnNpbXBsZSIpLnNldEJvZHkoY29uc3RhbnQoUkVTUE9OU0VfTUVTU0FHRSkpOworCisgICAgICAgICAgICAgICAgZnJvbSgiZGlyZWN0OmhvcHMiKS50bygibm1yOmhvcDEiKTsKKyAgICAgICAgICAgICAgICBmcm9tKCJubXI6aG9wMSIpLnRvKCJubXI6aG9wMiIpOworICAgICAgICAgICAgICAgIGZyb20oIm5tcjpob3AyIikudG8oIm1vY2s6aG9wcyIpLnNldEJvZHkoY29uc3RhbnQoUkVTUE9OU0VfTUVTU0FHRSkpOworCisgICAgICAgICAgICAgICAgZnJvbSgiZGlyZWN0OmVycm9yIikudG8oIm5tcjppbnZhbGlkLWVuZHBvaW50LW5hbWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TbXhUb0N4ZlNwcmluZ1Rlc3QuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL1NteFRvQ3hmU3ByaW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzI5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TbXhUb0N4ZlNwcmluZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLkNhbWVsQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmJ1aWxkZXIuUm91dGVCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuc3ByaW5nLlNwcmluZ0NhbWVsQ29udGV4dDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5DbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQ7CisKK3B1YmxpYyBjbGFzcyBTbXhUb0N4ZlNwcmluZ1Rlc3QgZXh0ZW5kcyBTbXhUb0N4ZlRlc3QgeworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiU2hvdWxkIGhhdmUgY3JlYXRlZCBhIHZhbGlkIHNwcmluZyBjb250ZXh0IiwgYXBwbGljYXRpb25Db250ZXh0KTsKKworICAgICAgICAKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAgCisgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBSb3V0ZUJ1aWxkZXIgY3JlYXRlUm91dGVCdWlsZGVyKCkgeworICAgICAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgICAgICAgICBmcm9tKCJjeGY6YmVhbjpyb3V0ZXJFbmRwb2ludCIpLnRvKCJzbXg6YmVhbjp0ZXN0RW5kcG9pbnQiKTsKKyAgICAgICAgICAgICAgICBmcm9tKCJzbXg6YmVhbjp0ZXN0RW5kcG9pbnQiKS50bygiY3hmOmJlYW46c2VydmljZUVuZHBvaW50Iik7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIENhbWVsQ29udGV4dCBjcmVhdGVDYW1lbENvbnRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIFNwcmluZ0NhbWVsQ29udGV4dC5zcHJpbmdDYW1lbENvbnRleHQoYXBwbGljYXRpb25Db250ZXh0KTsKKyAgICB9CisgICAgCisgICAgCisgICAgcHJvdGVjdGVkIENsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4dCBjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKSB7CisgICAgICAgIHJldHVybiBuZXcgQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0KCJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL0VuZHBvaW50QmVhbnMueG1sIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU214VG9DeGZUZXN0LmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci9TbXhUb0N4ZlRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY4NGUyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvU214VG9DeGZUZXN0LmphdmEKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuYnVpbGRlci5Sb3V0ZUJ1aWxkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC50ZXN0LkNhbWVsU3ByaW5nVGVzdFN1cHBvcnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5DYW1lbENvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1c0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuYnVzLkNYRkJ1c0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZW5kcG9pbnQuU2VydmVySW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5mcm9udGVuZC5DbGllbnRGYWN0b3J5QmVhbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5mcm9udGVuZC5DbGllbnRQcm94eUZhY3RvcnlCZWFuOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmZyb250ZW5kLlNlcnZlckZhY3RvcnlCZWFuOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuQmVhbnNFeGNlcHRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0OworCisKK3B1YmxpYyBjbGFzcyBTbXhUb0N4ZlRlc3QgZXh0ZW5kcyBDYW1lbFNwcmluZ1Rlc3RTdXBwb3J0IHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVVNfQkVBTl9OQU1FID0gIkJ1cyI7CisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9VVEVSX0FERFJFU1MgPSAiaHR0cDovL2xvY2FsaG9zdDoxOTAwMC9yb3V0ZXIiOworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfQUREUkVTUyA9ICJsb2NhbDovL3NteC9oZWxsb3dvcmxkIjsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0NMQVNTID0gInNlcnZpY2VDbGFzcz1vcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLkhlbGxvU2VydmljZSI7CisKKyAgICBwcml2YXRlIFN0cmluZyByb3V0ZXJFbmRwb2ludFVSSSA9CisgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJjeGY6Ly8lcz8lcyZkYXRhRm9ybWF0PVBPSk8mc2V0RGVmYXVsdEJ1cz10cnVlJmJ1cz0jJXMiLCBST1VURVJfQUREUkVTUywgU0VSVklDRV9DTEFTUywgQlVTX0JFQU5fTkFNRSk7CisKKyAgICBwcml2YXRlIFN0cmluZyBzZXJ2aWNlRW5kcG9pbnRVUkkgPQorICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiY3hmOi8vJXM/JXMmZGF0YUZvcm1hdD1QT0pPJnNldERlZmF1bHRCdXM9dHJ1ZSZidXM9IyVzIiwgU0VSVklDRV9BRERSRVNTLCBTRVJWSUNFX0NMQVNTLCBCVVNfQkVBTl9OQU1FKTsKKworICAgIHByaXZhdGUgU2VydmVySW1wbCBzZXJ2ZXI7CisgICAgcHJpdmF0ZSBCdXMgYnVzOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgYnVzID0gQ1hGQnVzRmFjdG9yeS5nZXREZWZhdWx0QnVzKCk7CisgICAgICAgIAorICAgICAgICBzdXBlci5zZXRVcCgpOyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgIHN0YXJ0U2VydmljZSgpOworICAgIH0KKworICAgIHByb3RlY3RlZCBDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQgY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IENsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4dCgib3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3NwcmluZy9EdW1teUJlYW4ueG1sIikgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgPFQ+IFQgZ2V0QmVhbihTdHJpbmcgbmFtZSwgQ2xhc3M8VD4gcmVxdWlyZWRUeXBlKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICAgICAgICAgIGlmIChCVVNfQkVBTl9OQU1FLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWlyZWRUeXBlLmNhc3QoYnVzKTsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRCZWFuKG5hbWUsIHJlcXVpcmVkVHlwZSk7ICAgIC8vVG8gY2hhbmdlIGJvZHkgb2Ygb3ZlcnJpZGRlbiBtZXRob2RzIHVzZSBGaWxlIHwgU2V0dGluZ3MgfCBGaWxlIFRlbXBsYXRlcy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBhc3NlcnRWYWxpZENvbnRleHQoQ2FtZWxDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiTm8gY29udGV4dCBmb3VuZCEiLCBjb250ZXh0KTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBzdGFydFNlcnZpY2UoKSB7CisgICAgICAgIC8vc3RhcnQgYSBzZXJ2aWNlCisgICAgICAgIFNlcnZlckZhY3RvcnlCZWFuIHN2ckJlYW4gPSBuZXcgU2VydmVyRmFjdG9yeUJlYW4oKTsKKworICAgICAgICBzdnJCZWFuLnNldEFkZHJlc3MoU0VSVklDRV9BRERSRVNTKTsKKyAgICAgICAgc3ZyQmVhbi5zZXRTZXJ2aWNlQ2xhc3MoSGVsbG9TZXJ2aWNlLmNsYXNzKTsKKyAgICAgICAgc3ZyQmVhbi5zZXRTZXJ2aWNlQmVhbihuZXcgSGVsbG9TZXJ2aWNlSW1wbCgpKTsKKyAgICAgICAgc3ZyQmVhbi5zZXRCdXMoQ1hGQnVzRmFjdG9yeS5nZXREZWZhdWx0QnVzKCkpOworCisgICAgICAgIHNlcnZlciA9IChTZXJ2ZXJJbXBsKXN2ckJlYW4uY3JlYXRlKCk7CisgICAgICAgIHNlcnZlci5zdGFydCgpOworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAoc2VydmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgc3VwZXIudGVhckRvd24oKTsKKyAgICB9CisgIAorICAgIHByb3RlY3RlZCBSb3V0ZUJ1aWxkZXIgY3JlYXRlUm91dGVCdWlsZGVyKCkgeworICAgICAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgICAgICAgICBmcm9tKHJvdXRlckVuZHBvaW50VVJJKS50bygic214OnRlc3RFbmRwb2ludCIpOy8vIGxpa2Ugd2hhdCBkbyBpbiBiaW5kaW5nIGNvbXBvbmVudAorICAgICAgICAgICAgICAgIGZyb20oInNteDp0ZXN0RW5kcG9pbnQiKS50byhzZXJ2aWNlRW5kcG9pbnRVUkkpOy8vIGxpa2Ugd2hhdCBkbyBpbiBzZQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RJbnZva2luZ1NlcnZpY2VGcm9tQ1hGQ2xpZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEJ1cyBidXMgPSBCdXNGYWN0b3J5LmdldERlZmF1bHRCdXMoKTsKKyAgICAgICAgCisgICAgICAgIENsaWVudFByb3h5RmFjdG9yeUJlYW4gcHJveHlGYWN0b3J5ID0gbmV3IENsaWVudFByb3h5RmFjdG9yeUJlYW4oKTsKKyAgICAgICAgQ2xpZW50RmFjdG9yeUJlYW4gY2xpZW50QmVhbiA9IHByb3h5RmFjdG9yeS5nZXRDbGllbnRGYWN0b3J5QmVhbigpOworICAgICAgICBjbGllbnRCZWFuLnNldEFkZHJlc3MoUk9VVEVSX0FERFJFU1MpOyAgICAgICAgCisgICAgICAgIGNsaWVudEJlYW4uc2V0U2VydmljZUNsYXNzKEhlbGxvU2VydmljZS5jbGFzcyk7CisgICAgICAgIGNsaWVudEJlYW4uc2V0QnVzKGJ1cyk7ICAgICAgICAKKyAgICAgICAgCisgICAgICAgIEhlbGxvU2VydmljZSBjbGllbnQgPSAoSGVsbG9TZXJ2aWNlKSBwcm94eUZhY3RvcnkuY3JlYXRlKCk7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBjbGllbnQuZWNobygiaGVsbG8gd29ybGQiKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3ZSBzaG91bGQgZ2V0IHRoZSByaWdodCBhbnN3ZXIgZnJvbSByb3V0ZXIiLCAiaGVsbG8gd29ybGQgZWNobyIsIHJlc3VsdCk7CisgICAgfQorICAgIAorICAgICAgICAKKyAgICAKK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvR3JlZXRlckltcGwuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvR3JlZXRlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2JhMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3MvYWRkcmVzc2luZy9HcmVldGVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIud3MuYWRkcmVzc2luZzsKKworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5hbm5vdGF0aW9uLlJlc291cmNlOworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworaW1wb3J0IGphdmF4LnhtbC53cy5Bc3luY0hhbmRsZXI7CitpbXBvcnQgamF2YXgueG1sLndzLlJlc3BvbnNlOworaW1wb3J0IGphdmF4LnhtbC53cy5XZWJTZXJ2aWNlQ29udGV4dDsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuQWRkcmVzc2luZ1Byb3BlcnRpZXM7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuQmFkUmVjb3JkTGl0RmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuR3JlZXRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC5Ob1N1Y2hDb2RlTGl0RmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMuQmFyZURvY3VtZW50UmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMuRXJyb3JDb2RlOworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLkdyZWV0TWVMYXRlclJlc3BvbnNlOworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLkdyZWV0TWVSZXNwb25zZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC50eXBlcy5HcmVldE1lU29tZXRpbWVSZXNwb25zZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC50eXBlcy5Ob1N1Y2hDb2RlTGl0OworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLlNheUhpUmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMuVGVzdERvY0xpdEZhdWx0UmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMuVGVzdE5pbGxhYmxlUmVzcG9uc2U7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5KQVhXU0FDb25zdGFudHMuU0VSVkVSX0FERFJFU1NJTkdfUFJPUEVSVElFU19JTkJPVU5EOworCisKK0BXZWJTZXJ2aWNlKHNlcnZpY2VOYW1lID0gIlNPQVBTZXJ2aWNlQWRkcmVzc2luZyIsIAorICAgICAgICAgICAgcG9ydE5hbWUgPSAiU29hcFBvcnQiLCAKKyAgICAgICAgICAgIGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXIiLCAKKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiLAorICAgICAgICAgICAgd3NkbExvY2F0aW9uID0gIm9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL2hlbGxvX3dvcmxkLndzZGwiKQorcHVibGljIGNsYXNzIEdyZWV0ZXJJbXBsIGltcGxlbWVudHMgR3JlZXRlciwgVmVyaWZpY2F0aW9uQ2FjaGUgeworICAgIAorICAgIHByaXZhdGUgU3RyaW5nIHZlcmlmaWVkOworICAgIC8qKgorICAgICAqIEluamVjdGFibGUgY29udGV4dC4KKyAgICAgKi8KKyAgICBAUmVzb3VyY2UKKyAgICBwcml2YXRlIFdlYlNlcnZpY2VDb250ZXh0IGNvbnRleHQ7CisKKworICAgIHB1YmxpYyBTdHJpbmcgZ3JlZXRNZShTdHJpbmcgbWUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuKioqIEdyZWV0TWUgY2FsbGVkIHdpdGg6ICIgKyBtZSArICIqKipcblxuIik7CisgICAgICAgIHZlcmlmeU1BUHMoKTsKKyAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBncmVldE1lTGF0ZXIobG9uZyBkZWxheSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG4qKiogR3JlZXRNZUxhdGVyIGNhbGxlZCB3aXRoOiAiICsgZGVsYXkgKyAiKioqXG5cbiIpOworICAgICAgICBpZiAoZGVsYXkgPiAwKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChkZWxheSk7CisgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIC8vIGlnbm9yZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZlcmlmeU1BUHMoKTsKKyAgICAgICAgcmV0dXJuICJIZWxsbywgZmluYWxseSI7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZ3JlZXRNZU9uZVdheShTdHJpbmcgcmVxdWVzdFR5cGUpIHsgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuKioqIEdyZWV0TWVPbmVXYXkgY2FsbGVkIHdpdGg6ICIgKyByZXF1ZXN0VHlwZSArICIqKipcblxuIik7CisgICAgICAgIHZlcmlmeU1BUHMoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKCkgeworICAgICAgICB2ZXJpZnlNQVBzKCk7CisgICAgICAgIHJldHVybiAic2F5SGk6Qm9uam91ciI7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHRlc3REb2NMaXRGYXVsdChTdHJpbmcgZmF1bHRUeXBlKSB0aHJvd3MgQmFkUmVjb3JkTGl0RmF1bHQsIE5vU3VjaENvZGVMaXRGYXVsdCB7CisgICAgICAgIHZlcmlmeU1BUHMoKTsKKyAgICAgICAgaWYgKGZhdWx0VHlwZS5lcXVhbHMoQmFkUmVjb3JkTGl0RmF1bHQuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEJhZFJlY29yZExpdEZhdWx0KCJUZXN0QmFkUmVjb3JkTGl0IiwgIkJhZFJlY29yZExpdEZhdWx0Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhdWx0VHlwZS5lcXVhbHMoTm9TdWNoQ29kZUxpdEZhdWx0LmNsYXNzLmdldFNpbXBsZU5hbWUoKSkpIHsKKyAgICAgICAgICAgIEVycm9yQ29kZSBlYyA9IG5ldyBFcnJvckNvZGUoKTsKKyAgICAgICAgICAgIGVjLnNldE1ham9yKChzaG9ydCkxKTsKKyAgICAgICAgICAgIGVjLnNldE1pbm9yKChzaG9ydCkxKTsKKyAgICAgICAgICAgIE5vU3VjaENvZGVMaXQgbnNjbCA9IG5ldyBOb1N1Y2hDb2RlTGl0KCk7CisgICAgICAgICAgICBuc2NsLnNldENvZGUoZWMpOworICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaENvZGVMaXRGYXVsdCgiVGVzdE5vU3VjaENvZGVMaXQiLCBuc2NsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBCYXJlRG9jdW1lbnRSZXNwb25zZSB0ZXN0RG9jTGl0QmFyZShTdHJpbmcgaW4pIHsKKyAgICAgICAgQmFyZURvY3VtZW50UmVzcG9uc2UgcmVzID0gbmV3IEJhcmVEb2N1bWVudFJlc3BvbnNlKCk7CisgICAgICAgIHJlcy5zZXRDb21wYW55KCJDZWx0aXgiKTsKKyAgICAgICAgcmVzLnNldElkKDEpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB2ZXJpZnlNQVBzKCkgeworICAgICAgICBpZiAoY29udGV4dC5nZXRNZXNzYWdlQ29udGV4dCgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eSA9IFNFUlZFUl9BRERSRVNTSU5HX1BST1BFUlRJRVNfSU5CT1VORDsKKyAgICAgICAgICAgIEFkZHJlc3NpbmdQcm9wZXJ0aWVzIG1hcHMgPSAoQWRkcmVzc2luZ1Byb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRNZXNzYWdlQ29udGV4dCgpLmdldChwcm9wZXJ0eSk7CisgICAgICAgICAgICBwdXQoV1NBZGRyZXNzaW5nVGVzdC52ZXJpZnlNQVBzKG1hcHMsIHRoaXMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ3JlZXRNZVNvbWV0aW1lKFN0cmluZyBtZSkgeworICAgICAgICByZXR1cm4gImdyZWV0TWVTb21lVGltZTpIb3cgYXJlIHlvdSAiICsgbWU7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBGdXR1cmU8Pz4gIGdyZWV0TWVTb21ldGltZUFzeW5jKFN0cmluZyByZXF1ZXN0VHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmNIYW5kbGVyPEdyZWV0TWVTb21ldGltZVJlc3BvbnNlPiBhc3luY0hhbmRsZXIpIHsgCisgICAgICAgIHJldHVybiBudWxsOyAKKyAgICAgICAgLypub3QgY2FsbGVkICovCisgICAgfQorICAgIAorICAgIHB1YmxpYyBSZXNwb25zZTxHcmVldE1lU29tZXRpbWVSZXNwb25zZT4gZ3JlZXRNZVNvbWV0aW1lQXN5bmMoU3RyaW5nIHJlcXVlc3RUeXBlKSB7IAorICAgICAgICByZXR1cm4gbnVsbDsgCisgICAgICAgIC8qbm90IGNhbGxlZCAqLworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgUmVzcG9uc2U8VGVzdERvY0xpdEZhdWx0UmVzcG9uc2U+IHRlc3REb2NMaXRGYXVsdEFzeW5jKFN0cmluZyBmYXVsdFR5cGUpIHsgIAorICAgICAgICByZXR1cm4gbnVsbDsgCisgICAgICAgIC8qbm90IGNhbGxlZCAqLworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgRnV0dXJlPD8+IHRlc3REb2NMaXRGYXVsdEFzeW5jKFN0cmluZyBmYXVsdFR5cGUsIEFzeW5jSGFuZGxlciBhaCkgeyAgCisgICAgICAgIHJldHVybiBudWxsOyAKKyAgICAgICAgLypub3QgY2FsbGVkICovCisgICAgfQorICAgIAorICAgIHB1YmxpYyBGdXR1cmU8Pz4gdGVzdERvY0xpdEJhcmVBc3luYyhTdHJpbmcgYmFyZSwgQXN5bmNIYW5kbGVyIGFoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAvKiBub3QgY2FsbGVkICovCisgICAgfQorICAgIAorICAgIHB1YmxpYyBSZXNwb25zZTxCYXJlRG9jdW1lbnRSZXNwb25zZT4gdGVzdERvY0xpdEJhcmVBc3luYyhTdHJpbmcgYmFyZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgLyogbm90IGNhbGxlZCAqLworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgRnV0dXJlPD8+IGdyZWV0TWVBc3luYyhTdHJpbmcgcmVxdWVzdFR5cGUsIEFzeW5jSGFuZGxlcjxHcmVldE1lUmVzcG9uc2U+IGFzeW5jSGFuZGxlcikgeyAKKyAgICAgICAgcmV0dXJuIG51bGw7IAorICAgICAgICAvKm5vdCBjYWxsZWQgKi8KKyAgICB9CisgICAgCisgICAgcHVibGljIFJlc3BvbnNlPEdyZWV0TWVSZXNwb25zZT4gZ3JlZXRNZUFzeW5jKFN0cmluZyByZXF1ZXN0VHlwZSkgeyAKKyAgICAgICAgcmV0dXJuIG51bGw7IAorICAgICAgICAvKm5vdCBjYWxsZWQgKi8KKyAgICB9CisgICAgCisgICAgcHVibGljIEZ1dHVyZTw/PiBncmVldE1lTGF0ZXJBc3luYyhsb25nIHJlcXVlc3RUeXBlLCBBc3luY0hhbmRsZXI8R3JlZXRNZUxhdGVyUmVzcG9uc2U+IGFzeW5jSGFuZGxlcikgeyAKKyAgICAgICAgcmV0dXJuIG51bGw7IAorICAgICAgICAvKm5vdCBjYWxsZWQgKi8KKyAgICB9CisgICAgCisgICAgcHVibGljIFJlc3BvbnNlPEdyZWV0TWVMYXRlclJlc3BvbnNlPiBncmVldE1lTGF0ZXJBc3luYyhsb25nIHJlcXVlc3RUeXBlKSB7IAorICAgICAgICByZXR1cm4gbnVsbDsgCisgICAgICAgIC8qbm90IGNhbGxlZCAqLworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgRnV0dXJlPD8+IHNheUhpQXN5bmMoQXN5bmNIYW5kbGVyPFNheUhpUmVzcG9uc2U+IGFzeW5jSGFuZGxlcikgeyAKKyAgICAgICAgcmV0dXJuIG51bGw7IAorICAgICAgICAvKm5vdCBjYWxsZWQgKi8KKyAgICB9CisgICAgCisgICAgcHVibGljIFJlc3BvbnNlPFNheUhpUmVzcG9uc2U+IHNheUhpQXN5bmMoKSB7IAorICAgICAgICByZXR1cm4gbnVsbDsgCisgICAgICAgIC8qbm90IGNhbGxlZCAqLworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgdGVzdE5pbGxhYmxlKFN0cmluZyBuaWxsRWxlbSwgaW50IGludEVsZW0pIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzcG9uc2U8VGVzdE5pbGxhYmxlUmVzcG9uc2U+IHRlc3ROaWxsYWJsZUFzeW5jKFN0cmluZyBuaWxsRWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnRFbGVtKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgRnV0dXJlPD8+IHRlc3ROaWxsYWJsZUFzeW5jKFN0cmluZyBuaWxsRWxlbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW50RWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzeW5jSGFuZGxlcjxUZXN0TmlsbGFibGVSZXNwb25zZT4gYXN5bmNIYW5kbGVyKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnkoTG9nZ2VyIGxvZykgeworICAgICAgICBpZiAodmVyaWZpZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNQVAvSGVhZGVyIHZlcmlmaWNhdGlvbiBmYWlsZWQ6ICIgKyB2ZXJpZmllZCk7CisgICAgICAgICAgICBsb2cubG9nKExldmVsLldBUk5JTkcsIAorICAgICAgICAgICAgICAgICAgICAiTUFQL0hlYWRlciB2ZXJpZmljYXRpb24gZmFpbGVkOiB7MH0iLAorICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlcmlmaWVkID09IG51bGw7CisgICAgfQorICAgIAorCisgICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyB2ZXJpZmljYXRpb24pIHsKKyAgICAgICAgaWYgKHZlcmlmaWNhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICB2ZXJpZmllZCA9IHZlcmlmaWVkID09IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgPyB2ZXJpZmljYXRpb24KKyAgICAgICAgICAgICAgICA6IHZlcmlmaWVkICsgIjsgIiArIHZlcmlmaWNhdGlvbjsKKyAgICAgICAgfQorICAgIH0KK30KKworCmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9hZGRyZXNzaW5nL0hlYWRlclZlcmlmaWVyLmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9hZGRyZXNzaW5nL0hlYWRlclZlcmlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwYjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvSGVhZGVyVmVyaWZpZXIuamF2YQpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLndzLmFkZHJlc3Npbmc7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkNvbnRleHQ7CitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkVsZW1lbnQ7CitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwuYmluZC5NYXJzaGFsbGVyOworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLnNvYXAuU09BUEV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5iaW5kaW5nLnNvYXAuU29hcE1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuYmluZGluZy5zb2FwLlNvYXBWZXJzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJpbmRpbmcuc29hcC5pbnRlcmNlcHRvci5BYnN0cmFjdFNvYXBJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5oZWFkZXJzLkhlYWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5oZWxwZXJzLkRPTVV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnBoYXNlLlBoYXNlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuQWRkcmVzc2luZ1Byb3BlcnRpZXM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5BdHRyaWJ1dGVkVVJJVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLkNvbnRleHRVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLk5hbWVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3Npbmcuc29hcC5WZXJzaW9uVHJhbnNmb3JtZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy52MjAwNDA4LkF0dHJpYnV0ZWRVUkk7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5KQVhXU0FDb25zdGFudHMuQ0xJRU5UX0FERFJFU1NJTkdfUFJPUEVSVElFU19JTkJPVU5EOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLkpBWFdTQUNvbnN0YW50cy5TRVJWRVJfQUREUkVTU0lOR19QUk9QRVJUSUVTX09VVEJPVU5EOworCisKKy8qKgorICogVmVyaWZpZXMgcHJlc2VuY2Ugb2YgZXhwZWN0ZWQgU09BUCBoZWFkZXJzLgorICovCitwdWJsaWMgY2xhc3MgSGVhZGVyVmVyaWZpZXIgZXh0ZW5kcyBBYnN0cmFjdFNvYXBJbnRlcmNlcHRvciB7CisgICAgVmVyaWZpY2F0aW9uQ2FjaGUgdmVyaWZpY2F0aW9uQ2FjaGUgPSBuZXcgR3JlZXRlckltcGwoKTsKKyAgICBTdHJpbmcgY3VycmVudE5hbWVzcGFjZVVSSTsKKyAgICAKKyAgICBwdWJsaWMgSGVhZGVyVmVyaWZpZXIoKSB7CisgICAgICAgIHN1cGVyKFBoYXNlLlBPU1RfUFJPVE9DT0wpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRVbmRlcnN0b29kSGVhZGVycygpIHsKKyAgICAgICAgcmV0dXJuIE5hbWVzLkhFQURFUlM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShTb2FwTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgIG1lZGlhdGUobWVzc2FnZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaGFuZGxlRmF1bHQoU29hcE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICBtZWRpYXRlKG1lc3NhZ2UpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgbWVkaWF0ZShTb2FwTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgIGJvb2xlYW4gb3V0Z29pbmdQYXJ0aWFsUmVzcG9uc2UgPSBpc091dGdvaW5nUGFydGlhbFJlc3BvbnNlKG1lc3NhZ2UpOworICAgICAgICBpZiAob3V0Z29pbmdQYXJ0aWFsUmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGFkZFBhcnRpYWxSZXNwb25zZUhlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICB2ZXJpZnkobWVzc2FnZSwgb3V0Z29pbmdQYXJ0aWFsUmVzcG9uc2UpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRQYXJ0aWFsUmVzcG9uc2VIZWFkZXIoU29hcE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gYWRkIHBpZ2d5YmFja2VkIHdzYTpGcm9tIGhlYWRlciB0byBwYXJ0aWFsIHJlc3BvbnNlCisgICAgICAgICAgICBMaXN0PEhlYWRlcj4gaGVhZGVyID0gbWVzc2FnZS5nZXRIZWFkZXJzKCk7CisgICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBET01VdGlscy5jcmVhdGVEb2N1bWVudCgpOworICAgICAgICAgICAgU29hcFZlcnNpb24gdmVyID0gbWVzc2FnZS5nZXRWZXJzaW9uKCk7CisgICAgICAgICAgICBFbGVtZW50IGhkciA9IGRvYy5jcmVhdGVFbGVtZW50TlModmVyLmdldEhlYWRlcigpLmdldE5hbWVzcGFjZVVSSSgpLCAKKyAgICAgICAgICAgICAgICB2ZXIuZ2V0SGVhZGVyKCkuZ2V0TG9jYWxQYXJ0KCkpOworICAgICAgICAgICAgaGRyLnNldFByZWZpeCh2ZXIuZ2V0SGVhZGVyKCkuZ2V0UHJlZml4KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtYXJzaGFsbEZyb20oInVybjpwaWdneWJhY2tfcmVzcG9uZGVyIiwgaGRyLCBnZXRNYXJzaGFsbGVyKCkpOworICAgICAgICAgICAgTm9kZUxpc3QgbmwgPSBoZHIuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0IG9iaiA9IG5sLml0ZW0oaSk7CisgICAgICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudCBlbGVtID0gKEVsZW1lbnQpIG9iajsKKyAgICAgICAgICAgICAgICAgICAgSGVhZGVyIGhvbGRlciA9IG5ldyBIZWFkZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFFOYW1lKGVsZW0uZ2V0TmFtZXNwYWNlVVJJKCksIGVsZW0uZ2V0TG9jYWxOYW1lKCkpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmFkZChob2xkZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdmVyaWZpY2F0aW9uQ2FjaGUucHV0KCJTT0FQIGhlYWRlciBhZGRpdGlvbiBmYWlsZWQ6ICIgKyBlKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmVyaWZ5KFNvYXBNZXNzYWdlIG1lc3NhZ2UsIGJvb2xlYW4gb3V0Z29pbmdQYXJ0aWFsUmVzcG9uc2UpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIExpc3Q8U3RyaW5nPiB3c2FIZWFkZXJzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgICAgICBMaXN0PEhlYWRlcj4gaGVhZGVycyA9IG1lc3NhZ2UuZ2V0SGVhZGVycygpOworICAgICAgICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlY29yZFdTQUhlYWRlcnMoaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzYUhlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lcy5XU0FfTkFNRVNQQUNFX05BTUUpOworICAgICAgICAgICAgICAgIHJlY29yZFdTQUhlYWRlcnMoaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzYUhlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uVHJhbnNmb3JtZXIuTmFtZXMyMDA0MDguV1NBX05BTUVTUEFDRV9OQU1FKTsKKyAgICAgICAgICAgICAgICByZWNvcmRXU0FIZWFkZXJzKGhlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c2FIZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NBZGRyZXNzaW5nVGVzdC5DVVNUT01FUl9OQU1FLmdldE5hbWVzcGFjZVVSSSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2xlYW4gcGFydGlhbFJlc3BvbnNlID0gaXNJbmNvbWluZ1BhcnRpYWxSZXNwb25zZShtZXNzYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvdXRnb2luZ1BhcnRpYWxSZXNwb25zZTsKKyAgICAgICAgICAgIHZlcmlmaWNhdGlvbkNhY2hlLnB1dChXU0FkZHJlc3NpbmdUZXN0LnZlcmlmeUhlYWRlcnMod3NhSGVhZGVycywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1ZXN0TGVnKG1lc3NhZ2UpKSk7CisgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gc2UpIHsKKyAgICAgICAgICAgIHZlcmlmaWNhdGlvbkNhY2hlLnB1dCgiU09BUCBoZWFkZXIgdmVyaWZpY2F0aW9uIGZhaWxlZDogIiArIHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZWNvcmRXU0FIZWFkZXJzKExpc3Q8SGVhZGVyPiBoZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiB3c2FIZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2VVUkkpIHsKKyAgICAgICAgSXRlcmF0b3I8SGVhZGVyPiBpdGVyID0gaGVhZGVycy5pdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVyLm5leHQoKS5nZXRPYmplY3QoKTsKKyAgICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBoZHIgPSAoRWxlbWVudCkgb2JqOworICAgICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkuZXF1YWxzKGhkci5nZXROYW1lc3BhY2VVUkkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVzcGFjZVVSSS5lbmRzV2l0aCgiYWRkcmVzc2luZyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOworICAgICAgICAgICAgICAgICAgICAgICAgd3NhSGVhZGVycy5hZGQoaGRyLmdldExvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChXU0FkZHJlc3NpbmdUZXN0LkNVU1RPTUVSX05BTUUuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKG5hbWVzcGFjZVVSSSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBoZWFkZXJUZXh0ID0gaGRyLmdldFRleHRDb250ZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV1NBZGRyZXNzaW5nVGVzdC5DVVNUT01FUl9LRVkuZXF1YWxzKGhlYWRlclRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NhSGVhZGVycy5hZGQoaGRyLmdldExvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzUmVxdWVzdExlZyhTb2FwTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgIHJldHVybiAoQ29udGV4dFV0aWxzLmlzUmVxdWVzdG9yKG1lc3NhZ2UpICYmIENvbnRleHRVdGlscy5pc091dGJvdW5kKG1lc3NhZ2UpKQorICAgICAgICAgICAgICAgfHwgKCFDb250ZXh0VXRpbHMuaXNSZXF1ZXN0b3IobWVzc2FnZSkgJiYgIUNvbnRleHRVdGlscy5pc091dGJvdW5kKG1lc3NhZ2UpKTsgICAgIAorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc091dGdvaW5nUGFydGlhbFJlc3BvbnNlKFNvYXBNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgQWRkcmVzc2luZ1Byb3BlcnRpZXMgbWFwcyA9IAorICAgICAgICAgICAgKEFkZHJlc3NpbmdQcm9wZXJ0aWVzKW1lc3NhZ2UuZ2V0KFNFUlZFUl9BRERSRVNTSU5HX1BST1BFUlRJRVNfT1VUQk9VTkQpOworICAgICAgICByZXR1cm4gQ29udGV4dFV0aWxzLmlzT3V0Ym91bmQobWVzc2FnZSkKKyAgICAgICAgICAgICAgICYmICFDb250ZXh0VXRpbHMuaXNSZXF1ZXN0b3IobWVzc2FnZSkKKyAgICAgICAgICAgICAgICYmIG1hcHMgIT0gbnVsbAorICAgICAgICAgICAgICAgJiYgTmFtZXMuV1NBX0FOT05ZTU9VU19BRERSRVNTLmVxdWFscyhtYXBzLmdldFRvKCkuZ2V0VmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0luY29taW5nUGFydGlhbFJlc3BvbnNlKFNvYXBNZXNzYWdlIG1lc3NhZ2UpIAorICAgICAgICB0aHJvd3MgU09BUEV4Y2VwdGlvbiB7CisgICAgICAgIEFkZHJlc3NpbmdQcm9wZXJ0aWVzIG1hcHMgPSAKKyAgICAgICAgICAgIChBZGRyZXNzaW5nUHJvcGVydGllcyltZXNzYWdlLmdldChDTElFTlRfQUREUkVTU0lOR19QUk9QRVJUSUVTX0lOQk9VTkQpOworICAgICAgICByZXR1cm4gIUNvbnRleHRVdGlscy5pc091dGJvdW5kKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAmJiBDb250ZXh0VXRpbHMuaXNSZXF1ZXN0b3IobWVzc2FnZSkKKyAgICAgICAgICAgICAgICYmIG1hcHMgIT0gbnVsbAorICAgICAgICAgICAgICAgJiYgTmFtZXMuV1NBX0FOT05ZTU9VU19BRERSRVNTLmVxdWFscyhtYXBzLmdldFRvKCkuZ2V0VmFsdWUoKSk7CisgICAgfQorICAgIAorICAgIHByaXZhdGUgTWFyc2hhbGxlciBnZXRNYXJzaGFsbGVyKCkgdGhyb3dzIEpBWEJFeGNlcHRpb24geworICAgICAgICBKQVhCQ29udGV4dCBqYXhiQ29udGV4dCA9CisgICAgICAgICAgICBWZXJzaW9uVHJhbnNmb3JtZXIuZ2V0RXhwb3NlZEpBWEJDb250ZXh0KGN1cnJlbnROYW1lc3BhY2VVUkkpOworICAgICAgICBNYXJzaGFsbGVyIG1hcnNoYWxsZXIgPSBqYXhiQ29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCk7CisgICAgICAgIG1hcnNoYWxsZXIuc2V0UHJvcGVydHkoTWFyc2hhbGxlci5KQVhCX0ZSQUdNRU5ULCBCb29sZWFuLlRSVUUpOworICAgICAgICByZXR1cm4gbWFyc2hhbGxlcjsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbWFyc2hhbGxGcm9tKFN0cmluZyBmcm9tLCBFbGVtZW50IGhlYWRlciwgTWFyc2hhbGxlciBtYXJzaGFsbGVyKSAKKyAgICAgICAgdGhyb3dzIEpBWEJFeGNlcHRpb24geworICAgICAgICBpZiAoTmFtZXMuV1NBX05BTUVTUEFDRV9OQU1FLmVxdWFscyhjdXJyZW50TmFtZXNwYWNlVVJJKSkgeworICAgICAgICAgICAgU3RyaW5nIHUgPSAidXJuOnBpZ2d5YmFja19yZXNwb25kZXIiOworICAgICAgICAgICAgQXR0cmlidXRlZFVSSVR5cGUgdmFsdWUgPQorICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuQ29udGV4dFV0aWxzLmdldEF0dHJpYnV0ZWRVUkkodSk7CisgICAgICAgICAgICBtYXJzaGFsbGVyLm1hcnNoYWwoCisgICAgICAgICAgICAgICAgbmV3IEpBWEJFbGVtZW50PEF0dHJpYnV0ZWRVUklUeXBlPihOYW1lcy5XU0FfRlJPTV9RTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZWRVUklUeXBlLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpLAorICAgICAgICAgICAgICAgIGhlYWRlcik7CisgICAgICAgIH0gZWxzZSBpZiAoVmVyc2lvblRyYW5zZm9ybWVyLk5hbWVzMjAwNDA4LldTQV9OQU1FU1BBQ0VfTkFNRS5lcXVhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TmFtZXNwYWNlVVJJKSkgeworICAgICAgICAgICAgQXR0cmlidXRlZFVSSSB2YWx1ZSA9CisgICAgICAgICAgICAgICAgVmVyc2lvblRyYW5zZm9ybWVyLk5hbWVzMjAwNDA4LldTQV9PQkpFQ1RfRkFDVE9SWS5jcmVhdGVBdHRyaWJ1dGVkVVJJKCk7CisgICAgICAgICAgICB2YWx1ZS5zZXRWYWx1ZShmcm9tKTsKKyAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gbmV3IFFOYW1lKFZlcnNpb25UcmFuc2Zvcm1lci5OYW1lczIwMDQwOC5XU0FfTkFNRVNQQUNFX05BTUUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZXMuV1NBX0ZST01fTkFNRSk7CisgICAgICAgICAgICBtYXJzaGFsbGVyLm1hcnNoYWwoCisgICAgICAgICAgICAgICAgbmV3IEpBWEJFbGVtZW50PEF0dHJpYnV0ZWRVUkk+KHFuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVkVVJJLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSksCisgICAgICAgICAgICAgICAgaGVhZGVyKTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldFZlcmlmaWNhdGlvbkNhY2hlKFZlcmlmaWNhdGlvbkNhY2hlIGNhY2hlKSB7CisgICAgICAgIHZlcmlmaWNhdGlvbkNhY2hlID0gY2FjaGU7CisgICAgfQorICAgIAorICAgIAorfQorCisKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvTUFQVmVyaWZpZXIuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvTUFQVmVyaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTk5MGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3MvYWRkcmVzc2luZy9NQVBWZXJpZmllci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIud3MuYWRkcmVzc2luZzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5BYnN0cmFjdFBoYXNlSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuUGhhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5BZGRyZXNzaW5nUHJvcGVydGllc0ltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5Db250ZXh0VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5OYW1lczsKKworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLkpBWFdTQUNvbnN0YW50cy5DTElFTlRfQUREUkVTU0lOR19QUk9QRVJUSUVTX0lOQk9VTkQ7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuSkFYV1NBQ29uc3RhbnRzLkNMSUVOVF9BRERSRVNTSU5HX1BST1BFUlRJRVNfT1VUQk9VTkQ7CisKKworLyoqCisgKiBWZXJpZmllcyBwcmVzZW5jZSBvZiBNQVBzIGluIHRoZSBjb250ZXh0LgorICovCitwdWJsaWMgY2xhc3MgTUFQVmVyaWZpZXIgZXh0ZW5kcyBBYnN0cmFjdFBoYXNlSW50ZXJjZXB0b3I8TWVzc2FnZT4geworICAgIFZlcmlmaWNhdGlvbkNhY2hlIHZlcmlmaWNhdGlvbkNhY2hlID0gbmV3IEdyZWV0ZXJJbXBsKCk7CisgICAgTGlzdDxTdHJpbmc+IGV4cGVjdGVkRXhwb3NlZEFzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcFByb3BlcnRpZXM7CisKKyAgICBwdWJsaWMgTUFQVmVyaWZpZXIoKSB7CisgICAgICAgIHN1cGVyKFBoYXNlLlBPU1RfTE9HSUNBTCk7CisgICAgICAgIG1hcFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKTsKKyAgICAgICAgbWFwUHJvcGVydGllcy5wdXQoV1NBZGRyZXNzaW5nVGVzdC5JTkJPVU5EX0tFWSwgQ0xJRU5UX0FERFJFU1NJTkdfUFJPUEVSVElFU19JTkJPVU5EKTsKKyAgICAgICAgbWFwUHJvcGVydGllcy5wdXQoV1NBZGRyZXNzaW5nVGVzdC5PVVRCT1VORF9LRVksIENMSUVOVF9BRERSRVNTSU5HX1BST1BFUlRJRVNfT1VUQk9VTkQpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICB2ZXJpZnkobWVzc2FnZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaGFuZGxlRmF1bHQoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgIHZlcmlmeShtZXNzYWdlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdmVyaWZ5KE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICBib29sZWFuIGlzT3V0Ym91bmQgPSBDb250ZXh0VXRpbHMuaXNPdXRib3VuZChtZXNzYWdlKTsKKyAgICAgICAgU3RyaW5nIG1hcFByb3BlcnR5ID0gCisgICAgICAgICAgICAoU3RyaW5nKW1hcFByb3BlcnRpZXMuZ2V0KGlzT3V0Ym91bmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV1NBZGRyZXNzaW5nVGVzdC5PVVRCT1VORF9LRVkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBXU0FkZHJlc3NpbmdUZXN0LklOQk9VTkRfS0VZKTsKKyAgICAgICAgQWRkcmVzc2luZ1Byb3BlcnRpZXNJbXBsIG1hcHMgPSAKKyAgICAgICAgICAgIChBZGRyZXNzaW5nUHJvcGVydGllc0ltcGwpbWVzc2FnZS5nZXQobWFwUHJvcGVydHkpOworICAgICAgICBpZiAoQ29udGV4dFV0aWxzLmlzUmVxdWVzdG9yKG1lc3NhZ2UpKSB7CisgICAgICAgICAgICBpZiAoaXNPdXRib3VuZCkgeworICAgICAgICAgICAgICAgIFN0cmluZyBleHBvc2VBcyA9IGdldEV4cGVjdGVkRXhwb3NlQXMoZmFsc2UpOworICAgICAgICAgICAgICAgIGlmIChleHBvc2VBcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcHMuZXhwb3NlQXMoZXhwb3NlQXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGV4cG9zZUFzID0gZ2V0RXhwZWN0ZWRFeHBvc2VBcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWQgPSBleHBvc2VBcyAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBleHBvc2VBcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTmFtZXMuV1NBX05BTUVTUEFDRV9OQU1FOworICAgICAgICAgICAgICAgIGlmIChtYXBzLmdldE5hbWVzcGFjZVVSSSgpICE9IGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbkNhY2hlLnB1dCgiSW5jb21pbmcgdmVyc2lvbiBtaXNtYXRjaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgZ290OiAiICsgbWFwcy5nZXROYW1lc3BhY2VVUkkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4cG9zZUFzID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2ZXJpZmljYXRpb25DYWNoZS5wdXQoV1NBZGRyZXNzaW5nVGVzdC52ZXJpZnlNQVBzKG1hcHMsIHRoaXMpKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RXhwZWN0ZWRFeHBvc2VBcyhib29sZWFuIHJlbW92ZSkgeworICAgICAgICBpbnQgc2l6ZSA9IGV4cGVjdGVkRXhwb3NlZEFzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuICBzaXplID09IDAgCisgICAgICAgICAgICAgICAgPyBudWxsCisgICAgICAgICAgICAgICAgOiByZW1vdmUKKyAgICAgICAgICAgICAgICAgID8gZXhwZWN0ZWRFeHBvc2VkQXMucmVtb3ZlKHNpemUgLSAxKQorICAgICAgICAgICAgICAgICAgOiBleHBlY3RlZEV4cG9zZWRBcy5nZXQoc2l6ZSAtIDEpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRWZXJpZmljYXRpb25DYWNoZShWZXJpZmljYXRpb25DYWNoZSBjYWNoZSkgeworICAgICAgICB2ZXJpZmljYXRpb25DYWNoZSA9IGNhY2hlOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBhZGRUb0V4cGVjdGVkRXhwb3NlZEFzKFN0cmluZyBzdHIpIHsKKyAgICAgICAgZXhwZWN0ZWRFeHBvc2VkQXMuYWRkKHN0cik7CisgICAgfQorfQorCisKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvVmVyaWZpY2F0aW9uQ2FjaGUuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvVmVyaWZpY2F0aW9uQ2FjaGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjkyZGVmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3MvYWRkcmVzc2luZy9WZXJpZmljYXRpb25DYWNoZS5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5hZGRyZXNzaW5nOworCitwdWJsaWMgaW50ZXJmYWNlIFZlcmlmaWNhdGlvbkNhY2hlIHsKKyAgICB2b2lkIHB1dChTdHJpbmcgdmVyaWZpY2F0aW9uKTsKK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvV1NBZGRyZXNzaW5nVGVzdC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3MvYWRkcmVzc2luZy9XU0FkZHJlc3NpbmdUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkYmM3MgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL2FkZHJlc3NpbmcvV1NBZGRyZXNzaW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzg2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIud3MuYWRkcmVzc2luZzsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlVuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGphdmF4LnhtbC5iaW5kLkpBWEJFbGVtZW50OworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLndzLkVuZHBvaW50OworCitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5DYW1lbENvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5idWlsZGVyLlJvdXRlQnVpbGRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLnNwcmluZy5TcHJpbmdDYW1lbENvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC50ZXN0LkNhbWVsVGVzdFN1cHBvcnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1c0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuYnVzLnNwcmluZy5TcHJpbmdCdXNGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LlNlcnZlckltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4d3MuU2VydmljZUltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuamF4d3Muc3VwcG9ydC5TZXJ2aWNlRGVsZWdhdGVBY2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5BZGRyZXNzaW5nUHJvcGVydGllczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLkNvbnRleHRVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLkVuZHBvaW50UmVmZXJlbmNlVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLk5hbWVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuUmVmZXJlbmNlUGFyYW1ldGVyc1R5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5WZXJzaW9uVHJhbnNmb3JtZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3NkbC5FbmRwb2ludFJlZmVyZW5jZVV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkJhZFJlY29yZExpdEZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuTm9TdWNoQ29kZUxpdEZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLlNPQVBTZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIuU2VydmljZU1peENvbXBvbmVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVI7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jb3JlLlNlcnZpY2VNaXg7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RYbWxBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0OworCitwdWJsaWMgY2xhc3MgV1NBZGRyZXNzaW5nVGVzdCBleHRlbmRzIENhbWVsVGVzdFN1cHBvcnQgaW1wbGVtZW50cyBWZXJpZmljYXRpb25DYWNoZSB7CisgICAgCisgICAgCisgICAgCisgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9BRERSRVNTID0gImxvY2FsOi8vc214L2hlbGxvX3dvcmxkIjsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5CT1VORF9LRVkgPSAiaW5ib3VuZCI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRCT1VORF9LRVkgPSAib3V0Ym91bmQiOworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUREUkVTUyA9ICJodHRwOi8vbG9jYWxob3N0OjkwMDgvU29hcENvbnRleHQvU29hcFBvcnQiOworICAgIHN0YXRpYyBmaW5hbCBRTmFtZSBDVVNUT01FUl9OQU1FID0KKyAgICAgICAgbmV3IFFOYW1lKCJodHRwOi8vZXhhbXBsZS5vcmcvY3VzdG9tZXIiLCAiQ3VzdG9tZXJLZXkiLCAiY3VzdG9tZXIiKTsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENVU1RPTUVSX0tFWSA9ICJLZXkjMTIzNDU2Nzg5IjsKKworICAgIHByaXZhdGUgc3RhdGljIEJ1cyBzdGF0aWNCdXM7CisKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBNQVBWZXJpZmllciBtYXBWZXJpZmllcjsKKyAgICBwcml2YXRlIHN0YXRpYyBIZWFkZXJWZXJpZmllciBoZWFkZXJWZXJpZmllcjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFNFUlZJQ0VfTkFNRSA9IAorICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cCIsICJTT0FQU2VydmljZUFkZHJlc3NpbmciKTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBqYXZhLm5ldC5VUkwgV1NETF9MT0M7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJRzsKKyAgICAKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBNYXA8T2JqZWN0LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBtZXNzYWdlSURzID0KKyAgICAgICAgbmV3IEhhc2hNYXA8T2JqZWN0LCBNYXA8U3RyaW5nLCBTdHJpbmc+PigpOworICAgIHByb3RlY3RlZCBHcmVldGVyIGdyZWV0ZXI7CisgICAgcHJpdmF0ZSBTdHJpbmcgdmVyaWZpZWQ7CisKKyAgICAKKyAgICBwcm90ZWN0ZWQgQWJzdHJhY3RYbWxBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OworCisgICAgCisgICAgcHJpdmF0ZSBTZXJ2ZXJJbXBsIHNlcnZlcjsKKyAgICBwcml2YXRlIENhbWVsQ29udGV4dCBjYW1lbENvbnRleHQ7CisgICAgcHJpdmF0ZSBTZXJ2aWNlTWl4Q29tcG9uZW50IHNteENvbXBvbmVudDsKKyAgICBwcml2YXRlIE5NUiBubXI7CisgICAgcHJpdmF0ZSBFbmRwb2ludCBlbmRwb2ludDsKKworICAgIHN0YXRpYyB7CisgICAgICAgIENPTkZJRyA9ICJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9hZGRyZXNzaW5nIiAKKyAgICAgICAgICAgICsgKCgiSFAtVVgiLmVxdWFscyhTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKSkKKyAgICAgICAgICAgICAgICB8fCAiV2luZG93cyBYUCIuZXF1YWxzKFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpKSkgPyAiLWhwdXgiIDogIiIpCisgICAgICAgICAgICArICIueG1sIjsKKyAgICAgICAgCisgICAgICAgIGphdmEubmV0LlVSTCB0bXAgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdG1wID0gV1NBZGRyZXNzaW5nVGVzdC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlKAorICAgICAgICAgICAgICAgICJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9oZWxsb193b3JsZC53c2RsIgorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgV1NETF9MT0MgPSB0bXA7CisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dCA9IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgICAgICBzdXBlci5zZXRVcCgpOyAgICAgICAgCisgICAgICAgIHN0YXJ0U2VydmljZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXRpY0J1cyA9PSBudWxsKSB7CisgICAgICAgICAgICBTcHJpbmdCdXNGYWN0b3J5IGJmID0gbmV3IFNwcmluZ0J1c0ZhY3RvcnkoKTsKKyAgICAgICAgICAgIHN0YXRpY0J1cyA9IGJmLmNyZWF0ZUJ1cyhnZXRDb25maWdGaWxlTmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICBtZXNzYWdlSURzLmNsZWFyKCk7CisgICAgICAgIG1hcFZlcmlmaWVyID0gbmV3IE1BUFZlcmlmaWVyKCk7CisgICAgICAgIGhlYWRlclZlcmlmaWVyID0gbmV3IEhlYWRlclZlcmlmaWVyKCk7CisgICAgICAgIEludGVyY2VwdG9yW10gaW50ZXJjZXB0b3JzID0ge21hcFZlcmlmaWVyLCBoZWFkZXJWZXJpZmllciB9OworICAgICAgICBhZGRJbnRlcmNlcHRvcnMoc3RhdGljQnVzLmdldEluSW50ZXJjZXB0b3JzKCksIGludGVyY2VwdG9ycyk7CisgICAgICAgIGFkZEludGVyY2VwdG9ycyhzdGF0aWNCdXMuZ2V0T3V0SW50ZXJjZXB0b3JzKCksIGludGVyY2VwdG9ycyk7CisgICAgICAgIGFkZEludGVyY2VwdG9ycyhzdGF0aWNCdXMuZ2V0T3V0RmF1bHRJbnRlcmNlcHRvcnMoKSwgaW50ZXJjZXB0b3JzKTsKKyAgICAgICAgYWRkSW50ZXJjZXB0b3JzKHN0YXRpY0J1cy5nZXRJbkZhdWx0SW50ZXJjZXB0b3JzKCksIGludGVyY2VwdG9ycyk7CisgICAgICAgIAorICAgICAgICBFbmRwb2ludFJlZmVyZW5jZVR5cGUgdGFyZ2V0ID0gCisgICAgICAgICAgICBFbmRwb2ludFJlZmVyZW5jZVV0aWxzLmdldEVuZHBvaW50UmVmZXJlbmNlKEFERFJFU1MpOworICAgICAgICBSZWZlcmVuY2VQYXJhbWV0ZXJzVHlwZSBwYXJhbXMgPSAKKyAgICAgICAgICAgIENvbnRleHRVdGlscy5XU0FfT0JKRUNUX0ZBQ1RPUlkuY3JlYXRlUmVmZXJlbmNlUGFyYW1ldGVyc1R5cGUoKTsKKyAgICAgICAgSkFYQkVsZW1lbnQ8U3RyaW5nPiBwYXJhbSA9CisgICAgICAgICAgICAgbmV3IEpBWEJFbGVtZW50PFN0cmluZz4oQ1VTVE9NRVJfTkFNRSwgU3RyaW5nLmNsYXNzLCBDVVNUT01FUl9LRVkpOworICAgICAgICBwYXJhbXMuZ2V0QW55KCkuYWRkKHBhcmFtKTsKKyAgICAgICAgdGFyZ2V0LnNldFJlZmVyZW5jZVBhcmFtZXRlcnMocGFyYW1zKTsKKyAgICAgICAgCisgICAgICAgIFNlcnZpY2VJbXBsIHNlcnZpY2VJbXBsID0gCisgICAgICAgICAgICBTZXJ2aWNlRGVsZWdhdGVBY2Nlc3Nvci5nZXQobmV3IFNPQVBTZXJ2aWNlKFdTRExfTE9DLCBTRVJWSUNFX05BTUUpKTsKKyAgICAgICAgZ3JlZXRlciA9IHNlcnZpY2VJbXBsLmdldFBvcnQodGFyZ2V0LCBHcmVldGVyLmNsYXNzKTsKKworICAgICAgICBtYXBWZXJpZmllci52ZXJpZmljYXRpb25DYWNoZSA9IHRoaXM7CisgICAgICAgIGhlYWRlclZlcmlmaWVyLnZlcmlmaWNhdGlvbkNhY2hlID0gdGhpczsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgc3RhcnRTZXJ2aWNlKCkgeyAgICAgICAKKyAgICAgICAgT2JqZWN0IGltcGxlbWVudG9yID0gbmV3IEdyZWV0ZXJJbXBsKCk7CisgICAgICAgIGVuZHBvaW50ID0gamF2YXgueG1sLndzLkVuZHBvaW50LnB1Ymxpc2goU0VSVklDRV9BRERSRVNTLCBpbXBsZW1lbnRvcik7CisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChhcHBsaWNhdGlvbkNvbnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LmRlc3Ryb3koKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VydmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZHBvaW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGVuZHBvaW50LnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICBJbnRlcmNlcHRvcltdIGludGVyY2VwdG9ycyA9IHttYXBWZXJpZmllciwgaGVhZGVyVmVyaWZpZXIgfTsKKyAgICAgICAgcmVtb3ZlSW50ZXJjZXB0b3JzKHN0YXRpY0J1cy5nZXRJbkludGVyY2VwdG9ycygpLCBpbnRlcmNlcHRvcnMpOworICAgICAgICByZW1vdmVJbnRlcmNlcHRvcnMoc3RhdGljQnVzLmdldE91dEludGVyY2VwdG9ycygpLCBpbnRlcmNlcHRvcnMpOworICAgICAgICByZW1vdmVJbnRlcmNlcHRvcnMoc3RhdGljQnVzLmdldE91dEZhdWx0SW50ZXJjZXB0b3JzKCksIGludGVyY2VwdG9ycyk7CisgICAgICAgIHJlbW92ZUludGVyY2VwdG9ycyhzdGF0aWNCdXMuZ2V0SW5GYXVsdEludGVyY2VwdG9ycygpLCBpbnRlcmNlcHRvcnMpOworICAgICAgICBtYXBWZXJpZmllciA9IG51bGw7CisgICAgICAgIGhlYWRlclZlcmlmaWVyID0gbnVsbDsKKyAgICAgICAgdmVyaWZpZWQgPSBudWxsOworICAgICAgICBtZXNzYWdlSURzLmNsZWFyKCk7CisgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CisgICAgICAgIEJ1c0ZhY3Rvcnkuc2V0RGVmYXVsdEJ1cyhudWxsKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgIH0KKyAgCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgeworICAgICAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSB0aGUgcm91dGUgZnJvbSBzcHJpbmcgYXBwbGljYXRpb24KKyAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIobm9FcnJvckhhbmRsZXIoKSk7CisgICAgICAgICAgICAgICAgZnJvbSgiY3hmOmJlYW46cm91dGVyRW5kcG9pbnQiKS50bygic214OnRlc3RFbmRwb2ludCIpOworICAgICAgICAgICAgICAgIGZyb20oInNteDp0ZXN0RW5kcG9pbnQiKS50bygiY3hmOmJlYW46c2VydmljZUVuZHBvaW50Iik7ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgQ2FtZWxDb250ZXh0IGNyZWF0ZUNhbWVsQ29udGV4dCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBjYW1lbENvbnRleHQgPSBTcHJpbmdDYW1lbENvbnRleHQuc3ByaW5nQ2FtZWxDb250ZXh0KGFwcGxpY2F0aW9uQ29udGV4dCk7CisgICAgICAgIHNteENvbXBvbmVudCA9IG5ldyBTZXJ2aWNlTWl4Q29tcG9uZW50KCk7CisgICAgICAgIG5tciA9IG5ldyBTZXJ2aWNlTWl4KCk7CisgICAgICAgICgoU2VydmljZU1peClubXIpLmluaXQoKTsKKyAgICAgICAgc214Q29tcG9uZW50LnNldE5tcihubXIpOworICAgICAgICBjYW1lbENvbnRleHQuYWRkQ29tcG9uZW50KCJzbXgiLCBzbXhDb21wb25lbnQpOworICAgICAgICByZXR1cm4gY2FtZWxDb250ZXh0OworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQoIm9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL3NlcnZlci54bWwiKTsKKyAgICB9CisKKyAgICAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGljaXRNQVBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgZ3JlZXRpbmcgPSBncmVldGVyLmdyZWV0TWUoImltcGxpY2l0MSIpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gc2VydmljZSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxsbyBpbXBsaWNpdDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWV0aW5nKTsKKyAgICAgICAgICAgIGNoZWNrVmVyaWZpY2F0aW9uKCk7CisgICAgICAgICAgICBncmVldGluZyA9IGdyZWV0ZXIuZ3JlZXRNZSgiaW1wbGljaXQyIik7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBzZXJ2aWNlIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvIGltcGxpY2l0MiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlZXRpbmcpOworICAgICAgICAgICAgY2hlY2tWZXJpZmljYXRpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgKEV4Y2VwdGlvbilleC5nZXRDYXVzZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIAorICAgIAorICAgIHB1YmxpYyB2b2lkIHRlc3RPbmV3YXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdyZWV0ZXIuZ3JlZXRNZU9uZVdheSgiaW1wbGljaXRfb25ld2F5MSIpOworICAgICAgICAgICAgY2hlY2tWZXJpZmljYXRpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgKEV4Y2VwdGlvbilleC5nZXRDYXVzZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEFwcGxpY2F0aW9uRmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdyZWV0ZXIudGVzdERvY0xpdEZhdWx0KCJCYWRSZWNvcmRMaXRGYXVsdCIpOworICAgICAgICAgICAgZmFpbCgiZXhwZWN0ZWQgZmF1bHQgZnJvbSBzZXJ2aWNlIik7CisgICAgICAgIH0gY2F0Y2ggKEJhZFJlY29yZExpdEZhdWx0IGJybGYpIHsKKyAgICAgICAgICAgIGNoZWNrVmVyaWZpY2F0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKFVuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHRocm93IChFeGNlcHRpb24pZXguZ2V0Q2F1c2UoKTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgZ3JlZXRpbmcgPSBncmVldGVyLmdyZWV0TWUoImludHJhLWZhdWx0Iik7CisgICAgICAgIGFzc2VydEVxdWFscygidW5leHBlY3RlZCByZXNwb25zZSByZWNlaXZlZCBmcm9tIHNlcnZpY2UiLCAKKyAgICAgICAgICAgICAgICAgICAgICJIZWxsbyBpbnRyYS1mYXVsdCIsCisgICAgICAgICAgICAgICAgICAgICBncmVldGluZyk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBncmVldGVyLnRlc3REb2NMaXRGYXVsdCgiTm9TdWNoQ29kZUxpdEZhdWx0Iik7CisgICAgICAgICAgICBmYWlsKCJleHBlY3RlZCBOb1N1Y2hDb2RlTGl0RmF1bHQiKTsKKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoQ29kZUxpdEZhdWx0IG5zY2xmKSB7CisgICAgICAgICAgICBjaGVja1ZlcmlmaWNhdGlvbigpOworICAgICAgICB9IGNhdGNoIChVbmRlY2xhcmVkVGhyb3dhYmxlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICB0aHJvdyAoRXhjZXB0aW9uKWV4LmdldENhdXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VmVyc2lvbmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gZXhwZWN0IHR3byBNQVBzIGluc3RhbmNlcyB2ZXJzaW9uZWQgd2l0aCAyMDA0MDgsIGkuZS4gZm9yIGJvdGggCisgICAgICAgICAgICAvLyB0aGUgcGFydGlhbCBhbmQgZnVsbCByZXNwb25zZXMKKyAgICAgICAgICAgIG1hcFZlcmlmaWVyLmV4cGVjdGVkRXhwb3NlZEFzLmFkZChWZXJzaW9uVHJhbnNmb3JtZXIuTmFtZXMyMDA0MDguV1NBX05BTUVTUEFDRV9OQU1FKTsKKyAgICAgICAgICAgIG1hcFZlcmlmaWVyLmV4cGVjdGVkRXhwb3NlZEFzLmFkZChWZXJzaW9uVHJhbnNmb3JtZXIuTmFtZXMyMDA0MDguV1NBX05BTUVTUEFDRV9OQU1FKTsKKyAgICAgICAgICAgIFN0cmluZyBncmVldGluZyA9IGdyZWV0ZXIuZ3JlZXRNZSgidmVyc2lvbmluZzEiKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygidW5leHBlY3RlZCByZXNwb25zZSByZWNlaXZlZCBmcm9tIHNlcnZpY2UiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG8gdmVyc2lvbmluZzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWV0aW5nKTsKKyAgICAgICAgICAgIGNoZWNrVmVyaWZpY2F0aW9uKCk7CisgICAgICAgICAgICBncmVldGluZyA9IGdyZWV0ZXIuZ3JlZXRNZSgidmVyc2lvbmluZzIiKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygidW5leHBlY3RlZCByZXNwb25zZSByZWNlaXZlZCBmcm9tIHNlcnZpY2UiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG8gdmVyc2lvbmluZzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWV0aW5nKTsKKyAgICAgICAgICAgIGNoZWNrVmVyaWZpY2F0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKFVuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHRocm93IChFeGNlcHRpb24pZXguZ2V0Q2F1c2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIHZlcmlmeU1BUHMoQWRkcmVzc2luZ1Byb3BlcnRpZXMgbWFwcywKKyAgICAgICAgICAgIE9iamVjdCBjaGVja1BvaW50KSB7CisgICAgICAgIGlmIChtYXBzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAiZXhwZWN0ZWQgTUFQcyI7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGlkID0gbWFwcy5nZXRNZXNzYWdlSUQoKS5nZXRWYWx1ZSgpOworICAgICAgICBpZiAoaWQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuICJleHBlY3RlZCBNZXNzYWdlSUQgTUFQIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlkLnN0YXJ0c1dpdGgoInVybjp1dWlkIikpIHsKKyAgICAgICAgICAgIHJldHVybiAiYmFkIFVSTiBmb3JtYXQgaW4gTWVzc2FnZUlEIE1BUDogIiArIGlkOworICAgICAgICB9CisgICAgICAgIC8vIGVuc3VyZSBNZXNzYWdlSUQgaXMgdW5pcXVlIGZvciB0aGlzIGNoZWNrIHBvaW50CisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gY2hlY2tQb2ludE1lc3NhZ2VJRHMgPSBtZXNzYWdlSURzLmdldChjaGVja1BvaW50KTsKKyAgICAgICAgaWYgKGNoZWNrUG9pbnRNZXNzYWdlSURzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChjaGVja1BvaW50TWVzc2FnZUlEcy5jb250YWluc0tleShpZCkpIHsKKyAgICAgICAgICAgICAgICAvLyByZXR1cm4gIk1lc3NhZ2VJRCBNQVAgZHVwbGljYXRlOiAiICsgaWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGVja1BvaW50TWVzc2FnZUlEcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworICAgICAgICAgICAgbWVzc2FnZUlEcy5wdXQoY2hlY2tQb2ludCwgY2hlY2tQb2ludE1lc3NhZ2VJRHMpOworICAgICAgICB9CisgICAgICAgIGNoZWNrUG9pbnRNZXNzYWdlSURzLnB1dChpZCwgaWQpOworICAgICAgICAvLyBUbworICAgICAgICBpZiAobWFwcy5nZXRUbygpID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAiZXhwZWN0ZWQgVG8gTUFQIjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRDb25maWdGaWxlTmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIENPTkZJRzsKKyAgICB9CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNodXRkb3duQnVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN0YXRpY0J1cy5zaHV0ZG93bih0cnVlKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGFkZEludGVyY2VwdG9ycyhMaXN0PEludGVyY2VwdG9yPD8gZXh0ZW5kcyBNZXNzYWdlPj4gY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJjZXB0b3JbXSBpbnRlcmNlcHRvcnMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmNlcHRvcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNoYWluLmFkZChpbnRlcmNlcHRvcnNbaV0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHByaXZhdGUgdm9pZCByZW1vdmVJbnRlcmNlcHRvcnMoTGlzdDxJbnRlcmNlcHRvcjw/IGV4dGVuZHMgTWVzc2FnZT4+IGNoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJjZXB0b3JbXSBpbnRlcmNlcHRvcnMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmNlcHRvcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNoYWluLmFkZChpbnRlcmNlcHRvcnNbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyB2ZXJpZmljYXRpb24pIHsKKyAgICAgICAgaWYgKHZlcmlmaWNhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICB2ZXJpZmllZCA9IHZlcmlmaWVkID09IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgPyB2ZXJpZmljYXRpb24KKyAgICAgICAgICAgICAgICA6IHZlcmlmaWVkICsgIjsgIiArIHZlcmlmaWNhdGlvbjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBWZXJpZnkgcHJlc2VuY2Ugb2YgZXhwZWN0ZWQgTUFQIGhlYWRlcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gd3NhSGVhZGVycyBhIGxpc3Qgb2YgdGhlIHdzYToqIGhlYWRlcnMgcHJlc2VudCBpbiB0aGUgU09BUAorICAgICAqIG1lc3NhZ2UKKyAgICAgKiBAcGFyYW0gcGFyaWFsIHRydWUgaWYgcGFydGlhbCByZXNwb25zZQorICAgICAqIEByZXR1cm4gbnVsbCBpZiBhbGwgZXhwZWN0ZWQgaGVhZGVycyBwcmVzZW50LCBvdGhlcndpc2UgYW4gZXJyb3Igc3RyaW5nLgorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIHZlcmlmeUhlYWRlcnMoTGlzdDxTdHJpbmc+IHdzYUhlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHBhcnRpYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlcXVlc3RMZWcpIHsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyByZXQgPSBudWxsOworICAgICAgICBpZiAoIXdzYUhlYWRlcnMuY29udGFpbnMoTmFtZXMuV1NBX01FU1NBR0VJRF9OQU1FKSkgeworICAgICAgICAgICAgcmV0ID0gImV4cGVjdGVkIE1lc3NhZ2VJRCBoZWFkZXIiOyAKKyAgICAgICAgfQorICAgICAgICBpZiAoIXdzYUhlYWRlcnMuY29udGFpbnMoTmFtZXMuV1NBX1RPX05BTUUpKSB7CisgICAgICAgICAgICByZXQgPSAiZXhwZWN0ZWQgVG8gaGVhZGVyIjsKKyAgICAgICAgfQorICAgICAgIAorICAgICAgICBpZiAoISh3c2FIZWFkZXJzLmNvbnRhaW5zKE5hbWVzLldTQV9SRVBMWVRPX05BTUUpCisgICAgICAgICAgICAgIHx8IHdzYUhlYWRlcnMuY29udGFpbnMoTmFtZXMuV1NBX1JFTEFURVNUT19OQU1FKSkpIHsKKyAgICAgICAgICAgIHJldCA9ICJleHBlY3RlZCBSZXBseVRvIG9yIFJlbGF0ZXNUbyBoZWFkZXIiOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0aWFsKSB7IAorICAgICAgICAgICAgaWYgKCF3c2FIZWFkZXJzLmNvbnRhaW5zKE5hbWVzLldTQV9GUk9NX05BTUUpKSB7CisgICAgICAgICAgICAgICAgLy9yZXQgPSAiZXhwZWN0ZWQgRnJvbSBoZWFkZXIiOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUkVWSVNJVCBBY3Rpb24gbWlzc2luZyBmcm9tIGZ1bGwgcmVzcG9uc2UKKyAgICAgICAgICAgIC8vaWYgKCF3c2FIZWFkZXJzLmNvbnRhaW5zKE5hbWVzLldTQV9BQ1RJT05fTkFNRSkpIHsKKyAgICAgICAgICAgIC8vICAgIHJldCA9ICJleHBlY3RlZCBBY3Rpb24gaGVhZGVyIjsKKyAgICAgICAgICAgIC8vfSAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIGlmIChyZXF1ZXN0TGVnICYmICEod3NhSGVhZGVycy5jb250YWlucyhDVVNUT01FUl9OQU1FLmdldExvY2FsUGFydCgpKSkpIHsKKyAgICAgICAgICAgIHJldCA9ICJleHBlY3RlZCBDdXN0b21lcktleSBoZWFkZXIiOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmVyaWZpY2F0aW9uKCkgeworICAgICAgICBhc3NlcnROdWxsKCJNQVAvSGVhZGVyIHZlcmlmaWNhdGlvbiBmYWlsZWQ6ICIgKyB2ZXJpZmllZCwgdmVyaWZpZWQpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3MvcG9saWN5L0Nvbm5lY3Rpb25IZWxwZXIuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3BvbGljeS9Db25uZWN0aW9uSGVscGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExZTk4NgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3BvbGljeS9Db25uZWN0aW9uSGVscGVyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLndzLnBvbGljeTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LkNsaWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5mcm9udGVuZC5DbGllbnRQcm94eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQuaHR0cC5IVFRQQ29uZHVpdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnRzLmh0dHAuY29uZmlndXJhdGlvbi5Db25uZWN0aW9uVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnRzLmh0dHAuY29uZmlndXJhdGlvbi5IVFRQQ2xpZW50UG9saWN5OworCitwdWJsaWMgZmluYWwgY2xhc3MgQ29ubmVjdGlvbkhlbHBlciB7CisgICAgcHJpdmF0ZSBDb25uZWN0aW9uSGVscGVyKCkgeworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRLZWVwQWxpdmVDb25uZWN0aW9uKE9iamVjdCBwcm94eSwgYm9vbGVhbiBrZWVwQWxpdmUpIHsKKyAgICAgICAgQ2xpZW50IGNsaWVudCA9IENsaWVudFByb3h5LmdldENsaWVudChwcm94eSk7CisgICAgICAgIEhUVFBDb25kdWl0IGhjID0gKEhUVFBDb25kdWl0KSBjbGllbnQuZ2V0Q29uZHVpdCgpOworICAgICAgICBIVFRQQ2xpZW50UG9saWN5IGNwID0gaGMuZ2V0Q2xpZW50KCk7CisgICAgICAgIGNwLnNldENvbm5lY3Rpb24oa2VlcEFsaXZlID8gQ29ubmVjdGlvblR5cGUuS0VFUF9BTElWRQorICAgICAgICAgICAgICAgIDogQ29ubmVjdGlvblR5cGUuQ0xPU0UpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0tlZXBBbGl2ZUNvbm5lY3Rpb24oT2JqZWN0IHByb3h5KSB7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBDbGllbnRQcm94eS5nZXRDbGllbnQocHJveHkpOworICAgICAgICBIVFRQQ29uZHVpdCBoYyA9IChIVFRQQ29uZHVpdCkgY2xpZW50LmdldENvbmR1aXQoKTsKKyAgICAgICAgSFRUUENsaWVudFBvbGljeSBjcCA9IGhjLmdldENsaWVudCgpOworICAgICAgICByZXR1cm4gY3AuZ2V0Q29ubmVjdGlvbigpID09IENvbm5lY3Rpb25UeXBlLktFRVBfQUxJVkU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3MvcG9saWN5L0dyZWV0ZXJJbXBsLmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9wb2xpY3kvR3JlZXRlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTJlOTIwCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3MvcG9saWN5L0dyZWV0ZXJJbXBsLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLndzLnBvbGljeTsKKworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLkFic3RyYWN0R3JlZXRlckltcGw7CisKK0BXZWJTZXJ2aWNlKHNlcnZpY2VOYW1lID0gIkJhc2ljR3JlZXRlclNlcnZpY2UiLCAKKyAgICAgICAgcG9ydE5hbWUgPSAiR3JlZXRlclBvcnQiLCAKKyAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLkdyZWV0ZXIiLCAKKyAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9ncmVldGVyX2NvbnRyb2wiKQorcHVibGljIGNsYXNzIEdyZWV0ZXJJbXBsIGV4dGVuZHMgQWJzdHJhY3RHcmVldGVySW1wbCB7CisgICAgCit9CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9wb2xpY3kvV1NQb2xpY3lUZXN0LmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9wb2xpY3kvV1NQb2xpY3lUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiYWFhMgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3BvbGljeS9XU1BvbGljeVRlc3QuamF2YQpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLndzLnBvbGljeTsKKworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5DYW1lbENvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5idWlsZGVyLlJvdXRlQnVpbGRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLnNwcmluZy5TcHJpbmdDYW1lbENvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC50ZXN0LkNhbWVsVGVzdFN1cHBvcnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcuU3ByaW5nQnVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5lbmRwb2ludC5DbGllbnRJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LlNlcnZlckltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZnJvbnRlbmQuQ2xpZW50UHJveHk7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLkJhc2ljR3JlZXRlclNlcnZpY2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLkdyZWV0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLlBpbmdNZUZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLlNlcnZpY2VNaXhDb21wb25lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTk1SOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuY29yZS5TZXJ2aWNlTWl4OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0WG1sQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkNsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4dDsKKworcHVibGljIGNsYXNzIFdTUG9saWN5VGVzdCBleHRlbmRzIENhbWVsVGVzdFN1cHBvcnQgeworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dVdGlscy5nZXRMN2RMb2dnZXIoV1NQb2xpY3lUZXN0LmNsYXNzKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWSUNFX0FERFJFU1MgPSAibG9jYWw6Ly9zbXgvaGVsbG9fd29ybGQiOworCisgICAgCisgICAgcHJvdGVjdGVkIEFic3RyYWN0WG1sQXBwbGljYXRpb25Db250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dDsKKworICAgIAorICAgIHByaXZhdGUgU2VydmVySW1wbCBzZXJ2ZXI7CisgICAgcHJpdmF0ZSBDYW1lbENvbnRleHQgY2FtZWxDb250ZXh0OworICAgIHByaXZhdGUgU2VydmljZU1peENvbXBvbmVudCBzbXhDb21wb25lbnQ7CisgICAgcHJpdmF0ZSBOTVIgbm1yOworICAgIHByaXZhdGUgQnVzIGJ1czsKKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQgPSBjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsgICAgICAgIAorICAgICAgICBzdGFydFNlcnZpY2UoKTsKKyAgICB9CisgICAgCisKKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBzdGFydFNlcnZpY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgT2JqZWN0IGltcGxlbWVudG9yID0gbmV3IEdyZWV0ZXJJbXBsKCk7CisgICAgICAgIGphdmF4LnhtbC53cy5FbmRwb2ludC5wdWJsaXNoKFNFUlZJQ0VfQUREUkVTUywgaW1wbGVtZW50b3IpOworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAoYXBwbGljYXRpb25Db250ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dC5kZXN0cm95KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcnZlciAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpOworICAgICAgICB9CisgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CisgICAgfQorICAKKyAgICBwcm90ZWN0ZWQgUm91dGVCdWlsZGVyIGNyZWF0ZVJvdXRlQnVpbGRlcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBjb25maWd1cmUoKSB7CisgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyKG5vRXJyb3JIYW5kbGVyKCkpOworICAgICAgICAgICAgICAgIGZyb20oImN4ZjpiZWFuOnJvdXRlckVuZHBvaW50IikudG8oInNteDp0ZXN0RW5kcG9pbnQiKTsKKyAgICAgICAgICAgICAgICBmcm9tKCJzbXg6dGVzdEVuZHBvaW50IikudG8oImN4ZjpiZWFuOnNlcnZpY2VFbmRwb2ludCIpOyAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBDYW1lbENvbnRleHQgY3JlYXRlQ2FtZWxDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGNhbWVsQ29udGV4dCA9IFNwcmluZ0NhbWVsQ29udGV4dC5zcHJpbmdDYW1lbENvbnRleHQoYXBwbGljYXRpb25Db250ZXh0KTsKKyAgICAgICAgCisgICAgICAgIHNteENvbXBvbmVudCA9IG5ldyBTZXJ2aWNlTWl4Q29tcG9uZW50KCk7CisgICAgICAgIG5tciA9IG5ldyBTZXJ2aWNlTWl4KCk7CisgICAgICAgICgoU2VydmljZU1peClubXIpLmluaXQoKTsKKyAgICAgICAgc214Q29tcG9uZW50LnNldE5tcihubXIpOworICAgICAgICBjYW1lbENvbnRleHQuYWRkQ29tcG9uZW50KCJzbXgiLCBzbXhDb21wb25lbnQpOworICAgICAgICByZXR1cm4gY2FtZWxDb250ZXh0OworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQoIm9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9wb2xpY3kvc2VydmVyLnhtbCIpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VXNpbmdBZGRyZXNzaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFNwcmluZ0J1c0ZhY3RvcnkgYmYgPSBuZXcgU3ByaW5nQnVzRmFjdG9yeSgpOworICAgICAgICBidXMgPSBiZgorICAgICAgICAgICAgLmNyZWF0ZUJ1cygiL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9wb2xpY3kvYWRkci54bWwiKTsKKyAgICAgICAgTG9nZ2luZ0luSW50ZXJjZXB0b3IgaW4gPSBuZXcgTG9nZ2luZ0luSW50ZXJjZXB0b3IoKTsKKyAgICAgICAgYnVzLmdldEluSW50ZXJjZXB0b3JzKCkuYWRkKGluKTsKKyAgICAgICAgYnVzLmdldEluRmF1bHRJbnRlcmNlcHRvcnMoKS5hZGQoaW4pOworICAgICAgICBMb2dnaW5nT3V0SW50ZXJjZXB0b3Igb3V0ID0gbmV3IExvZ2dpbmdPdXRJbnRlcmNlcHRvcigpOworICAgICAgICBidXMuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKG91dCk7CisgICAgICAgIGJ1cy5nZXRPdXRGYXVsdEludGVyY2VwdG9ycygpLmFkZChvdXQpOworICAgICAgICBVUkwgd3NkbCA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2UoIi93c2RsL2dyZWV0ZXJfY29udHJvbC53c2RsIik7CisgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gbmV3IFFOYW1lKCJodHRwOi8vY3hmLmFwYWNoZS5vcmcvZ3JlZXRlcl9jb250cm9sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc2ljR3JlZXRlclNlcnZpY2UiKTsKKyAgICAgICAgQmFzaWNHcmVldGVyU2VydmljZSBncyA9IG5ldyBCYXNpY0dyZWV0ZXJTZXJ2aWNlKHdzZGwsIHNlcnZpY2VOYW1lKTsKKyAgICAgICAgZmluYWwgR3JlZXRlciBncmVldGVyID0gZ3MuZ2V0R3JlZXRlclBvcnQoKTsKKyAgICAgICAgTE9HLmluZm8oIkNyZWF0ZWQgZ3JlZXRlciBjbGllbnQuIik7CisgICAgICAgIGlmICgiSFAtVVgiLmVxdWFscyhTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKSkpIHsKKyAgICAgICAgICAgIENvbm5lY3Rpb25IZWxwZXIuc2V0S2VlcEFsaXZlQ29ubmVjdGlvbihncmVldGVyLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vc2V0IHRpbWVvdXQgdG8gMzAgc2VjcyB0byBhdm9pZCBpbnRlcm1pdGx5IGZhaWxlZAorICAgICAgICAoKENsaWVudEltcGwpQ2xpZW50UHJveHkuZ2V0Q2xpZW50KGdyZWV0ZXIpKS5zZXRTeW5jaHJvbm91c1RpbWVvdXQoMzAwMDApOworICAgICAgICAKKyAgICAgICAgLy8gb25ld2F5CisgICAgICAgIGdyZWV0ZXIuZ3JlZXRNZU9uZVdheSgiQ1hGIik7CisKKyAgICAgICAgLy8gdHdvLXdheQorCisgICAgICAgIGFzc2VydEVxdWFscygiQ1hGIiwgZ3JlZXRlci5ncmVldE1lKCJjeGYiKSk7CisKKyAgICAgICAgLy8gZXhjZXB0aW9uCisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdyZWV0ZXIucGluZ01lKCk7CisgICAgICAgIH0gY2F0Y2ggKFBpbmdNZUZhdWx0IGV4KSB7CisgICAgICAgICAgICBmYWlsKCJGaXJzdCBpbnZvY2F0aW9uIHNob3VsZCBoYXZlIHN1Y2NlZWRlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBncmVldGVyLnBpbmdNZSgpOworICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgUGluZ01lRmF1bHQgbm90IHRocm93bi4iKTsKKyAgICAgICAgfSBjYXRjaCAoUGluZ01lRmF1bHQgZXgpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCAoaW50KSBleC5nZXRGYXVsdEluZm8oKS5nZXRNYWpvcigpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCAoaW50KSBleC5nZXRGYXVsdEluZm8oKS5nZXRNaW5vcigpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3JtL0dyZWV0ZXJJbXBsLmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9ybS9HcmVldGVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOThkZTYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9ybS9HcmVldGVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIud3Mucm07CisKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CitpbXBvcnQgamF2YXgueG1sLndzLkFzeW5jSGFuZGxlcjsKK2ltcG9ydCBqYXZheC54bWwud3MuUmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5ncmVldGVyX2NvbnRyb2wuUGluZ01lRmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLnR5cGVzLkZhdWx0RGV0YWlsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmdyZWV0ZXJfY29udHJvbC50eXBlcy5HcmVldE1lUmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLnR5cGVzLlBpbmdNZVJlc3BvbnNlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmdyZWV0ZXJfY29udHJvbC50eXBlcy5TYXlIaVJlc3BvbnNlOworQFdlYlNlcnZpY2Uoc2VydmljZU5hbWUgPSAiR3JlZXRlclNlcnZpY2UiLAorICAgICAgICBwb3J0TmFtZSA9ICJHcmVldGVyUG9ydCIsCisgICAgICAgIGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuY3hmLmdyZWV0ZXJfY29udHJvbC5HcmVldGVyIiwKKyAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9ncmVldGVyX2NvbnRyb2wiKQorcHVibGljIGNsYXNzIEdyZWV0ZXJJbXBsIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nVXRpbHMuZ2V0TDdkTG9nZ2VyKEdyZWV0ZXJJbXBsLmNsYXNzKTsKKyAgICBwcml2YXRlIGxvbmcgZGVsYXk7CisgICAgcHJpdmF0ZSBTdHJpbmcgbGFzdE9uZXdheUFyZzsKKyAgICBwcml2YXRlIGJvb2xlYW4gdGhyb3dBbHdheXM7CisgICAgcHJpdmF0ZSBib29sZWFuIHVzZUxhc3RPbmV3YXlBcmc7CisgICAgcHJpdmF0ZSBpbnQgcGluZ01lQ291bnQ7CisgICAgIAorICAgIHB1YmxpYyBsb25nIGdldERlbGF5KCkgeworICAgICAgICByZXR1cm4gZGVsYXk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RGVsYXkobG9uZyBkKSB7CisgICAgICAgIGRlbGF5ID0gZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZXNldExhc3RPbmV3YXlBcmcoKSB7CisgICAgICAgIGxhc3RPbmV3YXlBcmcgPSBudWxsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVzZUxhc3RPbmV3YXlBcmcoQm9vbGVhbiB1c2UpIHsKKyAgICAgICAgdXNlTGFzdE9uZXdheUFyZyA9IHVzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUaHJvd0Fsd2F5cyhib29sZWFuIHQpIHsKKyAgICAgICAgdGhyb3dBbHdheXMgPSB0OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ3JlZXRNZShTdHJpbmcgYXJnMCkgeworICAgICAgICBMT0cuaW5mbygiRXhlY3V0aW5nIG9wZXJhdGlvbiBncmVldE1lIHdpdGggcGFyYW1ldGVyOiAiICsgYXJnMCk7CisgICAgICAgIGlmICgidHdvd2F5Ii5lcXVhbHMoYXJnMCkpIHsKKyAgICAgICAgICAgIHVzZUxhc3RPbmV3YXlBcmcodHJ1ZSk7CisgICAgICAgICAgICBzZXREZWxheSg1MDAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVsYXkgPiAwKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChkZWxheSk7CisgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIC8vIGlnbm9yZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBudWxsOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHVzZUxhc3RPbmV3YXlBcmcgPyBsYXN0T25ld2F5QXJnIDogYXJnMC50b1VwcGVyQ2FzZSgpOworICAgICAgICB9CisgICAgICAgIExPRy5maW5lKCJyZXR1cm5pbmc6ICIgKyByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHB1YmxpYyBGdXR1cmU8Pz4gZ3JlZXRNZUFzeW5jKFN0cmluZyBhcmcwLCBBc3luY0hhbmRsZXI8R3JlZXRNZVJlc3BvbnNlPiBhcmcxKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIFJlc3BvbnNlPEdyZWV0TWVSZXNwb25zZT4gZ3JlZXRNZUFzeW5jKFN0cmluZyBhcmcwKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZ3JlZXRNZU9uZVdheShTdHJpbmcgYXJnMCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIGxhc3RPbmV3YXlBcmcgPSBhcmcwOworICAgICAgICB9CisgICAgICAgIExPRy5pbmZvKCJFeGVjdXRpbmcgb3BlcmF0aW9uIGdyZWV0TWVPbmVXYXkgd2l0aCBwYXJhbWV0ZXI6ICIgKyBhcmcwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwaW5nTWUoKSB0aHJvd3MgUGluZ01lRmF1bHQgeworICAgICAgICBwaW5nTWVDb3VudCsrOworICAgICAgICBpZiAoKHBpbmdNZUNvdW50ICUgMikgPT0gMCB8fCB0aHJvd0Fsd2F5cykgeworICAgICAgICAgICAgTE9HLmZpbmUoIlRocm93aW5nIFBpbmdNZUZhdWx0IHdoaWxlIGV4ZWN1dGlvbmcgb3BlcmF0aW9uIHBpbmdNZSIpOworICAgICAgICAgICAgRmF1bHREZXRhaWwgZmQgPSBuZXcgRmF1bHREZXRhaWwoKTsKKyAgICAgICAgICAgIGZkLnNldE1ham9yKChzaG9ydCkyKTsKKyAgICAgICAgICAgIGZkLnNldE1pbm9yKChzaG9ydCkxKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBQaW5nTWVGYXVsdCgiUGluZ3Mgc3VjY2VlZCBvbmx5IGV2ZXJ5IG90aGVyIHRpbWUuIiwgZmQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTE9HLmZpbmUoIkV4ZWN1dGluZyBvcGVyYXRpb24gcGluZ01lIik7ICAgICAgICAKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBSZXNwb25zZTxQaW5nTWVSZXNwb25zZT4gcGluZ01lQXN5bmMoKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIEZ1dHVyZTw/PiBwaW5nTWVBc3luYyhBc3luY0hhbmRsZXI8UGluZ01lUmVzcG9uc2U+IGFyZzApIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKCkgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBSZXNwb25zZTxTYXlIaVJlc3BvbnNlPiBzYXlIaUFzeW5jKCkgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBGdXR1cmU8Pz4gc2F5SGlBc3luYyhBc3luY0hhbmRsZXI8U2F5SGlSZXNwb25zZT4gYXJnMCkgeworICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworfQorCisKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3JtL1R3b3dheVRocmVhZC5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3Mvcm0vVHdvd2F5VGhyZWFkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3ZmE2YQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3JtL1R3b3dheVRocmVhZC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5ybTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmdyZWV0ZXJfY29udHJvbC5HcmVldGVyOworCitwdWJsaWMgY2xhc3MgVHdvd2F5VGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKKyAgICAKKyAgICBwcml2YXRlIFN0cmluZyByZXNwb25zZTsKKyAgICBwcml2YXRlIEdyZWV0ZXIgZ3JlZXRlcjsKKyAgICBwdWJsaWMgVHdvd2F5VGhyZWFkKEdyZWV0ZXIgZ3IpIHsKKyAgICAgICAgZ3JlZXRlciA9IGdyOworICAgIH0KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIAorICAgICAgICByZXNwb25zZSA9IGdyZWV0ZXIuZ3JlZXRNZSgidHdvd2F5Iik7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVzcG9uc2UoKSB7CisgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3JtL1dTUk1UZXN0LmphdmEgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9ybS9XU1JNVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYTg2NTQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL25tci93cy9ybS9XU1JNVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIud3Mucm07CisKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuQ2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuYnVpbGRlci5Sb3V0ZUJ1aWxkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5zcHJpbmcuU3ByaW5nQ2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwudGVzdC5DYW1lbFRlc3RTdXBwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1czsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5CdXNGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcuU3ByaW5nQnVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5lbmRwb2ludC5TZXJ2ZXJJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmdyZWV0ZXJfY29udHJvbC5HcmVldGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmdyZWV0ZXJfY29udHJvbC5HcmVldGVyU2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nT3V0SW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci5TZXJ2aWNlTWl4Q29tcG9uZW50OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIud3MucG9saWN5LkNvbm5lY3Rpb25IZWxwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTk1SOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuY29yZS5TZXJ2aWNlTWl4OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkFic3RyYWN0WG1sQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkNsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvcmUuaW8uQ2xhc3NQYXRoUmVzb3VyY2U7CisKK3B1YmxpYyBjbGFzcyBXU1JNVGVzdCBleHRlbmRzIENhbWVsVGVzdFN1cHBvcnQgeworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dVdGlscy5nZXRMN2RMb2dnZXIoV1NSTVRlc3QuY2xhc3MpOworICAgIAorICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfQUREUkVTUyA9ICJsb2NhbDovL3NteC9oZWxsb193b3JsZCI7CisKKyAgICAKKyAgICBwcm90ZWN0ZWQgQWJzdHJhY3RYbWxBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OworCisgICAgCisgICAgcHJpdmF0ZSBTZXJ2ZXJJbXBsIHNlcnZlcjsKKyAgICBwcml2YXRlIENhbWVsQ29udGV4dCBjYW1lbENvbnRleHQ7CisgICAgcHJpdmF0ZSBTZXJ2aWNlTWl4Q29tcG9uZW50IHNteENvbXBvbmVudDsKKyAgICBwcml2YXRlIE5NUiBubXI7CisgICAgcHJpdmF0ZSBCdXMgYnVzOworICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dCA9IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgICAgICBzdXBlci5zZXRVcCgpOyAgICAgICAgCisgICAgICAgIHN0YXJ0U2VydmljZSgpOworCisgICAgfQorICAgIAorCisgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgc3RhcnRTZXJ2aWNlKCkgeworICAgICAgICBPYmplY3QgaW1wbGVtZW50b3IgPSBuZXcgR3JlZXRlckltcGwoKTsKKyAgICAgICAgamF2YXgueG1sLndzLkVuZHBvaW50LnB1Ymxpc2goU0VSVklDRV9BRERSRVNTLCBpbXBsZW1lbnRvcik7CisgCisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChhcHBsaWNhdGlvbkNvbnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgYXBwbGljYXRpb25Db250ZXh0LmRlc3Ryb3koKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VydmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgc3VwZXIudGVhckRvd24oKTsKKyAgICB9CisgIAorICAgIHByb3RlY3RlZCBSb3V0ZUJ1aWxkZXIgY3JlYXRlUm91dGVCdWlsZGVyKCkgeworICAgICAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgICAgICAgICBmcm9tKCJjeGY6YmVhbjpyb3V0ZXJFbmRwb2ludCIpLnRvKCJzbXg6dGVzdEVuZHBvaW50Iik7CisgICAgICAgICAgICAgICAgZnJvbSgic214OnRlc3RFbmRwb2ludCIpLnRvKCJjeGY6YmVhbjpzZXJ2aWNlRW5kcG9pbnQiKTsgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBDYW1lbENvbnRleHQgY3JlYXRlQ2FtZWxDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGNhbWVsQ29udGV4dCA9IFNwcmluZ0NhbWVsQ29udGV4dC5zcHJpbmdDYW1lbENvbnRleHQoYXBwbGljYXRpb25Db250ZXh0KTsKKyAgICAgICAgc214Q29tcG9uZW50ID0gbmV3IFNlcnZpY2VNaXhDb21wb25lbnQoKTsKKyAgICAgICAgbm1yID0gbmV3IFNlcnZpY2VNaXgoKTsKKyAgICAgICAgKChTZXJ2aWNlTWl4KW5tcikuaW5pdCgpOworICAgICAgICBzbXhDb21wb25lbnQuc2V0Tm1yKG5tcik7CisgICAgICAgIGNhbWVsQ29udGV4dC5hZGRDb21wb25lbnQoInNteCIsIHNteENvbXBvbmVudCk7CisgICAgICAgIHJldHVybiBjYW1lbENvbnRleHQ7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQgY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IENsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4dCgib3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL3NlcnZlci54bWwiKTsKKyAgICB9CisgICAgCisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGVjb3VwbGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFNwcmluZ0J1c0ZhY3RvcnkgYmYgPSBuZXcgU3ByaW5nQnVzRmFjdG9yeSgpOworICAgICAgICBidXMgPSBiZi5jcmVhdGVCdXMoIi9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vZGVjb3VwbGVkLnhtbCIpOworICAgICAgICBCdXNGYWN0b3J5LnNldERlZmF1bHRCdXMoYnVzKTsKKyAgICAgICAgTG9nZ2luZ0luSW50ZXJjZXB0b3IgaW4gPSBuZXcgTG9nZ2luZ0luSW50ZXJjZXB0b3IoKTsKKyAgICAgICAgYnVzLmdldEluSW50ZXJjZXB0b3JzKCkuYWRkKGluKTsKKyAgICAgICAgYnVzLmdldEluRmF1bHRJbnRlcmNlcHRvcnMoKS5hZGQoaW4pOworICAgICAgICBMb2dnaW5nT3V0SW50ZXJjZXB0b3Igb3V0ID0gbmV3IExvZ2dpbmdPdXRJbnRlcmNlcHRvcigpOworICAgICAgICBidXMuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKG91dCk7CisgICAgICAgIGJ1cy5nZXRPdXRGYXVsdEludGVyY2VwdG9ycygpLmFkZChvdXQpOworICAgICAgICBRTmFtZSBzZXJ2aWNlTmFtZSA9IG5ldyBRTmFtZSgiaHR0cDovL2N4Zi5hcGFjaGUub3JnL2dyZWV0ZXJfY29udHJvbCIsICJHcmVldGVyU2VydmljZSIpOworICAgICAgICBVUkwgd3NkbCA9IG5ldyBDbGFzc1BhdGhSZXNvdXJjZSgiL3dzZGwvZ3JlZXRlcl9jb250cm9sLndzZGwiKS5nZXRVUkwoKTsKKyAgICAgICAgR3JlZXRlclNlcnZpY2UgZ3MgPSBuZXcgR3JlZXRlclNlcnZpY2Uod3NkbCwgc2VydmljZU5hbWUpOworICAgICAgICBmaW5hbCBHcmVldGVyIGdyZWV0ZXIgPSBncy5nZXRHcmVldGVyUG9ydCgpOworICAgICAgICBMT0cuZmluZSgiQ3JlYXRlZCBncmVldGVyIGNsaWVudC4iKTsKKworICAgICAgICBDb25uZWN0aW9uSGVscGVyLnNldEtlZXBBbGl2ZUNvbm5lY3Rpb24oZ3JlZXRlciwgdHJ1ZSk7CisKKworICAgICAgICBUd293YXlUaHJlYWQgdCA9IG5ldyBUd293YXlUaHJlYWQoZ3JlZXRlcik7CisgICAgICAgIHQuc3RhcnQoKTsKKworICAgICAgICAvLyBhbGxvdyBmb3IgcGFydGlhbCByZXNwb25zZSB0byB0d293YXkgcmVxdWVzdCB0byBhcnJpdmUKKworICAgICAgICBsb25nIHdhaXQgPSAzMDAwOworICAgICAgICB3aGlsZSAod2FpdCA+IDApIHsKKyAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKHdhaXQpOworICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBpZ25vcmUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdhaXQgLT0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydDsKKyAgICAgICAgfQorCisgICAgICAgIGdyZWV0ZXIuZ3JlZXRNZU9uZVdheSgib25ld2F5Iik7CisgICAgICAgIHQuam9pbigpOworICAgICAgICAKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIHJlc3BvbnNlIHRvIHR3b3dheSByZXF1ZXN0IiwgIm9uZXdheSIsIHQuZ2V0UmVzcG9uc2UoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3Mvc2VjdXJpdHkvR3JlZXRlckltcGwuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3NlY3VyaXR5L0dyZWV0ZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkNTMwOAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3NlY3VyaXR5L0dyZWV0ZXJJbXBsLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLndzLnNlY3VyaXR5OworCitAamF2YXguandzLldlYlNlcnZpY2UoCisgICAgICAgIHNlcnZpY2VOYW1lID0gIlNPQVBTZXJ2aWNlV1NTZWN1cml0eSIsIAorICAgICAgICBwb3J0TmFtZSA9ICJUaW1lc3RhbXBTaWduRW5jcnlwdCIsIAorICAgICAgICBlbmRwb2ludEludGVyZmFjZSA9ICJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC5HcmVldGVyIiwKKyAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cCIsCisgICAgICAgIHdzZGxMb2NhdGlvbiA9ICJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvaGVsbG9fd29ybGQud3NkbCIKKyAgICApCisgICAgcHVibGljIGNsYXNzIEdyZWV0ZXJJbXBsIAorICAgICAgICBleHRlbmRzIG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXJJbXBsIHsKKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdyZWV0TWUoU3RyaW5nIG1lKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG4qKiogR3JlZXRNZSBjYWxsZWQgd2l0aDogIiArIG1lICsgIioqKlxuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAiSGVsbG8gIiArIG1lOworICAgICAgICB9CisgICAgICAgIAorICAgIH0KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3NlY3VyaXR5L0tleXN0b3JlUGFzc3dvcmRDYWxsYmFjay5qYXZhIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3Mvc2VjdXJpdHkvS2V5c3RvcmVQYXNzd29yZENhbGxiYWNrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyYTY1OAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3NlY3VyaXR5L0tleXN0b3JlUGFzc3dvcmRDYWxsYmFjay5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5zZWN1cml0eTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2FsbGJhY2s7CitpbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXI7CitpbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5VbnN1cHBvcnRlZENhbGxiYWNrRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS53cy5zZWN1cml0eS5XU1Bhc3N3b3JkQ2FsbGJhY2s7CisKK3B1YmxpYyBjbGFzcyBLZXlzdG9yZVBhc3N3b3JkQ2FsbGJhY2sgaW1wbGVtZW50cyBDYWxsYmFja0hhbmRsZXIgeworICAgIAorICAgIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBwYXNzd29yZHMgPSAKKyAgICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisgICAgCisgICAgcHVibGljIEtleXN0b3JlUGFzc3dvcmRDYWxsYmFjaygpIHsKKyAgICAgICAgcGFzc3dvcmRzLnB1dCgiYWxpY2UiLCAicGFzc3dvcmQiKTsKKyAgICAgICAgcGFzc3dvcmRzLnB1dCgiYm9iIiwgInBhc3N3b3JkIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogSXQgYXR0ZW1wdHMgdG8gZ2V0IHRoZSBwYXNzd29yZCBmcm9tIHRoZSBwcml2YXRlIAorICAgICAqIGFsaWFzL3Bhc3N3b3JkcyBtYXAuCisgICAgICovCisgICAgcHVibGljIHZvaWQgaGFuZGxlKENhbGxiYWNrW10gY2FsbGJhY2tzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFVuc3VwcG9ydGVkQ2FsbGJhY2tFeGNlcHRpb24geworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgV1NQYXNzd29yZENhbGxiYWNrIHBjID0gKFdTUGFzc3dvcmRDYWxsYmFjayljYWxsYmFja3NbaV07CisKKyAgICAgICAgICAgIFN0cmluZyBwYXNzID0gcGFzc3dvcmRzLmdldChwYy5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgaWYgKHBhc3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHBjLnNldFBhc3N3b3JkKHBhc3MpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgYW4gYWxpYXMvcGFzc3dvcmQgcGFpciB0byB0aGUgY2FsbGJhY2sgbWVjaGFuaXNtLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEFsaWFzUGFzc3dvcmQoU3RyaW5nIGFsaWFzLCBTdHJpbmcgcGFzc3dvcmQpIHsKKyAgICAgICAgcGFzc3dvcmRzLnB1dChhbGlhcywgcGFzc3dvcmQpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvd3Mvc2VjdXJpdHkvV1NTZWN1cml0eVRlc3QuamF2YSBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3NlY3VyaXR5L1dTU2VjdXJpdHlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5NWRiYgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvbm1yL3dzL3NlY3VyaXR5L1dTU2VjdXJpdHlUZXN0LmphdmEKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5zZWN1cml0eTsKKworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuQ2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuYnVpbGRlci5Sb3V0ZUJ1aWxkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jYW1lbC5zcHJpbmcuU3ByaW5nQ2FtZWxDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwudGVzdC5DYW1lbFRlc3RTdXBwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1czsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5CdXNGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcuU3ByaW5nQnVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5lbmRwb2ludC5TZXJ2ZXJJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC5HcmVldGVyOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIuU2VydmljZU1peENvbXBvbmVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVI7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jb3JlLlNlcnZpY2VNaXg7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQWJzdHJhY3RYbWxBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0OworCitwdWJsaWMgY2xhc3MgV1NTZWN1cml0eVRlc3QgZXh0ZW5kcyBDYW1lbFRlc3RTdXBwb3J0IHsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nVXRpbHMuZ2V0TDdkTG9nZ2VyKFdTU2VjdXJpdHlUZXN0LmNsYXNzKTsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBqYXZhLm5ldC5VUkwgV1NETF9MT0M7CisgICAgc3RhdGljIHsKKyAgICAgICAgamF2YS5uZXQuVVJMIHRtcCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0bXAgPSBXU1NlY3VyaXR5VGVzdC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlKAorICAgICAgICAgICAgICAgICJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvaGVsbG9fd29ybGQud3NkbCIKKyAgICAgICAgICAgICk7CisgICAgICAgIH0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgICAgIFdTRExfTE9DID0gdG1wOworICAgIH0KKyAgICAKKworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfQUREUkVTUyA9ICJsb2NhbDovL3NteC9oZWxsb193b3JsZCI7CisKKyAgICAKKyAgICBwcm90ZWN0ZWQgQWJzdHJhY3RYbWxBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OworCisgICAgCisgICAgcHJpdmF0ZSBTZXJ2ZXJJbXBsIHNlcnZlcjsKKyAgICBwcml2YXRlIENhbWVsQ29udGV4dCBjYW1lbENvbnRleHQ7CisgICAgcHJpdmF0ZSBTZXJ2aWNlTWl4Q29tcG9uZW50IHNteENvbXBvbmVudDsKKyAgICBwcml2YXRlIE5NUiBubXI7CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgYXBwbGljYXRpb25Db250ZXh0ID0gY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgICAgIHN1cGVyLnNldFVwKCk7ICAgICAgICAKKyAgICAgICAgc3RhcnRTZXJ2aWNlKCk7CisKKyAgICB9CisgICAgCisKKyAgICAKKyAgICBwcm90ZWN0ZWQgdm9pZCBzdGFydFNlcnZpY2UoKSB7CisgICAgICAgIE9iamVjdCBpbXBsZW1lbnRvciA9IG5ldyBHcmVldGVySW1wbCgpOworICAgICAgICBqYXZheC54bWwud3MuRW5kcG9pbnQucHVibGlzaChTRVJWSUNFX0FERFJFU1MsIGltcGxlbWVudG9yKTsKKyAKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGFwcGxpY2F0aW9uQ29udGV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHQuZGVzdHJveSgpOworICAgICAgICB9CisgICAgICAgIGlmIChzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgc2VydmVyLnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICBzdXBlci50ZWFyRG93bigpOworICAgIH0KKyAgCisgICAgcHJvdGVjdGVkIFJvdXRlQnVpbGRlciBjcmVhdGVSb3V0ZUJ1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgeworICAgICAgICAgICAgICAgIGZyb20oImN4ZjpiZWFuOnJvdXRlckVuZHBvaW50IikudG8oInNteDp0ZXN0RW5kcG9pbnQiKTsKKyAgICAgICAgICAgICAgICBmcm9tKCJzbXg6dGVzdEVuZHBvaW50IikudG8oImN4ZjpiZWFuOnNlcnZpY2VFbmRwb2ludCIpOyAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgcHJvdGVjdGVkIENhbWVsQ29udGV4dCBjcmVhdGVDYW1lbENvbnRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgY2FtZWxDb250ZXh0ID0gU3ByaW5nQ2FtZWxDb250ZXh0LnNwcmluZ0NhbWVsQ29udGV4dChhcHBsaWNhdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICAgICAgc214Q29tcG9uZW50ID0gbmV3IFNlcnZpY2VNaXhDb21wb25lbnQoKTsKKyAgICAgICAgbm1yID0gbmV3IFNlcnZpY2VNaXgoKTsKKyAgICAgICAgKChTZXJ2aWNlTWl4KW5tcikuaW5pdCgpOworICAgICAgICBzbXhDb21wb25lbnQuc2V0Tm1yKG5tcik7CisgICAgICAgIGNhbWVsQ29udGV4dC5hZGRDb21wb25lbnQoInNteCIsIHNteENvbXBvbmVudCk7CisgICAgICAgIHJldHVybiBjYW1lbENvbnRleHQ7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBDbGFzc1BhdGhYbWxBcHBsaWNhdGlvbkNvbnRleHQgY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCkgeworICAgICAgICByZXR1cm4gbmV3IENsYXNzUGF0aFhtbEFwcGxpY2F0aW9uQ29udGV4dCgib3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L3NlcnZlci54bWwiKTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgdGVzdFRpbWVzdGFtcFNpZ25FbmNyeXB0KCkgeworICAgICAgICBMT0cuaW5mbygidGVzdCBzZWN1cml0eSIpOworICAgICAgICBCdXMgYnVzID0gbmV3IFNwcmluZ0J1c0ZhY3RvcnkoKS5jcmVhdGVCdXMoCisgICAgICAgICAgICAgICAgIm9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9jbGllbnQueG1sIik7IAorICAgICAgICBCdXNGYWN0b3J5LnNldERlZmF1bHRCdXMoYnVzKTsKKyAgICAgICAgTG9nZ2luZ0luSW50ZXJjZXB0b3IgaW4gPSBuZXcgTG9nZ2luZ0luSW50ZXJjZXB0b3IoKTsKKyAgICAgICAgYnVzLmdldEluSW50ZXJjZXB0b3JzKCkuYWRkKGluKTsKKyAgICAgICAgYnVzLmdldEluRmF1bHRJbnRlcmNlcHRvcnMoKS5hZGQoaW4pOworICAgICAgICBMb2dnaW5nT3V0SW50ZXJjZXB0b3Igb3V0ID0gbmV3IExvZ2dpbmdPdXRJbnRlcmNlcHRvcigpOworICAgICAgICBidXMuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKG91dCk7CisgICAgICAgIGJ1cy5nZXRPdXRGYXVsdEludGVyY2VwdG9ycygpLmFkZChvdXQpOworICAgICAgICBmaW5hbCBqYXZheC54bWwud3MuU2VydmljZSBzdmMgPSBqYXZheC54bWwud3MuU2VydmljZS5jcmVhdGUoV1NETF9MT0MsCisgICAgICAgICAgICAgICAgbmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJTT0FQU2VydmljZVdTU2VjdXJpdHkiKSk7CisgICAgICAgIGZpbmFsIEdyZWV0ZXIgZ3JlZXRlciA9IHN2Yy5nZXRQb3J0KG5ldyBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKAorICAgICAgICAgICAgICAgICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiLAorICAgICAgICAgICAgICAgICJUaW1lc3RhbXBTaWduRW5jcnlwdCIpLCBHcmVldGVyLmNsYXNzKTsKKyAgICAgICAgU3RyaW5nIHJldCA9IGdyZWV0ZXIuc2F5SGkoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJldCwgIkJvbmpvdXIiKTsKKyAgICAgICAgcmV0ID0gZ3JlZXRlci5ncmVldE1lKCJmZmFuZyIpOworICAgICAgICBhc3NlcnRFcXVhbHMocmV0LCAiSGVsbG8gZmZhbmciKTsKKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIwNTFlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpAQCAtMCwwICsxLDM3IEBACisjCisjICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIworIyBUaGUgbG9nZ2luZyBwcm9wZXJ0aWVzIHVzZWQgZHVyaW5nIHRlc3RzLi4KKyMKK2xvZzRqLnJvb3RMb2dnZXI9SU5GTywgb3V0LCBzdGRvdXQKKworIyBTZXBhcmF0ZSBsb2dnZXJzIGZvciBDYW1lbCBhbmQgU2VydmljZU1peCB0byByZWR1Y2UgbG9jayBjb250ZW50aW9uCitsb2c0ai5vcmcuYXBhY2hlLmNhbWVsPUlORk8sIG91dAorI2xvZzRqLm9yZy5hcGFjaGUuc2VydmljZW1peD1ERUJVRyxvdXQKKworIyBDT05TT0xFIGFwcGVuZGVyIG5vdCB1c2VkIGJ5IGRlZmF1bHQKK2xvZzRqLmFwcGVuZGVyLnN0ZG91dD1vcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlcgorbG9nNGouYXBwZW5kZXIuc3Rkb3V0LmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKK2xvZzRqLmFwcGVuZGVyLnN0ZG91dC5sYXlvdXQuQ29udmVyc2lvblBhdHRlcm49JWQgWyUtMTUuMTV0XSAlLTVwICUtMzAuMzBjezF9IC0gJW0lbgorCisjIEZpbGUgYXBwZW5kZXIKK2xvZzRqLmFwcGVuZGVyLm91dD1vcmcuYXBhY2hlLmxvZzRqLkZpbGVBcHBlbmRlcgorbG9nNGouYXBwZW5kZXIub3V0LmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKK2xvZzRqLmFwcGVuZGVyLm91dC5sYXlvdXQuQ29udmVyc2lvblBhdHRlcm49JWQgWyUtMTUuMTV0XSAlLTVwICUtMzAuMzBjezF9IC0gJW0lbgorbG9nNGouYXBwZW5kZXIub3V0LmZpbGU9dGFyZ2V0L3NlcnZpY2VtaXgtdGVzdC5sb2cKK2xvZzRqLmFwcGVuZGVyLm91dC5hcHBlbmQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3NwcmluZy9DeGZNZXNzYWdlQmVhbnMueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3NwcmluZy9DeGZNZXNzYWdlQmVhbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTk2NjUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL0N4Zk1lc3NhZ2VCZWFucy54bWwKQEAgLTAsMCArMSw1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgeG1sbnM6Y3hmPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvY3hmIgorICAgICAgIHhtbG5zOmNhbWVsPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy0yLjAueHNkCisgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4ZiBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvY3hmL2NhbWVsLWN4Zi54c2QKKyAgICAgICBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcvY2FtZWwtc3ByaW5nLnhzZAorICAgICI+CisKKyAgCisgIDxjeGY6Y3hmRW5kcG9pbnQgaWQ9InJvdXRlckVuZHBvaW50IiBhZGRyZXNzPSJodHRwOi8vbG9jYWxob3N0OjgxOTIvUGVyc29uU2VydmljZS8iIAorICAgICAgICAgICAgICAgICAgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC5QZXJzb24iCisgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lPSJwZXJzb246c29hcCIKKyAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT0icGVyc29uOlBlcnNvblNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgeG1sbnM6cGVyc29uPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdCIvPgorICAKKyAgICAKKyAgPGN4ZjpjeGZFbmRwb2ludCBpZD0ic2VydmljZUVuZHBvaW50IiBhZGRyZXNzPSJodHRwOi8vbG9jYWxob3N0OjE5MDAwL1BlcnNvblNlcnZpY2UvIiAKKyAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQ2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uIgorICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZT0icGVyc29uOnNvYXAiCisgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWU9InBlcnNvbjpQZXJzb25TZXJ2aWNlIgorICAgICAgICAgICAgICAgICAgIHhtbG5zOnBlcnNvbj0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiLz4KKworICAgPGNhbWVsQ29udGV4dCB4bWxucz0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyI+CisgICAgICA8cm91dGU+CisgICAgICAgICAgICA8ZnJvbSB1cmk9ImN4ZjpiZWFuOnJvdXRlckVuZHBvaW50P2RhdGFGb3JtYXQ9TUVTU0FHRSIvPgorICAgICAgICAgICAgPHRvIHVyaT0ic214OmJlYW46dGVzdEVuZHBvaW50Ii8+CisgICAgICA8L3JvdXRlPgorCisgICAgICA8cm91dGU+CisgICAgICAgICAgICA8ZnJvbSB1cmk9InNteDpiZWFuOnRlc3RFbmRwb2ludCIvPgorICAgICAgICAgICAgPHRvIHVyaT0iY3hmOmJlYW46c2VydmljZUVuZHBvaW50P2RhdGFGb3JtYXQ9TUVTU0FHRSIvPgorICAgICAgPC9yb3V0ZT4KKworICAgIDwvY2FtZWxDb250ZXh0PgorCisgIDxiZWFuIGlkPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVIiIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmNvcmUuU2VydmljZU1peCIgaW5pdC1tZXRob2Q9ImluaXQiIC8+CisKKzwvYmVhbnM+CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL0R1bW15QmVhbi54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL0R1bW15QmVhbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1ZGZhMwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9zcHJpbmcvRHVtbXlCZWFuLnhtbApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMtMi4wLnhzZAorICAgICI+CisKKyAgCisKKyAgPGJlYW4gaWQ9Im9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUiIgY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuY29yZS5TZXJ2aWNlTWl4IiBpbml0LW1ldGhvZD0iaW5pdCIgLz4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9zcHJpbmcvRW5kcG9pbnRCZWFucy54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL0VuZHBvaW50QmVhbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWYzYTIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL0VuZHBvaW50QmVhbnMueG1sCkBAIC0wLDAgKzEsNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOmN4Zj0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4ZiIKKyAgICAgICB4bWxuczpjYW1lbD0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMtMi4wLnhzZAorICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9jeGYgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4Zi9jYW1lbC1jeGYueHNkCisgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nL2NhbWVsLXNwcmluZy54c2QKKyAgICAiPgorCisgIAorICA8Y3hmOmN4ZkVuZHBvaW50IGlkPSJyb3V0ZXJFbmRwb2ludCIgYWRkcmVzcz0iaHR0cDovL2xvY2FsaG9zdDoxOTAwMC9yb3V0ZXIiIAorICAgICAgICAgICAgICAgICAgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci5IZWxsb1NlcnZpY2UiPgorICAgICAgIDxjeGY6cHJvcGVydGllcz4KKyAgICAgICAgICAgPGVudHJ5IGtleT0ic2V0RGVmYXVsdEJ1cyIgdmFsdWU9InRydWUiLz4KKyAgICAgICA8L2N4Zjpwcm9wZXJ0aWVzPgorICA8L2N4ZjpjeGZFbmRwb2ludD4KKyAgCisgICAgCisgIDxjeGY6Y3hmRW5kcG9pbnQgaWQ9InNlcnZpY2VFbmRwb2ludCIgYWRkcmVzcz0ibG9jYWw6Ly9zbXgvaGVsbG93b3JsZCIgCisgICAgICAgICAgICAgICAgICAgc2VydmljZUNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLkhlbGxvU2VydmljZSI+CisgICAgICAgPGN4Zjpwcm9wZXJ0aWVzPgorICAgICAgICAgICA8ZW50cnkga2V5PSJzZXREZWZhdWx0QnVzIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgIDwvY3hmOnByb3BlcnRpZXM+CisgIDwvY3hmOmN4ZkVuZHBvaW50PgorCisgIDxjYW1lbDpjYW1lbENvbnRleHQ+CisgIDwvY2FtZWw6Y2FtZWxDb250ZXh0PgorCisgIDxiZWFuIGlkPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVIiIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmNvcmUuU2VydmljZU1peCIgaW5pdC1tZXRob2Q9ImluaXQiIC8+CisKKzwvYmVhbnM+CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvc3ByaW5nL210b20ueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3NwcmluZy9tdG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzUzMmRjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3NwcmluZy9tdG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpjeGY9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9jeGYiICAgICAgCisgICAgICAgeG1sbnM6bXRvbT0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL21pbWUiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLTIuMC54c2QKKyAgICAgICBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvY3hmIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9jeGYvY2FtZWwtY3hmLnhzZAorICAgICI+CisKKyAgCisgIDxjeGY6Y3hmRW5kcG9pbnQgaWQ9InJvdXRlckVuZHBvaW50IgorICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9Imh0dHA6Ly9sb2NhbGhvc3Q6OTAzNi9taW1lLXRlc3QiCisgICAgICAgICAgICAgICAgICAgc2VydmljZUNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5taW1lLlRlc3RNdG9tIgorICAgICAgICAgICAgICAgICAgIHdzZGxVUkw9Ii93c2RsL210b21feG9wLndzZGwiCisgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWU9Im10b206VGVzdE10b21TZXJ2aWNlIj4KKyAgICAgICA8Y3hmOnByb3BlcnRpZXM+CisgICAgICAgICAgIDxlbnRyeSBrZXk9InNldERlZmF1bHRCdXMiIHZhbHVlPSJ0cnVlIi8+CisgICAgICAgPC9jeGY6cHJvcGVydGllcz4KKyAgPC9jeGY6Y3hmRW5kcG9pbnQ+IAorICAgIAorICA8Y3hmOmN4ZkVuZHBvaW50IGlkPSJzZXJ2aWNlRW5kcG9pbnQiCisgICAgICAgICAgICAgICAgICAgYWRkcmVzcz0ibG9jYWw6Ly9zbXgvYXR0YWNobWVudCIKKyAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQ2xhc3M9Im9yZy5hcGFjaGUuY3hmLm1pbWUuVGVzdE10b20iCisgICAgICAgICAgICAgICAgICAgd3NkbFVSTD0iL3dzZGwvbXRvbV94b3Aud3NkbCIKKyAgICAgICAgICAgICAgICAgICBzZXJ2aWNlTmFtZT0ibXRvbTpUZXN0TXRvbVNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0SWQ9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2xvY2FsIj4KKyAgICAgICA8Y3hmOnByb3BlcnRpZXM+CisgICAgICAgICAgIDxlbnRyeSBrZXk9InNldERlZmF1bHRCdXMiIHZhbHVlPSJ0cnVlIi8+CisgICAgICAgPC9jeGY6cHJvcGVydGllcz4KKyAgPC9jeGY6Y3hmRW5kcG9pbnQ+CisKKyAgPGJlYW4gaWQ9Im9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUiIgY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuY29yZS5TZXJ2aWNlTWl4IiBpbml0LW1ldGhvZD0iaW5pdCIgLz4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL2FkZHJlc3NpbmctaHB1eC54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9hZGRyZXNzaW5nLWhwdXgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzFlMWUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9hZGRyZXNzaW5nLWhwdXgueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2h0dHAvY29uZmlndXJhdGlvbiIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgoraHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2NvbmZpZ3VyYXRpb24vaHR0cC1jb25mLnhzZAoraHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QiPgorICAKKyAgICA8aHR0cDpjb25kdWl0IG5hbWU9IntodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHB9U29hcFBvcnQuaHR0cC1jb25kdWl0Ij4KKyAgICAgIDxodHRwOmNsaWVudCBDb25uZWN0aW9uPSJLZWVwLUFsaXZlIiBEZWNvdXBsZWRFbmRwb2ludD0iaHR0cDovL2xvY2FsaG9zdDo5OTk5L2RlY291cGxlZF9lbmRwb2ludCIvPgorICAgIDwvaHR0cDpjb25kdWl0PgorICAgIAorICAgIDxpbXBvcnQgcmVzb3VyY2U9IndzYV9pbnRlcmNlcHRvcnMueG1sIi8+Cis8L2JlYW5zPgorCmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9hZGRyZXNzaW5nLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL2FkZHJlc3NpbmcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTVmYmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9hZGRyZXNzaW5nLnhtbApAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpodHRwPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvdHJhbnNwb3J0cy9odHRwL2NvbmZpZ3VyYXRpb24iCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2h0dHAvY29uZmlndXJhdGlvbiBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL2h0dHAtY29uZi54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKyAgCisgICAgPGh0dHA6Y29uZHVpdCBuYW1lPSJ7aHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwfVNvYXBQb3J0Lmh0dHAtY29uZHVpdCI+CisgICAgICA8aHR0cDpjbGllbnQgRGVjb3VwbGVkRW5kcG9pbnQ9Imh0dHA6Ly9sb2NhbGhvc3Q6OTk5OS9kZWNvdXBsZWRfZW5kcG9pbnQiLz4KKyAgICA8L2h0dHA6Y29uZHVpdD4KKyAgICAKKyAgICA8aW1wb3J0IHJlc291cmNlPSJ3c2FfaW50ZXJjZXB0b3JzLnhtbCIvPgorPC9iZWFucz4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL2FkZHJlc3NpbmcvaGVsbG9fd29ybGQud3NkbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL2hlbGxvX3dvcmxkLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxNjkzYwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL2hlbGxvX3dvcmxkLndzZGwKQEAgLTAsMCArMSw0MDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx3c2RsOmRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKyAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgorICAgIHhtbG5zOnRucz0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIgorICAgIHhtbG5zOngxPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiCisgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cCIgbmFtZT0iSGVsbG9Xb3JsZCI+CisgICAgPHdzZGw6dHlwZXM+CisgICAgICAgIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eDE9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyI+IDwhLS1lbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCItLT4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGUvPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXNwb25zZVR5cGUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJncmVldE1lIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlcXVlc3RUeXBlIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZ3JlZXRNZVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3BvbnNlVHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKworICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGVzdE5pbGxhYmxlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Ik5pbGxFbGVtIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpbnRFbGVtIiB0eXBlPSJpbnQiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGVzdE5pbGxhYmxlUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVzcG9uc2VUeXBlIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKworICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZ3JlZXRNZUxhdGVyIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlcXVlc3RUeXBlIiB0eXBlPSJsb25nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImdyZWV0TWVMYXRlclJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3BvbnNlVHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImdyZWV0TWVTb21ldGltZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXF1ZXN0VHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImdyZWV0TWVTb21ldGltZVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3BvbnNlVHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImdyZWV0TWVPbmVXYXkiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVxdWVzdFR5cGUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ0ZXN0RG9jTGl0RmF1bHQiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZmF1bHRUeXBlIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGVzdERvY0xpdEZhdWx0UmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlLz4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGNvbXBsZXhUeXBlIG5hbWU9IkVycm9yQ29kZSI+CisgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJtaW5vciIgdHlwZT0ic2hvcnQiLz4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibWFqb3IiIHR5cGU9InNob3J0Ii8+CisgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJOb1N1Y2hDb2RlTGl0Ij4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvZGUiIHR5cGU9IngxOkVycm9yQ29kZSIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJCYWRSZWNvcmRMaXQiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJhZFJlY29yZCI+CisgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWFzb24iIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb2RlIiB0eXBlPSJzaG9ydCIvPgorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPGNvbXBsZXhUeXBlIG5hbWU9ImFkZE51bWJlcnMiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYXJnMCIgdHlwZT0iaW50Ii8+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFyZzEiIHR5cGU9ImludCIvPgorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkTnVtYmVycyIgdHlwZT0ieDE6YWRkTnVtYmVycyIvPgorICAgICAgICAgICAgPGNvbXBsZXhUeXBlIG5hbWU9ImFkZE51bWJlcnNSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXR1cm4iIHR5cGU9ImludCIvPgorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkTnVtYmVyc1Jlc3BvbnNlIiB0eXBlPSJ4MTphZGROdW1iZXJzUmVzcG9uc2UiLz4KKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJzdHJpbmdTdHJ1Y3QiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYXJnMCIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFyZzEiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQmFyZURvY3VtZW50IiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkJhcmVEb2N1bWVudFJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvbXBhbnkiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJpbnQiLz4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PiAgICAgIAorICAgICAgICA8L3NjaGVtYT4KKyAgICA8L3dzZGw6dHlwZXM+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXlIaVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImluIiBlbGVtZW50PSJ4MTpzYXlIaSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0ib3V0IiBlbGVtZW50PSJ4MTpzYXlIaVJlc3BvbnNlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJncmVldE1lUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iaW4iIGVsZW1lbnQ9IngxOmdyZWV0TWUiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0ib3V0IiBlbGVtZW50PSJ4MTpncmVldE1lUmVzcG9uc2UiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InRlc3ROaWxsYWJsZVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImluIiBlbGVtZW50PSJ4MTp0ZXN0TmlsbGFibGUiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InRlc3ROaWxsYWJsZVJlc3BvbnNlIj4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJvdXQiIGVsZW1lbnQ9IngxOnRlc3ROaWxsYWJsZVJlc3BvbnNlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJncmVldE1lTGF0ZXJSZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJpbiIgZWxlbWVudD0ieDE6Z3JlZXRNZUxhdGVyIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJncmVldE1lTGF0ZXJSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0ib3V0IiBlbGVtZW50PSJ4MTpncmVldE1lTGF0ZXJSZXNwb25zZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ3JlZXRNZVNvbWV0aW1lUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iaW4iIGVsZW1lbnQ9IngxOmdyZWV0TWVTb21ldGltZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ3JlZXRNZVNvbWV0aW1lUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6Z3JlZXRNZVNvbWV0aW1lUmVzcG9uc2UiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVPbmVXYXlSZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJpbiIgZWxlbWVudD0ieDE6Z3JlZXRNZU9uZVdheSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0idGVzdERvY0xpdEZhdWx0UmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iaW4iIGVsZW1lbnQ9IngxOnRlc3REb2NMaXRGYXVsdCIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0idGVzdERvY0xpdEZhdWx0UmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6dGVzdERvY0xpdEZhdWx0UmVzcG9uc2UiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9Ik5vU3VjaENvZGVMaXRGYXVsdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iTm9TdWNoQ29kZUxpdCIgZWxlbWVudD0ieDE6Tm9TdWNoQ29kZUxpdCIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iQmFkUmVjb3JkTGl0RmF1bHQiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9IkJhZFJlY29yZExpdCIgZWxlbWVudD0ieDE6QmFkUmVjb3JkTGl0Ii8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJ0ZXN0RG9jTGl0QmFyZVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImluIiBlbGVtZW50PSJ4MTpCYXJlRG9jdW1lbnQiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InRlc3REb2NMaXRCYXJlUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6QmFyZURvY3VtZW50UmVzcG9uc2UiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4gCisgICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iR3JlZXRlciI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXlIaVJlcXVlc3QiIG1lc3NhZ2U9InRuczpzYXlIaVJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXlIaVJlc3BvbnNlIiBtZXNzYWdlPSJ0bnM6c2F5SGlSZXNwb25zZSIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ3JlZXRNZSI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJncmVldE1lUmVxdWVzdCIgbWVzc2FnZT0idG5zOmdyZWV0TWVSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZ3JlZXRNZVJlc3BvbnNlIiBtZXNzYWdlPSJ0bnM6Z3JlZXRNZVJlc3BvbnNlIi8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJ0ZXN0TmlsbGFibGUiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0idGVzdE5pbGxhYmxlUmVxdWVzdCIgbWVzc2FnZT0idG5zOnRlc3ROaWxsYWJsZVJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJ0ZXN0TmlsbGFibGVSZXNwb25zZSIgbWVzc2FnZT0idG5zOnRlc3ROaWxsYWJsZVJlc3BvbnNlIi8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lTGF0ZXIiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZ3JlZXRNZUxhdGVyUmVxdWVzdCIgbWVzc2FnZT0idG5zOmdyZWV0TWVMYXRlclJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJncmVldE1lTGF0ZXJSZXNwb25zZSIgbWVzc2FnZT0idG5zOmdyZWV0TWVMYXRlclJlc3BvbnNlIi8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWVTb21ldGltZSI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJncmVldE1lU29tZXRpbWVSZXF1ZXN0IiBtZXNzYWdlPSJ0bnM6Z3JlZXRNZVNvbWV0aW1lUmVxdWVzdCIvPgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImdyZWV0TWVTb21ldGltZVJlc3BvbnNlIiBtZXNzYWdlPSJ0bnM6Z3JlZXRNZVNvbWV0aW1lUmVzcG9uc2UiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWVPbmVXYXkiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZ3JlZXRNZU9uZVdheVJlcXVlc3QiIG1lc3NhZ2U9InRuczpncmVldE1lT25lV2F5UmVxdWVzdCIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0idGVzdERvY0xpdEZhdWx0Ij4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InRlc3REb2NMaXRGYXVsdFJlcXVlc3QiIG1lc3NhZ2U9InRuczp0ZXN0RG9jTGl0RmF1bHRSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0idGVzdERvY0xpdEZhdWx0UmVzcG9uc2UiIG1lc3NhZ2U9InRuczp0ZXN0RG9jTGl0RmF1bHRSZXNwb25zZSIvPgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iTm9TdWNoQ29kZUxpdEZhdWx0IiBtZXNzYWdlPSJ0bnM6Tm9TdWNoQ29kZUxpdEZhdWx0Ii8+CisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJCYWRSZWNvcmRMaXRGYXVsdCIgbWVzc2FnZT0idG5zOkJhZFJlY29yZExpdEZhdWx0Ii8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisKKyAgICA8L3dzZGw6cG9ydFR5cGU+CisKKyAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJEb2NMaXRCYXJlIj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InRlc3REb2NMaXRCYXJlIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InRlc3REb2NMaXRCYXJlUmVxdWVzdCIgbWVzc2FnZT0idG5zOnRlc3REb2NMaXRCYXJlUmVxdWVzdCIvPgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InRlc3REb2NMaXRCYXJlUmVzcG9uc2UiIG1lc3NhZ2U9InRuczp0ZXN0RG9jTGl0QmFyZVJlc3BvbnNlIi8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+ICAgICAgIAorICAgIDwvd3NkbDpwb3J0VHlwZT4KKyAgICA8d3NkbDpiaW5kaW5nIG5hbWU9IkdyZWV0ZXJfU09BUEJpbmRpbmciIHR5cGU9InRuczpHcmVldGVyIj4KKyAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ3JlZXRNZSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0idGVzdE5pbGxhYmxlIj4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lTGF0ZXIiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIvPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWVTb21ldGltZSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ3JlZXRNZU9uZVdheSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0idGVzdERvY0xpdEZhdWx0Ij4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJOb1N1Y2hDb2RlTGl0RmF1bHQiPgorICAgICAgICAgICAgICAgIDxzb2FwOmZhdWx0IG5hbWU9Ik5vU3VjaENvZGVMaXRGYXVsdCIgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6ZmF1bHQ+CisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJCYWRSZWNvcmRMaXRGYXVsdCI+CisgICAgICAgICAgICAgICAgPHNvYXA6ZmF1bHQgbmFtZT0iQmFkUmVjb3JkTGl0RmF1bHQiIHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmZhdWx0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorCisgICAgPC93c2RsOmJpbmRpbmc+CisgICAgPHdzZGw6YmluZGluZyBuYW1lPSJEb2NfTGl0X0JhcmVfU09BUEJpbmRpbmciIHR5cGU9InRuczpEb2NMaXRCYXJlIj4KKyAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJ0ZXN0RG9jTGl0QmFyZSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50IiBzb2FwQWN0aW9uPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdGVzdERvY0xpdEJhcmUiLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InRlc3REb2NMaXRCYXJlUmVxdWVzdCI+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJ0ZXN0RG9jTGl0QmFyZVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICA8L3dzZGw6YmluZGluZz4KKworCisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQU2VydmljZSI+CisgICAgPHdzZGw6cG9ydCBuYW1lPSJTb2FwUG9ydCIgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDoxOTAwMC9Tb2FwQ29udGV4dC9Tb2FwUG9ydCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKworICAgIDx3c2RsOnBvcnQgbmFtZT0iU29hcFBvcnQxIiBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjcwMDAvU29hcENvbnRleHQvU29hcFBvcnQiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+CisKKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBQcm92aWRlclNlcnZpY2UiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQcm92aWRlclBvcnQiIGJpbmRpbmc9InRuczpHcmVldGVyX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTAwMy9Tb2FwQ29udGV4dC9Tb2FwUHJvdmlkZXJQb3J0Ii8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorCisgICAgICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iU09BUERpc3BhdGNoU2VydmljZSI+CisgICAgICAgIDx3c2RsOnBvcnQgbmFtZT0iU29hcERpc3BhdGNoUG9ydCIgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDA2L1NPQVBEaXNwYXRjaFNlcnZpY2UvU29hcERpc3BhdGNoUG9ydCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKworICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iU09BUFNlcnZpY2VfRG9jTGl0QmFyZSI+CisgICAgICAgIDx3c2RsOnBvcnQgbmFtZT0iU29hcFBvcnQyIiBiaW5kaW5nPSJ0bnM6RG9jX0xpdF9CYXJlX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6NzYwMC9Tb2FwQ29udGV4dC9Tb2FwUG9ydCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBTZXJ2aWNlQWRkcmVzc2luZ0RvY0xpdEJhcmUiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0IiBiaW5kaW5nPSJ0bnM6RG9jX0xpdF9CYXJlX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6NzYwMC9Tb2FwQ29udGV4dC9Tb2FwUG9ydCIvPgorICAgICAgICAgICAgPHdzd2E6VXNpbmdBZGRyZXNzaW5nIHhtbG5zOndzd2E9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDIvYWRkcmVzc2luZy93c2RsIi8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iU09BUFNlcnZpY2VfVGVzdDEiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0X1Rlc3QxIiBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkxMDAiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgICAgIDx3c2RsOnBvcnQgbmFtZT0iU29hcFBvcnRfVGVzdDIiIGJpbmRpbmc9InRuczpHcmVldGVyX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTEwMSIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBTZXJ2aWNlQWRkcmVzc2luZyI+CisgICAgICAgIDx3c2RsOnBvcnQgbmFtZT0iU29hcFBvcnQiIGJpbmRpbmc9InRuczpHcmVldGVyX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTAwOC9Tb2FwQ29udGV4dC9Tb2FwUG9ydCIvPgorICAgICAgICAgICAgPHdzd2E6VXNpbmdBZGRyZXNzaW5nIHhtbG5zOndzd2E9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDIvYWRkcmVzc2luZy93c2RsIi8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iU09BUFNlcnZpY2VDb25jdXJyZW5jeVRlc3QiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0IiBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwMDkvU29hcENvbnRleHQvU29hcFBvcnQiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQU2VydmljZUJvZ3VzQWRkcmVzc1Rlc3QiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0IiBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJGT08iLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQU2VydmljZU11bHRpUG9ydFR5cGVUZXN0Ij4KKyAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJHcmVldGVyUG9ydCIgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDIwL011bHRpUG9ydC9HcmVldGVyUG9ydCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJEb2NMaXRCYXJlUG9ydCIgYmluZGluZz0idG5zOkRvY19MaXRfQmFyZV9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwMjEvTXVsdGlQb3J0L0RvY0JhcmVQb3J0Ii8+CisgICAgICAgIDwvd3NkbDpwb3J0PiAgICAgICAgCisgICAgPC93c2RsOnNlcnZpY2U+Cis8L3dzZGw6ZGVmaW5pdGlvbnM+CisKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL3NlcnZlci54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9zZXJ2ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YWVhMTkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvYWRkcmVzc2luZy9zZXJ2ZXIueG1sCkBAIC0wLDAgKzEsOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgeG1sbnM6dGVzdD0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL2dyZWV0ZXJfY29udHJvbCIKKyAgICB4bWxuczpjeGY9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9jeGYiCisgICAgeG1sbnM6c214PSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2NhbWVsRW5kcG9pbnQvIgorICAgIHhtbG5zOmNhbWVsPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy0yLjAueHNkCisgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QKKyAgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4ZiBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvY3hmL2NhbWVsLWN4Zi54c2QKKyAgICAgICAgaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jYW1lbEVuZHBvaW50LyBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2NhbWVsRW5kcG9pbnQvLnhzZAorICAgICAgICBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcvY2FtZWwtc3ByaW5nLnhzZAorICAgICI+CisgICAgCisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYueG1sIi8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1odHRwLWpldHR5LnhtbCIvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1sb2NhbC54bWwiIC8+CisgICAgCisgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY2FtZWwuY29tcG9uZW50LmN4Zi50cmFuc3BvcnQuQ2FtZWxUcmFuc3BvcnRGYWN0b3J5IiBsYXp5LWluaXQ9InRydWUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVzIiByZWY9ImN4ZiIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FtZWxDb250ZXh0IiByZWY9ImNhbWVsX2NvbnRleHQiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InRyYW5zcG9ydElkcyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgPHZhbHVlPmh0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2NhbWVsPC92YWx1ZT4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L2JlYW4+CisgICAgICAgIAorICAgIDxjYW1lbDpjYW1lbENvbnRleHQgaWQ9ImNhbWVsX2NvbnRleHQiPgorICAgIDwvY2FtZWw6Y2FtZWxDb250ZXh0PgorICAgCisgICAgPGJlYW4gaWQ9Im1hcEFnZ3JlZ2F0b3IiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLk1BUEFnZ3JlZ2F0b3IiLz4KKyAgICA8YmVhbiBpZD0ibWFwQ29kZWMiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLnNvYXAuTUFQQ29kZWMiLz4KKyAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5hZGRyZXNzaW5nLk1BUFZlcmlmaWVyIiBpZD0ibWFwVmVyaWZpZXIiLz4KKyAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5hZGRyZXNzaW5nLkhlYWRlclZlcmlmaWVyIiBpZD0iaGVhZFZlcmlmaWVyIi8+CisgICAgPGN4ZjpjeGZFbmRwb2ludCBpZD0icm91dGVyRW5kcG9pbnQiIG5hbWU9InRlc3Q6R3JlZXRlclBvcnQiIGFkZHJlc3M9ImNhbWVsOi8vamV0dHk6aHR0cDovL2xvY2FsaG9zdDo5MDA4L1NvYXBDb250ZXh0L1NvYXBQb3J0IiAgYnVzPSJjeGYiIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuR3JlZXRlciI+CisgICAgICAgIDxjeGY6cHJvcGVydGllcz4KKyAgICAgICAgICAgIDxlbnRyeSBrZXk9ImRhdGFGb3JtYXQiIHZhbHVlPSJQT0pPIi8+CisgICAgICAgIDwvY3hmOnByb3BlcnRpZXM+CisgICAgICAgIDxjeGY6ZmVhdHVyZXM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuZmVhdHVyZS5Mb2dnaW5nRmVhdHVyZSIvPgorICAgICAgICA8L2N4ZjpmZWF0dXJlcz4KKyAgICAgICAgPGN4ZjpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8cmVmIGJlYW49Im1hcFZlcmlmaWVyIi8+CisgICAgICAgICAgICA8cmVmIGJlYW49ImhlYWRWZXJpZmllciIvPgorICAgICAgICA8L2N4ZjpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGY6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8cmVmIGJlYW49Im1hcFZlcmlmaWVyIi8+CisgICAgICAgICAgICA8cmVmIGJlYW49ImhlYWRWZXJpZmllciIvPgorICAgICAgICA8L2N4ZjppbkludGVyY2VwdG9ycz4KKyAgICAgICAgCisgICAgICAgIDxjeGY6b3V0RmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8cmVmIGJlYW49Im1hcFZlcmlmaWVyIi8+CisgICAgICAgICAgICA8cmVmIGJlYW49ImhlYWRWZXJpZmllciIvPgorICAgICAgICA8L2N4ZjpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZjppbkZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBWZXJpZmllciIvPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJoZWFkVmVyaWZpZXIiLz4KKyAgICAgICAgPC9jeGY6aW5GYXVsdEludGVyY2VwdG9ycz4KKworICAgIDwvY3hmOmN4ZkVuZHBvaW50PgorCisKKyAgICA8Y3hmOmN4ZkVuZHBvaW50IGlkPSJzZXJ2aWNlRW5kcG9pbnQiIGFkZHJlc3M9ImxvY2FsOi8vc214L2hlbGxvX3dvcmxkIgorICAgICAgc2VydmljZUNsYXNzPSJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC5HcmVldGVyIj4KKyAgICAgICAgPGN4Zjpwcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGVudHJ5IGtleT0iZGF0YUZvcm1hdCIgdmFsdWU9IlBPSk8iLz4KKyAgICAgICAgPC9jeGY6cHJvcGVydGllcz4KKyAgICA8L2N4ZjpjeGZFbmRwb2ludD4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL3dzYV9pbnRlcmNlcHRvcnMueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL2FkZHJlc3Npbmcvd3NhX2ludGVyY2VwdG9ycy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzZWI0ZQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9hZGRyZXNzaW5nL3dzYV9pbnRlcmNlcHRvcnMueG1sCkBAIC0wLDAgKzEsNjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOmh0dHAtY29uZj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIgorICAgICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKyAgCisgICAgPGJlYW4gaWQ9Im1hcEFnZ3JlZ2F0b3IiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLk1BUEFnZ3JlZ2F0b3IiLz4KKyAgICA8YmVhbiBpZD0ibWFwQ29kZWMiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLnNvYXAuTUFQQ29kZWMiLz4KKyAgICA8YmVhbiBpZD0ibG9nZ2luZ0luIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ0luSW50ZXJjZXB0b3IiLz4KKworICAgIDwhLS0gV2UgYXJlIGFkZGluZyB0aGUgaW50ZXJjZXB0b3JzIHRvIHRoZSBidXMgYXMgd2Ugd2lsbCBoYXZlIG9ubHkgb25lIGVuZHBvaW50L3NlcnZpY2UvYnVzLiAtLT4KKworICAgIDxiZWFuIGlkPSJjeGYiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5idXMuQ1hGQnVzSW1wbCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbkludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJsb2dnaW5nSW4iLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImluRmF1bHRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0SW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Im91dEZhdWx0SW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L2JlYW4+CisKKyAgICA8amF4d3M6Y2xpZW50IG5hbWU9IntodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHB9U29hcFBvcnQiIAorICAgICAgICAgICAgICAgICAgY3JlYXRlZEZyb21BUEk9InRydWUiPgorICAgICAgICA8amF4d3M6Y29uZHVpdFNlbGVjdG9yPgorICAgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmVuZHBvaW50LkRlZmVycmVkQ29uZHVpdFNlbGVjdG9yIi8+CisgICAgICAgIDwvamF4d3M6Y29uZHVpdFNlbGVjdG9yPgorICAgIDwvamF4d3M6Y2xpZW50PgorICAgIAorPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9wb2xpY3kvYWRkci1leHRlcm5hbC54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvcG9saWN5L2FkZHItZXh0ZXJuYWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDJhNjgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvcG9saWN5L2FkZHItZXh0ZXJuYWwueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YXR0YWNobWVudHMgeG1sbnM6d3NwPSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzA3L3dzLXBvbGljeSIgeG1sbnM6d3NhPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPgorICAgIDx3c3A6UG9saWN5QXR0YWNobWVudD4KKyAgICAgICAgPHdzcDpBcHBsaWVzVG8+CisgICAgICAgICAgICA8d3NhOkVuZHBvaW50UmVmZXJlbmNlPgorICAgICAgICAgICAgICAgIDx3c2E6QWRkcmVzcz5odHRwOi8vbG9jYWxob3N0OjkwMjAvU29hcENvbnRleHQvR3JlZXRlclBvcnQ8L3dzYTpBZGRyZXNzPgorICAgICAgICAgICAgPC93c2E6RW5kcG9pbnRSZWZlcmVuY2U+CisgICAgICAgIDwvd3NwOkFwcGxpZXNUbz4KKyAgICAgICAgPHdzcDpQb2xpY3k+CisgICAgICAgICAgICA8d3NhbTpBZGRyZXNzaW5nIHhtbG5zOndzYW09Imh0dHA6Ly93d3cudzMub3JnLzIwMDcvMDIvYWRkcmVzc2luZy9tZXRhZGF0YSI+CisgICAgICAgICAgICAgICAgPHdzcDpQb2xpY3kvPgorICAgICAgICAgICAgPC93c2FtOkFkZHJlc3Npbmc+CisgICAgICAgIDwvd3NwOlBvbGljeT4KKyAgICA8L3dzcDpQb2xpY3lBdHRhY2htZW50PiAgICAKKzwvYXR0YWNobWVudHM+CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3MvcG9saWN5L2FkZHIueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3BvbGljeS9hZGRyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM1OGYzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3BvbGljeS9hZGRyLnhtbApAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIgorICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2h0dHAvY29uZmlndXJhdGlvbiBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL2h0dHAtY29uZi54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKworICAgIDxodHRwOmNvbmR1aXQgbmFtZT0ie2h0dHA6Ly9jeGYuYXBhY2hlLm9yZy9ncmVldGVyX2NvbnRyb2x9R3JlZXRlclBvcnQuaHR0cC1jb25kdWl0Ij4KKyAgICAgIDxodHRwOmNsaWVudCBEZWNvdXBsZWRFbmRwb2ludD0iaHR0cDovL2xvY2FsaG9zdDo5OTk5L2RlY291cGxlZF9lbmRwb2ludCIvPgorICAgIDwvaHR0cDpjb25kdWl0PgorCisgICAgPGJlYW4gaWQ9Im9yZy5hcGFjaGUuY3hmLndzLnBvbGljeS5Qb2xpY3lFbmdpbmUiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5wb2xpY3kuc3ByaW5nLkluaXRpYWxpemluZ1BvbGljeUVuZ2luZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidXMiIHJlZj0iY3hmIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVkIiB2YWx1ZT0idHJ1ZSIvPgorICAgIDwvYmVhbj4KKworICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5wb2xpY3kuYXR0YWNobWVudC5leHRlcm5hbC5FeHRlcm5hbEF0dGFjaG1lbnRQcm92aWRlciI+CisgICAgICAgIDxjb25zdHJ1Y3Rvci1hcmcgcmVmPSJjeGYiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxvY2F0aW9uIiB2YWx1ZT0ib3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3BvbGljeS9hZGRyLWV4dGVybmFsLnhtbCIvPgorICAgIDwvYmVhbj4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9wb2xpY3kvc2VydmVyLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9wb2xpY3kvc2VydmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U5ZGJhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3BvbGljeS9zZXJ2ZXIueG1sCkBAIC0wLDAgKzEsNjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgeG1sbnM6dGVzdD0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL2dyZWV0ZXJfY29udHJvbCIKKyAgICB4bWxuczpjeGY9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9jeGYiCisgICAgeG1sbnM6Y2FtZWw9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmciCisgICAgeG1sbnM6c214PSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2NhbWVsRW5kcG9pbnQvIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy0yLjAueHNkCisgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QKKyAgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4ZiBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvY3hmL2NhbWVsLWN4Zi54c2QKKyAgICAgICAgaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jYW1lbEVuZHBvaW50LyBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2NhbWVsRW5kcG9pbnQvLnhzZAorICAgICAgICBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcvY2FtZWwtc3ByaW5nLnhzZAorICAgICI+CisgICAgCisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYueG1sIi8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1odHRwLWpldHR5LnhtbCIvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1sb2NhbC54bWwiIC8+CisgICAgCisgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY2FtZWwuY29tcG9uZW50LmN4Zi50cmFuc3BvcnQuQ2FtZWxUcmFuc3BvcnRGYWN0b3J5IiBsYXp5LWluaXQ9InRydWUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVzIiByZWY9ImN4ZiIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2FtZWxDb250ZXh0IiByZWY9ImNhbWVsX2NvbnRleHQiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InRyYW5zcG9ydElkcyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgPHZhbHVlPmh0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2NhbWVsPC92YWx1ZT4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L2JlYW4+CisgICAgICAgIAorICAgIDxjYW1lbDpjYW1lbENvbnRleHQgaWQ9ImNhbWVsX2NvbnRleHQiPgorICAgIDwvY2FtZWw6Y2FtZWxDb250ZXh0PgorICAgCisgICAgPGN4ZjpjeGZFbmRwb2ludCBpZD0icm91dGVyRW5kcG9pbnQiIG5hbWU9InRlc3Q6R3JlZXRlclBvcnQiIGFkZHJlc3M9ImNhbWVsOi8vamV0dHk6aHR0cDovL2xvY2FsaG9zdDo5MDIwL1NvYXBDb250ZXh0L0dyZWV0ZXJQb3J0IiAgc2VydmljZUNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5ncmVldGVyX2NvbnRyb2wuR3JlZXRlciI+CisgICAgICAgIDxjeGY6ZmVhdHVyZXM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuZmVhdHVyZS5Mb2dnaW5nRmVhdHVyZSIvPgorICAgICAgICA8L2N4ZjpmZWF0dXJlcz4KKyAgICAgICAgPGN4Zjpwcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGVudHJ5IGtleT0ic2V0RGVmYXVsdEJ1cyIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgPC9jeGY6cHJvcGVydGllcz4KKyAgICA8L2N4ZjpjeGZFbmRwb2ludD4KKworCisgICAgPGN4ZjpjeGZFbmRwb2ludCBpZD0ic2VydmljZUVuZHBvaW50IiBhZGRyZXNzPSJsb2NhbDovL3NteC9oZWxsb193b3JsZCIKKyAgICAgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLkdyZWV0ZXIiPgorICAgICAgICA8Y3hmOnByb3BlcnRpZXM+CisgICAgICAgICAgICA8ZW50cnkga2V5PSJzZXREZWZhdWx0QnVzIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgICA8L2N4Zjpwcm9wZXJ0aWVzPgorICAgIDwvY3hmOmN4ZkVuZHBvaW50PgorPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9wb2xpY3kveGJlYW4ueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3BvbGljeS94YmVhbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzYjQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9wb2xpY3kveGJlYW4ueG1sCkBAIC0wLDAgKzEsNjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIAorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgCistLT4KKzxiZWFucyB4bWxuczpzbT0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jb25maWcvMS4wIgorICAgICAgIHhtbG5zOmN4ZnNlPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2N4ZnNlLzEuMCIKKyAgICAgICB4bWxuczpjeGZiYz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jeGZiYy8xLjAiCisgICAgICAgeG1sbnM6dGVzdD0idXJuOnRlc3QiCisgICAgICAgeG1sbnM6Z3JlZXRlcj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL2dyZWV0ZXJfY29udHJvbCI+CisgIAorICA8c206Y29udGFpbmVyIGlkPSJqYmkiIGVtYmVkZGVkPSJ0cnVlIj4KKyAgICAKKyAgICA8c206ZW5kcG9pbnRzPgorICAgICAgPGN4ZnNlOmVuZHBvaW50PgorICAgICAgICA8Y3hmc2U6cG9qbz4KKyAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZmJjLndzLnBvbGljeS5HcmVldGVySW1wbCIgLz4KKyAgICAgICAgPC9jeGZzZTpwb2pvPgorICAgICAgICA8Y3hmc2U6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmc2U6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGZzZTpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZnNlOm91dEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZnNlOmluRmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmc2U6aW5GYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZnNlOm91dEZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nT3V0SW50ZXJjZXB0b3IiLz4KKyAgICAgICAgPC9jeGZzZTpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgIDwvY3hmc2U6ZW5kcG9pbnQ+CisgICAgICA8Y3hmYmM6Y29uc3VtZXIgd3NkbD0iL3dzZGwvZ3JlZXRlcl9jb250cm9sLndzZGwiCisgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnQ9IkdyZWV0ZXJQb3J0IgorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNlcnZpY2U9ImdyZWV0ZXI6QmFzaWNHcmVldGVyU2VydmljZSIKKyAgICAgICAgICAgICAgdGFyZ2V0SW50ZXJmYWNlPSJncmVldGVyOkdyZWV0ZXIiCisgICAgICAgICAgICAgICAgICAgICAgYnVzQ2ZnPSJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmYmMvd3MvcG9saWN5L2FkZHIueG1sIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgPGN4ZmJjOmluSW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZmJjOmluSW50ZXJjZXB0b3JzPgorICAgICAgICA8Y3hmYmM6b3V0SW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nT3V0SW50ZXJjZXB0b3IiLz4KKyAgICAgICAgPC9jeGZiYzpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGZiYzppbkZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZmJjOmluRmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGZiYzpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ091dEludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmYmM6b3V0RmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICA8L2N4ZmJjOmNvbnN1bWVyPgorICAgIDwvc206ZW5kcG9pbnRzPgorICAgIAorICA8L3NtOmNvbnRhaW5lcj4KKyAgCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL2F0bW9zdG9uY2UueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL2F0bW9zdG9uY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzYzMWYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vYXRtb3N0b25jZS54bWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOndzcm0tbWdyPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciIKKyAgICB4bWxuczp3c3JtLXBvbGljeT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wMi9ybS9wb2xpY3kiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vd3NybS1wb2xpY3kueHNkCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL3dzcm0tbWFuYWdlci54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKworICAgIDxpbXBvcnQgcmVzb3VyY2U9InJtaW50ZXJjZXB0b3JzLnhtbCIgLz4KKworICAgIDx3c3JtLW1ncjpybU1hbmFnZXIgaWQ9Im9yZy5hcGFjaGUuY3hmLndzLnJtLlJNTWFuYWdlciI+CisgICAgICAgIDx3c3JtLXBvbGljeTpSTUFzc2VydGlvbj4KKyAgICAgICAgICAgIDx3c3JtLXBvbGljeTpCYXNlUmV0cmFuc21pc3Npb25JbnRlcnZhbCBNaWxsaXNlY29uZHM9IjYwMDAwIiAvPgorICAgICAgICAgICAgPHdzcm0tcG9saWN5OkFja25vd2xlZGdlbWVudEludGVydmFsIE1pbGxpc2Vjb25kcz0iMTAwMDAiIC8+CisgICAgICAgIDwvd3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgICAgIDx3c3JtLW1ncjpkZWxpdmVyeUFzc3VyYW5jZT4KKyAgICAgICAgICAgIDx3c3JtLW1ncjpBdE1vc3RPbmNlIC8+CisgICAgICAgIDwvd3NybS1tZ3I6ZGVsaXZlcnlBc3N1cmFuY2U+CisgICAgICAgIDx3c3JtLW1ncjpkZXN0aW5hdGlvblBvbGljeT4KKyAgICAgICAgICAgIDx3c3JtLW1ncjphY2tzUG9saWN5IGludHJhTWVzc2FnZVRocmVzaG9sZD0iMCIgLz4KKyAgICAgICAgPC93c3JtLW1ncjpkZXN0aW5hdGlvblBvbGljeT4KKyAgICA8L3dzcm0tbWdyOnJtTWFuYWdlcj4KKworCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL2RlY291cGxlZC54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vZGVjb3VwbGVkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JlZDFlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL2RlY291cGxlZC54bWwKQEAgLTAsMCArMSw2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgeG1sbnM6aHR0cD0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvdHJhbnNwb3J0cy9odHRwL2NvbmZpZ3VyYXRpb24gaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29uZmlndXJhdGlvbi9odHRwLWNvbmYueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisgIAorICAgIDxodHRwOmNvbmR1aXQgbmFtZT0ie2h0dHA6Ly9jeGYuYXBhY2hlLm9yZy9ncmVldGVyX2NvbnRyb2x9R3JlZXRlclBvcnQuaHR0cC1jb25kdWl0Ij4KKyAgICAgIDxodHRwOmNsaWVudCBEZWNvdXBsZWRFbmRwb2ludD0iaHR0cDovL2xvY2FsaG9zdDo5OTk1L2RlY291cGxlZF9lbmRwb2ludCIvPgorICAgIDwvaHR0cDpjb25kdWl0PgorICAgIAorICAgIDxiZWFuIGlkPSJtYXBBZ2dyZWdhdG9yIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5NQVBBZ2dyZWdhdG9yIi8+CisgICAgPGJlYW4gaWQ9Im1hcENvZGVjIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5zb2FwLk1BUENvZGVjIi8+CisKKyAgICA8IS0tIFdlIGFyZSBhZGRpbmcgdGhlIGludGVyY2VwdG9ycyB0byB0aGUgYnVzIGFzIHdlIHdpbGwgaGF2ZSBvbmx5IG9uZSBlbmRwb2ludC9zZXJ2aWNlL2J1cy4gLS0+CisKKyAgICA8YmVhbiBpZD0iY3hmIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuYnVzLkNYRkJ1c0ltcGwiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaW5JbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaW5GYXVsdEludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0RmF1bHRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9kZWZlcnJlZC54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vZGVmZXJyZWQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZDc1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vZGVmZXJyZWQueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOndzcm0tbWdyPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciIKKyAgICAgICB4bWxuczp3c3JtLXBvbGljeT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wMi9ybS9wb2xpY3kiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vd3NybS1wb2xpY3kueHNkCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL3dzcm0tbWFuYWdlci54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKyAgICAKKyAgICA8aW1wb3J0IHJlc291cmNlPSJybWludGVyY2VwdG9ycy54bWwiLz4KKyAgICAKKyAgICA8d3NybS1tZ3I6cm1NYW5hZ2VyIGlkPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU1hbmFnZXIiPgorICAgIDx3c3JtLXBvbGljeTpSTUFzc2VydGlvbj4gICAgICAgICAKKyAgICAgICAgICA8d3NybS1wb2xpY3k6QmFzZVJldHJhbnNtaXNzaW9uSW50ZXJ2YWwgTWlsbGlzZWNvbmRzPSIxMDAwMCIvPiAgICAgICAgICAgCisgICAgICAgICAgPHdzcm0tcG9saWN5OkFja25vd2xlZGdlbWVudEludGVydmFsIE1pbGxpc2Vjb25kcz0iMjAwMCIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L3dzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPgorICAgICAgPHdzcm0tbWdyOmRlc3RpbmF0aW9uUG9saWN5PgorICAgICAgICAgIDx3c3JtLW1ncjphY2tzUG9saWN5IGludHJhTWVzc2FnZVRocmVzaG9sZD0iMCIvPiAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L3dzcm0tbWdyOmRlc3RpbmF0aW9uUG9saWN5PiAgICAgIAorICAgIDwvd3NybS1tZ3I6cm1NYW5hZ2VyPgorICAgIAorPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9pbmFjdGl2aXR5LXRpbWVvdXQueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL2luYWN0aXZpdHktdGltZW91dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmNWRkMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9pbmFjdGl2aXR5LXRpbWVvdXQueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczp3c3JtLW1ncj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIiCisgICAgeG1sbnM6d3NybS1wb2xpY3k9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3BvbGljeSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3dzcm0tcG9saWN5LnhzZAoraHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29uZmlndXJhdGlvbi93c3JtLW1hbmFnZXIueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJybWludGVyY2VwdG9ycy54bWwiIC8+CisKKyAgICA8d3NybS1tZ3I6cm1NYW5hZ2VyIGlkPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU1hbmFnZXIiPgorICAgICAgICA8d3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgICAgICAgICA8d3NybS1wb2xpY3k6SW5hY3Rpdml0eVRpbWVvdXQgTWlsbGlzZWNvbmRzPSIyMDAiIC8+CisgICAgICAgIDwvd3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgPC93c3JtLW1ncjpybU1hbmFnZXI+CisKKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9tZXNzYWdlLWxvc3Mtc2VydmVyLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9tZXNzYWdlLWxvc3Mtc2VydmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2U1ZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL21lc3NhZ2UtbG9zcy1zZXJ2ZXIueG1sCkBAIC0wLDAgKzEsODkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczp3c3JtLW1ncj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIiCisgICAgeG1sbnM6d3NybS1wb2xpY3k9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IgorICAgIHhtbG5zOmh0dHAtY29uZj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3BvbGljeSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3dzcm0tcG9saWN5LnhzZAoraHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29uZmlndXJhdGlvbi93c3JtLW1hbmFnZXIueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisKKyAgICA8YmVhbiBpZD0ibWFwQWdncmVnYXRvciIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuTUFQQWdncmVnYXRvciIvPgorICAgIDxiZWFuIGlkPSJtYXBDb2RlYyIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3Npbmcuc29hcC5NQVBDb2RlYyIvPgorICAgIDxiZWFuIGlkPSJybUxvZ2ljYWxPdXQiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU91dEludGVyY2VwdG9yIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1cyIgcmVmPSJjeGYiLz4KKyAgICA8L2JlYW4+CisgICAgPGJlYW4gaWQ9InJtTG9naWNhbEluIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3Mucm0uUk1JbkludGVyY2VwdG9yIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1cyIgcmVmPSJjeGYiLz4KKyAgICA8L2JlYW4+CisgICAgPGJlYW4gaWQ9InJtQ29kZWMiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5zb2FwLlJNU29hcEludGVyY2VwdG9yIi8+CisgICAgPGJlYW4gaWQ9Im1lc3NhZ2VMb3NzIiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZmJjLndzLnJtLk1lc3NhZ2VMb3NzU2ltdWxhdG9yIi8+CisKKyAgICA8IS0tIFdlIGFyZSBhZGRpbmcgdGhlIGludGVyY2VwdG9ycyB0byB0aGUgYnVzIGFzIHdlIHdpbGwgaGF2ZSBvbmx5IG9uZSBlbmRwb2ludC9zZXJ2aWNlL2J1cy4gLS0+CisKKyAgICA8YmVhbiBpZD0iY3hmIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuYnVzLkNYRkJ1c0ltcGwiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaW5JbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0icm1Mb2dpY2FsSW4iLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImluRmF1bHRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0icm1Mb2dpY2FsSW4iLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Im91dEludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUxvZ2ljYWxPdXQiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtQ29kZWMiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1lc3NhZ2VMb3NzIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRGYXVsdEludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUxvZ2ljYWxPdXQiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L2JlYW4+CisgICAgCisgICAgCisKKyAgICA8d3NybS1tZ3I6cm1NYW5hZ2VyIGlkPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU1hbmFnZXIiPgorICAgICAgICA8d3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgICAgICAgICA8IS0tIGF2b2lkIHNlcnZlciBzaWRlIHJlc2VuZHMsIGNoYW5nZSBwcm9ncmFtYXRpY2FsbHkgZm9yIGNsaWVudCAtLT4KKyAgICAgICAgICAgIDx3c3JtLXBvbGljeTpCYXNlUmV0cmFuc21pc3Npb25JbnRlcnZhbCBNaWxsaXNlY29uZHM9IjIwMDAiIC8+CisgICAgICAgIDwvd3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgPC93c3JtLW1ncjpybU1hbmFnZXI+CisKKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9tZXNzYWdlLWxvc3MueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL21lc3NhZ2UtbG9zcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2ZmRlZgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9tZXNzYWdlLWxvc3MueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczp3c3JtLW1ncj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIiCisgICAgeG1sbnM6d3NybS1wb2xpY3k9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IgorICAgIHhtbG5zOmh0dHAtY29uZj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3BvbGljeSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3dzcm0tcG9saWN5LnhzZAoraHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29uZmlndXJhdGlvbi93c3JtLW1hbmFnZXIueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJybWludGVyY2VwdG9ycy54bWwiIC8+CisKKyAgICA8d3NybS1tZ3I6cm1NYW5hZ2VyIGlkPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU1hbmFnZXIiPgorICAgICAgICA8d3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgICAgICAgICA8IS0tIGF2b2lkIHNlcnZlciBzaWRlIHJlc2VuZHMsIGNoYW5nZSBwcm9ncmFtYXRpY2FsbHkgZm9yIGNsaWVudCAtLT4KKyAgICAgICAgICAgIDx3c3JtLXBvbGljeTpCYXNlUmV0cmFuc21pc3Npb25JbnRlcnZhbCBNaWxsaXNlY29uZHM9IjYwMDAwIiAvPgorICAgICAgICAgICAgPHdzcm0tcG9saWN5OkFja25vd2xlZGdlbWVudEludGVydmFsIE1pbGxpc2Vjb25kcz0iMjAwMCIgLz4KKyAgICAgICAgPC93c3JtLXBvbGljeTpSTUFzc2VydGlvbj4KKyAgICA8L3dzcm0tbWdyOnJtTWFuYWdlcj4KKworCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL25vLW9mZmVyLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9uby1vZmZlci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4YjBiNgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9uby1vZmZlci54bWwKQEAgLTAsMCArMSw0MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOndzcm0tbWdyPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciIKKyAgICB4bWxuczp3c3JtLXBvbGljeT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wMi9ybS9wb2xpY3kiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vd3NybS1wb2xpY3kueHNkCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL3dzcm0tbWFuYWdlci54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKworICAgIDxpbXBvcnQgcmVzb3VyY2U9InJtaW50ZXJjZXB0b3JzLnhtbCIgLz4KKworICAgIDx3c3JtLW1ncjpybU1hbmFnZXIgaWQ9Im9yZy5hcGFjaGUuY3hmLndzLnJtLlJNTWFuYWdlciI+ICAgICAgICAKKyAgICAgICAgPHdzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPgorICAgICAgICAgICAgPHdzcm0tcG9saWN5OkJhc2VSZXRyYW5zbWlzc2lvbkludGVydmFsIE1pbGxpc2Vjb25kcz0iNjAwMDAiIC8+CisgICAgICAgICAgICA8d3NybS1wb2xpY3k6QWNrbm93bGVkZ2VtZW50SW50ZXJ2YWwgTWlsbGlzZWNvbmRzPSI2MDAwMCIgLz4KKyAgICAgICAgPC93c3JtLXBvbGljeTpSTUFzc2VydGlvbj4KKyAgICAgICAgPHdzcm0tbWdyOnNvdXJjZVBvbGljeSBpbmNsdWRlT2ZmZXI9ImZhbHNlIi8+CisgICAgICAgIDx3c3JtLW1ncjpkZXN0aW5hdGlvblBvbGljeT4KKyAgICAgICAgICAgIDx3c3JtLW1ncjphY2tzUG9saWN5IGludHJhTWVzc2FnZVRocmVzaG9sZD0iMCIgLz4KKyAgICAgICAgPC93c3JtLW1ncjpkZXN0aW5hdGlvblBvbGljeT4KKyAgICA8L3dzcm0tbWdyOnJtTWFuYWdlcj4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9ybWludGVyY2VwdG9ycy54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vcm1pbnRlcmNlcHRvcnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkM2NiOGYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vcm1pbnRlcmNlcHRvcnMueG1sCkBAIC0wLDAgKzEsNzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisKKyAgICA8YmVhbiBpZD0ibWFwQWdncmVnYXRvciIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuTUFQQWdncmVnYXRvciIvPgorICAgIDxiZWFuIGlkPSJtYXBDb2RlYyIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3Npbmcuc29hcC5NQVBDb2RlYyIvPgorICAgIDxiZWFuIGlkPSJybUxvZ2ljYWxPdXQiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU91dEludGVyY2VwdG9yIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1cyIgcmVmPSJjeGYiLz4KKyAgICA8L2JlYW4+CisgICAgPGJlYW4gaWQ9InJtTG9naWNhbEluIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3Mucm0uUk1JbkludGVyY2VwdG9yIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1cyIgcmVmPSJjeGYiLz4KKyAgICA8L2JlYW4+CisgICAgPGJlYW4gaWQ9InJtQ29kZWMiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5zb2FwLlJNU29hcEludGVyY2VwdG9yIi8+CisKKworICAgIDxiZWFuIGlkPSJjeGYiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5idXMuQ1hGQnVzSW1wbCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbkludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUxvZ2ljYWxJbiIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0icm1Db2RlYyIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaW5GYXVsdEludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUxvZ2ljYWxJbiIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0icm1Db2RlYyIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0SW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtTG9naWNhbE91dCIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0icm1Db2RlYyIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0RmF1bHRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0icm1Mb2dpY2FsT3V0Ii8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUNvZGVjIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9iZWFuPgorPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9zZXFsZW5ndGgxLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9zZXFsZW5ndGgxLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWY1YzdlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL3NlcWxlbmd0aDEueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOndzcm0tbWdyPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgoraHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29uZmlndXJhdGlvbi93c3JtLW1hbmFnZXIueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJybWludGVyY2VwdG9ycy54bWwiIC8+CisKKyAgICA8d3NybS1tZ3I6cm1NYW5hZ2VyIGlkPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU1hbmFnZXIiPgorICAgICAgICA8d3NybS1tZ3I6c291cmNlUG9saWN5PgorICAgICAgICAgICAgPHdzcm0tbWdyOnNlcXVlbmNlVGVybWluYXRpb25Qb2xpY3kgbWF4TGVuZ3RoPSIxIiAvPgorICAgICAgICA8L3dzcm0tbWdyOnNvdXJjZVBvbGljeT4KKyAgICA8L3dzcm0tbWdyOnJtTWFuYWdlcj4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9zZXFsZW5ndGgxMC54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vc2VxbGVuZ3RoMTAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzA3MGYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vc2VxbGVuZ3RoMTAueG1sCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczp3c3JtLW1ncj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIiCisgICAgeG1sbnM6aHR0cD0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL3dzcm0tbWFuYWdlci54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKworICAgIDxpbXBvcnQgcmVzb3VyY2U9InJtaW50ZXJjZXB0b3JzLnhtbCIgLz4KKworICAgIDx3c3JtLW1ncjpybU1hbmFnZXIgaWQ9Im9yZy5hcGFjaGUuY3hmLndzLnJtLlJNTWFuYWdlciI+CisgICAgICAgIDx3c3JtLW1ncjpzb3VyY2VQb2xpY3k+CisgICAgICAgICAgICA8d3NybS1tZ3I6c2VxdWVuY2VUZXJtaW5hdGlvblBvbGljeSBtYXhMZW5ndGg9IjEwIiAvPgorICAgICAgICA8L3dzcm0tbWdyOnNvdXJjZVBvbGljeT4KKyAgICA8L3dzcm0tbWdyOnJtTWFuYWdlcj4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9zZXF1ZW5jZS54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vc2VxdWVuY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YzBkODUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vc2VxdWVuY2UueG1sCkBAIC0wLDAgKzEsMTA2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAKKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIAorLS0+Cis8YmVhbnMgeG1sbnM6c209Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvY29uZmlnLzEuMCIKKyAgICAgICB4bWxuczpjeGZzZT0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jeGZzZS8xLjAiCisgICAgICAgeG1sbnM6Y3hmYmM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvY3hmYmMvMS4wIgorICAgICAgIHhtbG5zOmdyZWV0ZXI9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9ncmVldGVyX2NvbnRyb2wiPgorICAKKyAgPHNtOmNvbnRhaW5lciBpZD0iamJpIiBlbWJlZGRlZD0idHJ1ZSI+CisgICAgCisgICAgPHNtOmVuZHBvaW50cz4KKyAgICAgIDxjeGZzZTplbmRwb2ludD4KKyAgICAgICAgPGN4ZnNlOnBvam8+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5jeGZiYy53cy5ybS5Db250cm9sSW1wbCIgLz4KKyAgICAgICAgPC9jeGZzZTpwb2pvPgorICAgICAgICA8Y3hmc2U6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmc2U6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGZzZTpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZnNlOm91dEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZnNlOmluRmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmc2U6aW5GYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZnNlOm91dEZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nT3V0SW50ZXJjZXB0b3IiLz4KKyAgICAgICAgPC9jeGZzZTpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgIDwvY3hmc2U6ZW5kcG9pbnQ+CisgICAgICA8Y3hmc2U6ZW5kcG9pbnQ+CisgICAgICAgIDxjeGZzZTpwb2pvPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmYmMud3Mucm0uR3JlZXRlckltcGwiIC8+CisgICAgICAgIDwvY3hmc2U6cG9qbz4KKyAgICAgICAgPGN4ZnNlOmluSW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZnNlOmluSW50ZXJjZXB0b3JzPgorICAgICAgICA8Y3hmc2U6b3V0SW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nT3V0SW50ZXJjZXB0b3IiLz4KKyAgICAgICAgPC9jeGZzZTpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGZzZTppbkZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZnNlOmluRmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGZzZTpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ091dEludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmc2U6b3V0RmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICA8L2N4ZnNlOmVuZHBvaW50PgorICAgICAgPGN4ZmJjOmNvbnN1bWVyIHdzZGw9Ii93c2RsL2dyZWV0ZXJfY29udHJvbC53c2RsIgorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50PSJDb250cm9sUG9ydCIKKyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTZXJ2aWNlPSJncmVldGVyOkNvbnRyb2xTZXJ2aWNlIgorICAgICAgICAgICAgICB0YXJnZXRJbnRlcmZhY2U9ImdyZWV0ZXI6Q29udHJvbCIKKyAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgIDxjeGZiYzppbkludGVyY2VwdG9ycz4KKyAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ0luSW50ZXJjZXB0b3IiLz4KKyAgICAgICAgPC9jeGZiYzppbkludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZmJjOm91dEludGVyY2VwdG9ycz4KKyAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ091dEludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmYmM6b3V0SW50ZXJjZXB0b3JzPgorICAgICAgICA8Y3hmYmM6aW5GYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ0luSW50ZXJjZXB0b3IiLz4KKyAgICAgICAgPC9jeGZiYzppbkZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICA8Y3hmYmM6b3V0RmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZmJjOm91dEZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgPC9jeGZiYzpjb25zdW1lcj4KKyAgICAgIDxjeGZiYzpjb25zdW1lciB3c2RsPSIvd3NkbC9ncmVldGVyX2NvbnRyb2wud3NkbCIKKyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludD0iR3JlZXRlclBvcnQiCisgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2VydmljZT0iZ3JlZXRlcjpHcmVldGVyU2VydmljZSIKKyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRJbnRlcmZhY2U9ImdyZWV0ZXI6R3JlZXRlciIKKyAgICAgICAgICAgICAgICAgICAgICBidXNDZmc9Im9yZy9hcGFjaGUvc2VydmljZW1peC9jeGZiYy93cy9ybS9ybWludGVyY2VwdG9ycy54bWwiCisgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICA8Y3hmYmM6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmYmM6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgIDxjeGZiYzpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvciIvPgorICAgICAgICAgIDwhLS1XcmFwcGVkT3V0SW50ZXJjZXB0b3IgYW5kIEJhcmVPdXRJbnRlcmNlcHRvciBhcmUgdXNlZCBmb3Igc2VuZCBiYWNrIHdzLXJtIG1lc3NhZ2UtLT4KKyAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuV3JhcHBlZE91dEludGVyY2VwdG9yIi8+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkJhcmVPdXRJbnRlcmNlcHRvciIvPgorICAgICAgICA8L2N4ZmJjOm91dEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZmJjOmluRmF1bHRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdJbkludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmYmM6aW5GYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZmJjOm91dEZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nT3V0SW50ZXJjZXB0b3IiLz4KKyAgICAgICAgPC9jeGZiYzpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgIDwvY3hmYmM6Y29uc3VtZXI+CisgICAgPC9zbTplbmRwb2ludHM+CisgICAgCisgIDwvc206Y29udGFpbmVyPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL3NlcnZlci54bWwgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvcm0vc2VydmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRlMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL3NlcnZlci54bWwKQEAgLTAsMCArMSw5NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4bWxuczp0ZXN0PSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvZ3JlZXRlcl9jb250cm9sIgorICAgIHhtbG5zOmN4Zj0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4ZiIKKyAgICB4bWxuczpjYW1lbD0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyIKKyAgICB4bWxuczpodHRwPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvdHJhbnNwb3J0cy9odHRwL2NvbmZpZ3VyYXRpb24iCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2NvbmZpZ3VyYXRpb24vaHR0cC1jb25mLnhzZAorICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMtMi4wLnhzZAorICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvamF4d3MueHNkCisgICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9jeGYgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4Zi9jYW1lbC1jeGYueHNkCisgICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZy9jYW1lbC1zcHJpbmcueHNkCisgICAgIj4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24tc29hcC54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLWh0dHAtamV0dHkueG1sIi8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLWh0dHAueG1sIi8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLWxvY2FsLnhtbCIgLz4KKyAgICAKKyAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jYW1lbC5jb21wb25lbnQuY3hmLnRyYW5zcG9ydC5DYW1lbFRyYW5zcG9ydEZhY3RvcnkiIGxhenktaW5pdD0idHJ1ZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidXMiIHJlZj0iY3hmIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW1lbENvbnRleHQiIHJlZj0iY2FtZWxfY29udGV4dCIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idHJhbnNwb3J0SWRzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICA8dmFsdWU+aHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvY2FtZWw8L3ZhbHVlPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKyAgICA8aHR0cDpjb25kdWl0IG5hbWU9IntodHRwOi8vY3hmLmFwYWNoZS5vcmcvZ3JlZXRlcl9jb250cm9sfUdyZWV0ZXJQb3J0Lmh0dHAtY29uZHVpdCI+CisgICAgICA8aHR0cDpjbGllbnQgQWxsb3dDaHVua2luZz0iZmFsc2UiIERlY291cGxlZEVuZHBvaW50PSJodHRwOi8vbG9jYWxob3N0Ojk5OTUvZGVjb3VwbGVkX2VuZHBvaW50Ii8+CisgICAgPC9odHRwOmNvbmR1aXQ+ICAgIAorICAgIDxjYW1lbDpjYW1lbENvbnRleHQgaWQ9ImNhbWVsX2NvbnRleHQiPgorICAgIDwvY2FtZWw6Y2FtZWxDb250ZXh0PgorCisgICAgPGJlYW4gaWQ9Im1hcEFnZ3JlZ2F0b3IiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLk1BUEFnZ3JlZ2F0b3IiLz4KKyAgICA8YmVhbiBpZD0ibWFwQ29kZWMiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLnNvYXAuTUFQQ29kZWMiLz4KKyAgICA8Y3hmOmN4ZkVuZHBvaW50IGlkPSJyb3V0ZXJFbmRwb2ludCIgbmFtZT0idGVzdDpHcmVldGVyUG9ydCIgYWRkcmVzcz0iY2FtZWw6Ly9qZXR0eTpodHRwOi8vbG9jYWxob3N0OjkwMjAvU29hcENvbnRleHQvR3JlZXRlclBvcnQiICBzZXJ2aWNlQ2xhc3M9Im9yZy5hcGFjaGUuY3hmLmdyZWV0ZXJfY29udHJvbC5HcmVldGVyIj4KKyAgICAgICAgPGN4Zjpwcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGVudHJ5IGtleT0iZGF0YUZvcm1hdCIgdmFsdWU9IlBPSk8iLz4KKyAgICAgICAgICAgIDxlbnRyeSBrZXk9InNldERlZmF1bHRCdXMiIHZhbHVlPSJ0cnVlIi8+CisgICAgICAgIDwvY3hmOnByb3BlcnRpZXM+CisgICAgICAgIDxjeGY6ZmVhdHVyZXM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuZmVhdHVyZS5Mb2dnaW5nRmVhdHVyZSIvPgorICAgICAgICA8L2N4ZjpmZWF0dXJlcz4KKyAgICAgICAgPGN4ZjpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgPC9jeGY6b3V0SW50ZXJjZXB0b3JzPgorICAgICAgICA8Y3hmOmluSW50ZXJjZXB0b3JzPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgIDwvY3hmOmluSW50ZXJjZXB0b3JzPgorICAgICAgICAKKyAgICAgICAgPGN4ZjpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICA8L2N4ZjpvdXRGYXVsdEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZjppbkZhdWx0SW50ZXJjZXB0b3JzPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgIDwvY3hmOmluRmF1bHRJbnRlcmNlcHRvcnM+CisKKyAgICA8L2N4ZjpjeGZFbmRwb2ludD4KKworCisgICAgPGN4ZjpjeGZFbmRwb2ludCBpZD0ic2VydmljZUVuZHBvaW50IiBhZGRyZXNzPSJsb2NhbDovL3NteC9oZWxsb193b3JsZCIKKyAgICAgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5jeGYuZ3JlZXRlcl9jb250cm9sLkdyZWV0ZXIiPgorICAgICAgICA8Y3hmOnByb3BlcnRpZXM+CisgICAgICAgICAgICA8ZW50cnkga2V5PSJkYXRhRm9ybWF0IiB2YWx1ZT0iUE9KTyIvPgorICAgICAgICAgICAgPGVudHJ5IGtleT0ic2V0RGVmYXVsdEJ1cyIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgPC9jeGY6cHJvcGVydGllcz4KKyAgICA8L2N4ZjpjeGZFbmRwb2ludD4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9zdXBwcmVzc2VkLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS9zdXBwcmVzc2VkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjk3ZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL3N1cHByZXNzZWQueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczp3c3JtLW1ncj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIiCisgICAgeG1sbnM6d3NybS1wb2xpY3k9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3BvbGljeSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3dzcm0tcG9saWN5LnhzZAoraHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29uZmlndXJhdGlvbi93c3JtLW1hbmFnZXIueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJybWludGVyY2VwdG9ycy54bWwiIC8+CisgICAgCisgICAgPHdzcm0tbWdyOnJtTWFuYWdlciBpZD0ib3JnLmFwYWNoZS5jeGYud3Mucm0uUk1NYW5hZ2VyIj4KKyAgICAgICAgPHdzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPgorICAgICAgICAgICAgPHdzcm0tcG9saWN5OkJhc2VSZXRyYW5zbWlzc2lvbkludGVydmFsIE1pbGxpc2Vjb25kcz0iMzAwMCIgLz4KKyAgICAgICAgICAgIDx3c3JtLXBvbGljeTpBY2tub3dsZWRnZW1lbnRJbnRlcnZhbCBNaWxsaXNlY29uZHM9Ijk5OTk5OTk5IiAvPgorICAgICAgICA8L3dzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPgorICAgICAgICA8d3NybS1tZ3I6ZGVzdGluYXRpb25Qb2xpY3k+CisgICAgICAgICAgICA8d3NybS1tZ3I6YWNrc1BvbGljeSBpbnRyYU1lc3NhZ2VUaHJlc2hvbGQ9IjAiIC8+CisgICAgICAgIDwvd3NybS1tZ3I6ZGVzdGluYXRpb25Qb2xpY3k+ICAgICAgICAKKyAgICA8L3dzcm0tbWdyOnJtTWFuYWdlcj4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS90ZXJtaW5hdGUtb24tc2h1dGRvd24ueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL3Rlcm1pbmF0ZS1vbi1zaHV0ZG93bi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzOTQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS90ZXJtaW5hdGUtb24tc2h1dGRvd24ueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOndzcm0tbWdyPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciIKKyAgICAgICB4bWxuczp3c3JtLXBvbGljeT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wMi9ybS9wb2xpY3kiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vd3NybS1wb2xpY3kueHNkCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL3dzcm0tbWFuYWdlci54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKyAgICAKKyAgICA8aW1wb3J0IHJlc291cmNlPSJybWludGVyY2VwdG9ycy54bWwiLz4KKyAgICAKKyAgICA8d3NybS1tZ3I6cm1NYW5hZ2VyIGlkPSJvcmcuYXBhY2hlLmN4Zi53cy5ybS5STU1hbmFnZXIiPgorICAgICAgPHdzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPiAgICAgICAgIAorICAgICAgICAgIDx3c3JtLXBvbGljeTpCYXNlUmV0cmFuc21pc3Npb25JbnRlcnZhbCBNaWxsaXNlY29uZHM9IjEwMDAwIi8+ICAgICAgICAgICAKKyAgICAgICAgICA8d3NybS1wb2xpY3k6QWNrbm93bGVkZ2VtZW50SW50ZXJ2YWwgTWlsbGlzZWNvbmRzPSIxMDAwMCIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L3dzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPiAgICAgIAorICAgICAgPHdzcm0tbWdyOnNvdXJjZVBvbGljeT4KKyAgICAgICAgICA8d3NybS1tZ3I6c2VxdWVuY2VUZXJtaW5hdGlvblBvbGljeSB0ZXJtaW5hdGVPblNodXRkb3duPSJ0cnVlIi8+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvd3NybS1tZ3I6c291cmNlUG9saWN5PgorICAgICAgPHdzcm0tbWdyOmRlc3RpbmF0aW9uUG9saWN5PgorICAgICAgICAgIDx3c3JtLW1ncjphY2tzUG9saWN5IGludHJhTWVzc2FnZVRocmVzaG9sZD0iMCIvPiAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L3dzcm0tbWdyOmRlc3RpbmF0aW9uUG9saWN5PiAgICAgIAorICAgIDwvd3NybS1tZ3I6cm1NYW5hZ2VyPgorICAgIAorPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS90d293YXktZW5kcG9pbnQtc3BlY2lmaWMueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3JtL3R3b3dheS1lbmRwb2ludC1zcGVjaWZpYy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwZGJiMgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9ybS90d293YXktZW5kcG9pbnQtc3BlY2lmaWMueG1sCkBAIC0wLDAgKzEsOTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisgIAorICAKKyAgICA8IS0tIEVuZHBvaW50IExldmVsIEludGVyY2VwdG9ycy0tPgorICAgIDwhLS0gSW5zZXJ0ZWQgRnJvbSBKYXhXc0VuZHBvaW50SW1wbCwgRW5kcG9pbnRJbXBsLS0+CisgICAgPGJlYW4gaWQ9IndyYXBwZXJDbGFzc0luIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuamF4d3MuaW50ZXJjZXB0b3JzLldyYXBwZXJDbGFzc0luSW50ZXJjZXB0b3IiLz4KKyAgICA8YmVhbiBpZD0id3JhcHBlckNsYXNzT3V0IiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuamF4d3MuaW50ZXJjZXB0b3JzLldyYXBwZXJDbGFzc091dEludGVyY2VwdG9yIi8+CisgICAgPGJlYW4gaWQ9ImhvbGRlckluIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuamF4d3MuaW50ZXJjZXB0b3JzLkhvbGRlckluSW50ZXJjZXB0b3IiLz4KKyAgICA8YmVhbiBpZD0iaG9sZGVyT3V0IiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuamF4d3MuaW50ZXJjZXB0b3JzLkhvbGRlck91dEludGVyY2VwdG9yIi8+CisgICAgPGJlYW4gaWQ9ImNsaWVudEZhdWx0Q29udiIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkNsaWVudEZhdWx0Q29udmVydGVyIi8+CisgICAgPGJlYW4gaWQ9Im1lc3NhZ2VTZW5kZXIiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5NZXNzYWdlU2VuZGVySW50ZXJjZXB0b3IiLz4KKyAgICA8IS0tIENhbm5vdCB1c2UgdmlhIGNvbmZpZyAtLT4KKyAgICA8IS0tCisgICAgPGJlYW4gaWQ9InNvYXBIYW5kbGVyIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuamF4d3MuaGFuZGxlci5zb2FwLlNPQVBIYW5kbGVySW50ZXJjZXB0b3IiLz4KKyAgICA8YmVhbiBpZD0ibG9naWNhbEhhbmRsZXIiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5qYXh3cy5oYW5kbGVyLkxvZ2ljYWxIYW5kbGVySW50ZXJjZXB0b3IiLz4KKyAgICAtLT4KKyAgICAKKyAgICA8IS0tIFdTQSBJbnRlcmNlcHRvcnMtLT4KKyAgICA8YmVhbiBpZD0ibWFwQWdncmVnYXRvciIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuTUFQQWdncmVnYXRvciIvPgorICAgIDxiZWFuIGlkPSJtYXBDb2RlYyIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3Npbmcuc29hcC5NQVBDb2RlYyIvPgorCisgICAgPCEtLSBXUy1STSBJbnRlcmNlcHRvcnMtLT4KKyAgICA8YmVhbiBpZD0icm1Mb2dpY2FsT3V0IiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3Mucm0uUk1PdXRJbnRlcmNlcHRvciI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidXMiIHJlZj0iY3hmIi8+CisgICAgPC9iZWFuPgorICAgIDxiZWFuIGlkPSJybUxvZ2ljYWxJbiIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLnJtLlJNSW5JbnRlcmNlcHRvciI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidXMiIHJlZj0iY3hmIi8+CisgICAgPC9iZWFuPgorICAgIDxiZWFuIGlkPSJybUNvZGVjIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3Mucm0uc29hcC5STVNvYXBJbnRlcmNlcHRvciIvPgorCisgICAgPCEtLSBMb2dnaW5nIGFuZCBVdGlsaXR5IEludGVyY2VwdG9yLS0+CisgICAgPGJlYW4gaWQ9ImxvZ0luYm91bmQiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvciIvPgorICAgIDxiZWFuIGlkPSJsb2dPdXRib3VuZCIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvciIvPgorCisgICAgPCEtLVdTLUEgSW50ZXJjZXB0b3JzIG5vdCByZXF1aXJlZCBpbiBGYXVsdCBDaGFpbi0tPgorICAgIDxiZWFuIGlkPSJjeGYiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5idXMuQ1hGQnVzSW1wbCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbkludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtTG9naWNhbEluIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUNvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0id3JhcHBlckNsYXNzSW4iLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49ImhvbGRlckluIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbkZhdWx0SW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0iY2xpZW50RmF1bHRDb252Ii8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUxvZ2ljYWxPdXQiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtQ29kZWMiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJ3cmFwcGVyQ2xhc3NPdXQiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49ImhvbGRlck91dCIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWVzc2FnZVNlbmRlciIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0RmF1bHRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJybUxvZ2ljYWxPdXQiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49InJtQ29kZWMiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtZXNzYWdlU2VuZGVyIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9iZWFuPiAKKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9hbGljZS5qa3MgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYWxpY2UuamtzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZDE2MmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYWxpY2UuamtzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9hbGljZS5wcm9wZXJ0aWVzIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2FsaWNlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2M2ZlMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9hbGljZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgICAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgICB1bmRlciB0aGUgTGljZW5zZS4KKyMKK29yZy5hcGFjaGUud3Muc2VjdXJpdHkuY3J5cHRvLnByb3ZpZGVyPW9yZy5hcGFjaGUud3Muc2VjdXJpdHkuY29tcG9uZW50cy5jcnlwdG8uTWVybGluCitvcmcuYXBhY2hlLndzLnNlY3VyaXR5LmNyeXB0by5tZXJsaW4ua2V5c3RvcmUudHlwZT1qa3MKK29yZy5hcGFjaGUud3Muc2VjdXJpdHkuY3J5cHRvLm1lcmxpbi5rZXlzdG9yZS5wYXNzd29yZD1wYXNzd29yZAorb3JnLmFwYWNoZS53cy5zZWN1cml0eS5jcnlwdG8ubWVybGluLmtleXN0b3JlLmFsaWFzPWFsaWNlCitvcmcuYXBhY2hlLndzLnNlY3VyaXR5LmNyeXB0by5tZXJsaW4uZmlsZT1zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2FsaWNlLmprcwpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2JvYi5qa3MgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYm9iLmprcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGY0OWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2JvYi5qa3MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2JvYi5wcm9wZXJ0aWVzIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2JvYi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMGFiODIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYm9iLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIworIyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisjICAgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorIworb3JnLmFwYWNoZS53cy5zZWN1cml0eS5jcnlwdG8ucHJvdmlkZXI9b3JnLmFwYWNoZS53cy5zZWN1cml0eS5jb21wb25lbnRzLmNyeXB0by5NZXJsaW4KK29yZy5hcGFjaGUud3Muc2VjdXJpdHkuY3J5cHRvLm1lcmxpbi5rZXlzdG9yZS50eXBlPWprcworb3JnLmFwYWNoZS53cy5zZWN1cml0eS5jcnlwdG8ubWVybGluLmtleXN0b3JlLnBhc3N3b3JkPXBhc3N3b3JkCitvcmcuYXBhY2hlLndzLnNlY3VyaXR5LmNyeXB0by5tZXJsaW4ua2V5c3RvcmUuYWxpYXM9Ym9iCitvcmcuYXBhY2hlLndzLnNlY3VyaXR5LmNyeXB0by5tZXJsaW4uZmlsZT1zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2JvYi5qa3MKZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9jbGllbnQueG1sIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2NsaWVudC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmOWQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9jbGllbnQueG1sCkBAIC0wLDAgKzEsODkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zICAgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QKKyAgICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QKKyAgICAgICAgICAiPgorCisgICAgPGpheHdzOmNsaWVudCBuYW1lPSJ7aHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwfVRpbWVzdGFtcFNpZ25FbmNyeXB0IiBjcmVhdGVkRnJvbUFQST0idHJ1ZSI+CisgICAgICAgIDxqYXh3czpmZWF0dXJlcz4KKyAgICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5mZWF0dXJlLkxvZ2dpbmdGZWF0dXJlIi8+CisgICAgICAgIDwvamF4d3M6ZmVhdHVyZXM+CisgICAgICAgIDxqYXh3czpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuYmluZGluZy5zb2FwLnNhYWouU0FBSk91dEludGVyY2VwdG9yIi8+CisgICAgICAgICAgICA8cmVmIGJlYW49IlRpbWVzdGFtcFNpZ25FbmNyeXB0X1JlcXVlc3QiLz4KKyAgICAgICAgPC9qYXh3czpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgIDxqYXh3czppbkludGVyY2VwdG9ycz4KKyAgICAgICAgICAgIDxyZWYgYmVhbj0iVGltZXN0YW1wU2lnbkVuY3J5cHRfUmVzcG9uc2UiLz4KKyAgICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5iaW5kaW5nLnNvYXAuc2Fhai5TQUFKSW5JbnRlcmNlcHRvciIvPgorICAgICAgICA8L2pheHdzOmluSW50ZXJjZXB0b3JzPgorICAgIDwvamF4d3M6Y2xpZW50PgorCisgICAgPCEtLSAtLT4KKyAgICA8IS0tIFRoaXMgYmVhbiBpcyBhbiBPdXQgaW50ZXJjZXB0b3Igd2hpY2ggd2lsbCBhZGQgYSBUaW1lc3RhbXAsIC0tPgorICAgIDwhLS0gc2lnbiB0aGUgVGltc3RhbXAgYW5kIEJvZHksIGFuZCB0aGVuIGVuY3J5cHQgdGhlIFRpbWVzdGFtcCAtLT4KKyAgICA8IS0tIGFuZCBCb2R5LiAgSXQgdXNlcyAzREVTIGFzIHRoZSBzeW1tZXRyaWMga2V5IGFsZ29yaXRobS4gLS0+CisgICAgPCEtLSAtLT4KKyAgICA8YmVhbiAKKyAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLnNlY3VyaXR5LndzczRqLldTUzRKT3V0SW50ZXJjZXB0b3IiCisgICAgICAgIGlkPSJUaW1lc3RhbXBTaWduRW5jcnlwdF9SZXF1ZXN0Ij4KKyAgICAgICAgPGNvbnN0cnVjdG9yLWFyZz4KKyAgICAgICAgICAgIDxtYXA+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0iYWN0aW9uIiB2YWx1ZT0iVGltZXN0YW1wIFNpZ25hdHVyZSBFbmNyeXB0Ii8+CisgICAgICAgICAgICAgICAgPCEtLSA8ZW50cnkga2V5PSJhY3Rpb24iIHZhbHVlPSJUaW1lc3RhbXAgU2lnbmF0dXJlIi8+IC0tPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9InVzZXIiIHZhbHVlPSJhbGljZSIvPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9InNpZ25hdHVyZVByb3BGaWxlIiB2YWx1ZT0ib3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2FsaWNlLnByb3BlcnRpZXMiLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJlbmNyeXB0aW9uUHJvcEZpbGUiIHZhbHVlPSJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYm9iLnByb3BlcnRpZXMiLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJlbmNyeXB0aW9uVXNlciIgdmFsdWU9IkJvYiIvPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9InNpZ25hdHVyZUtleUlkZW50aWZpZXIiIHZhbHVlPSJEaXJlY3RSZWZlcmVuY2UiLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJwYXNzd29yZENhbGxiYWNrQ2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLndzLnNlY3VyaXR5LktleXN0b3JlUGFzc3dvcmRDYWxsYmFjayIvPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9InNpZ25hdHVyZVBhcnRzIiB2YWx1ZT0ie0VsZW1lbnR9e2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2R9VGltZXN0YW1wO3tFbGVtZW50fXtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlL31Cb2R5Ii8+CisgICAgICAgICAgICAgICAgPCEtLSAtLT4KKyAgICAgICAgICAgICAgICA8IS0tIFJlY29tbWVuZGF0aW9uOiBzaWduYXR1cmVzIHNob3VsZCBiZSBlbmNyeXB0ZWQgLS0+CisgICAgICAgICAgICAgICAgPCEtLSAtLT4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJlbmNyeXB0aW9uUGFydHMiIHZhbHVlPSJ7RWxlbWVudH17aHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI31TaWduYXR1cmU7e0NvbnRlbnR9e2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvfUJvZHkiLz4KKyAgICAgICAgICAgICAgICA8IS0tIDxlbnRyeSBrZXk9ImVuY3J5cHRpb25LZXlUcmFuc3BvcnRBbGdvcml0aG0iIHZhbHVlPSJSU0ExNSIvPiAtLT4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJlbmNyeXB0aW9uU3ltQWxnb3JpdGhtIiB2YWx1ZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjdHJpcGxlZGVzLWNiYyIvPgorICAgICAgICAgICAgPC9tYXA+CisgICAgICAgIDwvY29uc3RydWN0b3ItYXJnPgorICAgIDwvYmVhbj4KKyAgICAKKyAgICA8IS0tIC0tPgorICAgIDwhLS0gVGhpcyBiZWFuIGlzIGFuIEluIGludGVyY2VwdG9yIHdoaWNoIHZhbGlkYXRlZCBhIHNpZ25lZCwgLS0+CisgICAgPCEtLSBlbmNyeXB0ZWQgcmVzcG9zbmUsIGFuZCB0aW1lc3RhbXBlZC4gLS0+CisgICAgPCEtLSAtLT4KKyAgICA8IS0tIC0tPgorICAgIDxiZWFuIAorICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3Muc2VjdXJpdHkud3NzNGouV1NTNEpJbkludGVyY2VwdG9yIgorICAgICAgICBpZD0iVGltZXN0YW1wU2lnbkVuY3J5cHRfUmVzcG9uc2UiPgorICAgICAgICA8Y29uc3RydWN0b3ItYXJnPgorICAgICAgICAgICAgPG1hcD4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJhY3Rpb24iIHZhbHVlPSJUaW1lc3RhbXAgU2lnbmF0dXJlIEVuY3J5cHQiLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJzaWduYXR1cmVQcm9wRmlsZSIgdmFsdWU9Im9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9ib2IucHJvcGVydGllcyIvPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9ImRlY3J5cHRpb25Qcm9wRmlsZSIgdmFsdWU9Im9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9hbGljZS5wcm9wZXJ0aWVzIi8+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0icGFzc3dvcmRDYWxsYmFja0NsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5zZWN1cml0eS5LZXlzdG9yZVBhc3N3b3JkQ2FsbGJhY2siLz4KKyAgICAgICAgICAgIDwvbWFwPgorICAgICAgICA8L2NvbnN0cnVjdG9yLWFyZz4KKyAgICA8L2JlYW4+CisKKzwvYmVhbnM+CmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvaGVsbG9fd29ybGQud3NkbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9oZWxsb193b3JsZC53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzFkMjQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvaGVsbG9fd29ybGQud3NkbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIAorICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8d3NkbDpkZWZpbml0aW9ucyAKKyAgICB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKKyAgICB4bWxuczp0bnM9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cCIKKyAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cCIgCisgICAgbmFtZT0iV1NTZWN1cml0eSIKKyAgICA+CisKKyAgICA8d3NkbDppbXBvcnQgCisgICAgICAgIG5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIgorICAgICAgICBsb2NhdGlvbj0iaGVsbG9fd29ybGRfYmFzZS53c2RsIgorICAgIC8+CisKKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBTZXJ2aWNlV1NTZWN1cml0eSI+CisgICAgICAgIDx3c2RsOnBvcnQgCisgICAgICAgICAgICBuYW1lPSJUaW1lc3RhbXBTaWduRW5jcnlwdCIgCisgICAgICAgICAgICBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjE5MDAwL1NPQVBTZXJ2aWNlV1NTZWN1cml0eS9UaW1lc3RhbXBTaWduRW5jcnlwdCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKworPC93c2RsOmRlZmluaXRpb25zPgorCmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvaGVsbG9fd29ybGRfYmFzZS53c2RsIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2hlbGxvX3dvcmxkX2Jhc2Uud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDE0NGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2NhbWVsL3dzL3NlY3VyaXR5L2hlbGxvX3dvcmxkX2Jhc2Uud3NkbApAQCAtMCwwICsxLDQwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHdzZGw6ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCisgICAgeG1sbnM6dG5zPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiCisgICAgeG1sbnM6eDE9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIKKyAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIiBuYW1lPSJIZWxsb1dvcmxkIj4KKyAgICA8d3NkbDp0eXBlcz4KKyAgICAgICAgPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp4MT0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlLz4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVzcG9uc2VUeXBlIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZ3JlZXRNZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXF1ZXN0VHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImdyZWV0TWVSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXNwb25zZVR5cGUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisKKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InRlc3ROaWxsYWJsZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJOaWxsRWxlbSIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaW50RWxlbSIgdHlwZT0iaW50Ii8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InRlc3ROaWxsYWJsZVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3BvbnNlVHlwZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisKKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImdyZWV0TWVMYXRlciI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXF1ZXN0VHlwZSIgdHlwZT0ibG9uZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJncmVldE1lTGF0ZXJSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXNwb25zZVR5cGUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJncmVldE1lU29tZXRpbWUiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVxdWVzdFR5cGUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJncmVldE1lU29tZXRpbWVSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXNwb25zZVR5cGUiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJncmVldE1lT25lV2F5Ij4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlcXVlc3RUeXBlIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGVzdERvY0xpdEZhdWx0Ij4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImZhdWx0VHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InRlc3REb2NMaXRGYXVsdFJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZS8+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFcnJvckNvZGUiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibWlub3IiIHR5cGU9InNob3J0Ii8+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Im1ham9yIiB0eXBlPSJzaG9ydCIvPgorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTm9TdWNoQ29kZUxpdCI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb2RlIiB0eXBlPSJ4MTpFcnJvckNvZGUiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQmFkUmVjb3JkTGl0IiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJCYWRSZWNvcmQiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVhc29uIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29kZSIgdHlwZT0ic2hvcnQiLz4KKyAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJhZGROdW1iZXJzIj4KKyAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9ImludCIvPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJhcmcxIiB0eXBlPSJpbnQiLz4KKyAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFkZE51bWJlcnMiIHR5cGU9IngxOmFkZE51bWJlcnMiLz4KKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJhZGROdW1iZXJzUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJpbnQiLz4KKyAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFkZE51bWJlcnNSZXNwb25zZSIgdHlwZT0ieDE6YWRkTnVtYmVyc1Jlc3BvbnNlIi8+CisgICAgICAgICAgICA8Y29tcGxleFR5cGUgbmFtZT0ic3RyaW5nU3RydWN0Ij4KKyAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJhcmcxIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkJhcmVEb2N1bWVudCIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJCYXJlRG9jdW1lbnRSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb21wYW55IiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0iaW50Ii8+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4gICAgICAKKyAgICAgICAgPC9zY2hlbWE+CisgICAgPC93c2RsOnR5cGVzPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F5SGlSZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJpbiIgZWxlbWVudD0ieDE6c2F5SGkiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6c2F5SGlSZXNwb25zZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ3JlZXRNZVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImluIiBlbGVtZW50PSJ4MTpncmVldE1lIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJncmVldE1lUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6Z3JlZXRNZVJlc3BvbnNlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJ0ZXN0TmlsbGFibGVSZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJpbiIgZWxlbWVudD0ieDE6dGVzdE5pbGxhYmxlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJ0ZXN0TmlsbGFibGVSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0ib3V0IiBlbGVtZW50PSJ4MTp0ZXN0TmlsbGFibGVSZXNwb25zZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ3JlZXRNZUxhdGVyUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iaW4iIGVsZW1lbnQ9IngxOmdyZWV0TWVMYXRlciIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iZ3JlZXRNZUxhdGVyUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6Z3JlZXRNZUxhdGVyUmVzcG9uc2UiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVTb21ldGltZVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImluIiBlbGVtZW50PSJ4MTpncmVldE1lU29tZXRpbWUiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVTb21ldGltZVJlc3BvbnNlIj4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJvdXQiIGVsZW1lbnQ9IngxOmdyZWV0TWVTb21ldGltZVJlc3BvbnNlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJncmVldE1lT25lV2F5UmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iaW4iIGVsZW1lbnQ9IngxOmdyZWV0TWVPbmVXYXkiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InRlc3REb2NMaXRGYXVsdFJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImluIiBlbGVtZW50PSJ4MTp0ZXN0RG9jTGl0RmF1bHQiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InRlc3REb2NMaXRGYXVsdFJlc3BvbnNlIj4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJvdXQiIGVsZW1lbnQ9IngxOnRlc3REb2NMaXRGYXVsdFJlc3BvbnNlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJOb1N1Y2hDb2RlTGl0RmF1bHQiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Ik5vU3VjaENvZGVMaXQiIGVsZW1lbnQ9IngxOk5vU3VjaENvZGVMaXQiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IkJhZFJlY29yZExpdEZhdWx0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJCYWRSZWNvcmRMaXQiIGVsZW1lbnQ9IngxOkJhZFJlY29yZExpdCIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0idGVzdERvY0xpdEJhcmVSZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJpbiIgZWxlbWVudD0ieDE6QmFyZURvY3VtZW50Ii8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJ0ZXN0RG9jTGl0QmFyZVJlc3BvbnNlIj4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJvdXQiIGVsZW1lbnQ9IngxOkJhcmVEb2N1bWVudFJlc3BvbnNlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+IAorICAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkdyZWV0ZXIiPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F5SGlSZXF1ZXN0IiBtZXNzYWdlPSJ0bnM6c2F5SGlSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F5SGlSZXNwb25zZSIgbWVzc2FnZT0idG5zOnNheUhpUmVzcG9uc2UiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWUiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZ3JlZXRNZVJlcXVlc3QiIG1lc3NhZ2U9InRuczpncmVldE1lUmVxdWVzdCIvPgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9ImdyZWV0TWVSZXNwb25zZSIgbWVzc2FnZT0idG5zOmdyZWV0TWVSZXNwb25zZSIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0idGVzdE5pbGxhYmxlIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InRlc3ROaWxsYWJsZVJlcXVlc3QiIG1lc3NhZ2U9InRuczp0ZXN0TmlsbGFibGVSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0idGVzdE5pbGxhYmxlUmVzcG9uc2UiIG1lc3NhZ2U9InRuczp0ZXN0TmlsbGFibGVSZXNwb25zZSIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ3JlZXRNZUxhdGVyIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImdyZWV0TWVMYXRlclJlcXVlc3QiIG1lc3NhZ2U9InRuczpncmVldE1lTGF0ZXJSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZ3JlZXRNZUxhdGVyUmVzcG9uc2UiIG1lc3NhZ2U9InRuczpncmVldE1lTGF0ZXJSZXNwb25zZSIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lU29tZXRpbWUiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0iZ3JlZXRNZVNvbWV0aW1lUmVxdWVzdCIgbWVzc2FnZT0idG5zOmdyZWV0TWVTb21ldGltZVJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJncmVldE1lU29tZXRpbWVSZXNwb25zZSIgbWVzc2FnZT0idG5zOmdyZWV0TWVTb21ldGltZVJlc3BvbnNlIi8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lT25lV2F5Ij4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9ImdyZWV0TWVPbmVXYXlSZXF1ZXN0IiBtZXNzYWdlPSJ0bnM6Z3JlZXRNZU9uZVdheVJlcXVlc3QiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InRlc3REb2NMaXRGYXVsdCI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJ0ZXN0RG9jTGl0RmF1bHRSZXF1ZXN0IiBtZXNzYWdlPSJ0bnM6dGVzdERvY0xpdEZhdWx0UmVxdWVzdCIvPgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InRlc3REb2NMaXRGYXVsdFJlc3BvbnNlIiBtZXNzYWdlPSJ0bnM6dGVzdERvY0xpdEZhdWx0UmVzcG9uc2UiLz4KKyAgICAgICAgICAgIDx3c2RsOmZhdWx0IG5hbWU9Ik5vU3VjaENvZGVMaXRGYXVsdCIgbWVzc2FnZT0idG5zOk5vU3VjaENvZGVMaXRGYXVsdCIvPgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iQmFkUmVjb3JkTGl0RmF1bHQiIG1lc3NhZ2U9InRuczpCYWRSZWNvcmRMaXRGYXVsdCIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorCisgICAgPC93c2RsOnBvcnRUeXBlPgorCisgICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iRG9jTGl0QmFyZSI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJ0ZXN0RG9jTGl0QmFyZSI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJ0ZXN0RG9jTGl0QmFyZVJlcXVlc3QiIG1lc3NhZ2U9InRuczp0ZXN0RG9jTGl0QmFyZVJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJ0ZXN0RG9jTGl0QmFyZVJlc3BvbnNlIiBtZXNzYWdlPSJ0bnM6dGVzdERvY0xpdEJhcmVSZXNwb25zZSIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPiAgICAgICAKKyAgICA8L3dzZGw6cG9ydFR5cGU+CisgICAgPHdzZGw6YmluZGluZyBuYW1lPSJHcmVldGVyX1NPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6R3JlZXRlciI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIvPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWUiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIvPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InRlc3ROaWxsYWJsZSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ3JlZXRNZUxhdGVyIj4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzdHlsZT0iZG9jdW1lbnQiLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lU29tZXRpbWUiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIvPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWVPbmVXYXkiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIvPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InRlc3REb2NMaXRGYXVsdCI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iTm9TdWNoQ29kZUxpdEZhdWx0Ij4KKyAgICAgICAgICAgICAgICA8c29hcDpmYXVsdCBuYW1lPSJOb1N1Y2hDb2RlTGl0RmF1bHQiIHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmZhdWx0PgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iQmFkUmVjb3JkTGl0RmF1bHQiPgorICAgICAgICAgICAgICAgIDxzb2FwOmZhdWx0IG5hbWU9IkJhZFJlY29yZExpdEZhdWx0IiB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDpmYXVsdD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKworICAgIDwvd3NkbDpiaW5kaW5nPgorICAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iRG9jX0xpdF9CYXJlX1NPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6RG9jTGl0QmFyZSI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0idGVzdERvY0xpdEJhcmUiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHN0eWxlPSJkb2N1bWVudCIgc29hcEFjdGlvbj0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3Rlc3REb2NMaXRCYXJlIi8+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJ0ZXN0RG9jTGl0QmFyZVJlcXVlc3QiPgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0idGVzdERvY0xpdEJhcmVSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOmJpbmRpbmc+CisKKworICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iU09BUFNlcnZpY2UiPgorICAgIDx3c2RsOnBvcnQgbmFtZT0iU29hcFBvcnQiIGJpbmRpbmc9InRuczpHcmVldGVyX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6MTkwMDAvU29hcENvbnRleHQvU29hcFBvcnQiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisKKyAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0MSIgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo3MDAwL1NvYXBDb250ZXh0L1NvYXBQb3J0Ii8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorCisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQUHJvdmlkZXJTZXJ2aWNlIj4KKyAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJTb2FwUHJvdmlkZXJQb3J0IiBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwMDMvU29hcENvbnRleHQvU29hcFByb3ZpZGVyUG9ydCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKworICAgICAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBEaXNwYXRjaFNlcnZpY2UiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBEaXNwYXRjaFBvcnQiIGJpbmRpbmc9InRuczpHcmVldGVyX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTAwNi9TT0FQRGlzcGF0Y2hTZXJ2aWNlL1NvYXBEaXNwYXRjaFBvcnQiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+CisKKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBTZXJ2aWNlX0RvY0xpdEJhcmUiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0MiIgYmluZGluZz0idG5zOkRvY19MaXRfQmFyZV9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0Ojc2MDAvU29hcENvbnRleHQvU29hcFBvcnQiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQU2VydmljZUFkZHJlc3NpbmdEb2NMaXRCYXJlIj4KKyAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJTb2FwUG9ydCIgYmluZGluZz0idG5zOkRvY19MaXRfQmFyZV9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0Ojc2MDAvU29hcENvbnRleHQvU29hcFBvcnQiLz4KKyAgICAgICAgICAgIDx3c3dhOlVzaW5nQWRkcmVzc2luZyB4bWxuczp3c3dhPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzAyL2FkZHJlc3Npbmcvd3NkbCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBTZXJ2aWNlX1Rlc3QxIj4KKyAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJTb2FwUG9ydF9UZXN0MSIgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MTAwIi8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0X1Rlc3QyIiBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkxMDEiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQU2VydmljZUFkZHJlc3NpbmciPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IlNvYXBQb3J0IiBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjkwMDgvU29hcENvbnRleHQvU29hcFBvcnQiLz4KKyAgICAgICAgICAgIDx3c3dhOlVzaW5nQWRkcmVzc2luZyB4bWxuczp3c3dhPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzAyL2FkZHJlc3Npbmcvd3NkbCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlNPQVBTZXJ2aWNlQ29uY3VycmVuY3lUZXN0Ij4KKyAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJTb2FwUG9ydCIgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDA5L1NvYXBDb250ZXh0L1NvYXBQb3J0Ii8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iU09BUFNlcnZpY2VCb2d1c0FkZHJlc3NUZXN0Ij4KKyAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJTb2FwUG9ydCIgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iRk9PIi8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iU09BUFNlcnZpY2VNdWx0aVBvcnRUeXBlVGVzdCI+CisgICAgICAgIDx3c2RsOnBvcnQgbmFtZT0iR3JlZXRlclBvcnQiIGJpbmRpbmc9InRuczpHcmVldGVyX1NPQVBCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTAyMC9NdWx0aVBvcnQvR3JlZXRlclBvcnQiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgICAgIDx3c2RsOnBvcnQgbmFtZT0iRG9jTGl0QmFyZVBvcnQiIGJpbmRpbmc9InRuczpEb2NfTGl0X0JhcmVfU09BUEJpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MDIxL011bHRpUG9ydC9Eb2NCYXJlUG9ydCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4gICAgICAgIAorICAgIDwvd3NkbDpzZXJ2aWNlPgorPC93c2RsOmRlZmluaXRpb25zPgorCmRpZmYgLS1naXQgYS90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvc2VydmVyLnhtbCBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9zZXJ2ZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWUxOTcKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jYW1lbC9zZXJ2aWNlbWl4LWNhbWVsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvc2VydmVyLnhtbApAQCAtMCwwICsxLDExNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4bWxuczp0ZXN0PSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiCisgICAgeG1sbnM6Y3hmPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvY3hmIgorICAgIHhtbG5zOnNteD0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jYW1lbEVuZHBvaW50LyIKKyAgICB4bWxuczpjYW1lbD0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMtMi4wLnhzZAorICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvamF4d3MueHNkCisgICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9jeGYgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL2N4Zi9jYW1lbC1jeGYueHNkCisgICAgICAgIGh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvY2FtZWxFbmRwb2ludC8gaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jYW1lbEVuZHBvaW50Ly54c2QKKyAgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nL2NhbWVsLXNwcmluZy54c2QKKyAgICAiPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLnhtbCIvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1zb2FwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24taHR0cC1qZXR0eS54bWwiLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24tbG9jYWwueG1sIiAvPgorICAgIAorICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmNhbWVsLmNvbXBvbmVudC5jeGYudHJhbnNwb3J0LkNhbWVsVHJhbnNwb3J0RmFjdG9yeSIgbGF6eS1pbml0PSJ0cnVlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1cyIgcmVmPSJjeGYiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbWVsQ29udGV4dCIgcmVmPSJjYW1lbF9jb250ZXh0Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3BvcnRJZHMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgIDx2YWx1ZT5odHRwOi8vY3hmLmFwYWNoZS5vcmcvdHJhbnNwb3J0cy9jYW1lbDwvdmFsdWU+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9iZWFuPgorICAgICAgICAKKyAgICA8Y2FtZWw6Y2FtZWxDb250ZXh0IGlkPSJjYW1lbF9jb250ZXh0Ij4KKyAgICA8L2NhbWVsOmNhbWVsQ29udGV4dD4KKyAgICAKKyAgICA8Y3hmOmN4ZkVuZHBvaW50IGlkPSJyb3V0ZXJFbmRwb2ludCIgbmFtZT0idGVzdDpUaW1lc3RhbXBTaWduRW5jcnlwdCIgYWRkcmVzcz0iY2FtZWw6Ly9qZXR0eTpodHRwOi8vbG9jYWxob3N0OjE5MDAwL1NPQVBTZXJ2aWNlV1NTZWN1cml0eS9UaW1lc3RhbXBTaWduRW5jcnlwdCIgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuR3JlZXRlciI+CisgICAgICAgIDxjeGY6ZmVhdHVyZXM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuZmVhdHVyZS5Mb2dnaW5nRmVhdHVyZSIvPgorICAgICAgICA8L2N4ZjpmZWF0dXJlcz4KKyAgICAgICAgPGN4ZjpvdXRJbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuYmluZGluZy5zb2FwLnNhYWouU0FBSk91dEludGVyY2VwdG9yIi8+CisgICAgICAgICAgICA8cmVmIGJlYW49IlRpbWVzdGFtcFNpZ25FbmNyeXB0X1Jlc3BvbnNlIi8+CisgICAgICAgIDwvY3hmOm91dEludGVyY2VwdG9ycz4KKyAgICAgICAgPGN4ZjppbkludGVyY2VwdG9ycz4KKyAgICAgICAgICAgIDxyZWYgYmVhbj0iVGltZXN0YW1wU2lnbkVuY3J5cHRfUmVxdWVzdCIvPgorICAgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmJpbmRpbmcuc29hcC5zYWFqLlNBQUpJbkludGVyY2VwdG9yIi8+CisgICAgICAgIDwvY3hmOmluSW50ZXJjZXB0b3JzPgorICAgICAgICA8Y3hmOnByb3BlcnRpZXM+CisgICAgICAgICAgICA8ZW50cnkga2V5PSJzZXREZWZhdWx0QnVzIiB2YWx1ZT0idHJ1ZSIvPgorICAgICAgICA8L2N4Zjpwcm9wZXJ0aWVzPgorICAgIDwvY3hmOmN4ZkVuZHBvaW50PgorCisKKyAgICA8Y3hmOmN4ZkVuZHBvaW50IGlkPSJzZXJ2aWNlRW5kcG9pbnQiIGFkZHJlc3M9ImxvY2FsOi8vc214L2hlbGxvX3dvcmxkIgorICAgICAgc2VydmljZUNsYXNzPSJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC5HcmVldGVyIj4KKyAgICAgICAgPGN4Zjpwcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGVudHJ5IGtleT0ic2V0RGVmYXVsdEJ1cyIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgPC9jeGY6cHJvcGVydGllcz4KKyAgICA8L2N4ZjpjeGZFbmRwb2ludD4KKworCisgICAgPGJlYW4gCisgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5zZWN1cml0eS53c3M0ai5XU1M0Sk91dEludGVyY2VwdG9yIgorICAgICAgICBpZD0iVGltZXN0YW1wU2lnbkVuY3J5cHRfUmVzcG9uc2UiPgorICAgICAgICA8Y29uc3RydWN0b3ItYXJnPgorICAgICAgICAgICAgPG1hcD4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJhY3Rpb24iIHZhbHVlPSJUaW1lc3RhbXAgU2lnbmF0dXJlIEVuY3J5cHQiLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJ1c2VyIiB2YWx1ZT0iYm9iIi8+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0ic2lnbmF0dXJlUHJvcEZpbGUiIHZhbHVlPSJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYm9iLnByb3BlcnRpZXMiLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJlbmNyeXB0aW9uUHJvcEZpbGUiIHZhbHVlPSJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYWxpY2UucHJvcGVydGllcyIvPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9ImVuY3J5cHRpb25Vc2VyIiB2YWx1ZT0iQWxpY2UiLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJzaWduYXR1cmVLZXlJZGVudGlmaWVyIiB2YWx1ZT0iRGlyZWN0UmVmZXJlbmNlIi8+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0icGFzc3dvcmRDYWxsYmFja0NsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tci53cy5zZWN1cml0eS5LZXlzdG9yZVBhc3N3b3JkQ2FsbGJhY2siLz4KKyAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJzaWduYXR1cmVQYXJ0cyIgdmFsdWU9IntFbGVtZW50fXtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktdXRpbGl0eS0xLjAueHNkfVRpbWVzdGFtcDt7RWxlbWVudH17aHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS99Qm9keSIvPgorICAgICAgICAgICAgICAgIDwhLS0gLS0+CisgICAgICAgICAgICAgICAgPCEtLSBSZWNvbW1lbmRhdGlvbjogc2lnbmF0dXJlcyBzaG91bGQgYmUgZW5jcnlwdGVkIC0tPgorICAgICAgICAgICAgICAgIDwhLS0gLS0+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0iZW5jcnlwdGlvblBhcnRzIiB2YWx1ZT0ie0VsZW1lbnR9e2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyN9U2lnbmF0dXJlO3tDb250ZW50fXtodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlL31Cb2R5Ii8+CisgICAgICAgICAgICAgICAgPCEtLSA8ZW50cnkga2V5PSJlbmNyeXB0aW9uS2V5VHJhbnNwb3J0QWxnb3JpdGhtIiB2YWx1ZT0iUlNBMTUiLz4gLS0+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0iZW5jcnlwdGlvblN5bUFsZ29yaXRobSIgdmFsdWU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3RyaXBsZWRlcy1jYmMiLz4KKyAgICAgICAgICAgIDwvbWFwPgorICAgICAgICA8L2NvbnN0cnVjdG9yLWFyZz4KKyAgICA8L2JlYW4+CisgICAgPGJlYW4gCisgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5zZWN1cml0eS53c3M0ai5XU1M0SkluSW50ZXJjZXB0b3IiCisgICAgICAgIGlkPSJUaW1lc3RhbXBTaWduRW5jcnlwdF9SZXF1ZXN0Ij4KKyAgICAgICAgPGNvbnN0cnVjdG9yLWFyZz4KKyAgICAgICAgICAgIDxtYXA+CisgICAgICAgICAgICAgICAgPCEtLSBVc2UgdGhpcyBhY3Rpb24gb3JkZXIgZm9yIGxvY2FsIGNsaWVudHMgLS0+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0iYWN0aW9uIiB2YWx1ZT0iVGltZXN0YW1wIFNpZ25hdHVyZSBFbmNyeXB0Ii8+CisgICAgICAgICAgICAgICAgPCEtLSBVc2UgdGhpcyBhY3Rpb24gc3BlYyBmb3IgV0NGIGNsaWVudHMgCisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0iYWN0aW9uIiB2YWx1ZT0iU2lnbmF0dXJlIEVuY3J5cHQgVGltZXN0YW1wIi8+CisgICAgICAgICAgICAgICAgLS0+CisgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0ic2lnbmF0dXJlUHJvcEZpbGUiIHZhbHVlPSJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvY2FtZWwvd3Mvc2VjdXJpdHkvYWxpY2UucHJvcGVydGllcyIvPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9ImRlY3J5cHRpb25Qcm9wRmlsZSIgdmFsdWU9Im9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC93cy9zZWN1cml0eS9ib2IucHJvcGVydGllcyIvPgorICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9InBhc3N3b3JkQ2FsbGJhY2tDbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuc2VydmljZW1peC5jYW1lbC5ubXIud3Muc2VjdXJpdHkuS2V5c3RvcmVQYXNzd29yZENhbGxiYWNrIi8+CisgICAgICAgICAgICA8L21hcD4KKyAgICAgICAgPC9jb25zdHJ1Y3Rvci1hcmc+CisgICAgPC9iZWFuPgorICAgIAorPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3BlcnNvbi53c2RsIGIvdHJ1bmsvY2FtZWwvc2VydmljZW1peC1jYW1lbC9zcmMvdGVzdC9yZXNvdXJjZXMvcGVyc29uLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4ZTI5YQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2NhbWVsL3NlcnZpY2VtaXgtY2FtZWwvc3JjL3Rlc3QvcmVzb3VyY2VzL3BlcnNvbi53c2RsCkBAIC0wLDAgKzEsOTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0+Cis8d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJ3c2RsLWZpcnN0IgorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCisgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOnRucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiCisgICAgeG1sbnM6dHlwZW5zPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdC90eXBlcyIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0Ij4KKworICAgIDx3c2RsOnR5cGVzPgorICAgICAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIgorICAgICAgICAgICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iR2V0UGVyc29uIj4KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwZXJzb25JZCIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+CisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iR2V0UGVyc29uUmVzcG9uc2UiPgorICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3NuIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+CisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVW5rbm93blBlcnNvbkZhdWx0Ij4KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwZXJzb25JZCIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+CisgICAgICAgIDwveHNkOnNjaGVtYT4KKyAgPC93c2RsOnR5cGVzPgorICAgIAorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iR2V0UGVyc29uUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idHlwZW5zOkdldFBlcnNvbiIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iR2V0UGVyc29uUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InR5cGVuczpHZXRQZXJzb25SZXNwb25zZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iVW5rbm93blBlcnNvbkZhdWx0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0eXBlbnM6VW5rbm93blBlcnNvbkZhdWx0Ii8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisKKyAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQZXJzb24iPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iR2V0UGVyc29uIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpHZXRQZXJzb25SZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOkdldFBlcnNvblJlc3BvbnNlIi8+CisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJVbmtub3duUGVyc29uIiBtZXNzYWdlPSJ0bnM6VW5rbm93blBlcnNvbkZhdWx0Ii8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOnBvcnRUeXBlPgorICAgIAorICAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iUGVyc29uU09BUEJpbmRpbmciIHR5cGU9InRuczpQZXJzb24iPgorICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJHZXRQZXJzb24iPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iVW5rbm93blBlcnNvbiI+CisgICAgICAgICAgICAgICAgPHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJVbmtub3duUGVyc29uIiAvPgorICAgICAgICAgICAgPC93c2RsOmZhdWx0PgorICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICA8L3dzZGw6YmluZGluZz4KKworICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iUGVyc29uU2VydmljZSI+CisgICAgICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOlBlcnNvblNPQVBCaW5kaW5nIiBuYW1lPSJzb2FwIj4KKyAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MTkyL1BlcnNvblNlcnZpY2UvIiAvPgorICAgICAgIDwvd3NkbDpwb3J0PgorICAgPC93c2RsOnNlcnZpY2U+CisKKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvcG9tLnhtbCBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQ0YmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9wb20ueG1sCkBAIC0wLDAgKzEsMjI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y3hmPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXI8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBDWEYgU3VwcG9ydCA6OiBCaW5kaW5nIEZvciBOTVI8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkFwYWNoZSBDWEYgQmluZGluZyBpbnRlZ3JhdGlvbiBpbiB0aGUgTk1SIDwvZGVzY3JpcHRpb24+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1idW5kbGU8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi10ZXN0dXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tYW5ub3RhdGlvbl8xLjBfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5zdGF4LWFwaS0xLjA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVhc3ltb2NrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZWFzeW1vY2tjbGFzc2V4dGVuc2lvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDwhLS0gQnVuZGxlIGdlbmVyYXRpb24gLS0+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtRGVzY3JpcHRpb24+JHtwcm9qZWN0LmRlc2NyaXB0aW9ufTwvQnVuZGxlLURlc2NyaXB0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5zdHJlYW07dmVyc2lvbj0iWzAuMCwyKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTmVlZGVkIGZvciBqYXhiIGFubm90YXRpb25zIGNsYXNzZXMgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8RHluYW1pY0ltcG9ydC1QYWNrYWdlPio8L0R5bmFtaWNJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3Byb2plY3QuYXJ0aWZhY3RJZH0qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc9TUVUQS1JTkYuY3hmLmJpbmRpbmcubm1yJworICAgICAgICAgICAgICAgICAgICAgICAgPC9FeHBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxQcml2YXRlLVBhY2thZ2UgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxfZmFpbG9rPnRydWU8L19mYWlsb2s+CisgICAgICAgICAgICAgICAgICAgICAgICA8U3ByaW5nLUNvbnRleHQ+KjtwdWJsaXNoLWNvbnRleHQ6PWZhbHNlPC9TcHJpbmctQ29udGV4dD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxfdmVyc2lvbnBvbGljeT5bJCh2ZXJzaW9uOz09OyQoQCkpLCQodmVyc2lvbjsrOyQoQCkpKTwvX3ZlcnNpb25wb2xpY3k+CisgICAgICAgICAgICAgICAgICAgIDwvaW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPCEtLSBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgdmVyc2lvbnMgLS0+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmRlcGVuZHMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7ZGVwZW5kcy1tYXZlbi1wbHVnaW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtZGVwZW5kcy1maWxlPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5nZW5lcmF0ZS1kZXBlbmRzLWZpbGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGZvcmtNb2RlPnBlcnRlc3Q8L2ZvcmtNb2RlPgorICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5jb20uc3VuLm9yZy5hcGFjaGUueGVyY2VzLmludGVybmFsLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGw8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5jb20uc3VuLm9yZy5hcGFjaGUueGVyY2VzLmludGVybmFsLmpheHAuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5SW1wbDwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPmNvbS5zdW4ub3JnLmFwYWNoZS54ZXJjZXMuaW50ZXJuYWwuamF4cC5TQVhQYXJzZXJGYWN0b3J5SW1wbDwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1jb2RlZ2VuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5nZW5lcmF0ZS10ZXN0LXNvdXJjZXM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZVJvb3Q+JHtiYXNlZGlyfS90YXJnZXQvZ2VuZXJhdGVkPC9zb3VyY2VSb290PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsT3B0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxPcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbD4ke2Jhc2VkaXJ9L3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb193b3JsZF9ubXIud3NkbDwvd3NkbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRyYWFyZ3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dHJhYXJnPi12ZXJib3NlPC9leHRyYWFyZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0cmFhcmdzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxPcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsT3B0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD53c2RsMmphdmE8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+aWJtamRrPC9pZD4KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPG5hbWU+amF2YS52ZW5kb3I8L25hbWU+CisgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5JQk0gQ29ycG9yYXRpb248L3ZhbHVlPgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICA8L2FjdGl2YXRpb24+CisgICAgICAgICAgICA8IS0tIEFkZCB0aGUgU3VuIGpheHAtcmkgYXMgYSBkZXBlbmRlbmN5IHdoZW4gdXNpbmcgdGhlIGlibSBqZGssIHNvIHRoYXQgCisgICAgICAgICAgICAgICAgY3hmJ3MgZGVwZW5kZW5jeSBvbiB0aGUgU3VuIHNhYWogY2FuIHdvcmsgd2l0aCB0aGUgaWJtIGpkay4gLS0+CisgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuLnhtbC5wYXJzZXJzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXhwLXJpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgPGJ1aWxkPgorICAgICAgICAgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qVGVzdCo8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyokKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JrTW9kZT4ke3N1cmVmaXJlLmZvcmsubW9kZX08L2ZvcmtNb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzeXN0ZW1Qcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5kZXJieS5zeXN0ZW0uaG9tZTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke2Jhc2VkaXJ9L3RhcmdldC9kZXJieTwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2l0aCBNYXZlbiAyLjAuNywgaXQncyBwb3NzaWJsZSB0aGF0IGpheHAtcmkgd2lsbCBiZSBwbGFjZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBmcm9udCBvZiB3b29kc3RveCBvbiB0aGUgY2xhc3NwYXRoLiBJZiB0aGlzIGhhcHBlbnMsIGN4ZiB3aWxsIG5vdCB1c2UgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b29kc3RveCwgY2F1c2luZyB0ZXN0IGZhaWx1cmVzIChlLmcuLCBDeGZCY1Byb3ZpZGVyQ29uc3VtZXJNdG9tVGVzdCkuIFNvLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0aGVzZSBwcm9wZXJ0aWVzIHRvIGVuc3VyZSB3b29kc3RveCBpcyB1c2VkLiBNYXZlbiAyLjAuOSBkb2Vzbid0IHJlcXVpcmUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHdvcmstYXJvdW5kIHNpbmNlIGl0IGNvbnNpc3RlbnRseSBwbGFjZXMgamF4cC1yaSBhdCB0aGUgZW5kIG9mIHRoZSBkZXBlbmRlbmNpZXMuIC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwuc3RyZWFtLlhNTElucHV0RmFjdG9yeTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5jb20uY3RjLndzdHguc3RheC5Xc3R4SW5wdXRGYWN0b3J5PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+amF2YXgueG1sLnN0cmVhbS5YTUxPdXRwdXRGYWN0b3J5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPmNvbS5jdGMud3N0eC5zdGF4LldzdHhPdXRwdXRGYWN0b3J5PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgICAgICAgPC9wbHVnaW5zPgorICAgICAgICAgICAgPC9idWlsZD4KKyAgICAgICAgPC9wcm9maWxlPgorICAgIDwvcHJvZmlsZXM+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkJpbmRpbmcuamF2YSBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkJpbmRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2U0YzdhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1SQmluZGluZy5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuYmluZGluZy5CaW5kaW5nOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkFic3RyYWN0QmFzaWNJbnRlcmNlcHRvclByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2VJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuQmluZGluZ0luZm87CisKK3B1YmxpYyBjbGFzcyBOTVJCaW5kaW5nIGV4dGVuZHMgQWJzdHJhY3RCYXNpY0ludGVyY2VwdG9yUHJvdmlkZXIgaW1wbGVtZW50cyBCaW5kaW5nIHsKKworICAgIHByaXZhdGUgTk1SQmluZGluZ0luZm8gYmluZGluZ0luZm87CisgICAgCisgICAgcHVibGljIE5NUkJpbmRpbmcoTk1SQmluZGluZ0luZm8gYmluZGluZ0luZm8pIHsKKyAgICAgICAgdGhpcy5iaW5kaW5nSW5mbyA9IGJpbmRpbmdJbmZvOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgTWVzc2FnZSBjcmVhdGVNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZShuZXcgTWVzc2FnZUltcGwoKSk7CisgICAgfQorCisgICAgcHVibGljIE1lc3NhZ2UgY3JlYXRlTWVzc2FnZShNZXNzYWdlIG0pIHsKKyAgICAgICAgaWYgKCFtLmNvbnRhaW5zS2V5KE1lc3NhZ2UuQ09OVEVOVF9UWVBFKSkgeworICAgICAgICAgICAgbS5wdXQoTWVzc2FnZS5DT05URU5UX1RZUEUsICJ0ZXh0L3htbCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgTk1STWVzc2FnZShtKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQmluZGluZ0luZm8gZ2V0QmluZGluZ0luZm8oKSB7CisgICAgICAgIHJldHVybiBiaW5kaW5nSW5mbzsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkJpbmRpbmdGYWN0b3J5LmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9OTVJCaW5kaW5nRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTNiNDkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9OTVJCaW5kaW5nRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJpbmRpbmcuQWJzdHJhY3RCaW5kaW5nRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5iaW5kaW5nLkJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuU3RheEluSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuU3RheE91dEludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuQmluZGluZ0luZm87CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5tb2RlbC5CaW5kaW5nT3BlcmF0aW9uSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLk9wZXJhdGlvbkluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5tb2RlbC5TZXJ2aWNlSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9ycy5OTVJGYXVsdEluSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5pbnRlcmNlcHRvcnMuTk1SRmF1bHRPdXRJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9ycy5OTVJPcGVyYXRpb25JbkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuaW50ZXJjZXB0b3JzLk5NUldyYXBwZXJJbkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuaW50ZXJjZXB0b3JzLk5NUldyYXBwZXJPdXRJbnRlcmNlcHRvcjsKKworcHVibGljIGNsYXNzIE5NUkJpbmRpbmdGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RCaW5kaW5nRmFjdG9yeSB7CisKKyAgICBwdWJsaWMgQmluZGluZyBjcmVhdGVCaW5kaW5nKEJpbmRpbmdJbmZvIGJpbmRpbmcpIHsKKyAgICAgICAgTk1SQmluZGluZyBqYiA9IG5ldyBOTVJCaW5kaW5nKChOTVJCaW5kaW5nSW5mbykgYmluZGluZyk7CisgICAgICAgIGpiLmdldEluSW50ZXJjZXB0b3JzKCkuYWRkKG5ldyBTdGF4SW5JbnRlcmNlcHRvcigpKTsKKyAgICAgICAgamIuZ2V0SW5JbnRlcmNlcHRvcnMoKS5hZGQobmV3IE5NUk9wZXJhdGlvbkluSW50ZXJjZXB0b3IoKSk7CisgICAgICAgIGpiLmdldEluSW50ZXJjZXB0b3JzKCkuYWRkKG5ldyBOTVJXcmFwcGVySW5JbnRlcmNlcHRvcigpKTsKKyAgICAgICAgamIuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKG5ldyBTdGF4T3V0SW50ZXJjZXB0b3IoKSk7CisgICAgICAgIGpiLmdldE91dEludGVyY2VwdG9ycygpLmFkZChuZXcgTk1SV3JhcHBlck91dEludGVyY2VwdG9yKCkpOworICAgICAgICBqYi5nZXRPdXRGYXVsdEludGVyY2VwdG9ycygpLmFkZChuZXcgU3RheE91dEludGVyY2VwdG9yKCkpOworICAgICAgICBqYi5nZXRPdXRGYXVsdEludGVyY2VwdG9ycygpLmFkZChuZXcgTk1SRmF1bHRPdXRJbnRlcmNlcHRvcigpKTsKKyAgICAgICAgCisgICAgICAgIGpiLmdldEluRmF1bHRJbnRlcmNlcHRvcnMoKS5hZGQobmV3IE5NUkZhdWx0SW5JbnRlcmNlcHRvcigpKTsKKyAgICAgICAgcmV0dXJuIGpiOworICAgIH0KKworICAgIHB1YmxpYyBCaW5kaW5nSW5mbyBjcmVhdGVCaW5kaW5nSW5mbyhTZXJ2aWNlSW5mbyBzZXJ2aWNlLCBTdHJpbmcgbmFtZXNwYWNlLCBPYmplY3QgY29uZmlnKSB7CisgICAgICAgIE5NUkJpbmRpbmdJbmZvIGluZm8gPSBuZXcgTk1SQmluZGluZ0luZm8oc2VydmljZSwgTk1SQ29uc3RhbnRzLk5TX05NUl9CSU5ESU5HKTsKKyAgICAgICAgaW5mby5zZXROYW1lKG5ldyBRTmFtZShzZXJ2aWNlLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiTk1SQmluZGluZyIpKTsKKworICAgICAgICBmb3IgKE9wZXJhdGlvbkluZm8gb3AgOiBzZXJ2aWNlLmdldEludGVyZmFjZSgpLmdldE9wZXJhdGlvbnMoKSkgeyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBCaW5kaW5nT3BlcmF0aW9uSW5mbyBib3AgPSAKKyAgICAgICAgICAgICAgICBpbmZvLmJ1aWxkT3BlcmF0aW9uKG9wLmdldE5hbWUoKSwgb3AuZ2V0SW5wdXROYW1lKCksIG9wLmdldE91dHB1dE5hbWUoKSk7CisgICAgICAgICAgICBpbmZvLmFkZE9wZXJhdGlvbihib3ApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gaW5mbzsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkJpbmRpbmdJbmZvLmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9OTVJCaW5kaW5nSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZmJlNGUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9OTVJCaW5kaW5nSW5mby5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5tb2RlbC5CaW5kaW5nSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLlNlcnZpY2VJbmZvOworCitwdWJsaWMgY2xhc3MgTk1SQmluZGluZ0luZm8gZXh0ZW5kcyBCaW5kaW5nSW5mbyB7CisKKyAgICBwdWJsaWMgTk1SQmluZGluZ0luZm8oU2VydmljZUluZm8gc2VydmljZSwgU3RyaW5nIGJpbmRpbmdJZCkgeworICAgICAgICBzdXBlcihzZXJ2aWNlLCBiaW5kaW5nSWQpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1SQ29uc3RhbnRzLmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9OTVJDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWZjMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1SQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXI7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCisKK3B1YmxpYyBmaW5hbCBjbGFzcyBOTVJDb25zdGFudHMgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTlNfTk1SX0JJTkRJTkcgPSAiaHR0cDovL2N4Zi5hcGFjaGUub3JnL2JpbmRpbmdzL25tciI7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOU19KQklfV1JBUFBFUiA9ICJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkvd3NkbC0xMS13cmFwcGVyIjsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIEpCSV9XUkFQUEVSX01FU1NBR0UgPSBuZXcgUU5hbWUoTlNfSkJJX1dSQVBQRVIsICJtZXNzYWdlIik7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIEpCSV9XUkFQUEVSX1BBUlQgPSBuZXcgUU5hbWUoTlNfSkJJX1dSQVBQRVIsICJwYXJ0Iik7CisKKyAgICBwcml2YXRlIE5NUkNvbnN0YW50cygpIHsKKyAgICAgICAgLy91dGlsaXR5IGNsYXNzCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1SRmF1bHQuamF2YSBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkZhdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmMjlkNwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkZhdWx0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tcjsKKworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuRmF1bHQ7CisKK3B1YmxpYyBjbGFzcyBOTVJGYXVsdCBleHRlbmRzIEZhdWx0IHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOTVJfRkFVTFRfUFJFRklYID0gImpmbnMiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk1SX0ZBVUxUX1JPT1QgPSAiTk1SRmF1bHQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5NUl9GQVVMVF9TVFJJTkcgPSAiZmF1bHRzdHJpbmciOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk1SX0ZBVUxUX0RFVEFJTCA9ICJkZXRhaWwiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk1SX0ZBVUxUX0NPREVfU0VSVkVSID0gIlNFUlZFUiI7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBOTVJfRkFVTFRfQ09ERV9DTElFTlQgPSAiQ0xJRU5UIjsKKworICAgIAorICAgIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxMDAwMDA7CisKKyAgICBwdWJsaWMgTk1SRmF1bHQoTWVzc2FnZSBtZXNzYWdlLCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UsIHRocm93YWJsZSk7ICAgICAgICAKKyAgICB9CisKKyAgICBwdWJsaWMgTk1SRmF1bHQoTWVzc2FnZSBtZXNzYWdlKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UpOyAgICAgICAgCisgICAgfQorCisgICAgcHVibGljIE5NUkZhdWx0KFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIHN1cGVyKG5ldyBNZXNzYWdlKG1lc3NhZ2UsIChSZXNvdXJjZUJ1bmRsZSkgbnVsbCkpOyAgICAgICAgCisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBOTVJGYXVsdCBjcmVhdGVGYXVsdChGYXVsdCBmKSB7CisgICAgICAgIGlmIChmIGluc3RhbmNlb2YgTk1SRmF1bHQpIHsKKyAgICAgICAgICAgIHJldHVybiAoTk1SRmF1bHQpIGY7CisgICAgICAgIH0KKyAgICAgICAgVGhyb3dhYmxlIHRoID0gZi5nZXRDYXVzZSgpOworICAgICAgICBOTVJGYXVsdCBqYmlGYXVsdCA9IG5ldyBOTVJGYXVsdChuZXcgTWVzc2FnZShmLmdldE1lc3NhZ2UoKSwgKFJlc291cmNlQnVuZGxlKSBudWxsKSwgdGgpOworICAgICAgICBqYmlGYXVsdC5zZXREZXRhaWwoZi5nZXREZXRhaWwoKSk7CisgICAgICAgIHJldHVybiBqYmlGYXVsdDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUk1lc3NhZ2UuamF2YSBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUk1lc3NhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjViYzYyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1STWVzc2FnZS5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5BYnN0cmFjdFdyYXBwZWRNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZTsKKworcHVibGljIGNsYXNzIE5NUk1lc3NhZ2UgZXh0ZW5kcyBBYnN0cmFjdFdyYXBwZWRNZXNzYWdlIHsKKworICAgIHB1YmxpYyBOTVJNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgIHN1cGVyKG1zZyk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBFeGNoYW5nZSBnZXRObXJFeGNoYW5nZSgpIHsKKyAgICAgICAgcmV0dXJuIGdldChFeGNoYW5nZS5jbGFzcyk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1SRmF1bHRJbkludGVyY2VwdG9yLmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1SRmF1bHRJbkludGVyY2VwdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkMzE2NwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9OTVJGYXVsdEluSW50ZXJjZXB0b3IuamF2YQpAQCAtMCwwICsxLDcxIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9yczsKKworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOworCitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLkJ1bmRsZVV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnBoYXNlLkFic3RyYWN0UGhhc2VJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zdGF4dXRpbHMuRGVwdGhYTUxTdHJlYW1SZWFkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc3RheHV0aWxzLkZyYWdtZW50U3RyZWFtUmVhZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnN0YXh1dGlscy5TdGF4VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5OTVJGYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUk1lc3NhZ2U7CisKKworcHVibGljIGNsYXNzIE5NUkZhdWx0SW5JbnRlcmNlcHRvciBleHRlbmRzIEFic3RyYWN0UGhhc2VJbnRlcmNlcHRvcjxOTVJNZXNzYWdlPiB7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgQlVORExFID0gQnVuZGxlVXRpbHMuZ2V0QnVuZGxlKE5NUkZhdWx0SW5JbnRlcmNlcHRvci5jbGFzcyk7CisgICAgcHVibGljIE5NUkZhdWx0SW5JbnRlcmNlcHRvcigpIHsKKyAgICAgICAgc3VwZXIoUGhhc2UuVU5NQVJTSEFMKTsKKyAgICAgICAgYWRkQmVmb3JlKCIqIik7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTk1STWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgRmF1bHQgeworICAgICAgICBYTUxTdHJlYW1SZWFkZXIgeHNyID0gbWVzc2FnZS5nZXRDb250ZW50KFhNTFN0cmVhbVJlYWRlci5jbGFzcyk7CisgICAgICAgIERlcHRoWE1MU3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBEZXB0aFhNTFN0cmVhbVJlYWRlcih4c3IpOworCisgICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghU3RheFV0aWxzLnRvTmV4dEVsZW1lbnQocmVhZGVyKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBGYXVsdChuZXcgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZSgiSUxMRUdBTF9KQklGQVVMVF9GT1JNQVQiLCBCVU5ETEUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZhdWx0IGZhdWx0ID0gbmV3IE5NUkZhdWx0KG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKE5NUkZhdWx0Lk5NUl9GQVVMVF9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmVzb3VyY2VCdW5kbGUpIG51bGwpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFN0YXhVdGlscy50b05leHRFbGVtZW50KHJlYWRlcikpIHsKKyAgICAgICAgICAgICAgICAvLyBoYW5kbGluZyBkZXRhaWwKKyAgICAgICAgICAgICAgICBFbGVtZW50IGRldGFpbCA9IFN0YXhVdGlscy5yZWFkKG5ldyBGcmFnbWVudFN0cmVhbVJlYWRlcihyZWFkZXIpKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBmYXVsdC5zZXREZXRhaWwoZGV0YWlsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lc3NhZ2Uuc2V0Q29udGVudChFeGNlcHRpb24uY2xhc3MsIGZhdWx0KTsKKyAgICAgICAgfSBjYXRjaCAoWE1MU3RyZWFtRXhjZXB0aW9uIHhzZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKCJTVEFYX1JFQURfRVhDIiwgQlVORExFKSk7CisgICAgICAgIH0KKworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9OTVJGYXVsdE91dEludGVyY2VwdG9yLmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1SRmF1bHRPdXRJbnRlcmNlcHRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjQyYWYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1SRmF1bHRPdXRJbnRlcmNlcHRvci5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5pbnRlcmNlcHRvcnM7CisKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVdyaXRlcjsKKworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5CdW5kbGVVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmhlbHBlcnMuTlNTdGFjazsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5GYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5BYnN0cmFjdFBoYXNlSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuUGhhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc3RheHV0aWxzLlN0YXhVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUkNvbnN0YW50czsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUkZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuTk1STWVzc2FnZTsKKworcHVibGljIGNsYXNzIE5NUkZhdWx0T3V0SW50ZXJjZXB0b3IgZXh0ZW5kcyBBYnN0cmFjdFBoYXNlSW50ZXJjZXB0b3I8Tk1STWVzc2FnZT4geworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgQlVORExFID0gQnVuZGxlVXRpbHMuZ2V0QnVuZGxlKE5NUkZhdWx0T3V0SW50ZXJjZXB0b3IuY2xhc3MpOworCisgICAgcHVibGljIE5NUkZhdWx0T3V0SW50ZXJjZXB0b3IoKSB7CisgICAgICAgIHN1cGVyKFBoYXNlLk1BUlNIQUwpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTk1STWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgRmF1bHQgeworICAgICAgICBtZXNzYWdlLnB1dChvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2UuUkVTUE9OU0VfQ09ERSwgbmV3IEludGVnZXIoNTAwKSk7CisgICAgICAgIE5TU3RhY2sgbnNTdGFjayA9IG5ldyBOU1N0YWNrKCk7CisgICAgICAgIG5zU3RhY2sucHVzaCgpOworCisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFhNTFN0cmVhbVdyaXRlciB3cml0ZXIgPSBnZXRXcml0ZXIobWVzc2FnZSk7CisgICAgICAgICAgICBGYXVsdCBmYXVsdCA9IGdldEZhdWx0KG1lc3NhZ2UpOworICAgICAgICAgICAgTk1SRmF1bHQgamJpRmF1bHQgPSBOTVJGYXVsdC5jcmVhdGVGYXVsdChmYXVsdCk7CisgICAgICAgICAgICBuc1N0YWNrLmFkZChOTVJDb25zdGFudHMuTlNfTk1SX0JJTkRJTkcpOworICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IG5zU3RhY2suZ2V0UHJlZml4KE5NUkNvbnN0YW50cy5OU19OTVJfQklORElORyk7CisgICAgICAgICAgICBTdGF4VXRpbHMud3JpdGVTdGFydEVsZW1lbnQod3JpdGVyLCBwcmVmaXgsIE5NUkZhdWx0Lk5NUl9GQVVMVF9ST09ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5NUkNvbnN0YW50cy5OU19OTVJfQklORElORyk7CisgICAgICAgICAgICBpZiAoIWpiaUZhdWx0Lmhhc0RldGFpbHMoKSkgeworICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZUVtcHR5RWxlbWVudCgiZmF1bHQiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRWxlbWVudCBkZXRhaWwgPSBqYmlGYXVsdC5nZXREZXRhaWwoKTsKKyAgICAgICAgICAgICAgICBOb2RlTGlzdCBkZXRhaWxzID0gZGV0YWlsLmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRldGFpbHMuZ2V0TGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5pdGVtKGkpIGluc3RhbmNlb2YgRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RheFV0aWxzLndyaXRlTm9kZShkZXRhaWxzLml0ZW0oaSksIHdyaXRlciwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlci53cml0ZUVuZEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHdyaXRlci5mbHVzaCgpOworICAgICAgICAgICAgCisgICAgICAgIH0gY2F0Y2ggKFhNTFN0cmVhbUV4Y2VwdGlvbiB4ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KG5ldyBNZXNzYWdlKCJYTUxfV1JJVEVfRVhDIiwgQlVORExFKSwgeGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIEZhdWx0IGdldEZhdWx0KE5NUk1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICBFeGNlcHRpb24gZSA9IG1lc3NhZ2UuZ2V0Q29udGVudChFeGNlcHRpb24uY2xhc3MpOworICAgICAgICBGYXVsdCBmYXVsdDsKKyAgICAgICAgaWYgKGUgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihuZXcgTWVzc2FnZSgiTk9fRVhDRVBUSU9OIiwgQlVORExFKS50b1N0cmluZygpKTsKKyAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgRmF1bHQpIHsKKyAgICAgICAgICAgIGZhdWx0ID0gKEZhdWx0KSBlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmF1bHQgPSBuZXcgRmF1bHQoZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhdWx0OworICAgIH0KKyAgICAKKyAgICBwcm90ZWN0ZWQgWE1MU3RyZWFtV3JpdGVyIGdldFdyaXRlcihOTVJNZXNzYWdlIG1lc3NhZ2UpIHsKKyAgICAgICAgWE1MU3RyZWFtV3JpdGVyIHdyaXRlciA9IG1lc3NhZ2UuZ2V0Q29udGVudChYTUxTdHJlYW1Xcml0ZXIuY2xhc3MpOworICAgICAgICBpZiAod3JpdGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24obmV3IE1lc3NhZ2UoIk5PX1hNTF9TVFJFQU1fV1JJVEVSIiwgQlVORExFKS50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gd3JpdGVyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9OTVJPcGVyYXRpb25JbkludGVyY2VwdG9yLmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjZjNTkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvci5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9yczsKKworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5lbmRwb2ludC5FbmRwb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5GYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnBoYXNlLkFic3RyYWN0UGhhc2VJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkJpbmRpbmdJbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuQmluZGluZ09wZXJhdGlvbkluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5tb2RlbC5NZXNzYWdlSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLk9wZXJhdGlvbkluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5OTVJNZXNzYWdlOworCitwdWJsaWMgY2xhc3MgTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvciBleHRlbmRzIEFic3RyYWN0UGhhc2VJbnRlcmNlcHRvcjxOTVJNZXNzYWdlPiB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nVXRpbHMuZ2V0TDdkTG9nZ2VyKE5NUk9wZXJhdGlvbkluSW50ZXJjZXB0b3IuY2xhc3MpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgQlVORExFID0gTE9HLmdldFJlc291cmNlQnVuZGxlKCk7CisKKyAgICBwdWJsaWMgTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvcigpIHsKKyAgICAgICAgc3VwZXIoUGhhc2UuUFJFX1BST1RPQ09MKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE5NUk1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIEZhdWx0IHsKKyAgICAgICAgRXhjaGFuZ2UgZXggPSBtZXNzYWdlLmdldEV4Y2hhbmdlKCk7CisgICAgICAgIEVuZHBvaW50IGVwID0gZXguZ2V0KEVuZHBvaW50LmNsYXNzKTsKKyAgICAgICAgQmluZGluZ09wZXJhdGlvbkluZm8gYm9pID0gZXguZ2V0KEJpbmRpbmdPcGVyYXRpb25JbmZvLmNsYXNzKTsKKyAgICAgICAgaWYgKGJvaSA9PSBudWxsICYmIG1lc3NhZ2UuZ2V0Tm1yRXhjaGFuZ2UoKSE9IG51bGwgCisgICAgICAgICAgICAgICAgJiYgbWVzc2FnZS5nZXRObXJFeGNoYW5nZSgpLmdldE9wZXJhdGlvbigpICE9IG51bGwpIHsKKyAgICAgICAgICAgIEJpbmRpbmdJbmZvIHNlcnZpY2UgPSBlcC5nZXRFbmRwb2ludEluZm8oKS5nZXRCaW5kaW5nKCk7CisgICAgICAgICAgICBib2kgPSBnZXRCaW5kaW5nT3BlcmF0aW9uSW5mbyhzZXJ2aWNlLCBtZXNzYWdlLmdldE5tckV4Y2hhbmdlKCkuZ2V0T3BlcmF0aW9uKCkpOworICAgICAgICAgICAgaWYgKGJvaSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KG5ldyBNZXNzYWdlKCJVTktOT1dOX09QRVJBVElPTiIsIEJVTkRMRSwgCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldE5tckV4Y2hhbmdlKCkuZ2V0T3BlcmF0aW9uKCkudG9TdHJpbmcoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXgucHV0KEJpbmRpbmdPcGVyYXRpb25JbmZvLmNsYXNzLCBib2kpOworICAgICAgICAgICAgZXgucHV0KE9wZXJhdGlvbkluZm8uY2xhc3MsIGJvaS5nZXRPcGVyYXRpb25JbmZvKCkpOworICAgICAgICAgICAgZXguc2V0T25lV2F5KGJvaS5nZXRPcGVyYXRpb25JbmZvKCkuaXNPbmVXYXkoKSk7CisgICAgICAgICAgICBtZXNzYWdlLnB1dChNZXNzYWdlSW5mby5jbGFzcywgYm9pLmdldElucHV0KCkuZ2V0TWVzc2FnZUluZm8oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgQmluZGluZ09wZXJhdGlvbkluZm8gZ2V0QmluZGluZ09wZXJhdGlvbkluZm8oQmluZGluZ0luZm8gc2VydmljZSwgUU5hbWUgb3BlcmF0aW9uKSB7CisgICAgICAgIHJldHVybiBzZXJ2aWNlLmdldE9wZXJhdGlvbihvcGVyYXRpb24pOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvaW50ZXJjZXB0b3JzL05NUldyYXBwZXJJbkludGVyY2VwdG9yLmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1SV3JhcHBlckluSW50ZXJjZXB0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTY5ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvaW50ZXJjZXB0b3JzL05NUldyYXBwZXJJbkludGVyY2VwdG9yLmphdmEKQEAgLTAsMCArMSwxMzkgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9yczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHM7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUkJpbmRpbmdJbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuTk1SQ29uc3RhbnRzOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuTk1SRmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmxvZ2dpbmcuTG9nVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZGF0YWJpbmRpbmcuRGF0YVJlYWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5lbmRwb2ludC5FbmRwb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5BYnN0cmFjdEluRGF0YWJpbmRpbmdJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5GYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkJpbmRpbmdJbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuQmluZGluZ01lc3NhZ2VJbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuQmluZGluZ09wZXJhdGlvbkluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5tb2RlbC5NZXNzYWdlSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLk1lc3NhZ2VQYXJ0SW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zdGF4dXRpbHMuRGVwdGhYTUxTdHJlYW1SZWFkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc3RheHV0aWxzLlN0YXhVdGlsczsKKworcHVibGljIGNsYXNzIE5NUldyYXBwZXJJbkludGVyY2VwdG9yIGV4dGVuZHMgQWJzdHJhY3RJbkRhdGFiaW5kaW5nSW50ZXJjZXB0b3IgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ1V0aWxzLmdldEw3ZExvZ2dlcihOTVJXcmFwcGVySW5JbnRlcmNlcHRvci5jbGFzcyk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBCVU5ETEUgPSBMT0cuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKKworICAgIHB1YmxpYyBOTVJXcmFwcGVySW5JbnRlcmNlcHRvcigpIHsKKyAgICAgICAgc3VwZXIoUGhhc2UuVU5NQVJTSEFMKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIEZhdWx0IHsKKyAgICAgICAgaWYgKGlzR0VUKG1lc3NhZ2UpKSB7CisgICAgICAgICAgICBMT0cuaW5mbygiSmJpTWVzc2FnZUluSW50ZXJjZXB0b3Igc2tpcHBlZCBpbiBIVFRQIEdFVCBtZXRob2QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBYTUxTdHJlYW1SZWFkZXIgeHNyID0gbWVzc2FnZS5nZXRDb250ZW50KFhNTFN0cmVhbVJlYWRlci5jbGFzcyk7CisKKyAgICAgICAgRGVwdGhYTUxTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IERlcHRoWE1MU3RyZWFtUmVhZGVyKHhzcik7CisKKyAgICAgICAgRW5kcG9pbnQgZXAgPSBtZXNzYWdlLmdldEV4Y2hhbmdlKCkuZ2V0KEVuZHBvaW50LmNsYXNzKTsKKyAgICAgICAgQmluZGluZ0luZm8gYmluZGluZyA9IGVwLmdldEVuZHBvaW50SW5mbygpLmdldEJpbmRpbmcoKTsKKyAgICAgICAgaWYgKCEoYmluZGluZyBpbnN0YW5jZW9mIE5NUkJpbmRpbmdJbmZvKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgIG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKCJORUVEX0pCSUJJTkRJTkciLCBCVU5ETEUpLnRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFTdGF4VXRpbHMudG9OZXh0RWxlbWVudChyZWFkZXIpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRmF1bHQobmV3IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLk1lc3NhZ2UoIk5PX09QRVJBVElPTl9FTEVNRU5UIiwgQlVORExFKSk7CisgICAgICAgIH0KKworICAgICAgICBFeGNoYW5nZSBleCA9IG1lc3NhZ2UuZ2V0RXhjaGFuZ2UoKTsKKyAgICAgICAgUU5hbWUgc3RhcnRRTmFtZSA9IHJlYWRlci5nZXROYW1lKCk7CisKKyAgICAgICAgLy8gaGFuZGxpbmcgamJpIGZhdWx0IG1lc3NhZ2UKKyAgICAgICAgaWYgKHN0YXJ0UU5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKE5NUkZhdWx0Lk5NUl9GQVVMVF9ST09UKSkgeworICAgICAgICAgICAgbWVzc2FnZS5nZXRJbnRlcmNlcHRvckNoYWluKCkuYWJvcnQoKTsKKworICAgICAgICAgICAgaWYgKGVwLmdldEluRmF1bHRPYnNlcnZlcigpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBlcC5nZXRJbkZhdWx0T2JzZXJ2ZXIoKS5vbk1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKworICAgICAgICAvLyBoYW5kbGluZyB4bWwgbm9ybWFsIGluYm91bmQgbWVzc2FnZQorICAgICAgICBpZiAoIXN0YXJ0UU5hbWUuZXF1YWxzKE5NUkNvbnN0YW50cy5KQklfV1JBUFBFUl9NRVNTQUdFKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICAiTk9fSkJJX01FU1NBR0VfRUxFTUVOVCIsIEJVTkRMRSkpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb25JbmZvIGJvcCA9IGV4LmdldChCaW5kaW5nT3BlcmF0aW9uSW5mby5jbGFzcyk7CisgICAgICAgICAgICBEYXRhUmVhZGVyPFhNTFN0cmVhbVJlYWRlcj4gZHIgPSBnZXREYXRhUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICAgICAgTGlzdDxPYmplY3Q+IHBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKyAgICAgICAgICAgIHJlYWRlci5uZXh0KCk7CisgICAgICAgICAgICBCaW5kaW5nTWVzc2FnZUluZm8gbWVzc2FnZUluZm8gPSAhaXNSZXF1ZXN0b3IobWVzc2FnZSkgPyBib3AuZ2V0SW5wdXQoKSA6IGJvcC5nZXRPdXRwdXQoKTsKKyAgICAgICAgICAgIG1lc3NhZ2UucHV0KE1lc3NhZ2VJbmZvLmNsYXNzLCBtZXNzYWdlSW5mby5nZXRNZXNzYWdlSW5mbygpKTsKKyAgICAgICAgICAgIGZvciAoTWVzc2FnZVBhcnRJbmZvIHBhcnQgOiBtZXNzYWdlSW5mby5nZXRNZXNzYWdlUGFydHMoKSkgeworICAgICAgICAgICAgICAgIGlmICghU3RheFV0aWxzLnNraXBUb1N0YXJ0T2ZFbGVtZW50KHJlYWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKCJOT1RfRU5PVUdIX1BBUlRTIiwgQlVORExFKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXJ0UU5hbWUgPSByZWFkZXIuZ2V0TmFtZSgpOworICAgICAgICAgICAgICAgIGlmICghc3RhcnRRTmFtZS5lcXVhbHMoTk1SQ29uc3RhbnRzLkpCSV9XUkFQUEVSX1BBUlQpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGYXVsdChuZXcgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZSgiTk9fSkJJX1BBUlRfRUxFTUVOVCIsIEJVTkRMRSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGFydC5pc0VsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICByZWFkZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIVN0YXhVdGlscy50b05leHRFbGVtZW50KHJlYWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGYXVsdChuZXcgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZSgiRVhQRUNURURfRUxFTUVOVF9JTl9QQVJUIiwgQlVORExFKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hZGQoZHIucmVhZChwYXJ0LCByZWFkZXIpKTsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGVuZCBlbGVtZW50CisgICAgICAgICAgICAgICAgaWYgKHBhcnQuaXNFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZXYgPSByZWFkZXIuZ2V0RXZlbnRUeXBlKCk7CisgICAgICAgICAgICB3aGlsZSAoZXYgIT0gWE1MU3RyZWFtQ29uc3RhbnRzLkVORF9FTEVNRU5UIAorICAgICAgICAgICAgICAgICAgICAmJiBldiAhPSBYTUxTdHJlYW1Db25zdGFudHMuU1RBUlRfRUxFTUVOVAorICAgICAgICAgICAgICAgICAgICAmJiBldiAhPSBYTUxTdHJlYW1Db25zdGFudHMuRU5EX0RPQ1VNRU5UKSB7CisgICAgICAgICAgICAgICAgZXYgPSByZWFkZXIubmV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVzc2FnZS5zZXRDb250ZW50KExpc3QuY2xhc3MsIHBhcmFtZXRlcnMpOworICAgICAgICB9IGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKCJTVEFYX1JFQURfRVhDIiwgQlVORExFKSwgZSk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9OTVJXcmFwcGVyT3V0SW50ZXJjZXB0b3IuamF2YSBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9OTVJXcmFwcGVyT3V0SW50ZXJjZXB0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWQ1MzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvaW50ZXJjZXB0b3JzL05NUldyYXBwZXJPdXRJbnRlcmNlcHRvci5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5pbnRlcmNlcHRvcnM7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Xcml0ZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5kYXRhYmluZGluZy5EYXRhV3JpdGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkFic3RyYWN0T3V0RGF0YWJpbmRpbmdJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5GYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuUGhhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5TZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuQmluZGluZ09wZXJhdGlvbkluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5tb2RlbC5NZXNzYWdlUGFydEluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5OTVJDb25zdGFudHM7CisKK3B1YmxpYyBjbGFzcyBOTVJXcmFwcGVyT3V0SW50ZXJjZXB0b3IgZXh0ZW5kcyBBYnN0cmFjdE91dERhdGFiaW5kaW5nSW50ZXJjZXB0b3IgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ1V0aWxzLmdldEw3ZExvZ2dlcihOTVJXcmFwcGVyT3V0SW50ZXJjZXB0b3IuY2xhc3MpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgQlVORExFID0gTE9HLmdldFJlc291cmNlQnVuZGxlKCk7CisKKyAgICBwdWJsaWMgTk1SV3JhcHBlck91dEludGVyY2VwdG9yKCkgeworICAgICAgICBzdXBlcihQaGFzZS5NQVJTSEFMKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIEZhdWx0IHsKKyAgICAgICAgQmluZGluZ09wZXJhdGlvbkluZm8gYm9wID0gbWVzc2FnZS5nZXRFeGNoYW5nZSgpLmdldChCaW5kaW5nT3BlcmF0aW9uSW5mby5jbGFzcyk7CisgICAgICAgIFhNTFN0cmVhbVdyaXRlciB4bWxXcml0ZXIgPSBnZXRYTUxTdHJlYW1Xcml0ZXIobWVzc2FnZSk7CisgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IG1lc3NhZ2UuZ2V0RXhjaGFuZ2UoKS5nZXQoU2VydmljZS5jbGFzcyk7CisgICAgICAgIAorICAgICAgICBEYXRhV3JpdGVyPFhNTFN0cmVhbVdyaXRlcj4gZGF0YVdyaXRlciA9IGdldERhdGFXcml0ZXIobWVzc2FnZSwgc2VydmljZSwgWE1MU3RyZWFtV3JpdGVyLmNsYXNzKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgeG1sV3JpdGVyLnNldFByZWZpeCgiamJpIiwgTk1SQ29uc3RhbnRzLk5TX0pCSV9XUkFQUEVSKTsKKyAgICAgICAgICAgIHhtbFdyaXRlci53cml0ZVN0YXJ0RWxlbWVudChOTVJDb25zdGFudHMuTlNfSkJJX1dSQVBQRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk1SQ29uc3RhbnRzLkpCSV9XUkFQUEVSX01FU1NBR0UuZ2V0TG9jYWxQYXJ0KCkpOworICAgICAgICAgICAgeG1sV3JpdGVyLndyaXRlTmFtZXNwYWNlKCJqYmkiLCBOTVJDb25zdGFudHMuTlNfSkJJX1dSQVBQRVIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMaXN0PE1lc3NhZ2VQYXJ0SW5mbz4gcGFydHMgPSBudWxsOworICAgICAgICAgICAgaWYgKCFpc1JlcXVlc3RvcihtZXNzYWdlKSkgeworICAgICAgICAgICAgICAgIHBhcnRzID0gYm9wLmdldE91dHB1dCgpLmdldE1lc3NhZ2VQYXJ0cygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IGJvcC5nZXRJbnB1dCgpLmdldE1lc3NhZ2VQYXJ0cygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTGlzdDw/PiBvYmpzID0gKExpc3Q8Pz4pIG1lc3NhZ2UuZ2V0Q29udGVudChMaXN0LmNsYXNzKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAob2Jqcy5zaXplKCkgPCBwYXJ0cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRmF1bHQobmV3IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLk1lc3NhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAiTk9UX0VRVUFMX0FSR19OVU0iLCBCVU5ETEUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IHBhcnRzLnNpemUoKTsgaWR4KyspIHsKKyAgICAgICAgICAgICAgICBNZXNzYWdlUGFydEluZm8gcGFydCA9IHBhcnRzLmdldChpZHgpOworICAgICAgICAgICAgICAgIE9iamVjdCBvYmogPSBvYmpzLmdldChpZHgpOworICAgICAgICAgICAgICAgIGlmICghcGFydC5pc0VsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFydC5nZXRUeXBlQ2xhc3MoKSA9PSBTdHJpbmcuY2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhtbFdyaXRlci53cml0ZVN0YXJ0RWxlbWVudChOTVJDb25zdGFudHMuTlNfSkJJX1dSQVBQRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk1SQ29uc3RhbnRzLkpCSV9XUkFQUEVSX1BBUlQuZ2V0TG9jYWxQYXJ0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgeG1sV3JpdGVyLndyaXRlQ2hhcmFjdGVycyhvYmoudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB4bWxXcml0ZXIud3JpdGVFbmRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gbmV3IE1lc3NhZ2VQYXJ0SW5mbyhwYXJ0LmdldE5hbWUoKSwgcGFydC5nZXRNZXNzYWdlSW5mbygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQuc2V0RWxlbWVudChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0LnNldENvbmNyZXRlTmFtZShOTVJDb25zdGFudHMuSkJJX1dSQVBQRVJfUEFSVCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhV3JpdGVyLndyaXRlKG9iaiwgcGFydCwgeG1sV3JpdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHhtbFdyaXRlci53cml0ZVN0YXJ0RWxlbWVudChOTVJDb25zdGFudHMuTlNfSkJJX1dSQVBQRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTVJDb25zdGFudHMuSkJJX1dSQVBQRVJfUEFSVC5nZXRMb2NhbFBhcnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFXcml0ZXIud3JpdGUob2JqLCBwYXJ0LCB4bWxXcml0ZXIpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHhtbFdyaXRlci53cml0ZUVuZEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4bWxXcml0ZXIud3JpdGVFbmRFbGVtZW50KCk7CisgICAgICAgIAorICAgICAgICB9IGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKCJTVEFYX1dSSVRFX0VYQyIsIEJVTkRMRSksIGUpOworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9jeGYvYmluZGluZy9ubXIvY3hmLWJpbmRpbmctbm1yLnhtbCBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL2N4Zi9iaW5kaW5nL25tci9jeGYtYmluZGluZy1ubXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTRhNjIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9jeGYvYmluZGluZy9ubXIvY3hmLWJpbmRpbmctbm1yLnhtbApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkIj4KKworICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUkJpbmRpbmdGYWN0b3J5IgorICAgICAgICAgIGlkPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUkJpbmRpbmdGYWN0b3J5IgorICAgICAgICAgIGxhenktaW5pdD0idHJ1ZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidXMiIHJlZj0iY3hmIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmF0aW9uTmFtZXNwYWNlcyI+CisgICAgICAgICAgICA8c2V0PgorICAgICAgICAgICAgICAgIDx2YWx1ZT5odHRwOi8vY3hmLmFwYWNoZS5vcmcvYmluZGluZ3Mvbm1yPC92YWx1ZT4KKyAgICAgICAgICAgIDwvc2V0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvaW50ZXJjZXB0b3JzL01lc3NhZ2VzLnByb3BlcnRpZXMgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9NZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzVhYzQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9NZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKyMKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgICAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgICB1bmRlciB0aGUgTGljZW5zZS4KKyMKK05PVC5JTVBMRU1FTlRFRD1ub3QgeWV0IGltcGxlbWVudGVkCitJTlZPS0UuU0VSVklDRT1pbnZva2luZyBzZXJ2aWNlXHQKK0NSRUFURS5NRVNTQUdFLkVYQ0hBTkdFPWNyZWF0ZSBtZXNzYWdlIGV4Y2hhbmdlIHN2YzpcdAorRVhDSEFOR0UuRU5EUE9JTlQ9ZXhjaGFuZ2UgZW5kcG9pbnQ6XHQKK05PLk1FU1NBR0U9bm8gbWVzc2FnZSB5ZXQKK1VOQUJMRS5SRVRSSUVWRS5NRVNTQUdFPXVuYWJsZSB0byByZXRyaWV2ZSBtZXNzYWdlCitDT05URVhULk1VU1QuQkU9Y29udGV4dCBtdXN0IGJlIG9mIHR5cGUgSkJJT3V0cHV0U3RyZWFtTWVzc2FnZUNvbnRleHQKK1JFQ0VJVkVELk1FU1NBR0U9cmVjZWl2ZWQgbWVzc2FnZTpcdAorQUNUSVZFLkpCSS5TRVJWRVIuVFJBTlNQT1JUPWFjdGl2YXRpbmcgSkJJIHNlcnZlciB0cmFuc3BvcnQKK0JVSUxESU5HLkRPQ1VNRU5UPWJ1aWxkaW5nIGRvY3VtZW50IGZyb20gYnl0ZXMKK0NSRUFURS5OT1JNQUxJWkVELk1FU1NBR0U9Y3JlYXRpbmcgTm9ybWFsaXplZE1lc3NhZ2UKK1BPU1QuRElTUEFUQ0g9cG9zdERpc3BhdGNoIHNlbmRpbmcgb3V0IG1lc3NhZ2UgdG8gTldSCitFUlJPUi5TRU5ELk1FU1NBR0U9ZXJyb3Igc2VuZGluZyBPdXQgbWVzc2FnZQorRElTUEFUQ0guTUVTU0FHRS5PTi5DQUxMQkFDSz1kaXNwYXRjaGluZyBtZXNzYWdlIG9uIGNhbGxiYWNrOlx0CitFUlJPUi5QUkVQQVJFLk1FU1NBR0U9ZXJyb3IgcHJlcGFyaW5nIG1lc3NhZ2UKK1JFQ0VJVkUuVEhSRUFELlNUQVJUPUpCSVNlcnZlclRyYW5zcG9ydCBtZXNzYWdlIHJlY2VpdmluZyB0aHJlYWQgc3RhcnRlZAorRElTUEFUQ0guVE8uU1U9ZGlzcGF0Y2hpbmcgdG8gQ1hGIHNlcnZpY2UgdW5pdAorTk8uU1UuRk9VTkQ9bm8gQ1hGU2VydmljZVVuaXQgZm91bmQKK0VSUk9SLkRJU1BBVENILlRIUkVBRD1lcnJvciBydW5uaW5nIGRpc3BhdGNoIHRocmVhZAorSkJJLlNFUlZFUi5UUkFOU1BPUlQuTUVTU0FHRS5QUk9DRVNTLlRIUkVBRC5FWElUPUpCSVNlcnZlclRyYW5zcG9ydCBtZXNzYWdlIHByb2Nlc3NpbmcgdGhyZWFkIGV4aXRpbmcKK0NPTkZJRy5ERUxJVkVSWS5DSEFOTkVMPWNvbmZpZ3VyaW5nIERlbGl2ZXJ5Q2hhbm5lbDpcdAorQ09ORklHLlNVLk1BTkFHRVI9Y29uZmlndXJpbmcgU2VydmljZVVuaXRNYW5hZ2VyOlx0CitKQkkuVFJBTlNQT1JULkZBQ1RPUlkuTk9ULklOSVRJQUxJWkVEPUpCSVRyYW5zcG9ydEZhY3RvcnkgaXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkCitTVS5NQU5BR0VSPUNYRlNlcnZpY2VVbml0TWFuYWdlcjpcdAorREVMSVZFUlkuQ0hBTk5FTD1EZWxpdmVyeUNoYW5uZWw6XHQKK0pCSS5UUkFOU1BPUlQuRkFDVE9SWS5OT1QuRlVMTFkuSU5JVElBTElaRUQ9SkJJVHJhbnNwb3J0IGZhY3Rvcnkgbm90IGZ1bGx5IGluaXRpYWxpemVkCitDUkVBVEUuU0VSVkVSLlRSQU5TUE9SVD1jcmVhdGluZyBKQkkgc2VydmVyIHRyYW5zcG9ydAorQ1JFQVRFLkNMSUVOVC5UUkFOU1BPUlQ9Y3JlYXRpbmcgSkJJIGNsaWVudCB0cmFuc3BvcnQKK1VOS05PV05fT1BFUkFUSU9OPXVua25vd24gb3BlcmF0aW9uIHswfQorTk9fT1BFUkFUSU9OX0VMRU1FTlQ9bm8gb3BlcmF0aW9uIGVsZW1lbnQKK05PX0pCSV9NRVNTQUdFX0VMRU1FTlQ9bm8gamJpIG1lc3NhZ2UgZWxlbWVudAorTk9UX0VOT1VHSF9QQVJUUz1ub3QgZW5vdWdoIHBhcnRzCitOT19KQklfUEFSVF9FTEVNRU5UPW5vIGpiaSBwYXJ0IGVsZW1lbnQKK0VYUEVDVEVEX0VMRU1FTlRfSU5fUEFSVD1leHBlY3RlZCBlbGVtZW50IGluIHBhcnQKK1RPT19NQU5ZX1BBUlRTPXRvbyBtYW55IHBhcnRzCitJTExFR0FMX0pCSUZBVUxUX0ZPUk1BVD1pbGxlZ2FsIGpiaSBmYXVsdCBmb3JtYXQKK1NUQVhfUkVBRF9FWEM9c3RheCByZWFkIGV4Y2VwdGlvbgorWE1MX1dSSVRFX0VYQz14bWwgd3JpdGUgZXhjZXB0aW9uCitTVEFYX1dSSVRFX0VYQz1zdGF4IHdyaXRlIGV4Y2VwdGlvbgorTk9UX0VRVUFMX0FSR19OVU09VGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgbm90IGVxdWFsCitORUVEX0pCSUJJTkRJTkc9QmluZGluZ0luZm8gc2hvdWxkIGJlIGEgSmJpQmluZGluZ0luZm8KK05PX0VYQ0VQVElPTj1ObyBleGNlcHRpb24gb24gdGhpcyBtZXNzYWdlCitOT19YTUxfU1RSRUFNX1dSSVRFUj1ObyBYTUxTdHJlYW1Xcml0ZXIgb24gdGhpcyBtZXNzYWdlCmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9HcmVldGVySW1wbC5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvR3JlZXRlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQ2ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvR3JlZXRlckltcGwuamF2YQpAQCAtMCwwICsxLDU1IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tcjsKKworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworCitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZC5ubXIuR3JlZXRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkLm5tci5QaW5nTWVGYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkLnR5cGVzLm5tci5GYXVsdERldGFpbDsKKworCitAV2ViU2VydmljZShzZXJ2aWNlTmFtZSA9ICJIZWxsb1dvcmxkU2VydmljZSIsIAorICAgICAgICAgICAgcG9ydE5hbWUgPSAiU29hcFBvcnQiLCAKKyAgICAgICAgICAgIGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGQubm1yLkdyZWV0ZXIiLAorICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkL25tciIKKyAgICAgICAgICAgICkKK3B1YmxpYyBjbGFzcyBHcmVldGVySW1wbCBpbXBsZW1lbnRzIEdyZWV0ZXIgeworCisgICAgcHVibGljIFN0cmluZyBzYXlIaSgpIHsKKyAgICAgICAgcmV0dXJuICJCb25qb3VyIjsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdyZWV0TWUoU3RyaW5nIHJlcXVlc3RUeXBlKSB7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHJlcXVlc3RUeXBlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGdyZWV0TWVPbmVXYXkoU3RyaW5nIHJlcXVlc3RUeXBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT25lV2F5IGdldCBpbnZva2VkIik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcGluZ01lKCkgdGhyb3dzIFBpbmdNZUZhdWx0IHsKKyAgICAgICAgRmF1bHREZXRhaWwgZmF1bHREZXRhaWwgPSBuZXcgRmF1bHREZXRhaWwoKTsKKyAgICAgICAgZmF1bHREZXRhaWwuc2V0TWFqb3IoKHNob3J0KTIpOworICAgICAgICBmYXVsdERldGFpbC5zZXRNaW5vcigoc2hvcnQpMSk7CisgICAgICAgIHRocm93IG5ldyBQaW5nTWVGYXVsdCgiUGluZ01lRmF1bHQgcmFpc2VkIGJ5IHNlcnZlciIsIGZhdWx0RGV0YWlsKTsKKyAgICAgICAgCisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9IYWNrT3BlcmF0aW9uSW50ZXJjZXB0b3IuamF2YSBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL0hhY2tPcGVyYXRpb25JbnRlcmNlcHRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjdmN2EKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9IYWNrT3BlcmF0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXI7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuRmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuQWJzdHJhY3RQaGFzZUludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnBoYXNlLlBoYXNlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuaW50ZXJjZXB0b3JzLk5NUk9wZXJhdGlvbkluSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuUGF0dGVybjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmNvcmUuRXhjaGFuZ2VJbXBsOworCitwdWJsaWMgY2xhc3MgSGFja09wZXJhdGlvbkludGVyY2VwdG9yIGV4dGVuZHMgQWJzdHJhY3RQaGFzZUludGVyY2VwdG9yPE5NUk1lc3NhZ2U+IHsKKworICAgIHByaXZhdGUgaW50IGluZGV4ID0gMTsKKyAgICAKKyAgICBwdWJsaWMgSGFja09wZXJhdGlvbkludGVyY2VwdG9yKCkgeworICAgICAgICBzdXBlcihQaGFzZS5QUkVfUFJPVE9DT0wpOworICAgICAgICBhZGRCZWZvcmUoTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvci5jbGFzcy5nZXROYW1lKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTk1STWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgRmF1bHQgeworICAgICAgICBFeGNoYW5nZUltcGwgZXhjaGFuZ2UgPSBuZXcgRXhjaGFuZ2VJbXBsKFBhdHRlcm4uSW5PdXQpOworCisgICAgICAgIGlmIChpbmRleCA9PSAxKSB7CisgICAgICAgICAgICBleGNoYW5nZS5zZXRPcGVyYXRpb24obmV3IFFOYW1lKCJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZC9ubXIiLCAiZ3JlZXRNZSIpKTsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gMikgeworICAgICAgICAgICAgZXhjaGFuZ2Uuc2V0T3BlcmF0aW9uKG5ldyBRTmFtZSgiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGQvbm1yIiwgInNheUhpIikpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAzKSB7CisgICAgICAgICAgICBleGNoYW5nZS5zZXRPcGVyYXRpb24obmV3IFFOYW1lKCJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZC9ubXIiLCAicGluZ01lIikpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBtZXNzYWdlLnB1dChFeGNoYW5nZS5jbGFzcywgZXhjaGFuZ2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkJpbmRpbmdGYWN0b3J5VGVzdC5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1SQmluZGluZ0ZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwMDQwNgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL05NUkJpbmRpbmdGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yOworCisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5iaW5kaW5nLkJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuU3RheE91dEludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuU2VydmljZUluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5pbnRlcmNlcHRvcnMuTk1SRmF1bHRPdXRJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9ycy5OTVJPcGVyYXRpb25JbkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuaW50ZXJjZXB0b3JzLk5NUldyYXBwZXJJbkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuaW50ZXJjZXB0b3JzLk5NUldyYXBwZXJPdXRJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgTk1SQmluZGluZ0ZhY3RvcnlUZXN0IGV4dGVuZHMgQXNzZXJ0IHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUJpbmRpbmcoKSB7CisgICAgICAgIAorICAgICAgICBOTVJCaW5kaW5nSW5mbyBpbmZvID0gbmV3IE5NUkJpbmRpbmdJbmZvKG5ldyBTZXJ2aWNlSW5mbygpLCAiaWQiKTsKKyAgICAgICAgQmluZGluZyBiaW5kaW5nID0gbmV3IE5NUkJpbmRpbmdGYWN0b3J5KCkuY3JlYXRlQmluZGluZyhpbmZvKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGJpbmRpbmcuZ2V0SW5JbnRlcmNlcHRvcnMoKS5zaXplKCkpOworICAgICAgICAvL2Fzc2VydEVxdWFscyg/LCBiaW5kaW5nLmdldEluRmF1bHRJbnRlcmNlcHRvcnMoKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYmluZGluZy5nZXRPdXRJbnRlcmNlcHRvcnMoKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYmluZGluZy5nZXRPdXRGYXVsdEludGVyY2VwdG9ycygpLnNpemUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhOTVJPcGVyYXRpb25JbkludGVyY2VwdG9yLmNsYXNzLmdldE5hbWUoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmdldEluSW50ZXJjZXB0b3JzKCkuZ2V0KDEpLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5NUldyYXBwZXJJbkludGVyY2VwdG9yLmNsYXNzLmdldE5hbWUoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmdldEluSW50ZXJjZXB0b3JzKCkuZ2V0KDIpLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKFN0YXhPdXRJbnRlcmNlcHRvci5jbGFzcy5nZXROYW1lKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5nZXRPdXRJbnRlcmNlcHRvcnMoKS5nZXQoMCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoTk1SV3JhcHBlck91dEludGVyY2VwdG9yLmNsYXNzLmdldE5hbWUoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmdldE91dEludGVyY2VwdG9ycygpLmdldCgxKS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhTdGF4T3V0SW50ZXJjZXB0b3IuY2xhc3MuZ2V0TmFtZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcuZ2V0T3V0RmF1bHRJbnRlcmNlcHRvcnMoKS5nZXQoMCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoTk1SRmF1bHRPdXRJbnRlcmNlcHRvci5jbGFzcy5nZXROYW1lKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5nZXRPdXRGYXVsdEludGVyY2VwdG9ycygpLmdldCgxKS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1SQ2xpZW50U2VydmVyVGVzdC5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvTk1SQ2xpZW50U2VydmVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NGUyYTkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9OTVJDbGllbnRTZXJ2ZXJUZXN0LmphdmEKQEAgLTAsMCArMSw4MSBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXI7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLnNwcmluZy5Db25maWd1cmVySW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50ZXN0LlRlc3RBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudGVzdHV0aWwuY29tbW9uLkFic3RyYWN0Q2xpZW50U2VydmVyVGVzdEJhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZC5ubXIuR3JlZXRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkLm5tci5IZWxsb1dvcmxkU2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmhlbGxvX3dvcmxkLm5tci5QaW5nTWVGYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9ycy5OTVJPcGVyYXRpb25JbkludGVyY2VwdG9yVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBOTVJDbGllbnRTZXJ2ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDbGllbnRTZXJ2ZXJUZXN0QmFzZSB7CisgICAgcHJpdmF0ZSBmaW5hbCBRTmFtZSBzZXJ2aWNlTmFtZSA9IG5ldyBRTmFtZSgKKyAgICAgICAgICAgICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZC9ubXIiLAorICAgICAgICAgICAgICAgICAgICAgICJIZWxsb1dvcmxkU2VydmljZSIpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTMSA9IAorICAgICAgICBOTVJPcGVyYXRpb25JbkludGVyY2VwdG9yVGVzdC5jbGFzcy5nZXRSZXNvdXJjZSgiL01FVEEtSU5GL2N4Zi9jeGYueG1sIikudG9TdHJpbmcoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUzIgPSAKKyAgICAgICAgTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvclRlc3QuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZSgiY3hmLWJpbmRpbmctbm1yLnhtbCIpLnRvU3RyaW5nKCk7CisgICAgCisgICAgQEJlZm9yZUNsYXNzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHN0YXJ0U2VydmVycygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBhc3NlcnRUcnVlKCJzZXJ2ZXIgZGlkIG5vdCBsYXVuY2ggY29ycmVjdGx5IiwgbGF1bmNoU2VydmVyKFNlcnZlci5jbGFzcywgdHJ1ZSkpOworICAgIH0KKyAgICAKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdE5NUkJpbmRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMIHdzZGwgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2UoIi4vaGVsbG9fd29ybGRfbm1yLndzZGwiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCh3c2RsKTsKKworICAgICAgICBUZXN0QXBwbGljYXRpb25Db250ZXh0IGN0eCA9IG5ldyBUZXN0QXBwbGljYXRpb25Db250ZXh0KG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgUzEsIFMyIH0pOworICAgICAgICBDb25maWd1cmVySW1wbCBjZmcgPSBuZXcgQ29uZmlndXJlckltcGwoY3R4KTsKKyAgICAgICAgQnVzIGJ1cyA9IChCdXMpIGN0eC5nZXRCZWFuKEJ1cy5ERUZBVUxUX0JVU19JRCk7CisgICAgICAgIGJ1cy5zZXRFeHRlbnNpb24oY2ZnLCBDb25maWd1cmVyLmNsYXNzKTsKKyAgICAgICAgCisgICAgICAgIEhlbGxvV29ybGRTZXJ2aWNlIHNzID0gbmV3IEhlbGxvV29ybGRTZXJ2aWNlKHdzZGwsIHNlcnZpY2VOYW1lKTsKKyAgICAgICAgUU5hbWUgcG9ydE5hbWUgPSBuZXcgUU5hbWUoImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkL25tciIsICJTb2FwUG9ydCIpOyAKKyAgICAgICAgc3MuYWRkUG9ydChwb3J0TmFtZSwgTk1SQ29uc3RhbnRzLk5TX05NUl9CSU5ESU5HLCAibG9jYWw6Ly9ubXJlbmRwb2ludCIpOworICAgICAgICAKKyAgICAgICAgR3JlZXRlciBwb3J0ID0gc3MuZ2V0UG9ydChwb3J0TmFtZSwgR3JlZXRlci5jbGFzcyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyByZXAgPSBwb3J0LmdyZWV0TWUoImZmYW5nIik7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXAsICJIZWxsbyBmZmFuZyIpOworICAgICAgICByZXAgPSBwb3J0LnNheUhpKCk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXAsICJCb25qb3VyIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwb3J0LnBpbmdNZSgpOworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICB9IGNhdGNoIChQaW5nTWVGYXVsdCBleCkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4LmdldEZhdWx0SW5mbygpLmdldE1ham9yKCksIChzaG9ydCkyKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhleC5nZXRGYXVsdEluZm8oKS5nZXRNaW5vcigpLCAoc2hvcnQpMSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9TZXJ2ZXIuamF2YSBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL1NlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjBmYWYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9TZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDY2IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1czsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLkNvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcuQ29uZmlndXJlckltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ0luSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ091dEludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmpheHdzLkVuZHBvaW50SW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50ZXN0LlRlc3RBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudGVzdHV0aWwuY29tbW9uLkFic3RyYWN0QnVzVGVzdFNlcnZlckJhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5pbnRlcmNlcHRvcnMuTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvclRlc3Q7CisKK3B1YmxpYyBjbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBBYnN0cmFjdEJ1c1Rlc3RTZXJ2ZXJCYXNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUzEgPSAKKyAgICAgICAgTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvclRlc3QuY2xhc3MuZ2V0UmVzb3VyY2UoIi9NRVRBLUlORi9jeGYvY3hmLnhtbCIpLnRvU3RyaW5nKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFMyID0gCisgICAgICAgIE5NUk9wZXJhdGlvbkluSW50ZXJjZXB0b3JUZXN0LmNsYXNzLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2UoImN4Zi1iaW5kaW5nLW5tci54bWwiKS50b1N0cmluZygpOworCisgICAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgeworICAgICAgICBUZXN0QXBwbGljYXRpb25Db250ZXh0IGN0eCA9IG5ldyBUZXN0QXBwbGljYXRpb25Db250ZXh0KG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgUzEsIFMyIH0pOworICAgICAgICBDb25maWd1cmVySW1wbCBjZmcgPSBuZXcgQ29uZmlndXJlckltcGwoY3R4KTsKKyAgICAgICAgQnVzIGJ1cyA9IChCdXMpIGN0eC5nZXRCZWFuKEJ1cy5ERUZBVUxUX0JVU19JRCk7CisgICAgICAgIGJ1cy5zZXRFeHRlbnNpb24oY2ZnLCBDb25maWd1cmVyLmNsYXNzKTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBPYmplY3QgaW1wbGVtZW50b3IgPSBuZXcgR3JlZXRlckltcGwoKTsKKyAgICAgICAgU3RyaW5nIGFkZHJlc3MgPSAibG9jYWw6Ly9ubXJlbmRwb2ludCI7CisgICAgICAgIC8vRW5kcG9pbnRJbXBsIGUgPSAoRW5kcG9pbnRJbXBsKUVuZHBvaW50LnB1Ymxpc2goYWRkcmVzcywgaW1wbGVtZW50b3IpOworICAgICAgICBFbmRwb2ludEltcGwgZSA9IG5ldyBFbmRwb2ludEltcGwoYnVzLCBpbXBsZW1lbnRvciwgTk1SQ29uc3RhbnRzLk5TX05NUl9CSU5ESU5HKTsKKyAgICAgICAgZS5wdWJsaXNoKGFkZHJlc3MpOworICAgICAgICBlLmdldFNlcnZlcigpLmdldEVuZHBvaW50KCkuZ2V0SW5JbnRlcmNlcHRvcnMoKS5hZGQobmV3IExvZ2dpbmdJbkludGVyY2VwdG9yKCkpOworICAgICAgICBlLmdldFNlcnZlcigpLmdldEVuZHBvaW50KCkuZ2V0SW5JbnRlcmNlcHRvcnMoKS5hZGQobmV3IEhhY2tPcGVyYXRpb25JbnRlcmNlcHRvcigpKTsKKyAgICAgICAgZS5nZXRTZXJ2ZXIoKS5nZXRFbmRwb2ludCgpLmdldE91dEludGVyY2VwdG9ycygpLmFkZChuZXcgTG9nZ2luZ091dEludGVyY2VwdG9yKCkpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFNlcnZlciBzID0gbmV3IFNlcnZlcigpOworICAgICAgICAgICAgcy5zdGFydCgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb25lISIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvaW50ZXJjZXB0b3JzL05NUkZhdWx0T3V0SW50ZXJjZXB0b3JUZXN0LmphdmEgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1SRmF1bHRPdXRJbnRlcmNlcHRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWE4MGM2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvYmluZGluZy9ubXIvaW50ZXJjZXB0b3JzL05NUkZhdWx0T3V0SW50ZXJjZXB0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLmludGVyY2VwdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxPdXRwdXRGYWN0b3J5OworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtV3JpdGVyOworCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmhlbHBlcnMuRE9NVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuRmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5NZXNzYWdlSW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZUludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYuYmluZGluZy5ubXIuTk1STWVzc2FnZTsKK2ltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgTk1SRmF1bHRPdXRJbnRlcmNlcHRvclRlc3QgZXh0ZW5kcyBBc3NlcnQgeworICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBoYXNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBoYXNlSW50ZXJjZXB0b3I8Tk1STWVzc2FnZT4gaW50ZXJjZXB0b3IgPSBuZXcgTk1SRmF1bHRPdXRJbnRlcmNlcHRvcigpOworICAgICAgICBhc3NlcnRFcXVhbHMoUGhhc2UuTUFSU0hBTCwgaW50ZXJjZXB0b3IuZ2V0UGhhc2UoKSk7CisgICAgfQorICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdE5vV3JpdGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBoYXNlSW50ZXJjZXB0b3I8Tk1STWVzc2FnZT4gaW50ZXJjZXB0b3IgPSBuZXcgTk1SRmF1bHRPdXRJbnRlcmNlcHRvcigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgTk1STWVzc2FnZSBtc2cgPSBuZXcgTk1STWVzc2FnZShuZXcgTWVzc2FnZUltcGwoKSk7CisgICAgICAgICAgICBpbnRlcmNlcHRvci5oYW5kbGVNZXNzYWdlKG1zZyk7CisgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBvaworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Tm9GYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQaGFzZUludGVyY2VwdG9yPE5NUk1lc3NhZ2U+IGludGVyY2VwdG9yID0gbmV3IE5NUkZhdWx0T3V0SW50ZXJjZXB0b3IoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE5NUk1lc3NhZ2UgbXNnID0gbmV3IE5NUk1lc3NhZ2UobmV3IE1lc3NhZ2VJbXBsKCkpOworICAgICAgICAgICAgbXNnLnNldENvbnRlbnQoWE1MU3RyZWFtV3JpdGVyLmNsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgWE1MT3V0cHV0RmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZVhNTFN0cmVhbVdyaXRlcihuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCkpKTsKKyAgICAgICAgICAgIGludGVyY2VwdG9yLmhhbmRsZU1lc3NhZ2UobXNnKTsKKyAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIG9rCisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RFbXB0eUZhdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBoYXNlSW50ZXJjZXB0b3I8Tk1STWVzc2FnZT4gaW50ZXJjZXB0b3IgPSBuZXcgTk1SRmF1bHRPdXRJbnRlcmNlcHRvcigpOworICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgWE1MU3RyZWFtV3JpdGVyIHdyaXRlciA9IFhNTE91dHB1dEZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVYTUxTdHJlYW1Xcml0ZXIoYmFvcyk7IAorICAgICAgICBOTVJNZXNzYWdlIG1zZyA9IG5ldyBOTVJNZXNzYWdlKG5ldyBNZXNzYWdlSW1wbCgpKTsKKyAgICAgICAgbXNnLnNldENvbnRlbnQoWE1MU3RyZWFtV3JpdGVyLmNsYXNzLCB3cml0ZXIpOworICAgICAgICBtc2cuc2V0Q29udGVudChFeGNlcHRpb24uY2xhc3MsIG5ldyBFeGNlcHRpb24oIk15IGZhdWx0IikpOworICAgICAgICBpbnRlcmNlcHRvci5oYW5kbGVNZXNzYWdlKG1zZyk7CisgICAgICAgIHdyaXRlci5jbG9zZSgpOworICAgICAgICBEb2N1bWVudCBkb2MgPSBET01VdGlscy5yZWFkWG1sKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiYW9zLnRvQnl0ZUFycmF5KCkpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmYXVsdCIsIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCkuZ2V0Tm9kZU5hbWUoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGV0YWlsZWRGYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQaGFzZUludGVyY2VwdG9yPE5NUk1lc3NhZ2U+IGludGVyY2VwdG9yID0gbmV3IE5NUkZhdWx0T3V0SW50ZXJjZXB0b3IoKTsKKyAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIFhNTFN0cmVhbVdyaXRlciB3cml0ZXIgPSBYTUxPdXRwdXRGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlWE1MU3RyZWFtV3JpdGVyKGJhb3MpOyAKKyAgICAgICAgTk1STWVzc2FnZSBtc2cgPSBuZXcgTk1STWVzc2FnZShuZXcgTWVzc2FnZUltcGwoKSk7CisgICAgICAgIEZhdWx0IGYgPSBuZXcgRmF1bHQobmV3IE1lc3NhZ2UoIkZBVUxUIiwgKFJlc291cmNlQnVuZGxlKSBudWxsKSk7CisgICAgICAgIGYuZ2V0T3JDcmVhdGVEZXRhaWwoKTsKKyAgICAgICAgZi5nZXREZXRhaWwoKS5hcHBlbmRDaGlsZChmLmdldERldGFpbCgpLmdldE93bmVyRG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50TlMoInVybjp0ZXN0IiwgIm15RGV0YWlscyIpKTsKKyAgICAgICAgbXNnLnNldENvbnRlbnQoWE1MU3RyZWFtV3JpdGVyLmNsYXNzLCB3cml0ZXIpOworICAgICAgICBtc2cuc2V0Q29udGVudChFeGNlcHRpb24uY2xhc3MsIGYpOworICAgICAgICBpbnRlcmNlcHRvci5oYW5kbGVNZXNzYWdlKG1zZyk7CisgICAgICAgIHdyaXRlci5jbG9zZSgpOworICAgICAgICBEb2N1bWVudCBkb2MgPSBET01VdGlscy5yZWFkWG1sKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiYW9zLnRvQnl0ZUFycmF5KCkpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ1cm46dGVzdCIsIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCkuZ2V0TmFtZXNwYWNlVVJJKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIm15RGV0YWlscyIsIGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRGaXJzdENoaWxkKCkuZ2V0Tm9kZU5hbWUoKSk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvclRlc3QuamF2YSBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL2JpbmRpbmcvbm1yL2ludGVyY2VwdG9ycy9OTVJPcGVyYXRpb25JbkludGVyY2VwdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZDE0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi9iaW5kaW5nL25tci9pbnRlcmNlcHRvcnMvTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvclRlc3QuamF2YQpAQCAtMCwwICsxLDk4IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5pbnRlcmNlcHRvcnM7CisKKworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5CdXM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuYmluZGluZy5CaW5kaW5nRmFjdG9yeU1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLkNvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcuQ29uZmlndXJlckltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZW5kcG9pbnQuRW5kcG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuZW5kcG9pbnQuRW5kcG9pbnRJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkZhdWx0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuRXhjaGFuZ2VJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZUltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuUGhhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYucGhhc2UuUGhhc2VJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkVuZHBvaW50SW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50ZXN0LlRlc3RBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5OTVJCaW5kaW5nSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUkNvbnN0YW50czsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLmJpbmRpbmcubm1yLk5NUk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVhc3ltb2NrLmNsYXNzZXh0ZW5zaW9uLkVhc3lNb2NrOworaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBOTVJPcGVyYXRpb25JbkludGVyY2VwdG9yVGVzdCBleHRlbmRzIEFzc2VydCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nVXRpbHMuZ2V0TDdkTG9nZ2VyKE5NUk9wZXJhdGlvbkluSW50ZXJjZXB0b3IuY2xhc3MpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIEJVTkRMRSA9IExPRy5nZXRSZXNvdXJjZUJ1bmRsZSgpOworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTMSA9IAorICAgICAgICBOTVJPcGVyYXRpb25JbkludGVyY2VwdG9yVGVzdC5jbGFzcy5nZXRSZXNvdXJjZSgiL01FVEEtSU5GL2N4Zi9jeGYueG1sIikudG9TdHJpbmcoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUzIgPSAKKyAgICAgICAgTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvclRlc3QuY2xhc3MuZ2V0UmVzb3VyY2UoIi9NRVRBLUlORi9jeGYvYmluZGluZy9ubXIvY3hmLWJpbmRpbmctbm1yLnhtbCIpLnRvU3RyaW5nKCk7CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UGhhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGhhc2VJbnRlcmNlcHRvcjxOTVJNZXNzYWdlPiBpbnRlcmNlcHRvciA9IG5ldyBOTVJPcGVyYXRpb25JbkludGVyY2VwdG9yKCk7CisgICAgICAgIGFzc2VydEVxdWFscyhQaGFzZS5QUkVfUFJPVE9DT0wsIGludGVyY2VwdG9yLmdldFBoYXNlKCkpOworICAgIH0KKyAgICAKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RVbmtub3duT3BlcmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBoYXNlSW50ZXJjZXB0b3I8Tk1STWVzc2FnZT4gaW50ZXJjZXB0b3IgPSBuZXcgTk1ST3BlcmF0aW9uSW5JbnRlcmNlcHRvcigpOworICAgICAgICBOTVJNZXNzYWdlIG1zZyA9IG5ldyBOTVJNZXNzYWdlKG5ldyBNZXNzYWdlSW1wbCgpKTsKKyAgICAgICAgRXhjaGFuZ2UgbWUgPSBFYXN5TW9jay5jcmVhdGVNb2NrKEV4Y2hhbmdlLmNsYXNzKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KG1lLmdldE9wZXJhdGlvbigpKS5hbmRSZXR1cm4obmV3IFFOYW1lKCJ1cm46dGVzdCIsICJTYXlIaSIpKS50aW1lcyg0KTsKKyAgICAgICAgRWFzeU1vY2sucmVwbGF5KG1lKTsKKyAgICAgICAgbXNnLnB1dChFeGNoYW5nZS5jbGFzcywgbWUpOworCisgICAgICAgIFRlc3RBcHBsaWNhdGlvbkNvbnRleHQgY3R4ID0gbmV3IFRlc3RBcHBsaWNhdGlvbkNvbnRleHQobmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICAgICBTMSwgUzIgfSk7CisgICAgICAgIENvbmZpZ3VyZXJJbXBsIGNmZyA9IG5ldyBDb25maWd1cmVySW1wbChjdHgpOworICAgICAgICBCdXMgYnVzID0gKEJ1cykgY3R4LmdldEJlYW4oQnVzLkRFRkFVTFRfQlVTX0lEKTsKKyAgICAgICAgYnVzLnNldEV4dGVuc2lvbihjZmcsIENvbmZpZ3VyZXIuY2xhc3MpOworICAgICAgICBhc3NlcnROb3ROdWxsKGJ1cy5nZXRFeHRlbnNpb24oQmluZGluZ0ZhY3RvcnlNYW5hZ2VyLmNsYXNzKS5nZXRCaW5kaW5nRmFjdG9yeShOTVJDb25zdGFudHMuTlNfTk1SX0JJTkRJTkcpKTsKKyAgICAgICAgCisgICAgICAgIEVuZHBvaW50SW5mbyBlbmRwb2ludEluZm8gPSBuZXcgRW5kcG9pbnRJbmZvKCk7CisgICAgICAgIGVuZHBvaW50SW5mby5zZXRCaW5kaW5nKG5ldyBOTVJCaW5kaW5nSW5mbyhudWxsLCBOTVJDb25zdGFudHMuTlNfTk1SX0JJTkRJTkcpKTsKKyAgICAgICAgRW5kcG9pbnQgZXAgPSBuZXcgRW5kcG9pbnRJbXBsKG51bGwsIG51bGwsIGVuZHBvaW50SW5mbyk7CisgICAgICAgIG1zZy5zZXRFeGNoYW5nZShuZXcgRXhjaGFuZ2VJbXBsKCkpOworICAgICAgICBtc2cuZ2V0RXhjaGFuZ2UoKS5wdXQoRW5kcG9pbnQuY2xhc3MsIGVwKTsKKyAgICAgICAgdHJ5IHsgCisgICAgICAgICAgICBpbnRlcmNlcHRvci5oYW5kbGVNZXNzYWdlKG1zZyk7CisgICAgICAgICAgICBmYWlsKCJzaG91bGRuJ3QgZm91bmQgU2F5SGkgb3BlcmF0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKEZhdWx0IGZhdWx0KSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoZmF1bHQuZ2V0TWVzc2FnZSgpLCBuZXcgTWVzc2FnZSgiVU5LTk9XTl9PUEVSQVRJT04iLCBCVU5ETEUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5nZXRObXJFeGNoYW5nZSgpLmdldE9wZXJhdGlvbigpLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi1iaW5kaW5nLW5tci9zcmMvdGVzdC9yZXNvdXJjZXMvY3hmLWJpbmRpbmctbm1yLnhtbCBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvcmVzb3VyY2VzL2N4Zi1iaW5kaW5nLW5tci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyZTVkOAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvcmVzb3VyY2VzL2N4Zi1iaW5kaW5nLW5tci54bWwKQEAgLTAsMCArMSw0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZCI+CisKKyAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5OTVJCaW5kaW5nRmFjdG9yeSIKKyAgICAgICAgICBpZD0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi5iaW5kaW5nLm5tci5OTVJCaW5kaW5nRmFjdG9yeSIKKyAgICAgICAgICBsYXp5LWluaXQ9InRydWUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVzIiByZWY9ImN4ZiIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZhdGlvbk5hbWVzcGFjZXMiPgorICAgICAgICAgICAgPHNldD4KKyAgICAgICAgICAgICAgICA8dmFsdWU+aHR0cDovL2N4Zi5hcGFjaGUub3JnL2JpbmRpbmdzL25tcjwvdmFsdWU+CisgICAgICAgICAgICAgICAgPHZhbHVlPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC88L3ZhbHVlPgorICAgICAgICAgICAgICAgIDx2YWx1ZT5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvPC92YWx1ZT4KKyAgICAgICAgICAgIDwvc2V0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKyAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LmxvY2FsLkxvY2FsVHJhbnNwb3J0RmFjdG9yeSIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5sb2NhbC5Mb2NhbFRyYW5zcG9ydEZhY3RvcnkiCisgICAgICAgICAgICAgIGxhenktaW5pdD0idHJ1ZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidXMiIHJlZj0iY3hmIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0cmFuc3BvcnRJZHMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHZhbHVlPmh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC88L3ZhbHVlPgorICAgICAgICAgICAgICAgIDx2YWx1ZT5odHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvPC92YWx1ZT4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L2JlYW4+CisKKzwvYmVhbnM+CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb193b3JsZF9ubXIud3NkbCBiL3RydW5rL2N4Zi9jeGYtYmluZGluZy1ubXIvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvX3dvcmxkX25tci53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZTU3MTEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLWJpbmRpbmctbm1yL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb193b3JsZF9ubXIud3NkbApAQCAtMCwwICsxLDE2NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSGVsbG9Xb3JsZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZC9ubXIiIAorICAgIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCisgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCisgICAgeG1sbnM6dG5zPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZC9ubXIiCisgICAgeG1sbnM6eDE9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkL3R5cGVzL25tciIKKyAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCisgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczp4Zm9ybWF0PSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvYmluZGluZ3MveGZvcm1hdCIKKyAgICB4bWxuczpubXJGb3JtYXQ9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9iaW5kaW5ncy9ubXIiPgorCisgICAgPHdzZGw6dHlwZXM+CisgICAgICAgIDxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZC90eXBlcy9ubXIiIAorICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkL3R5cGVzL25tciIKKyAgICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKyAgICAgICAgPHNpbXBsZVR5cGUgbmFtZT0iTXlTdHJpbmdUeXBlIj4KKyAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+CisgICAgICAgICAgICA8bWF4TGVuZ3RoIHZhbHVlPSIzMCIgLz4KKyAgICAgICAgPC9yZXN0cmljdGlvbj4KKyAgICAgICAgPC9zaW1wbGVUeXBlPgorCisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlLz4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVzcG9uc2VUeXBlIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZ3JlZXRNZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXF1ZXN0VHlwZSIgdHlwZT0idG5zOk15U3RyaW5nVHlwZSIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJncmVldE1lUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVzcG9uc2VUeXBlIiB0eXBlPSJzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZ3JlZXRNZU9uZVdheSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXF1ZXN0VHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBpbmdNZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlLz4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBpbmdNZVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGUvPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZmF1bHREZXRhaWwiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibWlub3IiIHR5cGU9InNob3J0Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJtYWpvciIgdHlwZT0ic2hvcnQiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICA8L3NjaGVtYT4KKyAgICA8L3dzZGw6dHlwZXM+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXlIaVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9IngxOnNheUhpIiBuYW1lPSJpbiIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0ieDE6c2F5SGlSZXNwb25zZSIgbmFtZT0ib3V0Ii8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJncmVldE1lUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0ieDE6Z3JlZXRNZSIgbmFtZT0iaW4iLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0ieDE6Z3JlZXRNZVJlc3BvbnNlIiBuYW1lPSJvdXQiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVPbmVXYXlSZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJ4MTpncmVldE1lT25lV2F5IiBuYW1lPSJpbiIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGluZ01lUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iaW4iIGVsZW1lbnQ9IngxOnBpbmdNZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGluZ01lUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6cGluZ01lUmVzcG9uc2UiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4gICAgICAgIAorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGluZ01lRmF1bHQiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImZhdWx0RGV0YWlsIiBlbGVtZW50PSJ4MTpmYXVsdERldGFpbCIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIAorICAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkdyZWV0ZXIiPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnNheUhpUmVxdWVzdCIgbmFtZT0ic2F5SGlSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOnNheUhpUmVzcG9uc2UiIG5hbWU9InNheUhpUmVzcG9uc2UiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgCisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpncmVldE1lUmVxdWVzdCIgbmFtZT0iZ3JlZXRNZVJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Z3JlZXRNZVJlc3BvbnNlIiBuYW1lPSJncmVldE1lUmVzcG9uc2UiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgCisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lT25lV2F5Ij4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpncmVldE1lT25lV2F5UmVxdWVzdCIgbmFtZT0iZ3JlZXRNZU9uZVdheVJlcXVlc3QiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKworICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0icGluZ01lIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InBpbmdNZVJlcXVlc3QiIG1lc3NhZ2U9InRuczpwaW5nTWVSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0icGluZ01lUmVzcG9uc2UiIG1lc3NhZ2U9InRuczpwaW5nTWVSZXNwb25zZSIvPgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0icGluZ01lRmF1bHQiIG1lc3NhZ2U9InRuczpwaW5nTWVGYXVsdCIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPiAKKyAgICA8L3dzZGw6cG9ydFR5cGU+CisgICAgPHdzZGw6YmluZGluZyBuYW1lPSJHcmVldGVyX1NPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6R3JlZXRlciI+CisgICAgICAgIDxubXJGb3JtYXQ6YmluZGluZyAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F5SGlSZXF1ZXN0IiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNheUhpUmVzcG9uc2UiIC8+CisgICAgICAgICAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ3JlZXRNZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJncmVldE1lUmVxdWVzdCIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJncmVldE1lUmVzcG9uc2UiIC8+CisgICAgICAgICAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ3JlZXRNZU9uZVdheSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJncmVldE1lT25lV2F5UmVxdWVzdCIgLz4KKyAgICAgICAgICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJwaW5nTWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw6aW5wdXQgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsOm91dHB1dCAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0icGluZ01lRmF1bHQiIC8+CisgICAgICAgICAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKworICAgICAgICAKKyAgICA8L3dzZGw6YmluZGluZz4KKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4KKyAgICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6R3JlZXRlcl9TT0FQQmluZGluZyIgbmFtZT0iU29hcFBvcnQiPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0ibG9jYWw6Ly9ubXJlbmRwb2ludCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKzwvd3NkbDpkZWZpbml0aW9ucz4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3BvbS54bWwgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNmODY4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3BvbS54bWwKQEAgLTAsMCArMSwyNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5jeGY8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmN4ZjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXI8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBDWEYgU3VwcG9ydCA6OiBUcmFuc3BvcnQgRm9yIE5NUjwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+QXBhY2hlIENYRiBUcmFuc3BvcnQgaW50ZWdyYXRpb24gdG8gTk1SPC9kZXNjcmlwdGlvbj4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtYnVuZGxlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXdzLW1ldGFkYXRhXzIuMF9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWFubm90YXRpb25fMS4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tc2VydmxldF8zLjBfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXhiLWFwaS0ke2pheGIuYXBpLnZlcnNpb259PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5lYXN5bW9jazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmVhc3ltb2NrY2xhc3NleHRlbnNpb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8IS0tIEJ1bmRsZSBnZW5lcmF0aW9uIC0tPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLURlc2NyaXB0aW9uPiR7cHJvamVjdC5kZXNjcmlwdGlvbn08L0J1bmRsZS1EZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZCo7dmVyc2lvbj0iWzAuMCwzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguYWN0aXZhdGlvbjt2ZXJzaW9uPSJbMC4wLDIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5hbm5vdGF0aW9uO3ZlcnNpb249IlswLjAsMikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cyo7dmVyc2lvbj0iWzAuMCwzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTmVlZGVkIGZvciBqYXhiIGFubm90YXRpb25zIGNsYXNzZXMgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8RHluYW1pY0ltcG9ydC1QYWNrYWdlPio8L0R5bmFtaWNJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3Byb2plY3QuYXJ0aWZhY3RJZH0qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydHMubm1yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc9TUVUQS1JTkYuY3hmLnRyYW5zcG9ydC5ubXInCisgICAgICAgICAgICAgICAgICAgICAgICA8L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFByaXZhdGUtUGFja2FnZSAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPF9mYWlsb2s+dHJ1ZTwvX2ZhaWxvaz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxTcHJpbmctQ29udGV4dD4qO3B1Ymxpc2gtY29udGV4dDo9ZmFsc2U8L1NwcmluZy1Db250ZXh0PgorICAgICAgICAgICAgICAgICAgICAgICAgPF92ZXJzaW9ucG9saWN5PlskKHZlcnNpb247PT07JChAKSksJCh2ZXJzaW9uOys7JChAKSkpPC9fdmVyc2lvbnBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8IS0tIGdlbmVyYXRlIGRlcGVuZGVuY2llcyB2ZXJzaW9ucyAtLT4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZGVwZW5kcy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtZGVwZW5kcy1maWxlPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5nZW5lcmF0ZS1kZXBlbmRzLWZpbGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGZvcmtNb2RlPnBlcnRlc3Q8L2ZvcmtNb2RlPgorICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5jb20uc3VuLm9yZy5hcGFjaGUueGVyY2VzLmludGVybmFsLmpheHAuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeUltcGw8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5jb20uc3VuLm9yZy5hcGFjaGUueGVyY2VzLmludGVybmFsLmpheHAuZGF0YXR5cGUuRGF0YXR5cGVGYWN0b3J5SW1wbDwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPmNvbS5zdW4ub3JnLmFwYWNoZS54ZXJjZXMuaW50ZXJuYWwuamF4cC5TQVhQYXJzZXJGYWN0b3J5SW1wbDwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi14amMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y3hmLnhqYy11dGlscy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5nZW5lcmF0ZS1zb3VyY2VzPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VSb290PiR7YmFzZWRpcn0vdGFyZ2V0L2dlbmVyYXRlZC9zcmMvbWFpbi9qYXZhPC9zb3VyY2VSb290PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2RPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkT3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZD4ke2Jhc2VkaXJ9L3NyYy9tYWluL3Jlc291cmNlcy9zY2hlbWFzL3dzZGwvbm1yLnhzZDwveHNkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRpbmdGaWxlPiR7YmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzL3NjaGVtYXMvd3NkbC9ubXIueGpiPC9iaW5kaW5nRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjYXRhbG9nPiR7YmFzZWRpcn0vc3JjL21haW4vYnVpbGQtcmVzb3VyY2VzL2NhdGFsb2cuY2F0PC9jYXRhbG9nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlbGV0ZURpcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlbGV0ZURpcj4ke2Jhc2VkaXJ9L3RhcmdldC9nZW5lcmF0ZWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2N4Zi93c2RsPC9kZWxldGVEaXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlbGV0ZURpcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkT3B0aW9uPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2RPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnhzZHRvamF2YTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLWNvbW1vbi11dGlsaXRpZXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2N4Zi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8IS0tIGV4Y2x1ZGUgZ2VuZXJhdGVkIGNsYXNzIGZyb20gQ29iZXJ0dXJhIHJlcG9ydHMgLS0+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvYmVydHVyYS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+b3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL09iamVjdEZhY3RvcnkuY2xhc3M8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+b3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL3BhY2thZ2UtaW5mby5jbGFzczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvQWRkcmVzc1R5cGUuY2xhc3M8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5pYm1qZGs8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZhLnZlbmRvcjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPHZhbHVlPklCTSBDb3Jwb3JhdGlvbjwvdmFsdWU+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDwhLS0gQWRkIHRoZSBTdW4gamF4cC1yaSBhcyBhIGRlcGVuZGVuY3kgd2hlbiB1c2luZyB0aGUgaWJtIGpkaywgc28gdGhhdCAKKyAgICAgICAgICAgICAgICBjeGYncyBkZXBlbmRlbmN5IG9uIHRoZSBTdW4gc2FhaiBjYW4gd29yayB3aXRoIHRoZSBpYm0gamRrLiAtLT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5zdW4ueG1sLnBhcnNlcnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheHAtcmk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgICAgICAgICA8YnVpbGQ+CisgICAgICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPioqLypUZXN0KjwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKiQqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmtNb2RlPiR7c3VyZWZpcmUuZm9yay5tb2RlfTwvZm9ya01vZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmRlcmJ5LnN5c3RlbS5ob21lPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPiR7YmFzZWRpcn0vdGFyZ2V0L2RlcmJ5PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXaXRoIE1hdmVuIDIuMC43LCBpdCdzIHBvc3NpYmxlIHRoYXQgamF4cC1yaSB3aWxsIGJlIHBsYWNlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGZyb250IG9mIHdvb2RzdG94IG9uIHRoZSBjbGFzc3BhdGguIElmIHRoaXMgaGFwcGVucywgY3hmIHdpbGwgbm90IHVzZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvb2RzdG94LCBjYXVzaW5nIHRlc3QgZmFpbHVyZXMgKGUuZy4sIEN4ZkJjUHJvdmlkZXJDb25zdW1lck10b21UZXN0KS4gU28sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoZXNlIHByb3BlcnRpZXMgdG8gZW5zdXJlIHdvb2RzdG94IGlzIHVzZWQuIE1hdmVuIDIuMC45IGRvZXNuJ3QgcmVxdWlyZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd29yay1hcm91bmQgc2luY2UgaXQgY29uc2lzdGVudGx5IHBsYWNlcyBqYXhwLXJpIGF0IHRoZSBlbmQgb2YgdGhlIGRlcGVuZGVuY2llcy4gLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPmphdmF4LnhtbC5zdHJlYW0uWE1MSW5wdXRGYWN0b3J5PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPmNvbS5jdGMud3N0eC5zdGF4LldzdHhJbnB1dEZhY3Rvcnk8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwuc3RyZWFtLlhNTE91dHB1dEZhY3Rvcnk8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+Y29tLmN0Yy53c3R4LnN0YXguV3N0eE91dHB1dEZhY3Rvcnk8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3lzdGVtUHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgICAgICAgICA8L2J1aWxkPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2J1aWxkLXJlc291cmNlcy9jYXRhbG9nLmNhdCBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9idWlsZC1yZXNvdXJjZXMvY2F0YWxvZy5jYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmNzM1YgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9idWlsZC1yZXNvdXJjZXMvY2F0YWxvZy5jYXQKQEAgLTAsMCArMSwyMSBAQAorLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tCisKK1NZU1RFTSAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8yMDAzLTAyLTExLnhzZCIgIndzZGwueHNkIgorU1lTVEVNICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgIndzZGwueHNkIgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2J1aWxkLXJlc291cmNlcy93c2RsLnhzZCBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9idWlsZC1yZXNvdXJjZXMvd3NkbC54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkZmQ2NwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9idWlsZC1yZXNvdXJjZXMvd3NkbC54c2QKQEAgLTAsMCArMSwzMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PiAKKzwhLS0gCisgCitDb3B5cmlnaHQgMjAwMSAtIDIwMDUsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgorQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitMaWNlbnNlIGZvciBXU0RMIFNjaGVtYSBGaWxlcworCitUaGUgQXV0aG9ycyBncmFudCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFdTREwgU2NoZW1hIAorRmlsZXMgaW4gYW55IG1lZGl1bSB3aXRob3V0IGZlZSBvciByb3lhbHR5IGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgYW5kIAorbGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgd2l0aCB0aGVtLiAgVGhlIG9yaWdpbmFscyBvZiB0aGVzZSBmaWxlcyBjYW4gCitiZSBsb2NhdGVkIGF0OgorCitodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLzIwMDMtMDItMTEueHNkCisKK1RIRVNFIFNDSEVNQSBGSUxFUyBBUkUgUFJPVklERUQgIkFTIElTLCIgQU5EIFRIRSBBVVRIT1JTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIAorT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBSRUdBUkRJTkcgVEhFU0UgRklMRVMsIElOQ0xVRElORywgQlVUIE5PVCAKK0xJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgCitOT04tSU5GUklOR0VNRU5UIE9SIFRJVExFLiAgVEhFIEFVVEhPUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKK0lORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiAKK1JFTEFUSU5HIFRPIEFOWSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRVNFIEZJTEVTLgorCitUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiB0aGUgQXV0aG9ycyBtYXkgTk9UIGJlIHVzZWQgaW4gYW55IG1hbm5lciwgCitpbmNsdWRpbmcgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlc2UgZmlsZXMgb3IgYW55IHByb2dyYW0gCitvciBzZXJ2aWNlIHRoYXQgdXNlcyB0aGVzZSBmaWxlcywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGl0bGUgdG8gY29weXJpZ2h0IAoraW4gdGhlc2UgZmlsZXMgd2lsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggdGhlIEF1dGhvcnMuCisKK05vIG90aGVyIHJpZ2h0cyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLgorCisKKy0tPiAKKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKyAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiID4KKyAgIAorICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiIG5hbWU9InREb2N1bWVudGF0aW9uIiA+CisgICAgPHhzOnNlcXVlbmNlPgorICAgICAgPHhzOmFueSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KKyAgICA8L3hzOnNlcXVlbmNlPgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0RG9jdW1lbnRlZCIgPgorICAgIDx4czphbm5vdGF0aW9uPgorICAgICAgPHhzOmRvY3VtZW50YXRpb24+CisgICAgICBUaGlzIHR5cGUgaXMgZXh0ZW5kZWQgYnkgIGNvbXBvbmVudCB0eXBlcyB0byBhbGxvdyB0aGVtIHRvIGJlIGRvY3VtZW50ZWQKKyAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KKyAgICA8L3hzOmFubm90YXRpb24+CisgICAgPHhzOnNlcXVlbmNlPgorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZG9jdW1lbnRhdGlvbiIgdHlwZT0id3NkbDp0RG9jdW1lbnRhdGlvbiIgbWluT2NjdXJzPSIwIiAvPgorICAgIDwveHM6c2VxdWVuY2U+CisgIDwveHM6Y29tcGxleFR5cGU+CisgICAgIAorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEV4dGVuc2libGVBdHRyaWJ1dGVzRG9jdW1lbnRlZCIgYWJzdHJhY3Q9InRydWUiID4KKyAgICA8eHM6Y29tcGxleENvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dERvY3VtZW50ZWQiID4KKyAgICAgICAgPHhzOmFubm90YXRpb24+CisgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+CisgICAgICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGNvbXBvbmVudCB0eXBlcyB0byBhbGxvdyBhdHRyaWJ1dGVzIGZyb20gb3RoZXIgbmFtZXNwYWNlcyB0byBiZSBhZGRlZC4KKyAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+CisgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KKyAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPiAgICAKKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgYWJzdHJhY3Q9InRydWUiID4KKyAgICA8eHM6Y29tcGxleENvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dERvY3VtZW50ZWQiID4KKyAgICAgICAgPHhzOmFubm90YXRpb24+CisgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+CisgICAgICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGNvbXBvbmVudCB0eXBlcyB0byBhbGxvdyBlbGVtZW50cyBmcm9tIG90aGVyIG5hbWVzcGFjZXMgdG8gYmUgYWRkZWQuCisgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgorICAgICAgICA8L3hzOmFubm90YXRpb24+CisgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisgICAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9ImRlZmluaXRpb25zIiB0eXBlPSJ3c2RsOnREZWZpbml0aW9ucyIgPgorICAgIDx4czprZXkgbmFtZT0ibWVzc2FnZSIgPgorICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ3c2RsOm1lc3NhZ2UiIC8+CisgICAgICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIiAvPgorICAgIDwveHM6a2V5PgorICAgIDx4czprZXkgbmFtZT0icG9ydFR5cGUiID4KKyAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpwb3J0VHlwZSIgLz4KKyAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+CisgICAgPC94czprZXk+CisgICAgPHhzOmtleSBuYW1lPSJiaW5kaW5nIiA+CisgICAgICA8eHM6c2VsZWN0b3IgeHBhdGg9IndzZGw6YmluZGluZyIgLz4KKyAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+CisgICAgPC94czprZXk+CisgICAgPHhzOmtleSBuYW1lPSJzZXJ2aWNlIiA+CisgICAgICA8eHM6c2VsZWN0b3IgeHBhdGg9IndzZGw6c2VydmljZSIgLz4KKyAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+CisgICAgPC94czprZXk+CisgICAgPHhzOmtleSBuYW1lPSJpbXBvcnQiID4KKyAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDppbXBvcnQiIC8+CisgICAgICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lc3BhY2UiIC8+CisgICAgPC94czprZXk+CisgIDwveHM6ZWxlbWVudD4KKworICA8eHM6Z3JvdXAgbmFtZT0iYW55VG9wTGV2ZWxPcHRpb25hbEVsZW1lbnQiID4KKyAgICA8eHM6YW5ub3RhdGlvbj4KKyAgICAgIDx4czpkb2N1bWVudGF0aW9uPgorICAgICAgQW55IHRvcCBsZXZlbCBvcHRpb25hbCBlbGVtZW50IGFsbG93ZWQgdG8gYXBwZWFyIG1vcmUgdGhlbiBvbmNlIC0gYW55IGNoaWxkIG9mIGRlZmluaXRpb25zIGVsZW1lbnQgZXhjZXB0IHdzZGw6dHlwZXMuIEFueSBleHRlbnNpYmlsaXR5IGVsZW1lbnQgaXMgYWxsb3dlZCBpbiBhbnkgcGxhY2UuCisgICAgICA8L3hzOmRvY3VtZW50YXRpb24+CisgICAgPC94czphbm5vdGF0aW9uPgorICAgIDx4czpjaG9pY2U+CisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnQiIHR5cGU9IndzZGw6dEltcG9ydCIgLz4KKyAgICAgIDx4czplbGVtZW50IG5hbWU9InR5cGVzIiB0eXBlPSJ3c2RsOnRUeXBlcyIgLz4gICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDx4czplbGVtZW50IG5hbWU9Im1lc3NhZ2UiICB0eXBlPSJ3c2RsOnRNZXNzYWdlIiA+CisgICAgICAgIDx4czp1bmlxdWUgbmFtZT0icGFydCIgPgorICAgICAgICAgIDx4czpzZWxlY3RvciB4cGF0aD0id3NkbDpwYXJ0IiAvPgorICAgICAgICAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiIC8+CisgICAgICAgIDwveHM6dW5pcXVlPgorICAgICAgPC94czplbGVtZW50PgorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icG9ydFR5cGUiIHR5cGU9IndzZGw6dFBvcnRUeXBlIiAvPgorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYmluZGluZyIgIHR5cGU9IndzZGw6dEJpbmRpbmciIC8+CisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzZXJ2aWNlIiAgdHlwZT0id3NkbDp0U2VydmljZSIgPgorICAgICAgICA8eHM6dW5pcXVlIG5hbWU9InBvcnQiID4KKyAgICAgICAgICA8eHM6c2VsZWN0b3IgeHBhdGg9IndzZGw6cG9ydCIgLz4KKyAgICAgICAgICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIiAvPgorICAgICAgICA8L3hzOnVuaXF1ZT4KKyAgICAgIDwveHM6ZWxlbWVudD4KKyAgICA8L3hzOmNob2ljZT4KKyAgPC94czpncm91cD4KKworICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idERlZmluaXRpb25zIiA+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPgorICAgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgICAgPHhzOmdyb3VwIHJlZj0id3NkbDphbnlUb3BMZXZlbE9wdGlvbmFsRWxlbWVudCIgIG1pbk9jY3Vycz0iMCIgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXROYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJvcHRpb25hbCIgLz4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0ib3B0aW9uYWwiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorICAgCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0SW1wb3J0IiA+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlQXR0cmlidXRlc0RvY3VtZW50ZWQiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpjb21wbGV4Q29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKyAgIAorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idFR5cGVzIiA+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PiAgIAorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgLz4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PiAgIAorICA8L3hzOmNvbXBsZXhUeXBlPgorICAgICAKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRNZXNzYWdlIiA+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PiAgIAorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPgorICAgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icGFydCIgdHlwZT0id3NkbDp0UGFydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PiAgIAorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0UGFydCIgPgorICAgIDx4czpjb21wbGV4Q29udGVudD4gICAKKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOlFOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzOlFOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPiAgICAKKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6Y29tcGxleENvbnRlbnQ+ICAgCisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRQb3J0VHlwZSIgPgorICAgIDx4czpjb21wbGV4Q29udGVudD4gICAKKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+CisgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iIHR5cGU9IndzZGw6dE9wZXJhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PiAgIAorICA8L3hzOmNvbXBsZXhUeXBlPgorICAgCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0T3BlcmF0aW9uIiA+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PiAgIAorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPgorICAgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgICAgPHhzOmNob2ljZT4KKyAgICAgICAgICAgIDx4czpncm91cCByZWY9IndzZGw6cmVxdWVzdC1yZXNwb25zZS1vci1vbmUtd2F5LW9wZXJhdGlvbiIgLz4KKyAgICAgICAgICAgIDx4czpncm91cCByZWY9IndzZGw6c29saWNpdC1yZXNwb25zZS1vci1ub3RpZmljYXRpb24tb3BlcmF0aW9uIiAvPgorICAgICAgICAgIDwveHM6Y2hvaWNlPgorICAgICAgICA8L3hzOnNlcXVlbmNlPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXJhbWV0ZXJPcmRlciIgdHlwZT0ieHM6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PiAgIAorICA8L3hzOmNvbXBsZXhUeXBlPgorICAgIAorICA8eHM6Z3JvdXAgbmFtZT0icmVxdWVzdC1yZXNwb25zZS1vci1vbmUtd2F5LW9wZXJhdGlvbiIgPgorICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImlucHV0IiB0eXBlPSJ3c2RsOnRQYXJhbSIgLz4KKyAgICAgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9JzAnID4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ib3V0cHV0IiB0eXBlPSJ3c2RsOnRQYXJhbSIgLz4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZmF1bHQiIHR5cGU9IndzZGw6dEZhdWx0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8L3hzOnNlcXVlbmNlPgorICA8L3hzOmdyb3VwPgorCisgIDx4czpncm91cCBuYW1lPSJzb2xpY2l0LXJlc3BvbnNlLW9yLW5vdGlmaWNhdGlvbi1vcGVyYXRpb24iID4KKyAgICA8eHM6c2VxdWVuY2U+CisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvdXRwdXQiIHR5cGU9IndzZGw6dFBhcmFtIiAvPgorICAgICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0nMCcgPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJpbnB1dCIgdHlwZT0id3NkbDp0UGFyYW0iIC8+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImZhdWx0IiB0eXBlPSJ3c2RsOnRGYXVsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpzZXF1ZW5jZT4KKyAgPC94czpncm91cD4KKyAgICAgICAgCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0UGFyYW0iID4KKyAgICA8eHM6Y29tcGxleENvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVBdHRyaWJ1dGVzRG9jdW1lbnRlZCIgPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJvcHRpb25hbCIgLz4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRGYXVsdCIgPgorICAgIDx4czpjb21wbGV4Q29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZUF0dHJpYnV0ZXNEb2N1bWVudGVkIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiAgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisgICAgIAorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEJpbmRpbmciID4KKyAgICA8eHM6Y29tcGxleENvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+CisgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iIHR5cGU9IndzZGw6dEJpbmRpbmdPcGVyYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisgICAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzOlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpjb21wbGV4Q29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKyAgICAKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRCaW5kaW5nT3BlcmF0aW9uTWVzc2FnZSIgPgorICAgIDx4czpjb21wbGV4Q29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0id3NkbDp0RXh0ZW5zaWJsZURvY3VtZW50ZWQiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0ib3B0aW9uYWwiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorICAKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRCaW5kaW5nT3BlcmF0aW9uRmF1bHQiID4KKyAgICA8eHM6Y29tcGxleENvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpjb21wbGV4Q29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idEJpbmRpbmdPcGVyYXRpb24iID4KKyAgICA8eHM6Y29tcGxleENvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9IndzZGw6dEV4dGVuc2libGVEb2N1bWVudGVkIiA+CisgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJpbnB1dCIgdHlwZT0id3NkbDp0QmluZGluZ09wZXJhdGlvbk1lc3NhZ2UiIG1pbk9jY3Vycz0iMCIgLz4KKyAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvdXRwdXQiIHR5cGU9IndzZGw6dEJpbmRpbmdPcGVyYXRpb25NZXNzYWdlIiBtaW5PY2N1cnM9IjAiIC8+CisgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZmF1bHQiIHR5cGU9IndzZGw6dEJpbmRpbmdPcGVyYXRpb25GYXVsdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorICAgICAKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRTZXJ2aWNlIiA+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPgorICAgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icG9ydCIgdHlwZT0id3NkbDp0UG9ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOmNvbXBsZXhDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorICAgICAKKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRQb3J0IiA+CisgICAgPHhzOmNvbXBsZXhDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmxlRG9jdW1lbnRlZCIgPgorICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiaW5kaW5nIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6Y29tcGxleENvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhcnJheVR5cGUiIHR5cGU9InhzOnN0cmluZyIgLz4KKyAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRFeHRlbnNpYmlsaXR5RWxlbWVudCIgYWJzdHJhY3Q9InRydWUiID4KKyAgICA8eHM6YXR0cmlidXRlIHJlZj0id3NkbDpyZXF1aXJlZCIgdXNlPSJvcHRpb25hbCIgLz4KKyAgPC94czpjb21wbGV4VHlwZT4KKworPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1SQ29uZHVpdC5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkNvbmR1aXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTYyZDhlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkNvbmR1aXQuamF2YQpAQCAtMCwwICsxLDczIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1czsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LkFic3RyYWN0Q29uZHVpdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLkVuZHBvaW50UmVmZXJlbmNlVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVI7CisKKworcHVibGljIGNsYXNzIE5NUkNvbmR1aXQgZXh0ZW5kcyBBYnN0cmFjdENvbmR1aXQgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ1V0aWxzLmdldEw3ZExvZ2dlcihOTVJDb25kdWl0LmNsYXNzKTsKKworICAgIHByaXZhdGUgTk1SIG5tcjsKKyAgICBwcml2YXRlIEJ1cyBidXM7CisgICAgICAgICAgIAorICAgIHB1YmxpYyBOTVJDb25kdWl0KEVuZHBvaW50UmVmZXJlbmNlVHlwZSB0YXJnZXQsIE5NUiBubXIpIHsKKyAgICAgICAgdGhpcyhudWxsLCB0YXJnZXQsIG5tcik7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBOTVJDb25kdWl0KEJ1cyBidXMsIEVuZHBvaW50UmVmZXJlbmNlVHlwZSB0YXJnZXQsIE5NUiBubXIpIHsKKyAgICAgICAgc3VwZXIodGFyZ2V0KTsKKyAgICAgICAgdGhpcy5ubXIgPSBubXI7CisgICAgICAgIHRoaXMuYnVzID0gYnVzOworICAgIH0KKworICAgIHB1YmxpYyBCdXMgZ2V0QnVzKCkgeworICAgICAgICByZXR1cm4gYnVzOworICAgIH0KKworICAgIHB1YmxpYyBOTVIgZ2V0Tm1yKCkgeworICAgICAgICByZXR1cm4gbm1yOworICAgIH0KKworICAgIHByb3RlY3RlZCBMb2dnZXIgZ2V0TG9nZ2VyKCkgeworICAgICAgICByZXR1cm4gTE9HOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBwcmVwYXJlKE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZ2V0TG9nZ2VyKCkubG9nKExldmVsLkZJTkUsICJKQklDb25kdWl0IHNlbmQgbWVzc2FnZSIpOworICAgICAgICBOTVJUcmFuc3BvcnRGYWN0b3J5LnJlbW92ZVVudXNlZEludGVyY2VwdHBycyhtZXNzYWdlKTsgICAgCisgICAgICAgIG1lc3NhZ2Uuc2V0Q29udGVudChPdXRwdXRTdHJlYW0uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTk1SQ29uZHVpdE91dHB1dFN0cmVhbShtZXNzYWdlLCBubXIsIHRhcmdldCwgdGhpcykpOworICAgIH0gICAgCisgICAgCisgICAgCisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvdHJhbnNwb3J0L25tci9OTVJDb25kdWl0T3V0cHV0U3RyZWFtLmphdmEgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1SQ29uZHVpdE91dHB1dFN0cmVhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTQ4NzQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1SQ29uZHVpdE91dHB1dFN0cmVhbS5qYXZhCkBAIC0wLDAgKzEsMjE5IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWVtYmVyOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguYWN0aXZhdGlvbi5EYXRhSGFuZGxlcjsKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKK2ltcG9ydCBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Q7CitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1Tb3VyY2U7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5hdHRhY2htZW50LkF0dGFjaG1lbnRJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5sb2dnaW5nLkxvZ1V0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmlvLkNhY2hlZE91dHB1dFN0cmVhbTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLkF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5NZXNzYWdlSW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkJpbmRpbmdPcGVyYXRpb25JbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuRW5kcG9pbnRSZWZlcmVuY2VUeXBlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLndzZGwuRW5kcG9pbnRSZWZlcmVuY2VVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5DaGFubmVsOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkVuZHBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5QYXR0ZXJuOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5TdGF0dXM7CisKK3B1YmxpYyBjbGFzcyBOTVJDb25kdWl0T3V0cHV0U3RyZWFtIGV4dGVuZHMgQ2FjaGVkT3V0cHV0U3RyZWFtIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dVdGlscy5nZXRMN2RMb2dnZXIoTk1SQ29uZHVpdE91dHB1dFN0cmVhbS5jbGFzcyk7CisKKyAgICBwcml2YXRlIE1lc3NhZ2UgbWVzc2FnZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNPbmVXYXk7CisgICAgcHJpdmF0ZSBDaGFubmVsIGNoYW5uZWw7CisgICAgcHJpdmF0ZSBOTVJDb25kdWl0IGNvbmR1aXQ7CisgICAgcHJpdmF0ZSBFbmRwb2ludFJlZmVyZW5jZVR5cGUgdGFyZ2V0OworCisgICAgcHVibGljIE5NUkNvbmR1aXRPdXRwdXRTdHJlYW0oTWVzc2FnZSBtLCBOTVIgbm1yLCBFbmRwb2ludFJlZmVyZW5jZVR5cGUgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5NUkNvbmR1aXQgY29uZHVpdCkgeworICAgICAgICBtZXNzYWdlID0gbTsKKyAgICAgICAgdGhpcy5jaGFubmVsID0gbm1yLmNyZWF0ZUNoYW5uZWwoKTsKKyAgICAgICAgdGhpcy5jb25kdWl0ID0gY29uZHVpdDsKKyAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7CisgICAgICAgIAorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGRvRmx1c2goKSB0aHJvd3MgSU9FeGNlcHRpb24geworCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgZG9DbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlzT25lV2F5ID0gbWVzc2FnZS5nZXRFeGNoYW5nZSgpLmlzT25lV2F5KCk7CisgICAgICAgIGNvbW1pdE91dHB1dE1lc3NhZ2UoKTsKKyAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7CisgICAgICAgICAgICB0YXJnZXQuZ2V0Q2xhc3MoKTsKKyAgICAgICAgfQorICAgICAgICBjaGFubmVsLmNsb3NlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNvbW1pdE91dHB1dE1lc3NhZ2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgTWVtYmVyIG1lbWJlciA9IChNZW1iZXIpIG1lc3NhZ2UuZ2V0KE1ldGhvZC5jbGFzcy5nZXROYW1lKCkpOworICAgICAgICAgICAgQ2xhc3M8Pz4gY2x6ID0gbWVtYmVyLmdldERlY2xhcmluZ0NsYXNzKCk7CisgICAgICAgICAgICBFeGNoYW5nZSBleGNoYW5nZSA9IG1lc3NhZ2UuZ2V0RXhjaGFuZ2UoKTsKKyAgICAgICAgICAgIEJpbmRpbmdPcGVyYXRpb25JbmZvIGJvcCA9IGV4Y2hhbmdlLmdldChCaW5kaW5nT3BlcmF0aW9uSW5mby5jbGFzcyk7CisKKyAgICAgICAgICAgIExPRy5pbmZvKG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKCJJTlZPS0UuU0VSVklDRSIsIExPRykudG9TdHJpbmcoKSArIGNseik7CisKKyAgICAgICAgICAgIFdlYlNlcnZpY2Ugd3MgPSBjbHouZ2V0QW5ub3RhdGlvbihXZWJTZXJ2aWNlLmNsYXNzKTsKKyAgICAgICAgICAgIGFzc2VydCB3cyAhPSBudWxsOworICAgICAgICAgICAgUU5hbWUgaW50ZXJmYWNlTmFtZSA9IG5ldyBRTmFtZSh3cy50YXJnZXROYW1lc3BhY2UoKSwgd3MubmFtZSgpKTsKKyAgICAgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lOworICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2VydmljZU5hbWUgPSBFbmRwb2ludFJlZmVyZW5jZVV0aWxzLmdldFNlcnZpY2VOYW1lKHRhcmdldCwgY29uZHVpdC5nZXRCdXMoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gbWVzc2FnZS5nZXRFeGNoYW5nZSgpLmdldChvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLlNlcnZpY2UuY2xhc3MpLmdldE5hbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAgIExPRy5pbmZvKG5ldyBvcmcuYXBhY2hlLmN4Zi5jb21tb24uaTE4bi5NZXNzYWdlKCJDUkVBVEUuTUVTU0FHRS5FWENIQU5HRSIsIExPRykudG9TdHJpbmcoKSArIHNlcnZpY2VOYW1lKTsKKyAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlIHhjaG5nOworICAgICAgICAgICAgaWYgKGlzT25lV2F5KSB7CisgICAgICAgICAgICAgICAgeGNobmcgPSBjaGFubmVsLmNyZWF0ZUV4Y2hhbmdlKFBhdHRlcm4uSW5Pbmx5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9wLmdldE91dHB1dCgpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB4Y2huZyA9IGNoYW5uZWwuY3JlYXRlRXhjaGFuZ2UoUGF0dGVybi5Sb2J1c3RJbk9ubHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB4Y2huZyA9IGNoYW5uZWwuY3JlYXRlRXhjaGFuZ2UoUGF0dGVybi5Jbk91dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk1lc3NhZ2UgaW5Nc2cgPSB4Y2huZy5nZXRJbigpOworICAgICAgICAgICAgTE9HLmluZm8obmV3IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLk1lc3NhZ2UoIkVYQ0hBTkdFLkVORFBPSU5UIiwgTE9HKS50b1N0cmluZygpICsgc2VydmljZU5hbWUpOworICAgICAgICAgICAgTE9HLmluZm8oInNldHVwIG1lc3NhZ2UgY29udGVudHMgb24gIiArIGluTXNnKTsKKyAgICAgICAgICAgIGluTXNnLnNldEJvZHkoZ2V0TWVzc2FnZUNvbnRlbnQobWVzc2FnZSkpOworICAgICAgICAgICAgLy9jb3B5IGF0dGFjaG1lbnRzCisgICAgICAgICAgICBpZiAobWVzc2FnZSAhPSBudWxsICYmIG1lc3NhZ2UuZ2V0QXR0YWNobWVudHMoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZm9yIChBdHRhY2htZW50IGF0dCA6IG1lc3NhZ2UuZ2V0QXR0YWNobWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICBpbk1zZy5hZGRBdHRhY2htZW50KGF0dC5nZXRJZCgpLCBhdHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGF0YUhhbmRsZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvL2NvcHkgcHJvcGVydGllcworICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBPYmplY3Q+IGVudCA6IG1lc3NhZ2UuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgIC8vY2hlY2sgaWYgdmFsdWUgaXMgU2VyaWFsaXphYmxlLCBhbmQgaWYgdmFsdWUgaXMgTWFwIG9yIGNvbGxlY3Rpb24sCisgICAgICAgICAgICAgICAgLy9qdXN0IGV4Y2x1ZGUgaXQgc2luY2UgdGhlIGVudHJ5IG9mIGl0IG1heSBub3QgYmUgU2VyaWFsaXphYmxlIGFzIHdlbGwKKyAgICAgICAgICAgICAgICBpZiAoZW50LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBTZXJpYWxpemFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICEoZW50LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBNYXApCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKGVudC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgQ29sbGVjdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5Nc2cuc2V0SGVhZGVyKGVudC5nZXRLZXkoKSwgZW50LmdldFZhbHVlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy9jb3B5IHNlY3VyaXR5U3ViamVjdAorICAgICAgICAgICAgaW5Nc2cuc2V0U2VjdXJpdHlTdWJqZWN0KChTdWJqZWN0KSBtZXNzYWdlLmdldChOTVJUcmFuc3BvcnRGYWN0b3J5Lk5NUl9TRUNVUklUWV9TVUJKRUNUKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExPRy5pbmZvKCJzZXJ2aWNlIGZvciBleGNoYW5nZSAiICsgc2VydmljZU5hbWUpOworCisgICAgICAgICAgICBNYXA8U3RyaW5nLE9iamVjdD4gcmVmUHJvcHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PigpOworICAgICAgICAgICAgaWYgKGludGVyZmFjZU5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlZlByb3BzLnB1dChFbmRwb2ludC5JTlRFUkZBQ0VfTkFNRSwgaW50ZXJmYWNlTmFtZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVmUHJvcHMucHV0KEVuZHBvaW50LlNFUlZJQ0VfTkFNRSwgc2VydmljZU5hbWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSZWZlcmVuY2UgcmVmID0gY2hhbm5lbC5nZXROTVIoKS5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkubG9va3VwKHJlZlByb3BzKTsKKyAgICAgICAgICAgIHhjaG5nLnNldFRhcmdldChyZWYpOworICAgICAgICAgICAgeGNobmcuc2V0T3BlcmF0aW9uKGJvcC5nZXROYW1lKCkpOworICAgICAgICAgICAgTE9HLmluZm8oInNlbmRpbmcgbWVzc2FnZSIpOworICAgICAgICAgICAgaWYgKCFpc09uZVdheSkgeworICAgICAgICAgICAgICAgIGNoYW5uZWwuc2VuZFN5bmMoeGNobmcpOworICAgICAgICAgICAgICAgIFNvdXJjZSBjb250ZW50ID0gbnVsbDsKKyAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlIG5tID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoeGNobmcuZ2V0RmF1bHQoZmFsc2UpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHhjaG5nLmdldEZhdWx0KCkuZ2V0Qm9keShTb3VyY2UuY2xhc3MpOworICAgICAgICAgICAgICAgICAgICBubSA9IHhjaG5nLmdldEZhdWx0KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHhjaG5nLmdldE91dCgpLmdldEJvZHkoU291cmNlLmNsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgbm0gPSB4Y2huZy5nZXRPdXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTWVzc2FnZSBpbk1lc3NhZ2UgPSBuZXcgTWVzc2FnZUltcGwoKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLmdldEV4Y2hhbmdlKCkuc2V0SW5NZXNzYWdlKGluTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5zID0gTk1STWVzc2FnZUhlbHBlci5jb252ZXJ0TWVzc2FnZVRvSW5wdXRTdHJlYW0oY29udGVudCk7CisgICAgICAgICAgICAgICAgaWYgKGlucyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbihuZXcgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZSgiVU5BQkxFLlJFVFJJRVZFLk1FU1NBR0UiLCBMT0cpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc2V0Q29udGVudChJbnB1dFN0cmVhbS5jbGFzcywgaW5zKTsKKyAgICAgICAgICAgICAgICAvL2NvcHkgYXR0YWNobWVudHMKKyAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPEF0dGFjaG1lbnQ+IGN4ZkF0dGFjaG1lbnRMaXN0ID0gbmV3IEFycmF5TGlzdDxBdHRhY2htZW50PigpOworICAgICAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgT2JqZWN0PiBlbnQgOiBubS5nZXRBdHRhY2htZW50cygpLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY3hmQXR0YWNobWVudExpc3QuYWRkKG5ldyBBdHRhY2htZW50SW1wbChlbnQuZ2V0S2V5KCksIChEYXRhSGFuZGxlcikgZW50LmdldFZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnNldEF0dGFjaG1lbnRzKGN4ZkF0dGFjaG1lbnRMaXN0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvL2NvcHkgcHJvcGVydGllcworICAgICAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgT2JqZWN0PiBlbnQgOiBubS5nZXRIZWFkZXJzKCkuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWVudC5nZXRLZXkoKS5lcXVhbHMoTWVzc2FnZS5SRVFVRVNUT1JfUk9MRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5wdXQoZW50LmdldEtleSgpLCBlbnQuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy9jb3B5IHNlY3VyaXR5U3ViamVjdAorICAgICAgICAgICAgICAgIGluTWVzc2FnZS5wdXQoTk1SVHJhbnNwb3J0RmFjdG9yeS5OTVJfU0VDVVJJVFlfU1VCSkVDVCwgbm0uZ2V0U2VjdXJpdHlTdWJqZWN0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbmR1aXQuZ2V0TWVzc2FnZU9ic2VydmVyKCkub25NZXNzYWdlKGluTWVzc2FnZSk7CisKKyAgICAgICAgICAgICAgICB4Y2huZy5zZXRTdGF0dXMoU3RhdHVzLkRvbmUpOworICAgICAgICAgICAgICAgIGNoYW5uZWwuc2VuZCh4Y2huZyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNoYW5uZWwuc2VuZFN5bmMoeGNobmcpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIG5ldyBJT0V4Y2VwdGlvbihlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBTb3VyY2UgZ2V0TWVzc2FnZUNvbnRlbnQoTWVzc2FnZSBtZXNzYWdlMikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1Tb3VyY2UodGhpcy5nZXRJbnB1dFN0cmVhbSgpKTsKKyAgICAgICAgCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25Xcml0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvdHJhbnNwb3J0L25tci9OTVJEZXN0aW5hdGlvbi5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkRlc3RpbmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwMWFlMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvdHJhbnNwb3J0L25tci9OTVJEZXN0aW5hdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTk2IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LmFjdGl2YXRpb24uRGF0YUhhbmRsZXI7CitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmF0dGFjaG1lbnQuQXR0YWNobWVudEltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmxvZ2dpbmcuTG9nVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5BdHRhY2htZW50OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2VJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuRW5kcG9pbnRJbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5BYnN0cmFjdENvbmR1aXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LkFic3RyYWN0RGVzdGluYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LkNvbmR1aXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lk1lc3NhZ2VPYnNlcnZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLkVuZHBvaW50UmVmZXJlbmNlVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53c2RsLkVuZHBvaW50UmVmZXJlbmNlVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuQ2hhbm5lbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FbmRwb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVI7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuUGF0dGVybjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5TZXJ2aWNlTWl4RXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlN0YXR1czsKKworcHVibGljIGNsYXNzIE5NUkRlc3RpbmF0aW9uIGV4dGVuZHMgQWJzdHJhY3REZXN0aW5hdGlvbiBpbXBsZW1lbnRzIEVuZHBvaW50IHsKKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nVXRpbHMuZ2V0TDdkTG9nZ2VyKE5NUkRlc3RpbmF0aW9uLmNsYXNzKTsKKyAgICBwcml2YXRlIE5NUiBubXI7CisgICAgcHJpdmF0ZSBDaGFubmVsIGNoYW5uZWw7CisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IHByb3BlcnRpZXM7CisKKyAgICBwdWJsaWMgTk1SRGVzdGluYXRpb24oRW5kcG9pbnRJbmZvIGluZm8sIE5NUiBubXIpIHsKKyAgICAgICAgc3VwZXIoZ2V0VGFyZ2V0UmVmZXJlbmNlKGluZm8sIG51bGwpLCBpbmZvKTsKKyAgICAgICAgdGhpcy5ubXIgPSBubXI7CisgICAgICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpOworICAgICAgICBTdHJpbmcgYWRkcmVzcyA9IGluZm8uZ2V0QWRkcmVzcygpOworICAgICAgICBpZiAoYWRkcmVzcyAhPSBudWxsICYmIGFkZHJlc3Muc3RhcnRzV2l0aCgibm1yOiIpKSB7CisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMucHV0KEVuZHBvaW50Lk5BTUUsIGFkZHJlc3Muc3Vic3RyaW5nKDQsIGluZm8uZ2V0QWRkcmVzcygpLmxlbmd0aCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMucHV0KEVuZHBvaW50Lk5BTUUsIGluZm8uZ2V0TmFtZSgpLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzLnByb3BlcnRpZXMucHV0KEVuZHBvaW50LlNFUlZJQ0VfTkFNRSwgaW5mby5nZXRTZXJ2aWNlKCkuZ2V0TmFtZSgpLnRvU3RyaW5nKCkpOworICAgICAgICB0aGlzLnByb3BlcnRpZXMucHV0KEVuZHBvaW50LklOVEVSRkFDRV9OQU1FLCBpbmZvLmdldEludGVyZmFjZSgpLmdldE5hbWUoKS50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDaGFubmVsKENoYW5uZWwgZGMpIHsKKyAgICAgICAgdGhpcy5jaGFubmVsID0gZGM7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBDaGFubmVsIGdldENoYW5uZWwoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWw7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBMb2dnZXIgZ2V0TG9nZ2VyKCkgeworICAgICAgICByZXR1cm4gTE9HOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gaW5NZXNzYWdlIHRoZSBpbmNvbWluZyBtZXNzYWdlCisgICAgICogQHJldHVybiB0aGUgaW5idWlsdCBiYWNrY2hhbm5lbAorICAgICAqLworICAgIHByb3RlY3RlZCBDb25kdWl0IGdldEluYnVpbHRCYWNrQ2hhbm5lbChNZXNzYWdlIGluTWVzc2FnZSkgeworICAgICAgICByZXR1cm4gbmV3IEJhY2tDaGFubmVsQ29uZHVpdChFbmRwb2ludFJlZmVyZW5jZVV0aWxzLmdldEFub255bW91c0VuZHBvaW50UmVmZXJlbmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNodXRkb3duKCkgeworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGRlYWN0aXZhdGUoKSB7CisgICAgICAgIG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkudW5yZWdpc3Rlcih0aGlzLCBwcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhY3RpdmF0ZSgpICB7CisgICAgICAgIG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkucmVnaXN0ZXIodGhpcywgcHJvcGVydGllcyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcHJvY2VzcyhFeGNoYW5nZSBleGNoYW5nZSkgeworICAgICAgICBpZiAoZXhjaGFuZ2UgPT0gbnVsbCB8fCBleGNoYW5nZS5nZXRTdGF0dXMoKSAhPSBTdGF0dXMuQWN0aXZlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4Y2hhbmdlLmdldFBhdHRlcm4oKSA9PSBQYXR0ZXJuLkluT25seSB8fCBleGNoYW5nZS5nZXRQYXR0ZXJuKCkgPT0gUGF0dGVybi5Sb2J1c3RJbk9ubHkpIHsKKyAgICAgICAgICAgIGV4Y2hhbmdlLnNldFN0YXR1cyhTdGF0dXMuRG9uZSk7CisgICAgICAgICAgICBnZXRDaGFubmVsKCkuc2VuZChleGNoYW5nZSk7CisgICAgICAgIH0KKyAgICAgICAgUU5hbWUgb3BOYW1lID0gZXhjaGFuZ2UuZ2V0T3BlcmF0aW9uKCk7CisgICAgICAgIGdldExvZ2dlcigpLmZpbmUoImRpc3BhdGNoIG1ldGhvZDogIiArIG9wTmFtZSk7CisKKyAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTWVzc2FnZSBubSA9IGV4Y2hhbmdlLmdldEluKCk7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgIE1lc3NhZ2VJbXBsIGluTWVzc2FnZSA9IG5ldyBNZXNzYWdlSW1wbCgpOworICAgICAgICAgICAgaW5NZXNzYWdlLnB1dChFeGNoYW5nZS5jbGFzcywgZXhjaGFuZ2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBpbiA9IE5NUk1lc3NhZ2VIZWxwZXIuY29udmVydE1lc3NhZ2VUb0lucHV0U3RyZWFtKG5tLmdldEJvZHkoU291cmNlLmNsYXNzKSk7CisgICAgICAgICAgICBpbk1lc3NhZ2Uuc2V0Q29udGVudChJbnB1dFN0cmVhbS5jbGFzcywgaW4pOworICAgICAgICAgICAgLy9jb3B5IGF0dGFjaG1lbnRzCisgICAgICAgICAgICBDb2xsZWN0aW9uPEF0dGFjaG1lbnQ+IGN4ZkF0dGFjaG1lbnRMaXN0ID0gbmV3IEFycmF5TGlzdDxBdHRhY2htZW50PigpOworICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBPYmplY3Q+IGVudCA6IG5tLmdldEF0dGFjaG1lbnRzKCkuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgIGN4ZkF0dGFjaG1lbnRMaXN0LmFkZChuZXcgQXR0YWNobWVudEltcGwoZW50LmdldEtleSgpLCAoRGF0YUhhbmRsZXIpIGVudC5nZXRWYWx1ZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbk1lc3NhZ2Uuc2V0QXR0YWNobWVudHMoY3hmQXR0YWNobWVudExpc3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvL2NvcHkgcHJvcGVydGllcworICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBPYmplY3Q+IGVudCA6IG5tLmdldEhlYWRlcnMoKS5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFlbnQuZ2V0S2V5KCkuZXF1YWxzKE1lc3NhZ2UuUkVRVUVTVE9SX1JPTEUpKSB7CisgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5wdXQoZW50LmdldEtleSgpLCBlbnQuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvL2NvcHkgc2VjdXJpdHlTdWJqZWN0CisgICAgICAgICAgICBpbk1lc3NhZ2UucHV0KE5NUlRyYW5zcG9ydEZhY3RvcnkuTk1SX1NFQ1VSSVRZX1NVQkpFQ1QsIG5tLmdldFNlY3VyaXR5U3ViamVjdCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5NZXNzYWdlLnNldERlc3RpbmF0aW9uKHRoaXMpOworICAgICAgICAgICAgZ2V0TWVzc2FnZU9ic2VydmVyKCkub25NZXNzYWdlKGluTWVzc2FnZSk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBnZXRMb2dnZXIoKS5sb2coTGV2ZWwuU0VWRVJFLCBuZXcgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZSgiRVJST1IuUFJFUEFSRS5NRVNTQUdFIiwgZ2V0TG9nZ2VyKCkpLnRvU3RyaW5nKCksIGV4KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlTWl4RXhjZXB0aW9uKGV4KTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgcHJvdGVjdGVkIGNsYXNzIEJhY2tDaGFubmVsQ29uZHVpdCBleHRlbmRzIEFic3RyYWN0Q29uZHVpdCB7CisgICAgICAgIAorICAgICAgICBwcm90ZWN0ZWQgTWVzc2FnZSBpbk1lc3NhZ2U7CisgICAgICAgIHByb3RlY3RlZCBOTVJEZXN0aW5hdGlvbiBubXJEZXN0aW5hdGlvbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgQmFja0NoYW5uZWxDb25kdWl0KEVuZHBvaW50UmVmZXJlbmNlVHlwZSByZWYsIE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgc3VwZXIocmVmKTsKKyAgICAgICAgICAgIGluTWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZWdpc3RlciBhIG1lc3NhZ2Ugb2JzZXJ2ZXIgZm9yIGluY29taW5nIG1lc3NhZ2VzLgorICAgICAgICAgKiAKKyAgICAgICAgICogQHBhcmFtIG9ic2VydmVyIHRoZSBvYnNlcnZlciB0byBub3RpZnkgb24gcmVjZWlwdCBvZiBpbmNvbWluZworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZU9ic2VydmVyKE1lc3NhZ2VPYnNlcnZlciBvYnNlcnZlcikgeworICAgICAgICAgICAgLy8gc2hvdWxkbid0IGJlIGNhbGxlZCBmb3IgYSBiYWNrIGNoYW5uZWwgY29uZHVpdAorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNlbmQgYW4gb3V0Ym91bmQgbWVzc2FnZSwgYXNzdW1lZCB0byBjb250YWluIGFsbCB0aGUgbmFtZS12YWx1ZQorICAgICAgICAgKiBtYXBwaW5ncyBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnB1dCBtZXNzYWdlIChpZiBhbnkpLiAKKyAgICAgICAgICogCisgICAgICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBwcmVwYXJlKE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIC8vIHNldHVwIHRoZSBtZXNzYWdlIHRvIGJlIHNlbmQgYmFjaworICAgICAgICAgICAgQ2hhbm5lbCBkYyA9IGNoYW5uZWw7CisgICAgICAgICAgICBtZXNzYWdlLnB1dChFeGNoYW5nZS5jbGFzcywgaW5NZXNzYWdlLmdldChFeGNoYW5nZS5jbGFzcykpOworICAgICAgICAgICAgTk1SVHJhbnNwb3J0RmFjdG9yeS5yZW1vdmVVbnVzZWRJbnRlcmNlcHRwcnMobWVzc2FnZSk7ICAgIAorICAgICAgICAgICAgbWVzc2FnZS5zZXRDb250ZW50KE91dHB1dFN0cmVhbS5jbGFzcywgbmV3IE5NUkRlc3RpbmF0aW9uT3V0cHV0U3RyZWFtKGluTWVzc2FnZSwgbWVzc2FnZSwgZGMpKTsKKyAgICAgICAgICAgIAorICAgICAgICB9ICAgICAgICAKKworICAgICAgICBwcm90ZWN0ZWQgTG9nZ2VyIGdldExvZ2dlcigpIHsKKyAgICAgICAgICAgIHJldHVybiBMT0c7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkRlc3RpbmF0aW9uT3V0cHV0U3RyZWFtLmphdmEgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1SRGVzdGluYXRpb25PdXRwdXRTdHJlYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjM0ODMyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkRlc3RpbmF0aW9uT3V0cHV0U3RyZWFtLmphdmEKQEAgLTAsMCArMSwxMjggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdDsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7CisKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5sb2dnaW5nLkxvZ1V0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmlvLkNhY2hlZE91dHB1dFN0cmVhbTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLkF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5NZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkNoYW5uZWw7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2U7CisKK3B1YmxpYyBjbGFzcyBOTVJEZXN0aW5hdGlvbk91dHB1dFN0cmVhbSBleHRlbmRzIENhY2hlZE91dHB1dFN0cmVhbSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nVXRpbHMuZ2V0TDdkTG9nZ2VyKE5NUkRlc3RpbmF0aW9uT3V0cHV0U3RyZWFtLmNsYXNzKTsKKyAgICBwcml2YXRlIE1lc3NhZ2UgaW5NZXNzYWdlOworICAgIHByaXZhdGUgTWVzc2FnZSBvdXRNZXNzYWdlOworICAgIHByaXZhdGUgQ2hhbm5lbCBjaGFubmVsOworICAgIAorICAgIHB1YmxpYyBOTVJEZXN0aW5hdGlvbk91dHB1dFN0cmVhbShNZXNzYWdlIG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSBvdXRNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWwgZGMpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgaW5NZXNzYWdlID0gbTsKKyAgICAgICAgb3V0TWVzc2FnZSA9IG91dE07CisgICAgICAgIGNoYW5uZWwgPSBkYzsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgZG9GbHVzaCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIHNvIGZhciBkbyBub3RoaW5nCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgZG9DbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGNvbW1pdE91dHB1dE1lc3NhZ2UoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbldyaXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gc28gZmFyIGRvIG5vdGhpbmcKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tbWl0T3V0cHV0TWVzc2FnZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7IAorICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5nZXRFeGNoYW5nZSgpLmlzT25lV2F5KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGJhaXMgPSBnZXRJbnB1dFN0cmVhbSgpOworICAgICAgICAgICAgICAgIExPRy5maW5lc3QobmV3IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLk1lc3NhZ2UoIkJVSUxESU5HLkRPQ1VNRU5UIiwgTE9HKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRvY0J1aWxkZXJGYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgIGRvY0J1aWxkZXJGYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOworICAgICAgICAgICAgICAgIERvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZG9jQnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7CisgICAgICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZShiYWlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEV4Y2hhbmdlIHhjaG5nID0gaW5NZXNzYWdlLmdldChFeGNoYW5nZS5jbGFzcyk7CisgICAgICAgICAgICAgICAgTE9HLmZpbmUobmV3IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLk1lc3NhZ2UoIkNSRUFURS5OT1JNQUxJWkVELk1FU1NBR0UiLCBMT0cpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZ2V0RXhjaGFuZ2UoKS5nZXRPdXRGYXVsdE1lc3NhZ2UoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkZhdWx0IGYgPSAob3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuRmF1bHQpIGluTWVzc2FnZS5nZXRDb250ZW50KEV4Y2VwdGlvbi5jbGFzcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmLmhhc0RldGFpbHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGNobmcuZ2V0RmF1bHQoKS5zZXRCb2R5KG5ldyBET01Tb3VyY2UoZG9jKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4Y2huZy5zZXRFcnJvcihmKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vY29weSBhdHRhY2htZW50cworICAgICAgICAgICAgICAgICAgICBpZiAob3V0TWVzc2FnZSAhPSBudWxsICYmIG91dE1lc3NhZ2UuZ2V0QXR0YWNobWVudHMoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEF0dGFjaG1lbnQgYXR0IDogb3V0TWVzc2FnZS5nZXRBdHRhY2htZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNobmcuZ2V0T3V0KCkuYWRkQXR0YWNobWVudChhdHQuZ2V0SWQoKSwgYXR0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGF0YUhhbmRsZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vY29weSBwcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgT2JqZWN0PiBlbnQgOiBvdXRNZXNzYWdlLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vY2hlY2sgaWYgdmFsdWUgaXMgU2VyaWFsaXphYmxlLCBhbmQgaWYgdmFsdWUgaXMgTWFwIG9yIGNvbGxlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAvL2p1c3QgZXhjbHVkZSBpdCBzaW5jZSB0aGUgZW50cnkgb2YgaXQgbWF5IG5vdCBiZSBTZXJpYWxpemFibGUgYXMgd2VsbAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgU2VyaWFsaXphYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoZW50LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBNYXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoZW50LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjaG5nLmdldE91dCgpLnNldEhlYWRlcihlbnQuZ2V0S2V5KCksIGVudC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vY29weSBzZWN1cml0eVN1YmplY3QKKyAgICAgICAgICAgICAgICAgICAgeGNobmcuZ2V0T3V0KCkuc2V0U2VjdXJpdHlTdWJqZWN0KChTdWJqZWN0KSBvdXRNZXNzYWdlLmdldChOTVJUcmFuc3BvcnRGYWN0b3J5Lk5NUl9TRUNVUklUWV9TVUJKRUNUKSk7CisgICAgICAgICAgICAgICAgICAgIHhjaG5nLmdldE91dCgpLnNldEJvZHkobmV3IERPTVNvdXJjZShkb2MpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTE9HLmZpbmUobmV3IG9yZy5hcGFjaGUuY3hmLmNvbW1vbi5pMThuLk1lc3NhZ2UoIlBPU1QuRElTUEFUQ0giLCBMT0cpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGNoYW5uZWwuc2VuZCh4Y2huZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeyAKKyAgICAgICAgICAgIExPRy5sb2coTGV2ZWwuU0VWRVJFLCBuZXcgb3JnLmFwYWNoZS5jeGYuY29tbW9uLmkxOG4uTWVzc2FnZSgiRVJST1IuU0VORC5NRVNTQUdFIiwgTE9HKS50b1N0cmluZygpLCBleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1STWVzc2FnZUhlbHBlci5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUk1lc3NhZ2VIZWxwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzZlYmUxCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUk1lc3NhZ2VIZWxwZXIuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmlvLkNhY2hlZE91dHB1dFN0cmVhbTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zdGF4dXRpbHMuU3RheFV0aWxzOworCisKKworcHVibGljIGZpbmFsIGNsYXNzIE5NUk1lc3NhZ2VIZWxwZXIgeworCisKKyAgICBwcml2YXRlIE5NUk1lc3NhZ2VIZWxwZXIoKSB7CisgICAgICAgIC8vIGNvbXBsZXRlCisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBJbnB1dFN0cmVhbSBjb252ZXJ0TWVzc2FnZVRvSW5wdXRTdHJlYW0oU291cmNlIHNyYykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgQ2FjaGVkT3V0cHV0U3RyZWFtIGNvcyA9IG5ldyBDYWNoZWRPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0YXhVdGlscy5jb3B5KHNyYywgY29zKTsKKyAgICAgICAgICAgIHJldHVybiBjb3MuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgfSBjYXRjaCAoWE1MU3RyZWFtRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIElPRXhjZXB0aW9uIGlvZSA9IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICBpb2UuaW5pdENhdXNlKGUpOworICAgICAgICAgICAgdGhyb3cgaW9lOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb3MuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIC8vaWdub3JlCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1SVHJhbnNwb3J0RmFjdG9yeS5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUlRyYW5zcG9ydEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTE5OTUzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUlRyYW5zcG9ydEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE2MyBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKK2ltcG9ydCBqYXZheC5hbm5vdGF0aW9uLlJlc291cmNlOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5JbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuc2VydmljZS5tb2RlbC5FbmRwb2ludEluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LkFic3RyYWN0VHJhbnNwb3J0RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQuQ29uZHVpdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQuQ29uZHVpdEluaXRpYXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQuQ29uZHVpdEluaXRpYXRvck1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LkRlc3RpbmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5EZXN0aW5hdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0LkRlc3RpbmF0aW9uRmFjdG9yeU1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5FbmRwb2ludFJlZmVyZW5jZVR5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTk1SOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlNlcnZpY2VNaXhFeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBOTVJUcmFuc3BvcnRGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RUcmFuc3BvcnRGYWN0b3J5IGltcGxlbWVudHMgQ29uZHVpdEluaXRpYXRvciwKKyAgICBEZXN0aW5hdGlvbkZhY3RvcnkgeworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TUE9SVF9JRCA9ICJodHRwOi8vY3hmLnNlcnZpY2VtaXguYXBhY2hlLm9yZy90cmFuc3BvcnQvbm1yIjsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBOTVJfU0VDVVJJVFlfU1VCSkVDVCA9ICJOTVJfU0VDVVJJVFlfU1VCSkVDVCI7CisgICAgCisgICAgcHJpdmF0ZSBOTVIgbm1yOworICAgIHByaXZhdGUgQnVzIGJ1czsKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE5NUkRlc3RpbmF0aW9uPiBkZXN0aW5hdGlvbk1hcCA9ICBuZXcgSGFzaE1hcDxTdHJpbmcsIE5NUkRlc3RpbmF0aW9uPigpOworCisgICAgcHJpdmF0ZSBDb2xsZWN0aW9uPFN0cmluZz4gYWN0aXZhdGlvbk5hbWVzcGFjZXM7CisKKyAgICBAUmVzb3VyY2UKKyAgICBwdWJsaWMgdm9pZCBzZXRCdXMoQnVzIGIpIHsKKyAgICAgICAgYnVzID0gYjsKKyAgICB9CisgICAgCisgICAgcHVibGljIEJ1cyBnZXRCdXMoKSB7CisgICAgICAgIHJldHVybiBidXM7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRVcmlQcmVmaXhlcygpIHsKKyAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnNpbmdsZXRvbigibm1yIik7CisgICAgfQorCisgICAgQFJlc291cmNlCisgICAgcHVibGljIHZvaWQgc2V0QWN0aXZhdGlvbk5hbWVzcGFjZXMoQ29sbGVjdGlvbjxTdHJpbmc+IGFucykgeworICAgICAgICBhY3RpdmF0aW9uTmFtZXNwYWNlcyA9IGFuczsKKyAgICB9CisKKyAgICBwdWJsaWMgTk1SIGdldE5tcigpIHsKKyAgICAgICAgcmV0dXJuIG5tcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRObXIoTk1SIG5tcikgeworICAgICAgICB0aGlzLm5tciA9IG5tcjsKKyAgICB9CisKKyAgICBAUG9zdENvbnN0cnVjdAorICAgIHZvaWQgcmVnaXN0ZXJXaXRoQmluZGluZ01hbmFnZXIoKSB7CisgICAgICAgIGlmIChudWxsID09IGJ1cykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENvbmR1aXRJbml0aWF0b3JNYW5hZ2VyIGNpbSA9IGJ1cy5nZXRFeHRlbnNpb24oQ29uZHVpdEluaXRpYXRvck1hbmFnZXIuY2xhc3MpOworICAgICAgICBpZiAobnVsbCAhPSBjaW0gJiYgbnVsbCAhPSBhY3RpdmF0aW9uTmFtZXNwYWNlcykgeworICAgICAgICAgICAgZm9yIChTdHJpbmcgbnMgOiBhY3RpdmF0aW9uTmFtZXNwYWNlcykgeworICAgICAgICAgICAgICAgIGNpbS5yZWdpc3RlckNvbmR1aXRJbml0aWF0b3IobnMsIHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIERlc3RpbmF0aW9uRmFjdG9yeU1hbmFnZXIgZGZtID0gYnVzLmdldEV4dGVuc2lvbihEZXN0aW5hdGlvbkZhY3RvcnlNYW5hZ2VyLmNsYXNzKTsKKyAgICAgICAgaWYgKG51bGwgIT0gZGZtICYmIG51bGwgIT0gYWN0aXZhdGlvbk5hbWVzcGFjZXMpIHsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIG5zIDogYWN0aXZhdGlvbk5hbWVzcGFjZXMpIHsKKyAgICAgICAgICAgICAgICBkZm0ucmVnaXN0ZXJEZXN0aW5hdGlvbkZhY3RvcnkobnMsIHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgCisKKyAgICAKKyAgICBwdWJsaWMgQ29uZHVpdCBnZXRDb25kdWl0KEVuZHBvaW50SW5mbyB0YXJnZXRJbmZvKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICByZXR1cm4gZ2V0Q29uZHVpdCh0YXJnZXRJbmZvLCBudWxsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29uZHVpdCBnZXRDb25kdWl0KEVuZHBvaW50SW5mbyBlbmRwb2ludEluZm8sIEVuZHBvaW50UmVmZXJlbmNlVHlwZSB0YXJnZXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIENvbmR1aXQgY29uZHVpdCA9IG5ldyBOTVJDb25kdWl0KHRhcmdldCwgbm1yKTsKKyAgICAgICAgQ29uZmlndXJlciBjb25maWd1cmVyID0gYnVzLmdldEV4dGVuc2lvbihDb25maWd1cmVyLmNsYXNzKTsKKyAgICAgICAgaWYgKG51bGwgIT0gY29uZmlndXJlcikgeworICAgICAgICAgICAgY29uZmlndXJlci5jb25maWd1cmVCZWFuKGNvbmR1aXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb25kdWl0OworICAgIH0KKworICAgIHB1YmxpYyBEZXN0aW5hdGlvbiBnZXREZXN0aW5hdGlvbihFbmRwb2ludEluZm8gZWkpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIE5NUkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gbmV3IE5NUkRlc3RpbmF0aW9uKGVpLCBubXIpOworICAgICAgICBDb25maWd1cmVyIGNvbmZpZ3VyZXIgPSBidXMuZ2V0RXh0ZW5zaW9uKENvbmZpZ3VyZXIuY2xhc3MpOworICAgICAgICBpZiAobnVsbCAhPSBjb25maWd1cmVyKSB7CisgICAgICAgICAgICBjb25maWd1cmVyLmNvbmZpZ3VyZUJlYW4oZGVzdGluYXRpb24pOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwdXREZXN0aW5hdGlvbihlaS5nZXRTZXJ2aWNlKCkuZ2V0TmFtZSgpLnRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICArIGVpLmdldEludGVyZmFjZSgpLmdldE5hbWUoKS50b1N0cmluZygpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIH0gY2F0Y2ggKFNlcnZpY2VNaXhFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGVzdGluYXRpb247CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHB1dERlc3RpbmF0aW9uKFN0cmluZyBlcE5hbWUsIE5NUkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKSB0aHJvd3MgU2VydmljZU1peEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChkZXN0aW5hdGlvbk1hcC5jb250YWluc0tleShlcE5hbWUpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZU1peEV4Y2VwdGlvbigiSkJJRGVzdGluYXRpb24gZm9yIEVuZHBvaW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBlcE5hbWUgKyAiIGFscmVhZHkgYmUgY3JlYXRlZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdGluYXRpb25NYXAucHV0KGVwTmFtZSwgZGVzdGluYXRpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIE5NUkRlc3RpbmF0aW9uIGdldERlc3RpbmF0aW9uKFN0cmluZyBlcE5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uTWFwLmdldChlcE5hbWUpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVEZXN0aW5hdGlvbihTdHJpbmcgZXBOYW1lKSB7CisgICAgICAgIGRlc3RpbmF0aW9uTWFwLnJlbW92ZShlcE5hbWUpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3ZlVW51c2VkSW50ZXJjZXB0cHJzKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICBpZiAobWVzc2FnZS5nZXRJbnRlcmNlcHRvckNoYWluKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChJbnRlcmNlcHRvciBpbnRlcmNlcHRvciA6IG1lc3NhZ2UuZ2V0SW50ZXJjZXB0b3JDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGludGVyY2VwdG9yLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5BdHRhY2htZW50T3V0SW50ZXJjZXB0b3IiKSkgeworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldEludGVyY2VwdG9yQ2hhaW4oKS5yZW1vdmUoaW50ZXJjZXB0b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKK30KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvdHJhbnNwb3J0L25tci93c2RsMTEvTk1SVHJhbnNwb3J0UGx1Z2luLmphdmEgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvd3NkbDExL05NUlRyYW5zcG9ydFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOTcyNDYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvd3NkbDExL05NUlRyYW5zcG9ydFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tci53c2RsMTE7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgamF2YXgud3NkbC5Qb3J0OworaW1wb3J0IGphdmF4LndzZGwuV1NETEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuRXh0ZW5zaWJpbGl0eUVsZW1lbnQ7CitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tci5BZGRyZXNzVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi53c2RsLkFic3RyYWN0V1NETFBsdWdpbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXIuTk1SVHJhbnNwb3J0RmFjdG9yeTsKKworcHVibGljIGNsYXNzIE5NUlRyYW5zcG9ydFBsdWdpbiBleHRlbmRzIEFic3RyYWN0V1NETFBsdWdpbiB7CisgICAgCisgICAgCisKKyAgICBwdWJsaWMgRXh0ZW5zaWJpbGl0eUVsZW1lbnQgY3JlYXRlRXh0ZW5zaW9uKE1hcDxTdHJpbmcsIE9iamVjdD4gYXJncykgdGhyb3dzIFdTRExFeGNlcHRpb24geworICAgICAgICBBZGRyZXNzVHlwZSBqYmlBZGRyZXNzID0gbnVsbDsKKyAgICAgICAgamJpQWRkcmVzcyA9IChBZGRyZXNzVHlwZSlyZWdpc3RyeS5jcmVhdGVFeHRlbnNpb24oUG9ydC5jbGFzcywgCisgICAgICAgICAgICAgICAgbmV3IFFOYW1lKE5NUlRyYW5zcG9ydEZhY3RvcnkuVFJBTlNQT1JUX0lELCAiYWRkcmVzcyIpKTsKKyAgICAgICAgcmV0dXJuIGpiaUFkZHJlc3M7CisgICAgfQorCit9CisKZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvY3hmL3RyYW5zcG9ydC9ubXIvY3hmLXRyYW5zcG9ydC1ubXIueG1sIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9jeGYvdHJhbnNwb3J0L25tci9jeGYtdHJhbnNwb3J0LW5tci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiNTNjMAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvY3hmL3RyYW5zcG9ydC9ubXIvY3hmLXRyYW5zcG9ydC1ubXIueG1sCkBAIC0wLDAgKzEsNDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS9zcHJpbmctb3NnaS54c2QiPgorCisgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tci5OTVJUcmFuc3BvcnRGYWN0b3J5IgorICAgICAgICAgIGlkPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXIuTk1SVHJhbnNwb3J0RmFjdG9yeSIKKyAgICAgICAgICBsYXp5LWluaXQ9InRydWUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVzIiByZWY9ImN4ZiIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibm1yIj4KKyAgICAgICAgICAgIDxvc2dpOnJlZmVyZW5jZSBpbnRlcmZhY2U9Im9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUiIvPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idHJhbnNwb3J0SWRzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDx2YWx1ZT5odHRwOi8vY3hmLnNlcnZpY2VtaXguYXBhY2hlLm9yZy90cmFuc3BvcnQvbm1yPC92YWx1ZT4KKyAgICAgICAgICAgICAgICA8dmFsdWU+aHR0cDovL2N4Zi5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvdHJhbnNwb3J0L25tci9jb25maWd1cmF0aW9uPC92YWx1ZT4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L2JlYW4+CisKKzwvYmVhbnM+CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvdHJhbnNwb3J0L25tci9NZXNzYWdlcy5wcm9wZXJ0aWVzIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTc2YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDQ2IEBACisjCisjICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgICAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyAgICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgICAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgICAgdW5kZXIgdGhlIExpY2Vuc2UuCisjCitOT1QuSU1QTEVNRU5URUQ9bm90IHlldCBpbXBsZW1lbnRlZAorSU5WT0tFLlNFUlZJQ0U9aW52b2tpbmcgc2VydmljZVx0CitDUkVBVEUuTUVTU0FHRS5FWENIQU5HRT1jcmVhdGUgbWVzc2FnZSBleGNoYW5nZSBzdmM6XHQKK0VYQ0hBTkdFLkVORFBPSU5UPWV4Y2hhbmdlIGVuZHBvaW50Olx0CitOTy5NRVNTQUdFPW5vIG1lc3NhZ2UgeWV0CitVTkFCTEUuUkVUUklFVkUuTUVTU0FHRT11bmFibGUgdG8gcmV0cmlldmUgbWVzc2FnZQorQ09OVEVYVC5NVVNULkJFPWNvbnRleHQgbXVzdCBiZSBvZiB0eXBlIEpCSU91dHB1dFN0cmVhbU1lc3NhZ2VDb250ZXh0CitSRUNFSVZFRC5NRVNTQUdFPXJlY2VpdmVkIG1lc3NhZ2U6XHQKK0FDVElWRS5KQkkuU0VSVkVSLlRSQU5TUE9SVD1hY3RpdmF0aW5nIEpCSSBzZXJ2ZXIgdHJhbnNwb3J0CitCVUlMRElORy5ET0NVTUVOVD1idWlsZGluZyBkb2N1bWVudCBmcm9tIGJ5dGVzCitDUkVBVEUuTk9STUFMSVpFRC5NRVNTQUdFPWNyZWF0aW5nIE5vcm1hbGl6ZWRNZXNzYWdlCitQT1NULkRJU1BBVENIPXBvc3REaXNwYXRjaCBzZW5kaW5nIG91dCBtZXNzYWdlIHRvIE5XUgorRVJST1IuU0VORC5NRVNTQUdFPWVycm9yIHNlbmRpbmcgT3V0IG1lc3NhZ2UKK0RJU1BBVENILk1FU1NBR0UuT04uQ0FMTEJBQ0s9ZGlzcGF0Y2hpbmcgbWVzc2FnZSBvbiBjYWxsYmFjazpcdAorRVJST1IuUFJFUEFSRS5NRVNTQUdFPWVycm9yIHByZXBhcmluZyBtZXNzYWdlCitSRUNFSVZFLlRIUkVBRC5TVEFSVD1KQklTZXJ2ZXJUcmFuc3BvcnQgbWVzc2FnZSByZWNlaXZpbmcgdGhyZWFkIHN0YXJ0ZWQKK0RJU1BBVENILlRPLlNVPWRpc3BhdGNoaW5nIHRvIENYRiBzZXJ2aWNlIHVuaXQKK05PLlNVLkZPVU5EPW5vIENYRlNlcnZpY2VVbml0IGZvdW5kCitFUlJPUi5ESVNQQVRDSC5USFJFQUQ9ZXJyb3IgcnVubmluZyBkaXNwYXRjaCB0aHJlYWQKK0pCSS5TRVJWRVIuVFJBTlNQT1JULk1FU1NBR0UuUFJPQ0VTUy5USFJFQUQuRVhJVD1KQklTZXJ2ZXJUcmFuc3BvcnQgbWVzc2FnZSBwcm9jZXNzaW5nIHRocmVhZCBleGl0aW5nCitDT05GSUcuREVMSVZFUlkuQ0hBTk5FTD1jb25maWd1cmluZyBEZWxpdmVyeUNoYW5uZWw6XHQKK0NPTkZJRy5TVS5NQU5BR0VSPWNvbmZpZ3VyaW5nIFNlcnZpY2VVbml0TWFuYWdlcjpcdAorSkJJLlRSQU5TUE9SVC5GQUNUT1JZLk5PVC5JTklUSUFMSVpFRD1KQklUcmFuc3BvcnRGYWN0b3J5IGlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZAorU1UuTUFOQUdFUj1DWEZTZXJ2aWNlVW5pdE1hbmFnZXI6XHQKK0RFTElWRVJZLkNIQU5ORUw9RGVsaXZlcnlDaGFubmVsOlx0CitKQkkuVFJBTlNQT1JULkZBQ1RPUlkuTk9ULkZVTExZLklOSVRJQUxJWkVEPUpCSVRyYW5zcG9ydCBmYWN0b3J5IG5vdCBmdWxseSBpbml0aWFsaXplZAorQ1JFQVRFLlNFUlZFUi5UUkFOU1BPUlQ9Y3JlYXRpbmcgSkJJIHNlcnZlciB0cmFuc3BvcnQKK0NSRUFURS5DTElFTlQuVFJBTlNQT1JUPWNyZWF0aW5nIEpCSSBjbGllbnQgdHJhbnNwb3J0CmRpZmYgLS1naXQgYS90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vcmVzb3VyY2VzL3NjaGVtYXMvd3NkbC9ubXIueGpiIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9zY2hlbWFzL3dzZGwvbm1yLnhqYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZlYWEzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9zY2hlbWFzL3dzZGwvbm1yLnhqYgpAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGpheGI6YmluZGluZ3MgdmVyc2lvbj0iMS4wIiAKKyAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIgCisgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCisgIHhtbG5zOnhqYz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4Yi94amMiIAorICBqYXhiOmV4dGVuc2lvbkJpbmRpbmdQcmVmaXhlcz0ieGpjIj4KKyAgICA8amF4YjpiaW5kaW5ncyBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8yMDAzLTAyLTExLnhzZCIgbm9kZT0iL3hzOnNjaGVtYSI+CisgICAgICAgIDxqYXhiOnNjaGVtYUJpbmRpbmdzPgorICAgICAgICAgICAgPGpheGI6cGFja2FnZSBuYW1lPSJvcmcuYXBhY2hlLmN4Zi53c2RsIi8+CisgICAgICAgIDwvamF4YjpzY2hlbWFCaW5kaW5ncz4KKyAgICAgICAgPGpheGI6Z2xvYmFsQmluZGluZ3MgZ2VuZXJhdGVJc1NldE1ldGhvZD0idHJ1ZSIvPgorICAgIDwvamF4YjpiaW5kaW5ncz4KKyAgICA8amF4YjpiaW5kaW5ncyBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8yMDAzLTAyLTExLnhzZCIgbm9kZT0iL3hzOnNjaGVtYS94czpjb21wbGV4VHlwZVtAbmFtZT0ndEV4dGVuc2liaWxpdHlFbGVtZW50J10iPgorICAgICAgICA8amF4YjpjbGFzcyBpbXBsQ2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzZGwuVEV4dGVuc2liaWxpdHlFbGVtZW50SW1wbCIvPgorICAgIDwvamF4YjpiaW5kaW5ncz4KKzwvamF4YjpiaW5kaW5ncz4KZGlmZiAtLWdpdCBhL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NoZW1hcy93c2RsL25tci54c2QgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vcmVzb3VyY2VzL3NjaGVtYXMvd3NkbC9ubXIueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMDAxNDIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vcmVzb3VyY2VzL3NjaGVtYXMvd3NkbC9ubXIueHNkCkBAIC0wLDAgKzEsNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICB4bWxuczpubXI9Imh0dHA6Ly9jeGYuc2VydmljZW1peC5hcGFjaGUub3JnL3RyYW5zcG9ydC9ubXIiCisgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9jeGYuc2VydmljZW1peC5hcGFjaGUub3JnL3RyYW5zcG9ydC9ubXIiCisgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgorICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIiBqYXhiOnZlcnNpb249IjIuMCI+CisgIAorICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8yMDAzLTAyLTExLnhzZCIgLz4KKyAgCisgIAorICA8eHM6ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiB0eXBlPSJubXI6QWRkcmVzc1R5cGUiLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3NUeXBlIj4KKyAgICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgorICAgICAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ3c2RsOnRFeHRlbnNpYmlsaXR5RWxlbWVudCI+CisgICAgICAgICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ieHM6c3RyaW5nIj4KKyAgICAgICAgICAgICAgICAgICAgPHhzOmFubm90YXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgbm1yIGR1bW15IGxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorICAKKzwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL0Fic3RyYWN0SkJJVGVzdC5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL0Fic3RyYWN0SkJJVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MGY4NDUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvQWJzdHJhY3RKQklUZXN0LmphdmEKQEAgLTAsMCArMSwxMTkgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tcjsKKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKKworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5CdXM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuRXhjaGFuZ2VJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkJpbmRpbmdPcGVyYXRpb25JbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5Db25kdWl0OworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5NZXNzYWdlT2JzZXJ2ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5FbmRwb2ludFJlZmVyZW5jZVR5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTk1SOworaW1wb3J0IG9yZy5lYXN5bW9jay5jbGFzc2V4dGVuc2lvbi5FYXN5TW9jazsKK2ltcG9ydCBvcmcuZWFzeW1vY2suY2xhc3NleHRlbnNpb24uSU1vY2tzQ29udHJvbDsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKKworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RKQklUZXN0IGV4dGVuZHMgQXNzZXJ0IHsKKyAgICAgICAKKyAgICBwcm90ZWN0ZWQgQnVzIGJ1czsKKyAgICBwcm90ZWN0ZWQgRW5kcG9pbnRSZWZlcmVuY2VUeXBlIHRhcmdldDsKKyAgICBwcm90ZWN0ZWQgTWVzc2FnZU9ic2VydmVyIG9ic2VydmVyOworICAgIHByb3RlY3RlZCBNZXNzYWdlIGluTWVzc2FnZTsKKyAgICBwcm90ZWN0ZWQgSU1vY2tzQ29udHJvbCBjb250cm9sOworICAgIHByb3RlY3RlZCBOTVIgbm1yOworICAgIHByb3RlY3RlZCBOTVJUcmFuc3BvcnRGYWN0b3J5IG5tclRyYW5zcG9ydEZhY3Rvcnk7CisgICAgCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgeworICAgICAgICBCdXNGYWN0b3J5IGJmID0gQnVzRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICBidXMgPSBiZi5jcmVhdGVCdXMoKTsKKyAgICAgICAgQnVzRmFjdG9yeS5zZXREZWZhdWx0QnVzKGJ1cyk7CisgICAgICAgIG5tclRyYW5zcG9ydEZhY3RvcnkgPSBuZXcgTk1SVHJhbnNwb3J0RmFjdG9yeSgpOworICAgICAgICBubXJUcmFuc3BvcnRGYWN0b3J5LnNldEJ1cyhidXMpOworICAgICAgICBubXJUcmFuc3BvcnRGYWN0b3J5LnJlZ2lzdGVyV2l0aEJpbmRpbmdNYW5hZ2VyKCk7CisgICAgICAgIGNvbnRyb2wgPSBFYXN5TW9jay5jcmVhdGVOaWNlQ29udHJvbCgpOworICAgIH0KKyAgICAKKyAgICBAQWZ0ZXIKKyAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKKyAgICAgICAgYnVzLnNodXRkb3duKHRydWUpOworICAgICAgICBpZiAoU3lzdGVtLmdldFByb3BlcnR5KCJjeGYuY29uZmlnLmZpbGUiKSAhPSBudWxsKSB7CisgICAgICAgICAgICBTeXN0ZW0uY2xlYXJQcm9wZXJ0eSgiY3hmLmNvbmZpZy5maWxlIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBOTVJDb25kdWl0IHNldHVwSkJJQ29uZHVpdChib29sZWFuIHNlbmQsIGJvb2xlYW4gZGVjb3VwbGVkKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoZGVjb3VwbGVkKSB7CisgICAgICAgICAgICAvLyBzZXR1cCB0aGUgcmVmZXJlbmNlIHR5cGUKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRhcmdldCA9IGNvbnRyb2wuY3JlYXRlTW9jayhFbmRwb2ludFJlZmVyZW5jZVR5cGUuY2xhc3MpOworICAgICAgICB9ICAgIAorICAgICAgICBubXIgPSBjb250cm9sLmNyZWF0ZU1vY2soTk1SLmNsYXNzKTsKKyAgICAgICAgbm1yVHJhbnNwb3J0RmFjdG9yeS5zZXRObXIobm1yKTsKKyAgICAgICAgLy9OTVJDb25kdWl0IGpiaUNvbmR1aXQgPSBuZXcgTk1SQ29uZHVpdChidXMsIHRhcmdldCwgbm1yKTsKKyAgICAgICAgTk1SQ29uZHVpdCBqYmlDb25kdWl0ID0gKE5NUkNvbmR1aXQpIG5tclRyYW5zcG9ydEZhY3RvcnkuZ2V0Q29uZHVpdChudWxsLCB0YXJnZXQpOworICAgICAgICAKKyAgICAgICAgaWYgKHNlbmQpIHsKKyAgICAgICAgICAgIC8vIHNldE1lc3NhZ2VPYnNlcnZlcgorICAgICAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgTWVzc2FnZU9ic2VydmVyKCkgeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG0pIHsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2UgPSBtOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBqYmlDb25kdWl0LnNldE1lc3NhZ2VPYnNlcnZlcihvYnNlcnZlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBqYmlDb25kdWl0OyAgICAgICAgCisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCB2b2lkIHNlbmRvdXRNZXNzYWdlKENvbmR1aXQgY29uZHVpdCwgTWVzc2FnZSBtZXNzYWdlLCBCb29sZWFuIGlzT25lV2F5KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAKKyAgICAgICAgRXhjaGFuZ2UgZXhjaGFuZ2UgPSBuZXcgRXhjaGFuZ2VJbXBsKCk7CisgICAgICAgIGV4Y2hhbmdlLnNldE9uZVdheShpc09uZVdheSk7CisgICAgICAgIG1lc3NhZ2Uuc2V0RXhjaGFuZ2UoZXhjaGFuZ2UpOworICAgICAgICBleGNoYW5nZS5zZXRJbk1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIEJpbmRpbmdPcGVyYXRpb25JbmZvIGJvaSA9IGNvbnRyb2wuY3JlYXRlTW9jayhCaW5kaW5nT3BlcmF0aW9uSW5mby5jbGFzcyk7CisgICAgICAgIGV4Y2hhbmdlLnB1dChCaW5kaW5nT3BlcmF0aW9uSW5mby5jbGFzcywgYm9pKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbmR1aXQucHJlcGFyZShtZXNzYWdlKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGFzc2VydEZhbHNlKCJOTVJDb25kdWl0IGNhbid0IHBlcnBhcmUgdG8gc2VuZCBvdXQgbWVzc2FnZSIsIGZhbHNlKTsKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgICAgICAgICAgIAorICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG1lc3NhZ2UuZ2V0Q29udGVudChPdXRwdXRTdHJlYW0uY2xhc3MpOworICAgICAgICBhc3NlcnRUcnVlKCJUaGUgT3V0cHV0U3RyZWFtIHNob3VsZCBub3QgYmUgbnVsbCAiLCBvcyAhPSBudWxsKTsKKyAgICAgICAgb3Mud3JpdGUoIkhlbGxvV29ybGQiLmdldEJ5dGVzKCkpOworICAgICAgICBvcy5jbG9zZSgpOyAgICAgICAgICAgIAorICAgIH0KKyAgICAKKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL0dyZWV0ZXIuamF2YSBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvdHJhbnNwb3J0L25tci9HcmVldGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2YzE1ZQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2N4Zi9jeGYtdHJhbnNwb3J0LW5tci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9jeGYvdHJhbnNwb3J0L25tci9HcmVldGVyLmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yOworCitpbXBvcnQgamF2YXguandzLk9uZXdheTsKK2ltcG9ydCBqYXZheC5qd3MuV2ViTWV0aG9kOworaW1wb3J0IGphdmF4Lmp3cy5XZWJQYXJhbTsKK2ltcG9ydCBqYXZheC5qd3MuV2ViUmVzdWx0OworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworaW1wb3J0IGphdmF4LnhtbC53cy5SZXF1ZXN0V3JhcHBlcjsKK2ltcG9ydCBqYXZheC54bWwud3MuUmVzcG9uc2VXcmFwcGVyOworCitAV2ViU2VydmljZSh0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIiwgbmFtZSA9ICJHcmVldGVyIikKKworcHVibGljIGludGVyZmFjZSBHcmVldGVyIHsKKworICAgIEBSZXNwb25zZVdyYXBwZXIobG9jYWxOYW1lID0gInRlc3REb2NMaXRGYXVsdFJlc3BvbnNlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIsIGNsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC50eXBlcy5UZXN0RG9jTGl0RmF1bHRSZXNwb25zZSIpCisgICAgQFJlcXVlc3RXcmFwcGVyKGxvY2FsTmFtZSA9ICJ0ZXN0RG9jTGl0RmF1bHQiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLlRlc3REb2NMaXRGYXVsdCIpCisgICAgQFdlYk1ldGhvZAorICAgIHB1YmxpYyB2b2lkIHRlc3REb2NMaXRGYXVsdCgKKyAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAiZmF1bHRUeXBlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIpCisgICAgICAgIGphdmEubGFuZy5TdHJpbmcgZmF1bHRUeXBlCisgICAgKTsKKworICAgIEBSZXNwb25zZVdyYXBwZXIobG9jYWxOYW1lID0gInNheUhpUmVzcG9uc2UiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLlNheUhpUmVzcG9uc2UiKQorICAgIEBSZXF1ZXN0V3JhcHBlcihsb2NhbE5hbWUgPSAic2F5SGkiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLlNheUhpIikKKyAgICBAV2ViUmVzdWx0KG5hbWUgPSAicmVzcG9uc2VUeXBlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIpCisgICAgQFdlYk1ldGhvZAorICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHNheUhpKCk7CisKKyAgICBAUmVzcG9uc2VXcmFwcGVyKGxvY2FsTmFtZSA9ICJ0ZXN0TmlsbGFibGVSZXNwb25zZSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiLCBjbGFzc05hbWUgPSAib3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMuVGVzdE5pbGxhYmxlUmVzcG9uc2UiKQorICAgIEBSZXF1ZXN0V3JhcHBlcihsb2NhbE5hbWUgPSAidGVzdE5pbGxhYmxlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIsIGNsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC50eXBlcy5UZXN0TmlsbGFibGUiKQorICAgIEBXZWJSZXN1bHQobmFtZSA9ICJyZXNwb25zZVR5cGUiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIikKKyAgICBAV2ViTWV0aG9kCisgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgdGVzdE5pbGxhYmxlKAorICAgICAgICBAV2ViUGFyYW0obmFtZSA9ICJOaWxsRWxlbSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiKQorICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIG5pbGxFbGVtLAorICAgICAgICBAV2ViUGFyYW0obmFtZSA9ICJpbnRFbGVtIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIpCisgICAgICAgIGludCBpbnRFbGVtCisgICAgKTsKKworICAgIEBSZXNwb25zZVdyYXBwZXIobG9jYWxOYW1lID0gImdyZWV0TWVMYXRlclJlc3BvbnNlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIsIGNsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC50eXBlcy5HcmVldE1lTGF0ZXJSZXNwb25zZSIpCisgICAgQFJlcXVlc3RXcmFwcGVyKGxvY2FsTmFtZSA9ICJncmVldE1lTGF0ZXIiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLkdyZWV0TWVMYXRlciIpCisgICAgQFdlYlJlc3VsdChuYW1lID0gInJlc3BvbnNlVHlwZSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiKQorICAgIEBXZWJNZXRob2QKKyAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBncmVldE1lTGF0ZXIoCisgICAgICAgIEBXZWJQYXJhbShuYW1lID0gInJlcXVlc3RUeXBlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIpCisgICAgICAgIGxvbmcgcmVxdWVzdFR5cGUKKyAgICApOworCisgICAgQFJlc3BvbnNlV3JhcHBlcihsb2NhbE5hbWUgPSAiZ3JlZXRNZVNvbWV0aW1lUmVzcG9uc2UiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLkdyZWV0TWVTb21ldGltZVJlc3BvbnNlIikKKyAgICBAUmVxdWVzdFdyYXBwZXIobG9jYWxOYW1lID0gImdyZWV0TWVTb21ldGltZSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiLCBjbGFzc05hbWUgPSAib3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMuR3JlZXRNZVNvbWV0aW1lIikKKyAgICBAV2ViUmVzdWx0KG5hbWUgPSAicmVzcG9uc2VUeXBlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIpCisgICAgQFdlYk1ldGhvZAorICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdyZWV0TWVTb21ldGltZSgKKyAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAicmVxdWVzdFR5cGUiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIikKKyAgICAgICAgamF2YS5sYW5nLlN0cmluZyByZXF1ZXN0VHlwZQorICAgICk7CisKKyAgICBAT25ld2F5CisgICAgQFJlcXVlc3RXcmFwcGVyKGxvY2FsTmFtZSA9ICJncmVldE1lT25lV2F5IiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIsIGNsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC50eXBlcy5HcmVldE1lT25lV2F5IikKKyAgICBAV2ViTWV0aG9kCisgICAgcHVibGljIHZvaWQgZ3JlZXRNZU9uZVdheSgKKyAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAicmVxdWVzdFR5cGUiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIikKKyAgICAgICAgamF2YS5sYW5nLlN0cmluZyByZXF1ZXN0VHlwZQorICAgICk7CisKKyAgICBAUmVzcG9uc2VXcmFwcGVyKGxvY2FsTmFtZSA9ICJncmVldE1lUmVzcG9uc2UiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLnR5cGVzLkdyZWV0TWVSZXNwb25zZSIpCisgICAgQFJlcXVlc3RXcmFwcGVyKGxvY2FsTmFtZSA9ICJncmVldE1lIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIsIGNsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC50eXBlcy5HcmVldE1lIikKKyAgICBAV2ViUmVzdWx0KG5hbWUgPSAicmVzcG9uc2VUeXBlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIpCisgICAgQFdlYk1ldGhvZAorICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdyZWV0TWUoCisgICAgICAgIEBXZWJQYXJhbShuYW1lID0gInJlcXVlc3RUeXBlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC90eXBlcyIpCisgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcmVxdWVzdFR5cGUKKyAgICApOworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkNvbmR1aXRUZXN0LmphdmEgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1SQ29uZHVpdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTYzZGFkCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkNvbmR1aXRUZXN0LmphdmEKQEAgLTAsMCArMSwxMjEgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tcjsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1Tb3VyY2U7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLkV4Y2hhbmdlSW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5NZXNzYWdlSW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkJpbmRpbmdNZXNzYWdlSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLkJpbmRpbmdPcGVyYXRpb25JbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnN0YXh1dGlscy5TdGF4VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuQ2hhbm5lbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FbmRwb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlBhdHRlcm47CitpbXBvcnQgb3JnLmVhc3ltb2NrLmNsYXNzZXh0ZW5zaW9uLkVhc3lNb2NrOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgTk1SQ29uZHVpdFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEpCSVRlc3QgeworICAgIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nVXRpbHMuZ2V0TG9nZ2VyKE5NUkNvbmR1aXRUZXN0LmNsYXNzKTsKKworICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFByZXBhcmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTE9HLmluZm8oInRlc3QgcHJlcGFyZSIpOworICAgICAgICBOTVJDb25kdWl0IGNvbmR1aXQgPSBzZXR1cEpCSUNvbmR1aXQoZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gbmV3IE1lc3NhZ2VJbXBsKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25kdWl0LnByZXBhcmUobWVzc2FnZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0Tm90TnVsbChtZXNzYWdlLmdldENvbnRlbnQoT3V0cHV0U3RyZWFtLmNsYXNzKSk7CisgICAgICAgIGFzc2VydFRydWUobWVzc2FnZS5nZXRDb250ZW50KE91dHB1dFN0cmVhbS5jbGFzcykgaW5zdGFuY2VvZiBOTVJDb25kdWl0T3V0cHV0U3RyZWFtKTsKKyAgICB9CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2VuZE91dCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBMT0cuaW5mbygidGVzdCBzZW5kIik7CisgICAgICAgIE5NUkNvbmR1aXQgY29uZHVpdCA9IHNldHVwSkJJQ29uZHVpdCh0cnVlLCBmYWxzZSk7IAorICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZUltcGwoKTsKKyAgICAgICAgQ2xhc3M8b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yLkdyZWV0ZXI+IGdyZWV0ZXJDbHMKKyAgICAgICAgICAgID0gb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yLkdyZWV0ZXIuY2xhc3M7CisgICAgICAgIG1lc3NhZ2UucHV0KE1ldGhvZC5jbGFzcy5nZXROYW1lKCksIGdyZWV0ZXJDbHMuZ2V0TWV0aG9kKCJzYXlIaSIpKTsKKyAgICAgICAgCisgICAgICAgIG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuRXhjaGFuZ2UgZXhjaGFuZ2UgPSBuZXcgRXhjaGFuZ2VJbXBsKCk7CisgICAgICAgIGV4Y2hhbmdlLnNldE9uZVdheShmYWxzZSk7CisgICAgICAgIG1lc3NhZ2Uuc2V0RXhjaGFuZ2UoZXhjaGFuZ2UpOworICAgICAgICBleGNoYW5nZS5zZXRJbk1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIEJpbmRpbmdPcGVyYXRpb25JbmZvIGJvaSA9IGNvbnRyb2wuY3JlYXRlTW9jayhCaW5kaW5nT3BlcmF0aW9uSW5mby5jbGFzcyk7CisgICAgICAgIEJpbmRpbmdNZXNzYWdlSW5mbyBibWkgPSBjb250cm9sLmNyZWF0ZU1vY2soQmluZGluZ01lc3NhZ2VJbmZvLmNsYXNzKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KGJvaS5nZXRPdXRwdXQoKSkuYW5kUmV0dXJuKGJtaSk7CisgICAgICAgIGV4Y2hhbmdlLnB1dChCaW5kaW5nT3BlcmF0aW9uSW5mby5jbGFzcywgYm9pKTsKKyAgICAgICAgQ2hhbm5lbCBjaGFubmVsID0gY29udHJvbC5jcmVhdGVNb2NrKENoYW5uZWwuY2xhc3MpOworICAgICAgICBFYXN5TW9jay5leHBlY3Qobm1yLmNyZWF0ZUNoYW5uZWwoKSkuYW5kUmV0dXJuKGNoYW5uZWwpOworICAgICAgICBFeGNoYW5nZSB4Y2hnID0gY29udHJvbC5jcmVhdGVNb2NrKEV4Y2hhbmdlLmNsYXNzKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KGNoYW5uZWwuY3JlYXRlRXhjaGFuZ2UoUGF0dGVybi5Jbk91dCkpLmFuZFJldHVybih4Y2hnKTsKKyAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTWVzc2FnZSBpbk1zZyA9IGNvbnRyb2wuY3JlYXRlTW9jayhvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlLmNsYXNzKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KHhjaGcuZ2V0SW4oKSkuYW5kUmV0dXJuKGluTXNnKTsKKyAgICAgICAgRW5kcG9pbnRSZWdpc3RyeSBlbmRwb2ludHMgPSBjb250cm9sLmNyZWF0ZU1vY2soRW5kcG9pbnRSZWdpc3RyeS5jbGFzcyk7CisgICAgICAgIEVhc3lNb2NrLmV4cGVjdChjaGFubmVsLmdldE5NUigpKS5hbmRSZXR1cm4obm1yKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkpLmFuZFJldHVybihlbmRwb2ludHMpOworICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlIG91dE1zZyA9IGNvbnRyb2wuY3JlYXRlTW9jayhvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlLmNsYXNzKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KHhjaGcuZ2V0T3V0KCkpLmFuZFJldHVybihvdXRNc2cpOworICAgICAgICAKKyAgICAgICAgU291cmNlIHNvdXJjZSA9IG5ldyBTdHJlYW1Tb3VyY2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bWVzc2FnZT5UZXN0SGVsbG9Xb3JsZDwvbWVzc2FnZT4iLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KG91dE1zZy5nZXRCb2R5KFNvdXJjZS5jbGFzcykpLmFuZFJldHVybihzb3VyY2UpOworICAgICAgICBFYXN5TW9jay5leHBlY3QoeGNoZy5nZXRPdXQoKSkuYW5kUmV0dXJuKG91dE1zZyk7CisgICAgICAgIEVhc3lNb2NrLmV4cGVjdChvdXRNc2cuZ2V0QXR0YWNobWVudHMoKSkuYW5kUmV0dXJuKG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KG91dE1zZy5nZXRIZWFkZXJzKCkpLmFuZFJldHVybihuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSk7CisgICAgICAgIGNvbnRyb2wucmVwbGF5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25kdWl0LnByZXBhcmUobWVzc2FnZSk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBhc3NlcnRGYWxzZSgiSk1TQ29uZHVpdCBjYW4ndCBwZXJwYXJlIHRvIHNlbmQgb3V0IG1lc3NhZ2UiLCBmYWxzZSk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAgICAgICAgICAKKyAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBtZXNzYWdlLmdldENvbnRlbnQoT3V0cHV0U3RyZWFtLmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiVGhlIE91dHB1dFN0cmVhbSBzaG91bGQgbm90IGJlIG51bGwgIiwgb3MgIT0gbnVsbCk7CisgICAgICAgIG9zLndyaXRlKCJIZWxsb1dvcmxkIi5nZXRCeXRlcygpKTsKKyAgICAgICAgb3MuY2xvc2UoKTsgICAgICAgICAgICAgIAorICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGluTWVzc2FnZS5nZXRDb250ZW50KElucHV0U3RyZWFtLmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChpcyk7CisgICAgICAgIFhNTFN0cmVhbVJlYWRlciByZWFkZXIgPSBTdGF4VXRpbHMuY3JlYXRlWE1MU3RyZWFtUmVhZGVyKGlzLCBudWxsKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChyZWFkZXIpOworICAgICAgICByZWFkZXIubmV4dFRhZygpOworICAgICAgICAgCisgICAgICAgIFN0cmluZyByZXBvbnNlID0gcmVhZGVyLmdldEVsZW1lbnRUZXh0KCk7CisgICAgICAgIGFzc2VydEVxdWFscygiVGhlIHJlcG9uc2UgZGF0ZSBzaG91bGQgYmUgZXF1YWxzIiwgcmVwb25zZSwgIlRlc3RIZWxsb1dvcmxkIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkRlc3RpbmF0aW9uVGVzdC5qYXZhIGIvdHJ1bmsvY3hmL2N4Zi10cmFuc3BvcnQtbm1yL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2N4Zi90cmFuc3BvcnQvbm1yL05NUkRlc3RpbmF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDU0NGMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvY3hmL3RyYW5zcG9ydC9ubXIvTk1SRGVzdGluYXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSwxNDIgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5jeGYudHJhbnNwb3J0Lm5tcjsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1Tb3VyY2U7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5jb21tb24ubG9nZ2luZy5Mb2dVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuRXhjaGFuZ2VJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLm1lc3NhZ2UuTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5tZXNzYWdlLk1lc3NhZ2VJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuRW5kcG9pbnRJbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnNlcnZpY2UubW9kZWwuSW50ZXJmYWNlSW5mbzsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5zZXJ2aWNlLm1vZGVsLlNlcnZpY2VJbmZvOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5NZXNzYWdlT2JzZXJ2ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuQ2hhbm5lbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FbmRwb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlN0YXR1czsKK2ltcG9ydCBvcmcuZWFzeW1vY2suRWFzeU1vY2s7CisKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgTk1SRGVzdGluYXRpb25UZXN0IGV4dGVuZHMgQWJzdHJhY3RKQklUZXN0IHsKKyAgICBzdGF0aWMgZmluYWwgTG9nZ2VyIExPRyA9IExvZ1V0aWxzLmdldExvZ2dlcihOTVJEZXN0aW5hdGlvblRlc3QuY2xhc3MpOworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERlc3RpbmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIExPRy5pbmZvKCJKQkkgZGVzdGluYXRpb24gdGVzdCIpOworICAgIH0KKyAgICAKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRTdHJlYW1TdWJzdGl0dXRpb25Eb2VzbnRDYXVzZUV4Y2VwdGlvbkluRG9DbG9zZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvL0NyZWF0ZSBlbm91Z2ggb2YgdGhlIG9iamVjdCBzdHJ1Y3R1cmUgdG8gZ2V0IHRocm91Z2ggdGhlIGNvZGUuCisgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk1lc3NhZ2Ugbm9ybWFsaXplZE1lc3NhZ2UgPSBjb250cm9sLmNyZWF0ZU1vY2sob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTWVzc2FnZS5jbGFzcyk7CisgICAgICAgIENoYW5uZWwgY2hhbm5lbCA9IGNvbnRyb2wuY3JlYXRlTW9jayhDaGFubmVsLmNsYXNzKTsKKyAgICAgICAgRXhjaGFuZ2UgZXhjaGFuZ2UgPSBuZXcgRXhjaGFuZ2VJbXBsKCk7CisgICAgICAgIGV4Y2hhbmdlLnNldE9uZVdheShmYWxzZSk7CisgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlSW1wbCgpOworICAgICAgICBtZXNzYWdlLnNldEV4Y2hhbmdlKGV4Y2hhbmdlKTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZSBtZXNzYWdlRXhjaGFuZ2UgPSBjb250cm9sLmNyZWF0ZU1vY2sob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2UuY2xhc3MpOworICAgICAgICBFYXN5TW9jay5leHBlY3QobWVzc2FnZUV4Y2hhbmdlLmdldE91dCgpKS5hbmRSZXR1cm4obm9ybWFsaXplZE1lc3NhZ2UpLnRpbWVzKDIpOworICAgICAgICBtZXNzYWdlLnB1dChvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FeGNoYW5nZS5jbGFzcywgbWVzc2FnZUV4Y2hhbmdlKTsKKyAgICAgICAgY2hhbm5lbC5zZW5kKG1lc3NhZ2VFeGNoYW5nZSk7CisgICAgICAgIEVhc3lNb2NrLnJlcGxheShjaGFubmVsKTsKKyAgICAgICAgCisgICAgICAgIE5NUkRlc3RpbmF0aW9uT3V0cHV0U3RyZWFtIGpiaU9TID0gbmV3IE5NUkRlc3RpbmF0aW9uT3V0cHV0U3RyZWFtKG1lc3NhZ2UsIG5ldyBNZXNzYWdlSW1wbCgpLCBjaGFubmVsKTsKKyAgICAgICAgCisgICAgICAgIC8vQ3JlYXRlIGFycmF5IG9mIG1vcmUgdGhhbiB3aGF0IGlzIGluIHRocmVzaG9sZCBpbiBDYWNoZWRPdXRwdXRTdHJlYW0sIAorICAgICAgICAvL3Rob3VnaCB0aGUgdGhyZXNob2xkIGluIENhY2hlZE91dHB1dFN0cmVhbSBzaG91bGQgYmUgbWFkZSBwcm90ZWN0ZWQgCisgICAgICAgIC8vcGVyaGFwcyBzbyBpdCBjYW4gYmUgcmVmZXJlbmNlZCBoZXJlIGluIGNhc2UgaXQgZXZlciBjaGFuZ2VzLgorICAgICAgICBpbnQgdGFyZ2V0TGVuZ3RoID0gNjQgKiAxMDI1OworICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHNiLmFwcGVuZCgiPHJvb3Q+Iik7CisgICAgICAgIHdoaWxlIChzYi5sZW5ndGgoKSA8IHRhcmdldExlbmd0aCkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCI8ZHVtbXk+c29tZSB4bWw8L2R1bW15PiIpOworICAgICAgICB9CisgICAgICAgIHNiLmFwcGVuZCgiPC9yb290PiIpOworICAgICAgICBieXRlW10gdGVzdEJ5dGVzID0gc2IudG9TdHJpbmcoKS5nZXRCeXRlcygpOworICAgICAgICAKKyAgICAgICAgamJpT1Mud3JpdGUodGVzdEJ5dGVzKTsgICAgICAgIAorICAgICAgICBqYmlPUy5kb0Nsb3NlKCk7CisgICAgICAgIAorICAgICAgICAvL1ZlcmlmeSBzZW5kIG1ldGhvZCB3YXMgY2FsbGVkLgorICAgICAgICBFYXN5TW9jay52ZXJpZnkoY2hhbm5lbCk7CisgICAgfQorICAgIAorICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdE5NUkRlc3RpbmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEVuZHBvaW50SW5mbyBlaSA9IG5ldyBFbmRwb2ludEluZm8oKTsKKyAgICAgICAgZWkuc2V0QWRkcmVzcygibm1yOi8vZHVteSIpOworICAgICAgICBlaS5zZXROYW1lKG5ldyBRTmFtZSgiaHR0cDovL3Rlc3QiLCAiZW5kcG9pbnQiKSk7CisgICAgICAgIFNlcnZpY2VJbmZvIHNpID0gbmV3IFNlcnZpY2VJbmZvKCk7CisgICAgICAgIHNpLnNldE5hbWUobmV3IFFOYW1lKCJodHRwOi8vdGVzdCIsICJzZXJ2aWNlIikpOworICAgICAgICBJbnRlcmZhY2VJbmZvIGludGVySW5mbyA9IG5ldyBJbnRlcmZhY2VJbmZvKHNpLCBuZXcgUU5hbWUoImh0dHA6Ly90ZXN0IiwgImludGVyZmFjZSIpKTsKKyAgICAgICAgc2kuc2V0SW50ZXJmYWNlKGludGVySW5mbyk7CisgICAgICAgIGVpLnNldFNlcnZpY2Uoc2kpOworICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5OTVIgbm1yID0gY29udHJvbC5jcmVhdGVNb2NrKG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUi5jbGFzcyk7CisgICAgICAgIG5tclRyYW5zcG9ydEZhY3Rvcnkuc2V0Tm1yKG5tcik7CisgICAgICAgIE5NUkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gKE5NUkRlc3RpbmF0aW9uKSBubXJUcmFuc3BvcnRGYWN0b3J5LmdldERlc3RpbmF0aW9uKGVpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChkZXN0aW5hdGlvbik7CisgICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGVpLmdldFNlcnZpY2UoKS5nZXROYW1lKCkudG9TdHJpbmcoKQorICAgICAgICArIGVpLmdldEludGVyZmFjZSgpLmdldE5hbWUoKS50b1N0cmluZygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbm1yVHJhbnNwb3J0RmFjdG9yeS5wdXREZXN0aW5hdGlvbihkZXN0TmFtZSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy9zaG91bGQgY2F0Y2ggZXhjZXB0aW9uIGhlcmUgc2luY2UgdHJ5IHB1dCBkdXBsaWNhdGVkIGRlc3RpbmF0aW9uICAKKyAgICAgICAgfQorICAgICAgICBhc3NlcnRFcXVhbHMoZGVzdGluYXRpb24sIG5tclRyYW5zcG9ydEZhY3RvcnkuZ2V0RGVzdGluYXRpb24oZGVzdE5hbWUpKTsKKyAgICAgICAgbm1yVHJhbnNwb3J0RmFjdG9yeS5yZW1vdmVEZXN0aW5hdGlvbihkZXN0TmFtZSk7CisgICAgICAgIG5tclRyYW5zcG9ydEZhY3RvcnkucHV0RGVzdGluYXRpb24oZGVzdE5hbWUsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlIHhjaGcgPSBjb250cm9sLmNyZWF0ZU1vY2sob3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2UuY2xhc3MpOworICAgICAgICAKKyAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTWVzc2FnZSBpbk1zZyA9IGNvbnRyb2wuY3JlYXRlTW9jayhvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5NZXNzYWdlLmNsYXNzKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KHhjaGcuZ2V0U3RhdHVzKCkpLmFuZFJldHVybihTdGF0dXMuQWN0aXZlKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KHhjaGcuZ2V0SW4oKSkuYW5kUmV0dXJuKGluTXNnKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KGluTXNnLmdldEF0dGFjaG1lbnRzKCkpLmFuZFJldHVybihuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSk7CisgICAgICAgIEVhc3lNb2NrLmV4cGVjdChpbk1zZy5nZXRIZWFkZXJzKCkpLmFuZFJldHVybihuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSk7CisgICAgICAgIFNvdXJjZSBzb3VyY2UgPSBuZXcgU3RyZWFtU291cmNlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG1lc3NhZ2U+VGVzdEhlbGxvV29ybGQ8L21lc3NhZ2U+Ii5nZXRCeXRlcygpKSk7CisgICAgICAgIEVhc3lNb2NrLmV4cGVjdChpbk1zZy5nZXRCb2R5KFNvdXJjZS5jbGFzcykpLmFuZFJldHVybihzb3VyY2UpOworICAgICAgICBFbmRwb2ludFJlZ2lzdHJ5IGVuZHBvaW50cyA9IGNvbnRyb2wuY3JlYXRlTW9jayhFbmRwb2ludFJlZ2lzdHJ5LmNsYXNzKTsKKyAgICAgICAgRWFzeU1vY2suZXhwZWN0KG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkpLmFuZFJldHVybihlbmRwb2ludHMpOworICAgICAgICBFYXN5TW9jay5leHBlY3Qobm1yVHJhbnNwb3J0RmFjdG9yeS5nZXRObXIoKS5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkpLmFuZFJldHVybihlbmRwb2ludHMpOworICAgICAgICBjb250cm9sLnJlcGxheSgpOworICAgICAgICBvYnNlcnZlciA9IG5ldyBNZXNzYWdlT2JzZXJ2ZXIoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtKSB7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbk1lc3NhZ2UgPSBtOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBkZXN0aW5hdGlvbi5zZXRNZXNzYWdlT2JzZXJ2ZXIob2JzZXJ2ZXIpOworICAgICAgICBkZXN0aW5hdGlvbi5wcm9jZXNzKHhjaGcpOworICAgICAgICBhc3NlcnROb3ROdWxsKGluTWVzc2FnZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvY3hmL3BvbS54bWwgYi90cnVuay9jeGYvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTQ1ZDFlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvY3hmL3BvbS54bWwKQEAgLTAsMCArMSw0MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIAorICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5mZWF0dXJlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZmVhdHVyZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZjwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5jeGY8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBDWEYgU3VwcG9ydDwvbmFtZT4KKworICAgIDxtb2R1bGVzPgorICAgICAgICA8bW9kdWxlPmN4Zi10cmFuc3BvcnQtbm1yPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y3hmLWJpbmRpbmctbm1yPC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9kZXBzL3BvbS54bWwgYi90cnVuay9kZXBzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkMmFhZAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2RlcHMvcG9tLnhtbApAQCAtMCwwICsxLDcxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisgICAgCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8IS0tIAorICAgICAgIEFUVEVOVElPTjogVGhpcyBwcm9qZWN0IGlzIGFuIHVnbHkgd29ya2Fyb3VuZCB0byBwdWxsIGluIHNvbWUgZHVwbGljYXRlZCAKKyAgICAgICBkZXBlbmRlbmNpZXMgd2hpY2ggb3RoZXJ3aXNlIHdvdWxkIGJlIGlnbm9yZWQgYnkgbWF2ZW4gYW5kIG1ha2UgdGhlIGJ1aWxkIAorICAgICAgIGZhaWwuIFRoZSByZWFzb24gaXMgdGhhdCB0aG9zZSBkZXBzIG9ubHkgZGlmZmVyIGluIHRoZSB2ZXJzaW9uIG51bWJlcnMgdG8gCisgICAgICAgZGVwcyB1c2VkIGluIHRoZSBhc3NlbWJseS4gCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZmVhdHVyZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmZlYXR1cmVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5mZWF0dXJlcy5kZXBzPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRGVwZW5kZW5jaWVzPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFudGxyPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXBvb2w8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJlc29sdmU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpbGVudD50cnVlPC9zaWxlbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVUcmFuc2l0aXZlPnRydWU8L2V4Y2x1ZGVUcmFuc2l0aXZlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL1JFQURNRS50eHQgYi90cnVuay9leGFtcGxlcy9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MmI0MDIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKworV0VMQ09NRSBUTyBUSEUgU0VSVklDRU1JWCBFWEFNUExFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMaXN0IG9mIEV4YW1wbGVzCis9PT09PT09PT09PT09PT09CisKKy0gYnJpZGdlCisgIFVzZXMgdGhlIG9yaWdpbmFsIFNlcnZpY2VNaXggRUlQIGNvbXBvbmVudCBhbmQgSkJJIHRvIGNyZWF0ZSBhCisgIHByb3RvY29sIGJyaWRnZSB0aGF0IHJlY2VpdmVzIGEgbWVzc2FnZSB2aWEgSFRUUCwgdHJhbnNmb3JtcyBpdAorICBhbmQgc2VuZHMgaXQgdG8gYSBKTVMgcXVldWUuCisgIAorICBUaGlzIGV4YW1wbGUgdXNlcyB0aGUgb2xkZXIgU2VydmljZU1peCBFSVAgaW1wbGVtZW50YXRpb24uIFRoZQorICBicmlkZ2UtY2FtZWwgZXhhbXBsZSAoc2VlIGJlbG93KSwgb24gdGhlIG90aGVyIGhhbmQsIHVzZXMgQ2FtZWwgdG8KKyAgYWNoaWV2ZSB0aGUgc2FtZSByZXN1bHQuCisgIAorLSBicmlkZ2UtY2FtZWwKKyAgVXNlcyBDYW1lbCBhbmQgSkJJIHRvIGNyZWF0ZSBhIHByb3RvY29sIGJyaWRnZSB0aGF0IHJlY2VpdmVzIGEKKyAgbWVzc2FnZSB2aWEgSFRUUCwgdHJhbnNmb3JtcyBpdCBhbmQgc2VuZHMgaXQgdG8gYSBKTVMgcXVldWUuCisgIAorICBUaGlzIGV4YW1wbGUgdXNlcyB0aGUgbmV3ZXIgQ2FtZWwgaW50ZWdyYXRpb24gZnJhbWV3b3JrLgorICAKKy0gY2FtZWwKKyAgRGVwbG95cyBhIHNpbXBsZSBDYW1lbCBFSVAgcm91dGUsIHdyaXR0ZW4gaW4gSmF2YSwgYXMgYSBKQkkgY29tcG9uZW50LgorICAKKy0gY2FtZWwtbm1yCisgIERlcGxveXMgdHdvIENhbWVsIEVJUCByb3V0ZXMgdGhhdCBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgdmlhIHRoZQorICBTZXJ2aWNlTWl4IE5NUi4KKworLSBjYW1lbC1vc2dpCisgIERlcGxveXMgYSBDYW1lbCBFSVAgcm91dGUgYXMgYW4gT1NHaSBidW5kbGUuIENvbmZpZ3VyYXRpb24gbWFrZXMgdXNlCisgIG9mIHRoZSBPU0dpIENvbmZpZ3VyYXRpb24gQWRtaW4gc2VydmljZSBhbmQgU3ByaW5nIHByb3BlcnR5IHBsYWNlaG9sZGVycywKKyAgYW5kIHRoZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBob3cgdG8gZGVwbG95IHRoZSBwcm9wZXJ0aWVzIGZpbGUgZnJvbSB0aGUKKyAgU2VydmljZU1peCBjb25zb2xlLgorCistIGN4Zi1jYW1lbC1ubXIKKyAgRGVwbG95cyBhIENhbWVsIHJvdXRlIHRoYXQgdHJhbnNmb3JtcyBhIG1lc3NhZ2UgYW5kIHBhc3NlcyBpdCB0byBhIENYRgorICB3ZWIgc2VydmljZSB2aWEgdGhlIFNlcnZpY2VNaXggTk1SLgorCistIGN4Zi1qYXhycworICBDcmVhdGVzIGEgUkVTVGZ1bCBKQVgtUlMgd2ViIHNlcnZpY2UgdXNpbmcgQ1hGIGFuZCBleHBvc2VzIGl0IHVzaW5nCisgIHRoZSBPU0dpIEhUVFAgc2VydmljZS4KKyAgCistIGN4Zi1ubXIKKyAgQ3JlYXRlcyBhIHdlYiBzZXJ2aWNlIHVzaW5nIENYRiBhbmQgU3ByaW5nLURNLCBhbmQgcHVibGlzaGVzIGl0IHRvIHRoZQorICBTZXJ2aWNlTWl4IE5NUi4KKyAKKy0gY3hmLW9zZ2kKKyAgQ3JlYXRlcyBhIHdlYiBzZXJ2aWNlIHVzaW5nIENYRiBhbmQgU3ByaW5nLURNLCBhbmQgZXhwb3NlcyBpdCB0aHJvdWdoCisgIHRoZSBPU0dpIEhUVFAgc2VydmljZS4KKworLSBjeGYtd3MtYWRkcmVzc2luZworICBVc2VzIENYRiB0byBjcmVhdGUgYSB3ZWIgc2VydmljZSBlbmFibGVkIGZvciBXUy1BZGRyZXNzaW5nLCBhbmQgZXhwb3NlcworICBpdCB0aHJvdWdoIHRoZSBPU0dpIEhUVFAgc2VydmljZS4KKworLSBjeGYtd3NkbC1maXJzdAorICBQdWJsaXNoZXMsIGFzIGEgSkJJIHNlcnZpY2UgYXNzZW1ibHksIGEgV1NETC1kZWZpbmVkIHdlYiBzZXJ2aWNlIGNyZWF0ZWQKKyAgdXNpbmcgQ1hGLgorCistIGN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZQorICBQdWJsaXNoZXMsIGFzIE9TR2kgYnVuZGxlcywgYSBXU0RMLWRlZmluZWQgd2ViIHNlcnZpY2UgY3JlYXRlZCB1c2luZyBDWEYuCisgIAorLSBpbnRlcmNlcHRvcnMKKyAgQ29udGFpbnMgdHdvIGludGVyY2VwdG9yIGV4YW1wbGVzOgorCisgIDEuIC9lbmRwb2ludAorICAgICBEZXBsb3lzIGEgY3VzdG9tIGVuZHBvaW50IGxpc3RlbmVyIHRoYXQgY2FwdHVyZXMgYW5kIHJlcG9ydHMsIHRvCisgICAgIHRoZSBTZXJ2aWNlTWl4IGxvZywgd2hlbiBhbiBlbmRwb2ludCByZWdpc3RlcnMgYW5kIHVucmVnaXN0ZXJzIHdpdGgKKyAgICAgdGhlIE5NUi4KKworICAyLiAvZXhjaGFuZ2UKKyAgICAgRGVwbG95cyBhIGN1c3RvbSBleGNoYW5nZSBsaXN0ZW5lciB0aGF0IGNhcHR1cmVzIGFuZCByZXBvcnRzLCB0bworICAgICB0aGUgU2VydmljZU1peCBsb2csIHRoZSBleGNoYW5nZXMgdGhhdCBhcmUgc2VudCBhbmQgZGVsaXZlcmVkIHVzaW5nCisgICAgIHRoZSBOTVIuCisKKy0ga2FyYWYtZGVtb3Mvd2ViCisgIEVtYmVkcyB0aGUgU2VydmljZU1peCBLZXJuZWwgaW4gYSB3ZWIgYXBwbGljYXRpb24uCisKKy0gbm1yCisgIEV4cG9zZXMgYSBzaW1wbGUgTk1SIGVuZHBvaW50LgorCisKKy0gc2ltcGxlCisgIEFkZHMgbmV3IGVuZHBvaW50cyB1c2luZyBYTUwgY29uZmlndXJhdGlvbiBmaWxlcyBvbmx5LgorCisKK1ByZXJlcXVpc2l0ZXMgZm9yIFJ1bm5pbmcgdGhlIEV4YW1wbGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitKYXZhIERldmVsb3BtZW50IEtpdCAoSkRLKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBtdXN0IGhhdmUgSkRLIDEuNSBvciBoaWdoZXIgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZSB0bworcnVuIHRoZSBTZXJ2aWNlTWl4IGV4YW1wbGVzLgorCitBcGFjaGUgTWF2ZW4KKy0tLS0tLS0tLS0tLQorVGhlIGV4YW1wbGVzIHVzZSBBcGFjaGUgTWF2ZW4gZm9yIGJ1aWxkaW5nIGNvZGUuIFlvdSBtdXN0IGluc3RhbGwKK01hdmVuIDIuMC45IG9yIGhpZ2hlciBhbmQgYWRkIHRoZSBNYXZlbiBiaW4vIGRpcmVjdG9yeSB0byB5b3VyIFBBVEgKK2lmIHlvdSB3YW50IHRvIGJ1aWxkIGFueSBvZiB0aGUgZXhhbXBsZXMuIAorCitJZiB5b3UgaGF2ZSBub3QgdXNlZCBNYXZlbiBiZWZvcmUsIHRoZSBmaXJzdCB0aW1lIHlvdSB1c2UgaXQgdG8KK2J1aWxkIG9uZSBvZiB0aGUgZXhhbXBsZXMsIGl0IGRvd25sb2FkcyBhIGxvdCBvZiBKQVJzIHRvIGEgbG9jYWwKK3JlcG9zaXRvcnkgb24geW91ciBtYWNoaW5lLiBUaGUgbmV4dCB0aW1lIHlvdSBydW4gTWF2ZW4gaXQgdXNlcyB0aGUKK2xvY2FsbHkgc3RvcmVkIEpBUnMgd2hlcmUgcG9zc2libGUuCisKK1RvIGRvd25sb2FkIGFuZCBmaW5kIG91dCBtb3JlIGFib3V0IE1hdmVuLCB2aXNpdDoKKyAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcKKworU2VydmljZU1peCBDb250YWluZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgbXVzdCBoYXZlIFNlcnZpY2VNaXggdXAgYW5kIHJ1bm5pbmcuIFRvIHN0YXJ0IHRoZSBTZXJ2aWNlTWl4Citjb250YWluZXIsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXggICAgICAgICAgKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4ICAgICAgICAgIChvbiBXaW5kb3dzKQorCisKK1NlcnZpY2VNaXggRmVhdHVyZXMgRmFjaWxpdHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NldmVyYWwgb2YgdGhlIGV4YW1wbGVzIG1ha2UgdXNlIG9mIHRoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzIGZhY2lsaXR5LgorQSBmZWF0dXJlIGlzIGEgbmFtZWQsIHZlcnNpb25lZCBjb2xsZWN0aW9uIG9mIE9TR2kgYnVuZGxlcyB0aGF0IHdvcmsKK3RvZ2V0aGVyIHRvIHByb3ZpZGUgc29tZSBmdW5jdGlvbmFsaXR5LiBUaGUgZGV0YWlscyBvZiB3aGF0IG1ha2VzIHVwCithIGZlYXR1cmUgYXJlIGNvbnRhaW5lZCBpbiBhIGZlYXR1cmVzIGRlZmluaXRpb24gZmlsZS4gVGhlIFNlcnZpY2VNaXgKK2NvbnNvbGUgaW5jbHVkZXMgYSBmZWF0dXJlcyBzdWJzaGVsbCB0aGF0IHByb3ZpZGVzIGNvbW1hbmRzIHRvIGVuYWJsZQoreW91IHRvIGFkZCBhbmQgcmVtb3ZlIGZlYXR1cmVzLCBhbmQgdG8gcG9pbnQgdG8gZmVhdHVyZSByZXBvc2l0b3JpZXMuCitJZiB5b3UgYWRkIGEgZmVhdHVyZSwgU2VydmljZU1peCB1c2VzIHRoZSBkZXRhaWxzIHByb3ZpZGVkIGluCit0aGUgZmVhdHVyZXMgZGVmaW5pdGlvbiBmaWxlIHRvIGxvYWQgYW5kIGFjdGl2YXRlIGFsbCBvZiB0aGUKK3JlcXVpcmVkIGJ1bmRsZXMgdGhhdCBhcmUgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY29udGFpbmVyLgorCitTZXJ2aWNlTWl4IGluY2x1ZGVzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIHRoYXQgbWFrZSB0aGUgcnVubmluZyBvZgordGhlIGV4YW1wbGVzIHF1aWNrIGFuZCBlYXN5LiBFYWNoIGZlYXR1cmUgZW5hYmxlcyB5b3UgdG8gdXNlIGEgc2luZ2xlCitjb21tYW5kIHRvIGluc3RhbGwgdGhlIGV4YW1wbGUgYnVuZGxlIGFuZCBhbnkgYnVuZGxlcyB0aGF0IHRoZSBleGFtcGxlCitkZXBlbmRzIG9uLgorCitUbyB2aWV3IGEgbGlzdCBvZiB0aGUgZmVhdHVyZXMgdGhhdCBhcmUgYWxyZWFkeSBpbnN0YWxsZWQsIGVudGVyCit0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBmZWF0dXJlczpsaXN0CisKK1RvIHZpZXcgYSBsaXN0IG9mIHRoZSBmZWF0dXJlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBleGFtcGxlcywgZW50ZXIKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOmxpc3QgfCBncmVwIGV4YW1wbGVzCisKK1RvIHZpZXcgdGhlIHJlcG9zaXRvcnkgVVJMcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmZWF0dXJlcworZmFjaWxpdHksIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOmxpc3RVcmwKKworVG8gdmlldyB0aGUgY29udGVudHMgb2YgdGhlIGZlYXR1cmVzIGRlZmluaXRpb24gZmlsZSB0aGF0IGluY2x1ZGVzCitkZWZpbml0aW9ucyBmb3IgZWFjaCBvZiB0aGUgZmVhdHVyZXMgdXNlZCBieSB0aGUgZXhhbXBsZXMsIGVudGVyIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBjYXQgbXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC9hcGFjaGUtc2VydmljZW1peC8ke3ZlcnNpb259L3htbC9mZWF0dXJlcworCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgU2VydmljZU1peAorZG9jdW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzMDdkMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9SRUFETUUudHh0CkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0NBTUVMIEJSSURHRSBFWEFNUExFCis9PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitEZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSBDYW1lbCBhbmQgSkJJIHRvIGNyZWF0ZSBhIHByb3RvY29sIGJyaWRnZQordGhhdCByZWNlaXZlcyBhIG1lc3NhZ2UgdmlhIEhUVFAsIHRyYW5zZm9ybXMgaXQgYW5kIHNlbmRzIGl0IHRvIGEKK0pNUyBxdWV1ZS4KKworVGhpcyBleGFtcGxlIHVzZXMgdGhlIENhbWVsIGludGVncmF0aW9uIGZyYW1ld29yay4gVGhlIGJyaWRnZQorZXhhbXBsZSwgb24gdGhlIG90aGVyIGhhbmQsIHVzZXMgdGhlIG9sZGVyIFNlcnZpY2VNaXggRUlQCitpbXBsZW1lbnRhdGlvbiB0byBhY2hpZXZlIHRoZSBzYW1lIHJlc3VsdC4gRm9yIG1vcmUgZGV0YWlscyBvbgoraG93IENhbWVsIGNvbXBhcmVzIHRvIFNlcnZpY2VNaXggRUlQLCBzZWU6CisKK2h0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL2hvdy1kb2VzLWNhbWVsLWNvbXBhcmUtdG8tc2VydmljZW1peC1laXAuaHRtbAorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIGJyaWRnZSBjb25zaXN0cyBvZiB0aHJlZSBKQkkgU2VydmljZSBVbml0cyAoU1VzKSB3cmFwcGVkIHVwCitpbiBhIEpCSSBTZXJ2aWNlIEFzc2VtYmx5IChTQSkgdGhhdCBpcyBkZXBsb3llZCB0byBTZXJ2aWNlTWl4LgorCitUaGUgdGhyZWUgU1VzIGNhbiBiZSBkZXNjcmliZWQgYXMgZm9sbG93czoKKworMS4gSFRUUCBTVSAoc2VlIHRoZSBicmlkZ2UtaHR0cC1zdSBkaXJlY3RvcnkpCisgICBBIEhUVFAgZW5kcG9pbnQgdGhhdCBsaXN0ZW5zIG9uIHBvcnQgODE5MiBmb3IgSFRUUCByZXF1ZXN0cy4KKworMi4gSk1TIFNVIChzZWUgdGhlIGJyaWRnZS1qbXMtc3UgZGlyZWN0b3J5KQorICAgQW4gQWN0aXZlTVEgSk1TIGVuZHBvaW50IHRvIHdoaWNoIENhbWVsIHNlbmRzIG1lc3NhZ2VzLgorICAgCiszLiBDYW1lbCBTVSAoc2VlIHRoZSBicmlkZ2UtY2FtZWwtc3UgZGlyZWN0b3J5KQorICAgQSBDYW1lbCByb3V0ZSB0aGF0IHJlY2VpdmVzIG1lc3NhZ2VzIGZyb20gdGhlIEhUVFAgZW5kcG9pbnQsCisgICB0cmFuc2Zvcm1zIHRoZW0gdXNpbmcgYW4gWFNMVCBzdHlsZXNoZWV0LCBsb2dzIHRoZW0sIGFuZCB0aGVuCisgICBzZW5kcyB0aGVtIHRvIHRoZSBKTVMgZW5kcG9pbnQuCisgICAKKyAgIFRoZSBDYW1lbCByb3V0aW5nIGluZm9ybWF0aW9uIGlzIGNvbnRhaW5lZCBpbiB0aGUgY2FtZWwtY29udGV4dC54bWwKKyAgIGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIC4vYnJpZGdlLWNhbWVsLXN1L3NyYy9tYWluL3Jlc291cmNlcworICAgZGlyZWN0b3J5LCBhbmQgaXMgc2hvd24gYmVsb3c6CisKKyAgICA8cm91dGU+CisgICAgICA8ZnJvbSB1cmk9ImpiaTplbmRwb2ludDpodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvYnJpZGdlL3BpcGVsaW5lL2VuZHBvaW50Ii8+CisgICAgICA8dG8gdXJpPSJ4c2x0OmJyaWRnZS54c2x0Ii8+CisgICAgICA8dG8gdXJpPSJsb2c6b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGU/bGV2ZWw9SU5GTyIvPgorICAgICAgPHRvIHVyaT0iamJpOmVuZHBvaW50Omh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy9icmlkZ2Uvam1zL2VuZHBvaW50Ii8+CisgICAgPC9yb3V0ZT4KKworVGhlIGJyaWRnZS1jYW1lbC1zYSBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFBPTSBmaWxlIHRoYXQgdGVsbHMKK01hdmVuIGhvdyB0byBidWlsZCB0aGUgU0EuCisgICAKKworUHJlcmVxdWlzaXRlcyBmb3IgQnVpbGRpbmcgYW5kIFJ1bm5pbmcgdGhpcyBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEuIFlvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lOgorCisgICAtIEpESyAxLjUgb3IgaGlnaGVyLgorCisgICAtIEFwYWNoZSBNYXZlbiAyLjAuOSBvciBoaWdoZXIuCisKKyAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFJFQURNRSBpbiB0aGUgdG9wLWxldmVsIGV4YW1wbGVzCisgICBkaXJlY3RvcnkuCisKKzIuIFN0YXJ0IFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXgJKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4CShvbiBXaW5kb3dzKQorCisKK0J1aWxkaW5nIGFuZCBEZXBsb3lpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZXhhbXBsZSB1c2VzIHRoZSBTZXJ2aWNlTWl4IEpCSSBNYXZlbiBwbHVnaW4gdG8gYnVpbGQgdGhlIFNVcworYW5kIHRoZSBTQS4gVG8gYnVpbGQgdGhlIGV4YW1wbGUsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQKKyhmcm9tIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIFJFQURNRSk6CisKKyAgbXZuIGluc3RhbGwKKyAgCitJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgbG9jYWwgTWF2ZW4KK3JlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgcXVpY2tseS4gT3RoZXJ3aXNlIGl0IG1heSB0YWtlCitzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgaXQgbmVlZHMuCisKK09uY2UgY29tcGxldGUsIHlvdSB3aWxsIGZpbmQgdGhlIFNBLCBjYWxsZWQgYnJpZGdlLWNhbWVsLXNhLSR7dmVyc2lvbn0uemlwLAoraW4gdGhlIGJyaWRnZS1jYW1lbC1zYS90YXJnZXQgZGlyZWN0b3J5LgorCitZb3UgY2FuIGRlcGxveSB0aGUgU0EgaW4gdHdvIHdheXM6CisKKy0gVXNpbmcgSG90IERlcGxveW1lbnQKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgIENvcHkgdGhlIGJyaWRnZS1jYW1lbC1zYS90YXJnZXQvYnJpZGdlLWNhbWVsLXNhLSR7dmVyc2lvbn0uemlwCisgIHRvIHRoZSA8c2VydmljZW1peF9ob21lPi9kZXBsb3kgZGlyZWN0b3J5LgorICAgICAKKy0gVXNpbmcgdGhlIFNlcnZpY2VNaXggQ29uc29sZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorICBUeXBlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICBvc2dpOmluc3RhbGwgLXMgbXZuOm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5icmlkZ2UtY2FtZWwvYnJpZGdlLWNhbWVsLXNhLyR7dmVyc2lvbn0vemlwCisgCisgCitSdW5uaW5nIGEgQ2xpZW50CistLS0tLS0tLS0tLS0tLS0tCitUbyBydW4gdGhlIHdlYiBjbGllbnQ6CisKKzEuIE9wZW4gdGhlIGNsaWVudC5odG1sLCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGlzCisgICBSRUFETUUgZmlsZSwgaW4geW91ciBmYXZvcml0ZSBicm93c2VyLgorCisyLiBTZW5kIGEgSFRUUCByZXF1ZXN0LiBJdCB3aWxsIGJlIHRyYW5zZm9ybWVkIGludG8gYSBKTVMgbWVzc2FnZS4KKworICAgT25jZSB0aGUgSk1TIG1lc3NhZ2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIGJyaWRnZS5vdXRwdXQKKyAgIHF1ZXVlLCAgeW91IHdpbGwgcmVjZWl2ZSBhbiBIVFRQIFNUQVRVUyAyMDIgcmVzcG9uc2UgY29kZSBmcm9tIHRoZSBFU0IuCisKK1RvIHJ1biB0aGUgamF2YSBjb2RlIGNsaWVudDoKKworMS4gQ2hhbmdlIHRvIHRoZSA8c2VydmljZW1peF9ob21lPi9leGFtcGxlcy9icmlkZ2UtY2FtZWwvY2xpZW50CisgICBkaXJlY3RvcnkuCisKKzIuIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgbXZuIGNvbXBpbGUgZXhlYzpqYXZhCisKKworVmlld2luZyB0aGUgTG9nIEVudHJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHZpZXcgdGhlIG1lc3NhZ2UgdGhhdCBpcyBzZW50IGJ5IHZpZXdpbmcgdGhlIGVudHJpZXMKK2luIHRoZSBsb2cgZmlsZSBpbiB0aGUgZGF0YS9sb2cgZGlyZWN0b3J5IG9mIHlvdXIgU2VydmljZU1peAoraW5zdGFsbGF0aW9uLCBvciBieSB0eXBpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZQorU2VydmljZU1peCBjb25zb2xlOgorCisgIGxvZzpkaXNwbGF5CisKKworQ2hhbmdpbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UgY2hhbmdlIHRoZSBjb2RlIG9yIGNvbmZpZ3VyYXRpb24gaW4gdGhpcyBleGFtcGxlLCB1c2UgJ212biBpbnN0YWxsJwordG8gcmVidWlsZCB0aGUgU0EsIGFuZCBkZXBsb3kgaXQgYXMgZGVzY3JpYmVkIGFib3ZlLgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2JyaWRnZS1jYW1lbC1zYS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2JyaWRnZS1jYW1lbC1zYS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjA4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWNhbWVsLXNhL3BvbS54bWwKQEAgLTAsMCArMSw2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5icmlkZ2UtY2FtZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZS1jYW1lbDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5icmlkZ2UtY2FtZWwtc2E8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5qYmktc2VydmljZS1hc3NlbWJseTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IEJyaWRnZSBDYW1lbCA6OiBTQTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZS1jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZS1odHRwLXN1PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZS1jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZS1jYW1lbC1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5icmlkZ2UtY2FtZWw8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5icmlkZ2Utam1zLXN1PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWNhbWVsLXN1L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWNhbWVsLXN1L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2Mjk2MQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9icmlkZ2UtY2FtZWwtc3UvcG9tLnhtbApAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisgICAgCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZS1jYW1lbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuYnJpZGdlLWNhbWVsPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmJyaWRnZS1jYW1lbC1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBCcmlkZ2UgQ2FtZWwgOjogQ2FtZWwgU1U8L25hbWU+CisKKyAgICA8cHJvcGVydGllcz4KKyAgICAgICAgPGNvbXBvbmVudE5hbWU+c2VydmljZW1peC1jYW1lbDwvY29tcG9uZW50TmFtZT4KKyAgICA8L3Byb3BlcnRpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWNhbWVsLXN1L3NyYy9tYWluL3Jlc291cmNlcy9icmlkZ2UueHNsdCBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9icmlkZ2UtY2FtZWwtc3Uvc3JjL21haW4vcmVzb3VyY2VzL2JyaWRnZS54c2x0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MmUyZDYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWNhbWVsLXN1L3NyYy9tYWluL3Jlc291cmNlcy9icmlkZ2UueHNsdApAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIAorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tPgorPCEtLSAkUmV2OiAzNTYwNTIgJCAkRGF0ZTogMjAwNS0xMi0xMSAxNDo0MToyMCAtMDgwMCAoZGltLiwgMTEgZOKImsKpYy4gMjAwNSkgJCAtLT4KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIyLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KKyAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBpbmRlbnQ9InllcyIvPgorICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJub2RlKCkgfCBAKiI+CisgICAgPHhzbDpjb3B5PgorICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJub2RlKCkgfCBAKiIvPgorICAgIDwveHNsOmNvcHk+CisgIDwveHNsOnRlbXBsYXRlPgorPC94c2w6c3R5bGVzaGVldD4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2JyaWRnZS1jYW1lbC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FtZWwtY29udGV4dC54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWNhbWVsLXN1L3NyYy9tYWluL3Jlc291cmNlcy9jYW1lbC1jb250ZXh0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWVjM2NiCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2JyaWRnZS1jYW1lbC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FtZWwtY29udGV4dC54bWwKQEAgLTAsMCArMSwzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKworICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy0yLjAueHNkCisgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nL2NhbWVsLXNwcmluZy54c2QKKyAgICAiPgorCisgICAgICA8Y2FtZWxDb250ZXh0IHhtbG5zPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIj4KKyAgICAgICAgICAgIDxyb3V0ZT4KKyAgICAgICAgICA8ZnJvbSB1cmk9ImpiaTplbmRwb2ludDpodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvYnJpZGdlL3BpcGVsaW5lL2VuZHBvaW50Ii8+CisgICAgICAgICAgICAgIDx0byB1cmk9InhzbHQ6YnJpZGdlLnhzbHQiLz4KKyAgICAgICAgICAgICAgPHRvIHVyaT0ibG9nOm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlP2xldmVsPUlORk8iLz4KKyAgICAgICAgICAgICAgPHRvIHVyaT0iamJpOmVuZHBvaW50Omh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy9icmlkZ2Uvam1zL2VuZHBvaW50Ii8+CisgICAgICAgICAgICA8L3JvdXRlPgorICAgICAgPC9jYW1lbENvbnRleHQ+CisKKzwvYmVhbnM+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWh0dHAtc3UvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9icmlkZ2UtaHR0cC1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMWE4MzAKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWh0dHAtc3UvcG9tLnhtbApAQCAtMCwwICsxLDUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisgICAgCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZS1jYW1lbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuYnJpZGdlLWNhbWVsPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmJyaWRnZS1odHRwLXN1PC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+amJpLXNlcnZpY2UtdW5pdDwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IEJyaWRnZSBDYW1lbCA6OiBIVFRQIFNVPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWh0dHA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9icmlkZ2UtaHR0cC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2JyaWRnZS1odHRwLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzM2RlMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9icmlkZ2UtaHR0cC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0+Cis8YmVhbnMgeG1sbnM6aHR0cD0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9odHRwLzEuMCIKKyAgICAgICB4bWxuczpiPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvYnJpZGdlIj4KKworICA8aHR0cDplbmRwb2ludCBzZXJ2aWNlPSJiOmh0dHAiCisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSJlbmRwb2ludCIKKyAgICAgICAgICAgICAgICAgdGFyZ2V0U2VydmljZT0iYjpwaXBlbGluZSIKKyAgICAgICAgICAgICAgICAgcm9sZT0iY29uc3VtZXIiIAorICAgICAgICAgICAgICAgICBsb2NhdGlvblVSST0iaHR0cDovLzAuMC4wLjA6ODE5Mi9icmlkZ2UvIgorICAgICAgICAgICAgICAgICBkZWZhdWx0TWVwPSJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb25seSIgLz4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9icmlkZ2Utam1zLXN1L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWptcy1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDg3M2YKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWptcy1zdS9wb20ueG1sCkBAIC0wLDAgKzEsNzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+YnJpZGdlLWNhbWVsPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5icmlkZ2UtY2FtZWw8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+YnJpZGdlLWptcy1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBCcmlkZ2UgQ2FtZWwgOjogSk1TIFNVPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWptczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlaW8tY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNhbWVsPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbG9nZ2luZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbG9nZ2luZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qMmVlLW1hbmFnZW1lbnRfMS4xX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9icmlkZ2Utam1zLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWptcy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmU5YjkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvYnJpZGdlLWptcy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0+Cis8YmVhbnMgeG1sbnM6am1zPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2ptcy8xLjAiCisgICAgICAgeG1sbnM6Yj0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL2JyaWRnZSI+CisKKyAgPGptczplbmRwb2ludCBzZXJ2aWNlPSJiOmptcyIKKyAgICAgICAgICAgICAgICBlbmRwb2ludD0iZW5kcG9pbnQiCisgICAgICAgICAgICAgICAgcm9sZT0icHJvdmlkZXIiIAorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU3R5bGU9InF1ZXVlIgorICAgICAgICAgICAgICAgIGptc1Byb3ZpZGVyRGVzdGluYXRpb25OYW1lPSJicmlkZ2Uub3V0cHV0IgorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25GYWN0b3J5PSIjY29ubmVjdGlvbkZhY3RvcnkiIC8+CisgICAgICAgICAgICAgICAgCisgIDxiZWFuIGlkPSJjb25uZWN0aW9uRmFjdG9yeSIgY2xhc3M9Im9yZy5hcGFjaGUuYWN0aXZlbXEuQWN0aXZlTVFDb25uZWN0aW9uRmFjdG9yeSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImJyb2tlclVSTCIgdmFsdWU9InRjcDovL2xvY2FsaG9zdDo2MTYxNiIgLz4KKyAgPC9iZWFuPgorICAgICAgICAgICAgICAgICAgICAgCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2NsaWVudC5odG1sIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2NsaWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMWJjNDkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvY2xpZW50Lmh0bWwKQEAgLTAsMCArMSwxMzcgQEAKKzwhLS0KKyAgICAKKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLT4KKzwhLS0gJFJldiQgJERhdGUkIC0tPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5TZXJ2aWNlTWl4IEJyaWRnZSBFeGFtcGxlPC90aXRsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciB1cmxUb09wZW4gPSAiaHR0cDovL2xvY2FsaG9zdDo4MTkyL2JyaWRnZS8iOyAvL2RlZmF1bHQgVVJMIHRvIG9wZW4KKworZnVuY3Rpb24gZ2V0SFRUUE9iamVjdCgpIHsKKyAgdmFyIHhtbGh0dHAgPSBmYWxzZTsKKworICAvKiBDb21waWxhdGlvbiBjb25kaXRpb25uZWxsZSBkJ0lFICovCisgIC8qQGNjX29uCisgIEBpZiAoQF9qc2NyaXB0X3ZlcnNpb24gPj0gNSkKKyAgICAgdHJ5IHsKKyAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOworICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgIHhtbGh0dHAgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgICAgICAgfSBjYXRjaCAoRSkgeworICAgICAgICAgICB4bWxodHRwID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgfQorICBAZWxzZQorICAgICB4bWxodHRwID0gZmFsc2U7CisgIEBlbmQgQCovCisKKyAgLyogb24gZXNzYWllIGRlIGNy6WVyIGwnb2JqZXQgc2kgY2Ugbidlc3QgcGFzIGTpauAgZmFpdCAqLworICBpZiAoIXhtbGh0dHAgJiYgdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICd1bmRlZmluZWQnKSB7CisgICAgIHRyeSB7CisgICAgICAgIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB4bWxodHRwID0gZmFsc2U7CisgICAgIH0KKyAgfQorCisgIGlmICh4bWxodHRwKSB7CisgICAgIC8qIG9uIGTpZmluaXQgY2UgcXVpIGRvaXQgc2UgcGFzc2VyIHF1YW5kIGxhIHBhZ2Ugculwb25kcmEgKi8KKyAgICAgeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh4bWxodHRwLnJlYWR5U3RhdGUgPT0gNCkgeyAvKiA0IDog6XRhdCAiY29tcGxldGUiICovCisgICAgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOworICAgICAgICAgICB2YXIgcmVzcG9uc2VTdGF0dXMgPSAiIjsKKyAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9IHhtbGh0dHAuc3RhdHVzICsgIiI7CisgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9ICJFUlJPUiBXSElMRSBSRVRSSUVWSU5HIFNUQVRVUzsgTUFZQkUgVU5BQkxFIFRPIENPTk5FQ1QuIjsKKyAgICAgICAgICAgfQorICAgICAgICAgICByZXNwb25zZS52YWx1ZSA9ICJTVEFUVVM6ICIgKyByZXNwb25zZVN0YXR1cyArICJcbiIgKyB4bWxodHRwLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfQorICAgICB9CisgIH0KKyAgcmV0dXJuIHhtbGh0dHA7Cit9CisKK2Z1bmN0aW9uIHNlbmQoKSB7CisgIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlICE9IHVybFRvT3BlbikgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSAhPSAiIikpIHsKKyAgICAvL3VzZSB1c2VyIGVudHJ5IG9ubHkgaWYgaXQgYXQgbGVhc3QgY2FuIGJlIG9rYXkKKyAgICB1cmxUb09wZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWU7CisgIH0gIAorICB2YXIgeG1saHR0cCA9IGdldEhUVFBPYmplY3QoKTsKKyAgaWYgKCF4bWxodHRwKSB7CisgICAgYWxlcnQoJ2NvdW5kIG5vdCBjcmVhdGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0Jyk7CisgICAgcmV0dXJuOworICB9CisgIHZhciByZXF1ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlcXVlc3QiKTsKKyAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3BvbnNlIik7ICAKKyAgdHJ5IHsKKyAgICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2aWxlZ2VNYW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgiVW5pdmVyc2FsQnJvd3NlclJlYWQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIik7CisgIH0gY2F0Y2ggKGUpIHsKKyAgfQorICB0cnkgeworICAgIHhtbGh0dHAub3BlbigiUE9TVCIsIHVybFRvT3BlbiwgdHJ1ZSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhbGVydCgnRXJyb3Igb3BlbmluZyBjb25uZWN0aW9uJyk7CisgIH0KKyAgeG1saHR0cC5zZW5kKHJlcXVlc3QudmFsdWUpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxoMT5TZXJ2aWNlTWl4IEJyaWRnZSBFeGFtcGxlPC9oMT4KKworPHA+V2VsY29tZSB0byB0aGUgQnJpZGdlIGV4YW1wbGUgZm9yIFNlcnZpY2VNaXguPC9wPgorCis8cD5QZXJmb3JtIGEgUE9TVCBpbnRvIHRoZSBIVFRQIGJpbmRpbmcuIFRoaXMgcmVxdWlyZXMgSmF2YVNjcmlwdC48L3A+IAorPHA+VGFyZ2V0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNTAiIGlkPSJ1cmxUb09wZW4iIHZhbHVlPSIiPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWUgPSB1cmxUb09wZW47PC9zY3JpcHQ+LjwvcD4KKworCis8dGFibGU+CisgIDx0cj4KKyAgICA8dGQ+CisgIDx0ZXh0YXJlYSBpZD0icmVxdWVzdCIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo0MDBweCIgb25LZXlVcD0ic2VuZCgpOyI+PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlOkVudmVsb3BlIHhtbG5zOmU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKyAgPGU6Qm9keT4KKyAgICA8cGluZz4KKyAgICAgIDxwaW5nUmVxdWVzdD4KKyAgICAgICAgPG1lc3NhZ2UgeG1sbnM9Imh0dHA6Ly9zb2FwIj5oZWwgbG88L21lc3NhZ2U+CisgICAgICA8L3BpbmdSZXF1ZXN0PgorICAgIDwvcGluZz4KKyAgPC9lOkJvZHk+Cis8L2U6RW52ZWxvcGU+CisKKyAgPC90ZXh0YXJlYT4KKyAgICA8L3RkPgorICAgIDx0ZD4KKyAgPHRleHRhcmVhIGlkPSJyZXNwb25zZSIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo0MDBweCI+CisgIDwvdGV4dGFyZWE+CisgICAgPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCBjb2xzcGFuPTI+CisgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJTZW5kIiBvbkNsaWNrPSJzZW5kKCk7Ii8+CisgICAgPC90ZD4KKyAgPC90cj4KKzwvdGFibGU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvY2xpZW50L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvY2xpZW50L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1NjM1YgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9jbGllbnQvcG9tLnhtbApAQCAtMCwwICsxLDYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5icmlkZ2UtY2FtZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZS1jYW1lbDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5icmlkZ2UtY2FtZWwtY2xpZW50PC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IEJyaWRnZSBDYW1lbCA6OiBDbGllbnQ8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT4xLjU8L3NvdXJjZT4KKyAgICAgICAgICAgICAgICAgICAgPHRhcmdldD4xLjU8L3RhcmdldD4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxtYWluQ2xhc3M+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMuYnJpZGdlY2FtZWwuQ2xpZW50PC9tYWluQ2xhc3M+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPmZhbHNlPC9pbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9icmlkZ2VjYW1lbC9DbGllbnQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9icmlkZ2VjYW1lbC9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTU1OGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2NsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL2JyaWRnZWNhbWVsL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMuYnJpZGdlY2FtZWw7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnV0aWwuRmlsZVV0aWw7CisKK3B1YmxpYyBjbGFzcyBDbGllbnR7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICB0cnkgeworICAgICAgICBuZXcgQ2xpZW50KCkuc2VuZFJlcXVlc3QoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgc2VuZFJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MTkyL2JyaWRnZS8iKQorICAgICAgICAgICAgICAgIC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0aW9uLnNldERvSW5wdXQodHJ1ZSk7CisgICAgICAgIGNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CisgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIC8vIFBvc3QgdGhlIHJlcXVlc3QgZmlsZS4KKyAgICAgICAgSW5wdXRTdHJlYW0gZmlzID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIm9yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL2JyaWRnZWNhbWVsL3JlcXVlc3QueG1sIik7CisgICAgICAgIEZpbGVVdGlsLmNvcHlJbnB1dFN0cmVhbShmaXMsIG9zKTsKKyAgICAgICAgLy8gUmVhZCB0aGUgcmVzcG9uc2UuCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgRmlsZVV0aWwuY29weUlucHV0U3RyZWFtKGlzLCBiYW9zKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aGUgcmVzcG9uc2UgaXMgPT09PT0+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiYW9zLnRvU3RyaW5nKCkpOworICAgICAgICBpZiAoY29ubmVjdGlvbiBpbnN0YW5jZW9mIEh0dHBVUkxDb25uZWN0aW9uKSB7CisgICAgICAgICAgICBpbnQgcmV0Q29kZSA9ICgoSHR0cFVSTENvbm5lY3Rpb24pY29ubmVjdGlvbikuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRoZSByZXNwb25zZSBjb2RlIGlzID09PT09PiIpOy8vZXhwZWN0ZWQgaXMgMjAyIGZvciB0aGlzIGV4YW1wbGUKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXRDb2RlKTsKKyAgICAgICAgfQorICAgICAgIAorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvYnJpZGdlY2FtZWwvcmVxdWVzdC54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9icmlkZ2VjYW1lbC9yZXF1ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE1ZWNjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvYnJpZGdlY2FtZWwvcmVxdWVzdC54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlOkVudmVsb3BlIHhtbG5zOmU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKyAgPGU6Qm9keT4KKyAgICA8cGluZz4KKyAgICAgIDxwaW5nUmVxdWVzdD4KKyAgICAgICAgPG1lc3NhZ2UgeG1sbnM9Imh0dHA6Ly9zb2FwIj5oZWwgbG88L21lc3NhZ2U+CisgICAgICA8L3BpbmdSZXF1ZXN0PgorICAgIDwvcGluZz4KKyAgPC9lOkJvZHk+Cis8L2U6RW52ZWxvcGU+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlODczMDkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UtY2FtZWwvcG9tLnhtbApAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+YnJpZGdlLWNhbWVsPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IEJyaWRnZSBDYW1lbDwvbmFtZT4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCisgICAgPG1vZHVsZXM+CisgICAgICAgIDxtb2R1bGU+YnJpZGdlLWptcy1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmJyaWRnZS1odHRwLXN1PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YnJpZGdlLWNhbWVsLXN1PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YnJpZGdlLWNhbWVsLXNhPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2xpZW50PC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8aW5oZXJpdGVkPmZhbHNlPC9pbmhlcml0ZWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+c3JjPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wYWNrYWdlPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zaW5nbGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcj5zcmMvbWFpbi9hc3NlbWJseS9zcmMueG1sPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9zcmMvbWFpbi9hc3NlbWJseS9zcmMueG1sIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlLWNhbWVsL3NyYy9tYWluL2Fzc2VtYmx5L3NyYy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwYjI5OAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS1jYW1lbC9zcmMvbWFpbi9hc3NlbWJseS9zcmMueG1sCkBAIC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorPGFzc2VtYmx5PgorICAgIAorICAgIDxpZD5zcmM8L2lkPgorICAgIAorICAgIDxmb3JtYXRzPgorICAgICAgICA8Zm9ybWF0PnRhci5nejwvZm9ybWF0PgorICAgICAgICA8Zm9ybWF0PnppcDwvZm9ybWF0PgorICAgIDwvZm9ybWF0cz4KKyAgICAKKyAgICA8ZmlsZVNldHM+CisgICAgCisgICAgICAgIDxmaWxlU2V0PgorICAgICAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPlJFQURNRSo8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+TElDRU5TRSo8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+Tk9USUNFKjwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5wb20ueG1sPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlPiouaHRtbDwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT5zcmMvKiovKjwvaW5jbHVkZT4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZT4qL3BvbS54bWw8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgPGluY2x1ZGU+Ki9zcmMvKiovKjwvaW5jbHVkZT4KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgIDwvZmlsZVNldD4KKyAgICAKKyAgICA8L2ZpbGVTZXRzPgorCis8L2Fzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL1JFQURNRS50eHQgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk0ZTEyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL1JFQURNRS50eHQKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworRUlQIEpCSSBCUklER0UgRVhBTVBMRQorPT09PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitVc2UgdGhlIG9yaWdpbmFsIFNlcnZpY2VNaXggRUlQIGNvbXBvbmVudCBhbmQgSkJJIHRvIGNyZWF0ZSBhIHByb3RvY29sCiticmlkZ2UgdGhhdCByZWNlaXZlcyBhIG1lc3NhZ2UgdmlhIEhUVFAsIHRyYW5zZm9ybXMgaXQsIGFuZCBzZW5kcyBpdCB0bworYSBKTVMgcXVldWUuCisKK1RoaXMgZXhhbXBsZSB1c2VzIHRoZSBvbGRlciBTZXJ2aWNlTWl4IEVJUCBpbXBsZW1lbnRhdGlvbi4KK1RoZSBicmlkZ2UtY2FtZWwgZXhhbXBsZSwgb24gdGhlIG90aGVyIGhhbmQsIHVzZXMgQ2FtZWwgdG8gYWNoaWV2ZQordGhlIHNhbWUgcmVzdWx0LiBGb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyBDYW1lbCBjb21wYXJlcyB0byBTZXJ2aWNlTWl4IEVJUCwKK3NlZTogaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvaG93LWRvZXMtY2FtZWwtY29tcGFyZS10by1zZXJ2aWNlbWl4LWVpcC5odG1sCisKKworRXhwbGFuYXRpb24KKy0tLS0tLS0tLS0tCitUaGUgcHJvdG9jb2wgYnJpZGdlIGNvbnNpc3RzIG9mIGZvdXIgSkJJIFNlcnZpY2UgVW5pdHMgKFNVcykKK3dyYXBwZWQgdXAgaW4gYSBKQkkgU2VydmljZSBBc3NlbWJseSAoU0EpLiBUaGUgU0EgaXMgZGVwbG95ZWQKK3RvIFNlcnZpY2VNaXguCisKK1RoZSBTVXMgY2FuIGJlIGRlc2NyaWJlZCBhcyBmb2xsb3dzOgorCisxLiBIVFRQIFNVIChzZWUgdGhlIGJyaWRnZS1odHRwLXN1IGRpcmVjdG9yeSkKKyAgIEEgSFRUUCBlbmRwb2ludCB0aGF0IGxpc3RlbnMgb24gcG9ydCA4MTkyIGZvciBIVFRQIHJlcXVlc3RzLgorICAgCisyLiBFSVAgUGlwZWxpbmUgU1UgKHNlZSB0aGUgYnJpZGdlLWVpcC1zdSBkaXJlY3RvcnkpCisgICBBbiBFSVAgcGlwZWxpbmUgdGhhdCByZWNlaXZlcyBIVFRQIHJlcXVlc3RzLCBmb3J3YXJkcyB0aGVtIHRvCisgICB0aGUgWFNMVCB0cmFuc2Zvcm0sIGFuZCB0YWtlcyB0aGUgcmVzdWx0cyBvZiB0aGUgdHJhbnNmb3JtIGFuZAorICAgcGFzc2VzIHRoZW0gdG8gdGhlIEFjdGl2ZU1RIEpNUyBlbmRwb2ludC4KKworMy4gWFNMVCBTVSAoc2VlIHRoZSBicmlkZ2UteHNsdC1zdSBkaXJlY3RvcnkpCisgICBVc2VzIHRoZSBicmlkZ2UueHNsdCBYU0wgZmlsZSB0byBjb252ZXJ0IHRoZSBtZXNzYWdlIGludG8gdGhlCisgICBmb3JtYXQgcmVxdWlyZWQgYnkgSk1TLiBUaGUgZXhhbXBsZSBYU0xUIHBlcmZvcm1zIGEgdmVyeSBiYXNpYworICAgdHJhbnNmb3JtYXRpb24gYW5kIGlzIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzIG9ubHkuCisgICAKKzQuIEpNUyBTVSAoc2VlIHRoZSBicmlkZ2Utam1zLXN1IGRpcmVjdG9yeSkKKyAgIEFuIEFjdGl2ZU1RIEpNUyBlbmRwb2ludCB0byB3aGljaCB0aGUgRUlQIHBpcGVsaW5lIHNlbmRzCisgICBtZXNzYWdlcy4KKyAgIAorVGhlIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggU1UgaXMgY29udGFpbmVkIGluIHRoZSB4YmVhbi54bWwgZmlsZQordGhhdCBpcyBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMgZGlyZWN0b3J5IGZvciB0aGF0IFNVLgorRm9yIGV4YW1wbGUsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBIVFRQIFNVIGlzIGNvbnRhaW5lZCBpbiB0aGUKK3hiZWFuLnhtbCBmaWxlIGxvY2F0ZWQgaW4gdGhlIGJyaWRnZS1odHRwLXN1L3NyYy9tYWluL3Jlc291cmNlcworZGlyZWN0b3J5LgorCitUaGUgYnJpZGdlLXNhIGRpcmVjdG9yeSBjb250YWlucyB0aGUgUE9NIGZpbGUgdGhhdCB0ZWxscyBNYXZlbiBob3cgCit0byBidWlsZCB0aGUgU0EgZm9yIHRoaXMgZXhhbXBsZS4KKyAgIAorICAgCitQcmVyZXF1aXNpdGVzIGZvciBSdW5uaW5nIHRoaXMgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEuIFlvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lOgorCisgICAtIEpESyAxLjUgb3IgaGlnaGVyLgorCisgICAtIEFwYWNoZSBNYXZlbiAyLjAuOSBvciBoaWdoZXIuCisKKyAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFJFQURNRSBpbiB0aGUgdG9wLWxldmVsCisgICBleGFtcGxlcyBkaXJlY3RvcnkuCisKKworMi4gU3RhcnQgU2VydmljZU1peCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICA8c2VydmljZW1peF9ob21lPi9iaW4vc2VydmljZW1peCAgICAgICAgICAob24gVU5JWCkKKyAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgICAgICAgKG9uIFdpbmRvd3MpCisgIAorCitCdWlsZGluZyBhbmQgRGVwbG95aW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGV4YW1wbGUgdXNlcyB0aGUgU2VydmljZU1peCBKQkkgTWF2ZW4gcGx1Z2luIHRvIGJ1aWxkIHRoZQorU1VzIGFuZCB0aGUgU0EuIFRvIGJ1aWxkIHRoZSBleGFtcGxlLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kCisoZnJvbSB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBSRUFETUUpOgorCisgIG12biBpbnN0YWxsCisgIAorCitJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIGJ1bmRsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIGxvY2FsCitNYXZlbiByZXBvc2l0b3J5LCB0aGUgZXhhbXBsZSB3aWxsIGJ1aWxkIHF1aWNrbHkuIE90aGVyd2lzZQoraXQgbWF5IHRha2Ugc29tZSB0aW1lIGZvciBNYXZlbiB0byBkb3dubG9hZCBldmVyeXRoaW5nIGl0IG5lZWRzLgorCitPbmNlIGNvbXBsZXRlLCB5b3Ugd2lsbCBmaW5kIHRoZSBTQSwgY2FsbGVkIGJyaWRnZS1zYS0ke3ZlcnNpb259LnppcCwKK2luIHRoZSBicmlkZ2Utc2EvdGFyZ2V0IGRpcmVjdG9yeSBvZiB0aGlzIGV4YW1wbGUuCisKK1lvdSBjYW4gZGVwbG95IHRoZSBTQSBpbiB0d28gd2F5czoKKworLSBVc2luZyBIb3QgRGVwbG95bWVudAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgQ29weSB0aGUgYnJpZGdlLXNhLSR7dmVyc2lvbn0uemlwIGZpbGUgdG8gdGhlCisgIDxzZXJ2aWNlbWl4X2hvbWU+L2RlcGxveSBkaXJlY3RvcnkuCisgICAgIAorLSBVc2luZyB0aGUgU2VydmljZU1peCBDb25zb2xlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgIFR5cGUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgIG9zZ2k6aW5zdGFsbCAtcyBtdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZS9icmlkZ2Utc2EvJHt2ZXJzaW9ufS96aXAKKworCitSdW5uaW5nIGEgQ2xpZW50CistLS0tLS0tLS0tLS0tLS0tCitUbyBydW4gdGhlIHdlYiBjbGllbnQ6CisKKzEuIE9wZW4gdGhlIGNsaWVudC5odG1sIGZpbGUsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5CisgICBhcyB0aGlzIFJFQURNRSBmaWxlLCBpbiB5b3VyIGZhdm9yaXRlIGJyb3dzZXIuCisKKzIuIFNlbmQgYSBIVFRQIHJlcXVlc3QuIEl0IHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byBhIEpNUyBtZXNzYWdlLgorCisgICBPbmNlIHRoZSBKTVMgbWVzc2FnZSBpcyBzZW50IHRvIHRoZSBicmlkZ2Uub3V0cHV0IHF1ZXVlLCB5b3Ugd2lsbAorICAgcmVjZWl2ZSBhIEhUVFAgU1RBVFVTIDIwMiByZXNwb25zZSBjb2RlIGZyb20gdGhlIEVTQi4KKworCitUbyBydW4gdGhlIGphdmEgY29kZSBjbGllbnQ6CisKKzEuIENoYW5nZSB0byB0aGUgPHNlcnZpY2VtaXhfaG9tZT4vZXhhbXBsZXMvYnJpZGdlL2NsaWVudCBkaXJlY3RvcnkuCisKKzIuIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgbXZuIGNvbXBpbGUgZXhlYzpqYXZhCisKKworVmlld2luZyB0aGUgTG9nIEVudHJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHZpZXcgdGhlIG1lc3NhZ2UgdGhhdCBpcyBzZW50IGJ5IHZpZXdpbmcgdGhlIGVudHJpZXMKK2luIHRoZSBsb2cgZmlsZSBpbiB0aGUgZGF0YS9sb2cgZGlyZWN0b3J5IG9mIHlvdXIgU2VydmljZU1peAoraW5zdGFsbGF0aW9uLCBvciBieSB0eXBpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZQorU2VydmljZU1peCBjb25zb2xlOgorCisgIGxvZzpkaXNwbGF5CisgIAorCitDaGFuZ2luZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSBjaGFuZ2UgdGhlIGNvZGUgb3IgY29uZmlndXJhdGlvbiBpbiB0aGlzIGV4YW1wbGUsIHVzZQorJ212biBpbnN0YWxsJyB0byByZWJ1aWxkIHRoZSBKQkkgU0EgemlwLCBhbmQgZGVwbG95IGl0IGFzIGRlc2NyaWJlZAorYWJvdmUuCisKKworTW9yZSBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBleGFtcGxlLCBzZWU6CisKKyAgaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jcmVhdGluZy1hLXByb3RvY29sLWJyaWRnZS5odG1sCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWVpcC1zdS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS1laXAtc3UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2I1NTIzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS1laXAtc3UvcG9tLnhtbApAQCAtMCwwICsxLDUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisgICAgCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuYnJpZGdlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmJyaWRnZS1laXAtc3U8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5qYmktc2VydmljZS11bml0PC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQnJpZGdlIDo6IEVJUCBTVTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1laXA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2UtZWlwLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWVpcC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ODk1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWVpcC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPGJlYW5zIHhtbG5zOmVpcD0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9laXAvMS4wIg0KKyAgICAgICB4bWxuczpiPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvYnJpZGdlIj4NCisNCisgIDxlaXA6cGlwZWxpbmUgc2VydmljZT0iYjpwaXBlbGluZSIgZW5kcG9pbnQ9ImVuZHBvaW50Ij4NCisgICAgPGVpcDp0cmFuc2Zvcm1lcj4NCisgICAgICA8ZWlwOmV4Y2hhbmdlLXRhcmdldCBzZXJ2aWNlPSJiOnhzbHQiIC8+DQorICAgIDwvZWlwOnRyYW5zZm9ybWVyPg0KKyAgICA8ZWlwOnRhcmdldD4NCisgICAgICA8ZWlwOmV4Y2hhbmdlLXRhcmdldCBzZXJ2aWNlPSJiOmptcyIgLz4NCisgICAgPC9laXA6dGFyZ2V0Pg0KKyAgPC9laXA6cGlwZWxpbmU+DQorDQorPC9iZWFucz4NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWh0dHAtc3UvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2UtaHR0cC1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZGMyYzcKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWh0dHAtc3UvcG9tLnhtbApAQCAtMCwwICsxLDUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisgICAgCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuYnJpZGdlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmJyaWRnZS1odHRwLXN1PC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+amJpLXNlcnZpY2UtdW5pdDwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IEJyaWRnZSA6OiBIVFRQIFNVPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWh0dHA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2UtaHR0cC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS1odHRwLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlMGM2YgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2UtaHR0cC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPGJlYW5zIHhtbG5zOmh0dHA9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvaHR0cC8xLjAiDQorICAgICAgIHhtbG5zOmI9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy9icmlkZ2UiPg0KKw0KKyAgPGh0dHA6ZW5kcG9pbnQgc2VydmljZT0iYjpodHRwIg0KKyAgICAgICAgICAgICAgICAgZW5kcG9pbnQ9ImVuZHBvaW50Ig0KKyAgICAgICAgICAgICAgICAgdGFyZ2V0U2VydmljZT0iYjpwaXBlbGluZSINCisgICAgICAgICAgICAgICAgIHJvbGU9ImNvbnN1bWVyIiANCisgICAgICAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJodHRwOi8vMC4wLjAuMDo4MTkyL2JyaWRnZS8iDQorICAgICAgICAgICAgICAgICBkZWZhdWx0TWVwPSJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb25seSIgLz4NCisNCis8L2JlYW5zPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2Utam1zLXN1L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWptcy1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjA1YTYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWptcy1zdS9wb20ueG1sCkBAIC0wLDAgKzEsNzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+YnJpZGdlPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5icmlkZ2U8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+YnJpZGdlLWptcy1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBCcmlkZ2UgOjogSk1TIFNVPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWptczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlaW8tY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNhbWVsPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbG9nZ2luZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbG9nZ2luZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qMmVlLW1hbmFnZW1lbnRfMS4xX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2Utam1zLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWptcy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzNiNzgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLWptcy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPGJlYW5zIHhtbG5zOmptcz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9qbXMvMS4wIg0KKyAgICAgICB4bWxuczpiPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvYnJpZGdlIj4NCisNCisgIDxqbXM6ZW5kcG9pbnQgc2VydmljZT0iYjpqbXMiDQorICAgICAgICAgICAgICAgIGVuZHBvaW50PSJlbmRwb2ludCINCisgICAgICAgICAgICAgICAgcm9sZT0icHJvdmlkZXIiIA0KKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblN0eWxlPSJxdWV1ZSINCisgICAgICAgICAgICAgICAgam1zUHJvdmlkZXJEZXN0aW5hdGlvbk5hbWU9ImJyaWRnZS5vdXRwdXQiDQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25GYWN0b3J5PSIjY29ubmVjdGlvbkZhY3RvcnkiIC8+DQorICAgICAgICAgICAgICAgIA0KKyAgPGJlYW4gaWQ9ImNvbm5lY3Rpb25GYWN0b3J5IiBjbGFzcz0ib3JnLmFwYWNoZS5hY3RpdmVtcS5BY3RpdmVNUUNvbm5lY3Rpb25GYWN0b3J5Ij4NCisgICAgPHByb3BlcnR5IG5hbWU9ImJyb2tlclVSTCIgdmFsdWU9ImZhaWxvdmVyOih0Y3A6Ly9sb2NhbGhvc3Q6NjE2MTYpIiAvPg0KKyAgPC9iZWFuPg0KKyAgICAgICAgICAgICAgICAgICAgIA0KKzwvYmVhbnM+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS1zYS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS1zYS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwM2JmMTAKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLXNhL3BvbS54bWwKQEAgLTAsMCArMSw2OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5icmlkZ2U8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5icmlkZ2Utc2E8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5qYmktc2VydmljZS1hc3NlbWJseTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IEJyaWRnZSA6OiBTQTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZS1odHRwLXN1PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZS1laXAtc3U8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuYnJpZGdlPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YnJpZGdlLXhzbHQtc3U8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuYnJpZGdlPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YnJpZGdlLWptcy1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS14c2x0LXN1L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLXhzbHQtc3UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM0OWNlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS14c2x0LXN1L3BvbS54bWwKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5icmlkZ2U8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmJyaWRnZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5icmlkZ2UteHNsdC1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBCcmlkZ2UgOjogWFNMVCBTVTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1zYXhvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS14c2x0LXN1L3NyYy9tYWluL3Jlc291cmNlcy9icmlkZ2UueHNsdCBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2UteHNsdC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvYnJpZGdlLnhzbHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwYjA5NAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9icmlkZ2UteHNsdC1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvYnJpZGdlLnhzbHQKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgIA0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgDQorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICANCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8IS0tICRSZXY6IDM1NjA1MiAkICREYXRlOiAyMDA1LTEyLTExIDE0OjQxOjIwIC0wODAwIChkaW0uLCAxMSBk4oiawqljLiAyMDA1KSAkIC0tPg0KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIyLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4NCisgIDx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgaW5kZW50PSJ5ZXMiLz4NCisgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im5vZGUoKSB8IEAqIj4NCisgICAgPHhzbDpjb3B5Pg0KKyAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibm9kZSgpIHwgQCoiLz4NCisgICAgPC94c2w6Y29weT4NCisgIDwveHNsOnRlbXBsYXRlPg0KKzwveHNsOnN0eWxlc2hlZXQ+DQorDQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS14c2x0LXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvYnJpZGdlLXhzbHQtc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjUxMmNkCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvYnJpZGdlL2JyaWRnZS14c2x0LXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgIA0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgDQorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICANCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8YmVhbnMgeG1sbnM6c2F4b249Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2F4b24vMS4wIg0KKyAgICAgICB4bWxuczpiPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvYnJpZGdlIj4NCisNCisgIDxzYXhvbjp4c2x0IHNlcnZpY2U9ImI6eHNsdCIgZW5kcG9pbnQ9ImVuZHBvaW50Ig0KKyAgICAgICAgICAgICAgcmVzdWx0PSJzdHJpbmciDQorICAgICAgICAgICAgICByZXNvdXJjZT0iY2xhc3NwYXRoOmJyaWRnZS54c2x0IiAvPg0KKyAgPCEtLSBzYXhvbiBpcyBidWdnZWQgd2hlbiBkZWFsaW5nIHdpdGggeG1sbnM9Inh4eCIgYXR0cmlidXRlcw0KKyAgICAgICBzZWUgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyL2luZGV4LnBocD9mdW5jPWRldGFpbCZhaWQ9MTU1ODEzMyZncm91cF9pZD0yOTg3MiZhdGlkPTM5NzYxNw0KKyAgICAgICBzbyBqdXN0IHVzZSBzdHJpbmcgaW5zdGVhZCBvZiBET00gb3V0cHV0IGZvciBub3cgLS0+DQorDQorPC9iZWFucz4NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50Lmh0bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgwNWUzYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9jbGllbnQuaHRtbApAQCAtMCwwICsxLDEzNyBAQAorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPCEtLSAkUmV2OiAzNTYwNTIgJCAkRGF0ZTogMjAwNS0xMi0xMSAxNDo0MToyMCAtMDgwMCAoZGltLiwgMTEgZHapYy4gMjAwNSkgJCAtLT4NCis8aHRtbD4NCis8aGVhZD4NCis8dGl0bGU+U2VydmljZU1peCBCcmlkZ2UgRXhhbXBsZTwvdGl0bGU+DQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KK3ZhciB1cmxUb09wZW4gPSAiaHR0cDovL2xvY2FsaG9zdDo4MTkyL2JyaWRnZS8iOyAvL2RlZmF1bHQgVVJMIHRvIG9wZW4NCisNCitmdW5jdGlvbiBnZXRIVFRQT2JqZWN0KCkgew0KKyAgdmFyIHhtbGh0dHAgPSBmYWxzZTsNCisNCisgIC8qIENvbXBpbGF0aW9uIGNvbmRpdGlvbm5lbGxlIGQnSUUgKi8NCisgIC8qQGNjX29uDQorICBAaWYgKEBfanNjcmlwdF92ZXJzaW9uID49IDUpDQorICAgICB0cnkgew0KKyAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOw0KKyAgICAgfSBjYXRjaCAoZSkgew0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgIHhtbGh0dHAgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsNCisgICAgICAgIH0gY2F0Y2ggKEUpIHsNCisgICAgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsNCisgICAgICAgIH0NCisgICAgIH0NCisgIEBlbHNlDQorICAgICB4bWxodHRwID0gZmFsc2U7DQorICBAZW5kIEAqLw0KKw0KKyAgLyogb24gZXNzYWllIGRlIGNy6WVyIGwnb2JqZXQgc2kgY2Ugbidlc3QgcGFzIGTpauAgZmFpdCAqLw0KKyAgaWYgKCF4bWxodHRwICYmIHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPSAndW5kZWZpbmVkJykgew0KKyAgICAgdHJ5IHsNCisgICAgICAgIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsNCisgICAgIH0gY2F0Y2ggKGUpIHsNCisgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsNCisgICAgIH0NCisgIH0NCisNCisgIGlmICh4bWxodHRwKSB7DQorICAgICAvKiBvbiBk6WZpbml0IGNlIHF1aSBkb2l0IHNlIHBhc3NlciBxdWFuZCBsYSBwYWdlIHLpcG9uZHJhICovDQorICAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpIHsNCisgICAgICAgIGlmICh4bWxodHRwLnJlYWR5U3RhdGUgPT0gNCkgeyAvKiA0IDog6XRhdCAiY29tcGxldGUiICovDQorICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzcG9uc2UiKTsNCisgICAgICAgICAgIHZhciByZXNwb25zZVN0YXR1cyA9ICIiOw0KKyAgICAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICAgcmVzcG9uc2VTdGF0dXMgPSB4bWxodHRwLnN0YXR1cyArICIiOw0KKyAgICAgICAgICAgfSBjYXRjaCAoZSkgew0KKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9ICJFUlJPUiBXSElMRSBSRVRSSUVWSU5HIFNUQVRVUzsgTUFZQkUgVU5BQkxFIFRPIENPTk5FQ1QuIjsNCisgICAgICAgICAgIH0NCisgICAgICAgICAgIHJlc3BvbnNlLnZhbHVlID0gIlNUQVRVUzogIiArIHJlc3BvbnNlU3RhdHVzICsgIlxuIiArIHhtbGh0dHAucmVzcG9uc2VUZXh0Ow0KKyAgICAgICAgfQ0KKyAgICAgfQ0KKyAgfQ0KKyAgcmV0dXJuIHhtbGh0dHA7DQorfQ0KKw0KK2Z1bmN0aW9uIHNlbmQoKSB7DQorICBpZiAoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSAhPSB1cmxUb09wZW4pICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWUgIT0gIiIpKSB7DQorICAgIC8vdXNlIHVzZXIgZW50cnkgb25seSBpZiBpdCBhdCBsZWFzdCBjYW4gYmUgb2theQ0KKyAgICB1cmxUb09wZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWU7DQorICB9ICANCisgIHZhciB4bWxodHRwID0gZ2V0SFRUUE9iamVjdCgpOw0KKyAgaWYgKCF4bWxodHRwKSB7DQorICAgIGFsZXJ0KCdjb3VuZCBub3QgY3JlYXRlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCcpOw0KKyAgICByZXR1cm47DQorICB9DQorICB2YXIgcmVxdWVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXF1ZXN0Iik7DQorICB2YXIgcmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzcG9uc2UiKTsgIA0KKyAgdHJ5IHsNCisgICAgbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoIlVuaXZlcnNhbEJyb3dzZXJSZWFkIFVuaXZlcnNhbEJyb3dzZXJXcml0ZSIpOw0KKyAgfSBjYXRjaCAoZSkgew0KKyAgfQ0KKyAgdHJ5IHsNCisgICAgeG1saHR0cC5vcGVuKCJQT1NUIiwgdXJsVG9PcGVuLCB0cnVlKTsNCisgIH0gY2F0Y2ggKGUpIHsNCisgICAgYWxlcnQoJ0Vycm9yIG9wZW5pbmcgY29ubmVjdGlvbicpOw0KKyAgfQ0KKyAgeG1saHR0cC5zZW5kKHJlcXVlc3QudmFsdWUpOw0KK30NCisNCis8L3NjcmlwdD4NCis8L2hlYWQ+DQorDQorPGJvZHk+DQorDQorPGgxPlNlcnZpY2VNaXggQnJpZGdlIEV4YW1wbGU8L2gxPg0KKw0KKzxwPldlbGNvbWUgdG8gdGhlIEJyaWRnZSBleGFtcGxlIGZvciBTZXJ2aWNlTWl4LjwvcD4NCisNCis8cD5QZXJmb3JtIGEgUE9TVCBpbnRvIHRoZSBIVFRQIGJpbmRpbmcuIFRoaXMgcmVxdWlyZXMgSmF2YVNjcmlwdC48L3A+IA0KKzxwPlRhcmdldDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjUwIiBpZD0idXJsVG9PcGVuIiB2YWx1ZT0iIj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlID0gdXJsVG9PcGVuOzwvc2NyaXB0Pi48L3A+DQorDQorDQorPHRhYmxlPg0KKyAgPHRyPg0KKyAgICA8dGQ+DQorICA8dGV4dGFyZWEgaWQ9InJlcXVlc3QiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NDAwcHgiIG9uS2V5VXA9InNlbmQoKTsiPjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGU6RW52ZWxvcGUgeG1sbnM6ZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPg0KKyAgPGU6Qm9keT4NCisgICAgPHBpbmc+DQorICAgICAgPHBpbmdSZXF1ZXN0Pg0KKyAgICAgICAgPG1lc3NhZ2UgeG1sbnM9Imh0dHA6Ly9zb2FwIj5oZWwgbG88L21lc3NhZ2U+DQorICAgICAgPC9waW5nUmVxdWVzdD4NCisgICAgPC9waW5nPg0KKyAgPC9lOkJvZHk+DQorPC9lOkVudmVsb3BlPg0KKw0KKyAgPC90ZXh0YXJlYT4NCisgICAgPC90ZD4NCisgICAgPHRkPg0KKyAgPHRleHRhcmVhIGlkPSJyZXNwb25zZSIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDo0MDBweCI+DQorICA8L3RleHRhcmVhPg0KKyAgICA8L3RkPg0KKyAgPC90cj4NCisgIDx0cj4NCisgICAgPHRkIGNvbHNwYW49Mj4NCisgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJTZW5kIiBvbkNsaWNrPSJzZW5kKCk7Ii8+DQorICAgIDwvdGQ+DQorICA8L3RyPg0KKzwvdGFibGU+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxMjVhNwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9jbGllbnQvcG9tLnhtbApAQCAtMCwwICsxLDYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisgICAgCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmJyaWRnZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuYnJpZGdlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmJyaWRnZS1jbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQnJpZGdlIDo6IENsaWVudDwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC11dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgorICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuNTwvdGFyZ2V0PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5leGVjLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG1haW5DbGFzcz5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy5icmlkZ2UuQ2xpZW50PC9tYWluQ2xhc3M+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPmZhbHNlPC9pbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9icmlkZ2UvQ2xpZW50LmphdmEgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvYnJpZGdlL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDdmYjcKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvYnJpZGdlL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMuYnJpZGdlOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5ldC5IdHRwVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKKworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC51dGlsLkZpbGVVdGlsOworCitwdWJsaWMgY2xhc3MgQ2xpZW50eworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgbmV3IENsaWVudCgpLnNlbmRSZXF1ZXN0KCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNlbmRSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODE5Mi9icmlkZ2UvIikKKyAgICAgICAgICAgICAgICAub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubmVjdGlvbi5zZXREb0lucHV0KHRydWUpOworICAgICAgICBjb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOworICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpOworICAgICAgICAvLyBQb3N0IHRoZSByZXF1ZXN0IGZpbGUuCisgICAgICAgIElucHV0U3RyZWFtIGZpcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9icmlkZ2UvcmVxdWVzdC54bWwiKTsKKyAgICAgICAgRmlsZVV0aWwuY29weUlucHV0U3RyZWFtKGZpcywgb3MpOworICAgICAgICAvLyBSZWFkIHRoZSByZXNwb25zZS4KKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICBGaWxlVXRpbC5jb3B5SW5wdXRTdHJlYW0oaXMsIGJhb3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRoZSByZXNwb25zZSBpcyA9PT09PT4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJhb3MudG9TdHJpbmcoKSk7CisgICAgICAgIGlmIChjb25uZWN0aW9uIGluc3RhbmNlb2YgSHR0cFVSTENvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgIGludCByZXRDb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbiljb25uZWN0aW9uKS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhlIHJlc3BvbnNlIGNvZGUgaXMgPT09PT0+Iik7Ly9leHBlY3RlZCBpcyAyMDIgZm9yIHRoaXMgZXhhbXBsZQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldENvZGUpOworICAgICAgICB9CisgICAgICAgCisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9icmlkZ2UvcmVxdWVzdC54bWwgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9icmlkZ2UvcmVxdWVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0OWQwOQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL2JyaWRnZS9yZXF1ZXN0LnhtbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+ICAgICAgICAKKzxlOkVudmVsb3BlIHhtbG5zOmU9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKyAgPGU6Qm9keT4KKyAgICA8cGluZz4KKyAgICAgIDxwaW5nUmVxdWVzdD4KKyAgICAgICAgPG1lc3NhZ2UgeG1sbnM9Imh0dHA6Ly9zb2FwIj5oZWwgbG88L21lc3NhZ2U+CisgICAgICA8L3BpbmdSZXF1ZXN0PgorICAgIDwvcGluZz4KKyAgPC9lOkJvZHk+Cis8L2U6RW52ZWxvcGU+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9icmlkZ2UvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2JyaWRnZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWUxMzQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9icmlkZ2UvcG9tLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisgICAgCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmV4YW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPmJyaWRnZTwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBCcmlkZ2U8L25hbWU+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKworICAgIDxtb2R1bGVzPgorICAgICAgICA8bW9kdWxlPmJyaWRnZS1odHRwLXN1PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YnJpZGdlLWVpcC1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmJyaWRnZS14c2x0LXN1PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YnJpZGdlLWptcy1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmJyaWRnZS1zYTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmNsaWVudDwvbW9kdWxlPgorICAgIDwvbW9kdWxlcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2NhbWVsLWJsdWVwcmludC9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtYmx1ZXByaW50L1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxOWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLWJsdWVwcmludC9SRUFETUUudHh0CkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0NBTUVMIE9TR0kgRVhBTVBMRQorPT09PT09PT09PT09PT09PT09CisKK1B1cnBvc2UKKy0tLS0tLS0KK0RlcGxveXMgYSBDYW1lbCBFSVAgcm91dGUgYXMgYW4gT1NHaSBidW5kbGUgdXNpbmcgQmx1ZXByaW50LgorQ29uZmlndXJhdGlvbiBtYWtlcyB1c2Ugb2YgdGhlIE9TR2kgQ29uZmlndXJhdGlvbiBBZG1pbiBzZXJ2aWNlIGFuZAorQmx1ZXByaW50IHByb3BlcnR5IHBsYWNlaG9sZGVycywgYW5kIHRoZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBob3cgdG8KK2RlcGxveSB0aGUgcHJvcGVydGllcyBmaWxlIGZyb20gdGhlIFNlcnZpY2VNaXggY29uc29sZS4KKworCitFeHBsYW5hdGlvbgorLS0tLS0tLS0tLS0KK1RoZSBDYW1lbCByb3V0ZSBpcyBkZWZpbmVkIGluIGEgQmx1ZXByaW50IFhNTCBmaWxlLCBibHVlcHJpbnQueG1sLCB3aGljaCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvT1NHSS1JTkYvYmx1ZXByaW50IGRpcmVjdG9yeSBvZiB0aGlzIGV4YW1wbGUuCitUaGUgcm91dGUgaXMgZGVmaW5lZCBpbiB0aGUgPHJvdXRlPiBlbGVtZW50IGFuZCBjYW4gYmUgZXhwbGFpbmVkIGFzIGZvbGxvd3M6CisKKzEuIEEgdGltZXIgZW5kcG9pbnQgZ2VuZXJhdGVzIGEgaGVhcnRiZWF0IGV2ZW50IGV2ZXJ5IDIwMDBtcy4KKyAgICAgICAKKzIuIEEgY2FsbG91dCBpcyBtYWRlIHRvIGEgdHJhbnNmb3JtZXIgYmVhbiB0aGF0IHRyYW5zZm9ybXMgZWFjaAorICAgaGVhcnRiZWF0IG1lc3NhZ2UgdG8gdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKyAgICAgICAgCiszLiBBIGxvZyBlbmRwb2ludCBzZW5kcyB0aGUgdHJhbnNmb3JtZWQgbWVzc2FnZSB0byB0aGUKKyAgIEpha2FydGEgY29tbW9ucyBsb2dnZXIuCisgICAgICAKK1RoZSBibHVlcHJpbnQueG1sIGZpbGUgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgorCistICBBIDxiZWFuPiBlbGVtZW50IHRoYXQgaW5zdGFudGlhdGVzIHRoZSB0cmFuc2Zvcm1lciBiZWFuIHVzaW5nIHN0YW5kYXJkCisgICBCbHVlcHJpbnQgY29uZmlndXJhdGlvbiBzeW50YXggYW5kIHNwZWNpZmllcyBhIHByZWZpeCB2YWx1ZSB1c2luZyBhCisgICBwcm9wZXJ0eSBwbGFjZWhvbGRlci4gCisgICAKKy0gIEFuIDxjbTpwcm9wZXJ0eS1wbGFjZWhvbGRlcj4gZWxlbWVudCB3aGljaCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgcGxhY2Vob2xkZXIKKyAgIHZhbHVlcyB1c2luZyB0aGUgT1NHaSBDb25maWd1cmF0aW9uIEFkbWluIHNlcnZpY2UuIEluIHRoaXMgY2FzZSwgdGhlIAorICAgcHJvcGVydHkgaXMgYWxzbyBnaXZlbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAiTXlUcmFuc2Zvcm0iLgorICAgCitUaGUgcm91dGUgYW5kIGNvbmZpZ3VyYXRpb24gYXJlIGRlcGxveWVkIGluIGFuIE9TR2kgYnVuZGxlLiAgIAorCisgICAKK1ByZXJlcXVpc2l0ZXMgZm9yIFJ1bm5pbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEuIFlvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lOgorCisgICAtIEpESyAxLjUgb3IgaGlnaGVyCisKKyAgIC0gTWF2ZW4gMi4wLjkgb3IgaGlnaGVyIChmb3IgYnVpbGRpbmcpCisgICAKKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgUkVBRE1FIGluIHRoZSB0b3AtbGV2ZWwgZXhhbXBsZXMKKyAgZGlyZWN0b3J5LgorCisyLiBTdGFydCBTZXJ2aWNlTWl4IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgICAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXggICAgICAgICAgKG9uIFVOSVgpCisgICAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgICAgICAgKG9uIFdpbmRvd3MpCisKKworUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiBydW4gdGhlIGV4YW1wbGUgaW4gdHdvIHdheXM6CisKKy0gQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgZXhhbXBsZSB1cCBhbmQKKyAgcnVubmluZyBxdWlja2x5LgorCistIEIuIEJ1aWxkaW5nIHRoZSBFeGFtcGxlIEJ1bmRsZSBZb3Vyc2VsZgorICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBleGFtcGxlIGluIGFueSB3YXkuCisgIEl0IHRlbGxzIHlvdSBob3cgdG8gYnVpbGQgYW5kIGRlcGxveSB0aGUgZXhhbXBsZS4gVGhpcyBvcHRpb24gbWlnaHQKKyAgYmUgc2xvd2VyIHRoYW4gb3B0aW9uIEEgYmVjYXVzZSwgaWYgeW91IGRvIG5vdCBhbHJlYWR5IGhhdmUgdGhlCisgIHJlcXVpcmVkIGJ1bmRsZXMgaW4geW91ciBsb2NhbCBNYXZlbiByZXBvc2l0b3J5LCBNYXZlbiB3aWxsIGhhdmUgdG8KKyAgZG93bmxvYWQgdGhlIGJ1bmRsZXMgaXQgbmVlZHMuCisKKworQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBpbnN0YWxsIGFuZCBydW4gYSBwcmVidWlsdCB2ZXJzaW9uIG9mIHRoaXMgZXhhbXBsZSwgZW50ZXIgdGhlCitmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOmluc3RhbGwgZXhhbXBsZXMtY2FtZWwtYmx1ZXByaW50CisgIAorVGhpcyBjb21tYW5kIG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yIG1vcmUKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0IGZpbGUgaW4gdGhlCitleGFtcGxlcyBwYXJlbnQgZGlyZWN0b3J5LgorCitPbmNlIHRoZSBleGFtcGxlIGlzIHJ1bm5pbmcsIHBlcmlvZGljIGV2ZW50cyBhcmUgcm91dGVkIHRvIHRoZSB0cmFuc2Zvcm0KK21ldGhvZCBvZiB0aGUgTXlUcmFuc2Zvcm0gY2xhc3MgYW5kIHlvdSBzaG91bGQgc2VlIG91dHB1dCBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nIGJlaW5nIGxvZ2dlZCB0byB5b3VyIGNvbnNvbGUgc2NyZWVuOgorCis+Pj4+IEJsdWVwcmludC1FeGFtcGxlIHNldCBib2R5OiAgVHVlIEphbiAwNCAxMDoyMzozOSBDRVQgMjAxMQorPj4+PiBCbHVlcHJpbnQtRXhhbXBsZSBzZXQgYm9keTogIFR1ZSBKYW4gMDQgMTA6MjM6NDEgQ0VUIDIwMTEKKz4+Pj4gQmx1ZXByaW50LUV4YW1wbGUgc2V0IGJvZHk6ICBUdWUgSmFuIDA0IDEwOjIzOjQzIENFVCAyMDExCisKK1VwZGF0aW5nIGFuZCBSZWRlcGxveWluZyB0aGUgUHJvcGVydGllcyBGaWxlIGZyb20gdGhlIENvbnNvbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gdXBkYXRlIGFuZCByZWRlcGxveSB0aGUgcHJvcGVydGllcyBmaWxlIHRoYXQgaXMgdXNlZCBieSB0aGUKK3Byb3BlcnRpZXMgcGxhY2Vob2xkZXIgaW4gdGhlIGJsdWVwcmludC54bWwgZnJvbSBjb25zb2xlIGFzIGZvbGxvd3M6CisKKzEuIEVkaXQgdGhlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jZmcgZmlsZSwgbG9jYXRlZCBpbiB0aGUKKyAgIHNhbWUgZm9sZGVyIGFzIHRoaXMgUkVBRE1FLCBieSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlICJwcmVmaXgiCisgICBrZXkgdG8gd2hhdGV2ZXIgeW91IHdhbnQgKGZvciBleGFtcGxlLCBZb3VyVHJhbnNmb3JtKS4KKyAgCisyLiBDb3B5IHRoZSB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byB5b3VyIDxzZXJ2aWNlbWl4X2hvbWU+L2V0YworICAgZGlyZWN0b3J5LiBZb3UgY2FuIGRvIHRoaXMgZnJvbSB0aGUgU2VydmljZU1peCBjb25zb2xlIGJ5IHR5cGluZzoKKworICAgICBjb3B5ICRZT1VSX1NFUlZJQ0VNSVhfSE9NRS9leGFtcGxlcy9jYW1lbC1vc2dpL29yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jZmcKKyAgICAgJFlPVVJfU0VSVklDRU1JWF9IT01FL2V0YworCisgICBPbiBXaW5kb3dzIHlvdSBuZWVkIHRvIHJlcGxhY2UgLyBpbiB0aGUgcGF0aCB3aXRoIFxcLgorCisgICBOb3RlLCB0aGUgdGV4dCB5b3UgYXJlIHR5cGluZyBtaWdodCBpbnRlcm1pbmdsZSB3aXRoIHRoZSBvdXRwdXQKKyAgIGJlaW5nIGxvZ2dlZC4gVGhpcyBpcyBub3RoaW5nIHRvIHdvcnJ5IGFib3V0LgorCiszLiBSZXN0YXJ0IHRoZSBleGFtcGxlIGJ1bmRsZToKKworICAgKGkpIEZpcnN0IHlvdSBtdXN0IGtub3cgdGhlIGJ1bmRsZSBJRCB0aGF0IFNlcnZpY2VNaXggaGFzIGFzc2lnbmVkCisgICAgICAgdG8gaXQuIFRvIGdldCB0aGUgYnVuZGxlIElELCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlCisgICAgICAgU2VydmljZU1peCBjb25zb2xlOgorCisgICAgICAgICBvc2dpOmxpc3QKKworICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgbGlzdGluZywgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgc2ltaWxhciB0bworICAgICAgdGhlIGZvbGxvd2luZzoKKworICAgICAgWzE1OF0gW0FjdGl2ZSAgICAgXSBbU3RhcnRlZCAgXSBbICA2MF0gQXBhY2hlIFNlcnZpY2VNaXggRXhhbXBsZSA6OiBDYW1lbCBPU0dpICg0LjEuMCkKKyAKKyAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGJ1bmRsZSBJRCBpcyAxNTguCisKKyAgIChpaSkgRW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGUgdG8KKyAgICAgICAgcmVzdGFydCB0aGUgYnVuZGxlOgorICAgIAorICAgICAgICAgIG9zZ2k6cmVzdGFydCA8YnVuZGxlX2lkPgorICAKKyAgVGhlIHByZWZpeCBvZiB0aGUgb3V0cHV0IHNob3VsZCBjaGFuZ2UsIGFuZCB0aGUgb3V0cHV0IHNob3VsZCBsb29rCisgIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworICA+Pj4+IFlvdXJUcmFuc2Zvcm0gc2V0IGJvZHk6ICBUdWUgQXVnIDExIDE3OjE0OjEyIEJTVCAyMDA5CisgID4+Pj4gWW91clRyYW5zZm9ybSBzZXQgYm9keTogIFR1ZSBBdWcgMTEgMTc6MTQ6MTQgQlNUIDIwMDkKKyAgPj4+PiBZb3VyVHJhbnNmb3JtIHNldCBib2R5OiAgVHVlIEF1ZyAxMSAxNzoxNDoxNiBCU1QgMjAwOQorICAKK0ZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3RvcCBhbmQvb3IgdW5pbnN0YWxsIHRoZSBleGFtcGxlLCBzZWUKKyJTdG9wcGluZyBhbmQgVW5pbnN0YWxsaW5nIHRoZSBFeGFtcGxlIiBiZWxvdy4KKworCitCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIHRoZSBleGFtcGxlIHdoZXJlIHlvdSBidWlsZCB0aGUgZXhhbXBsZSBidW5kbGUKK3lvdXJzZWxmLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IHJ1biB0aGUgZXhhbXBsZSB1c2luZyB0aGUgcHJlYnVpbHQgdmVyc2lvbiBhcworICAgZGVzY3JpYmVkIGFib3ZlLCB5b3UgbXVzdCBmaXJzdCB1bmluc3RhbGwgdGhlIGV4YW1wbGVzLWNhbWVsLW9zZ2kKKyAgIGZlYXR1cmUgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgICAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWNhbWVsLWJsdWVwcmludAorCisyLiBCdWlsZCB0aGUgZXhhbXBsZSBieSBvcGVuaW5nIGEgY29tbWFuZCBwcm9tcHQsIGNoYW5naW5nIGRpcmVjdG9yeSB0bworICAgZXhhbXBsZXMvY2FtZWwtb3NnaSAodGhpcyBleGFtcGxlKSBhbmQgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBNYXZlbgorICAgY29tbWFuZDoKKworICAgICBtdm4gaW5zdGFsbAorICAgCisgICBJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgbG9jYWwgTWF2ZW4KKyAgIHJlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgdmVyeSBxdWlja2x5LiBPdGhlcndpc2UgaXQgbWF5CisgICB0YWtlIHNvbWUgdGltZSBmb3IgTWF2ZW4gdG8gZG93bmxvYWQgZXZlcnl0aGluZyBpdCBuZWVkcy4KKyAgIAorICAgVGhlIG12biBpbnN0YWxsIGNvbW1hbmQgYnVpbGRzIHRoZSBleGFtcGxlIGRlcGxveW1lbnQgYnVuZGxlIGFuZAorICAgY29waWVzIGl0IHRvIHlvdXIgbG9jYWwgTWF2ZW4gcmVwb3NpdG9yeSBhbmQgdG8gdGhlIHRhcmdldCBkaXJlY3RvcnkKKyAgIG9mIHRoaXMgZXhhbXBsZS4KKyAgICAgCiszLiBJbnN0YWxsIHRoZSBleGFtcGxlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbgorICAgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKyAgIAorICAgICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWNhbWVsLWJsdWVwcmludAorICAgICAgIAorICAgSXQgbWFrZXMgdXNlIG9mIHRoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzIGZhY2lsaXR5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgYWJvdXQgdGhlIGZlYXR1cmVzIGZhY2lsaXR5LCBzZWUgdGhlIFJFQURNRS50eHQgZmlsZSBpbiB0aGUgZXhhbXBsZXMKKyAgIHBhcmVudCBkaXJlY3RvcnkuCisgICAKK09uY2UgdGhlIGV4YW1wbGUgaXMgcnVubmluZywgcGVyaW9kaWMgZXZlbnRzIGFyZSByb3V0ZWQgdG8gdGhlCit0cmFuc2Zvcm0gbWV0aG9kIG9mIHRoZSBNeVRyYW5zZm9ybSBjbGFzcyBhbmQgeW91IHNob3VsZCBzZWUgb3V0cHV0CitzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmcgYmVpbmcgbG9nZ2VkIHRvIHlvdXIgY29uc29sZSBzY3JlZW46CisKKz4+Pj4gQmx1ZXByaW50LUV4YW1wbGUgc2V0IGJvZHk6ICBUdWUgSmFuIDA0IDEwOjIzOjM5IENFVCAyMDExCis+Pj4+IEJsdWVwcmludC1FeGFtcGxlIHNldCBib2R5OiAgVHVlIEphbiAwNCAxMDoyMzo0MSBDRVQgMjAxMQorPj4+PiBCbHVlcHJpbnQtRXhhbXBsZSBzZXQgYm9keTogIFR1ZSBKYW4gMDQgMTA6MjM6NDMgQ0VUIDIwMTEKKworTm93LCBpZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBkb25lIHNvLCB0cnkgdXBkYXRpbmcgYW5kIHJlZGVwbG95aW5nLAorZnJvbSB0aGUgY29uc29sZSwgdGhlIHByb3BlcnRpZXMgZmlsZSB0aGF0IGlzIHVzZWQgYnkgdGhlIHByb3BlcnRpZXMKK3BsYWNlaG9sZGVyIGluIHRoZSBibHVlcHJpbnQueG1sIGZpbGUuIEZvciBkZXRhaWxzIG9uIGhvdyB0byBkbyB0aGlzLCBzZWUKK3RoZSAiVXBkYXRpbmcgYW5kIFJlZGVwbG95aW5nIHRoZSBQcm9wZXJ0aWVzIEZpbGUgZnJvbSB0aGUgQ29uc29sZSIKK3NlY3Rpb24gYWJvdmUuCisKKworU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCB0aGUgZXhhbXBsZSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4Citjb25zb2xlOgorCisgIG9zZ2k6c3RvcCA8YnVuZGxlX2lkPgorCitGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGZpbmQgdGhlIGJ1bmRsZV9pZCBhc3NpZ25lZCB0byB0aGUgZXhhbXBsZSwKK3NlZSBzdGVwIDMgaW4gdGhlICJVcGRhdGluZyBhbmQgUmVkZXBsb3lpbmcgdGhlIFByb3BlcnRpZXMgRmlsZSAKK2Zyb20gdGhlIENvbnNvbGUiIHNlY3Rpb24gYWJvdmUuCisKK1RvIHVuaW5zdGFsbCB0aGUgZXhhbXBsZSwgZW50ZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgaW4KK3RoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWNhbWVsLWJsdWVwcmludAorIAorb3IKKyAKKyAgb3NnaTp1bmluc3RhbGwgPGJ1bmRsZV9pZD4KKyAgCisKK1ZpZXdpbmcgdGhlIExvZyBFbnRyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiB2aWV3IHRoZSBlbnRyaWVzIGluIHRoZSBsb2cgZmlsZSBpbiB0aGUgZGF0YS9sb2cKK2RpcmVjdG9yeSBvZiB5b3VyIFNlcnZpY2VNaXggaW5zdGFsbGF0aW9uLCBvciBieSB0eXBpbmcKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGxvZzpkaXNwbGF5CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNmZyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLWJsdWVwcmludC9vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWZiYTYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNmZwpAQCAtMCwwICsxLDIyIEBACisjCisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkICB1bmRlciB0aGUgIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcgorIyBpbXBsaWVkLgorIworIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIworCisKK3ByZWZpeD1Zb3VyVHJhbnNmb3JtCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLWJsdWVwcmludC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmEwODUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQvcG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisKKyAgICA8IS0tCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmV4YW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPmNhbWVsLWJsdWVwcmludDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IENhbWVsIEJsdWVwcmludDwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FtZWwgRXhhbXBsZSB1c2luZyBibHVlcHJpbnQgZm9yIGNvbmZpZ3VyYXRpb248L2Rlc2NyaXB0aW9uPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1EZXNjcmlwdGlvbj4ke3Byb2plY3QuZGVzY3JpcHRpb259PC9CdW5kbGUtRGVzY3JpcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+KixvcmcuYXBhY2hlLmNhbWVsLm9zZ2k8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFByaXZhdGUtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2FtZWw8L1ByaXZhdGUtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY2FtZWwvTXlUcmFuc2Zvcm0uamF2YSBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLWJsdWVwcmludC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jYW1lbC9NeVRyYW5zZm9ybS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjU5NmMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY2FtZWwvTXlUcmFuc2Zvcm0uamF2YQpAQCAtMCwwICsxLDUyIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2FtZWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK3B1YmxpYyBjbGFzcyBNeVRyYW5zZm9ybSAgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgdHJhbnNpZW50IExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE15VHJhbnNmb3JtLmNsYXNzLmdldE5hbWUoKSk7CisgICAgcHJpdmF0ZSBib29sZWFuIHZlcmJvc2UgPSB0cnVlOworICAgIHByaXZhdGUgU3RyaW5nIHByZWZpeCA9ICJNeVRyYW5zZm9ybSI7CisKKyAgICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgYm9keSkgeworICAgICAgICBTdHJpbmcgYW5zd2VyID0gcHJlZml4ICsgIiBzZXQgYm9keTogICIgKyBuZXcgRGF0ZSgpOworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+ICIgKyBhbnN3ZXIpOworICAgICAgICB9CisgICAgICAgIGxvZ2dlci5pbmZvKCI+Pj4+ICIgKyBhbnN3ZXIpOworICAgICAgICByZXR1cm4gYW5zd2VyOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzVmVyYm9zZSgpIHsKKyAgICAgICAgcmV0dXJuIHZlcmJvc2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VmVyYm9zZShib29sZWFuIHZlcmJvc2UpIHsKKyAgICAgICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpIHsKKyAgICAgICAgcmV0dXJuIHByZWZpeDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIHByZWZpeCkgeworICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC1ibHVlcHJpbnQvc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2JsdWVwcmludC9ibHVlcHJpbnQueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtYmx1ZXByaW50L3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9ibHVlcHJpbnQvYmx1ZXByaW50LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWVkMjFlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtYmx1ZXByaW50L3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9ibHVlcHJpbnQvYmx1ZXByaW50LnhtbApAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tPgorPGJsdWVwcmludAorICAgIHhtbG5zPSJodHRwOi8vd3d3Lm9zZ2kub3JnL3htbG5zL2JsdWVwcmludC92MS4wLjAiCisgICAgeG1sbnM6Y209Imh0dHA6Ly9hcmllcy5hcGFjaGUub3JnL2JsdWVwcmludC94bWxucy9ibHVlcHJpbnQtY20vdjEuMC4wIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3Lm9zZ2kub3JnL3htbG5zL2JsdWVwcmludC92MS4wLjAgaHR0cDovL3d3dy5vc2dpLm9yZy94bWxucy9ibHVlcHJpbnQvdjEuMC4wL2JsdWVwcmludC54c2QiPgorCisgICAgPGNtOnByb3BlcnR5LXBsYWNlaG9sZGVyIHBlcnNpc3RlbnQtaWQ9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyI+CisgICAgICAgIDxjbTpkZWZhdWx0LXByb3BlcnRpZXM+CisgICAgICAgICAgICA8Y206cHJvcGVydHkgbmFtZT0icHJlZml4IiB2YWx1ZT0iQmx1ZXByaW50LUV4YW1wbGUiLz4KKyAgICAgICAgPC9jbTpkZWZhdWx0LXByb3BlcnRpZXM+CisgICAgPC9jbTpwcm9wZXJ0eS1wbGFjZWhvbGRlcj4KKworICAgIDxjYW1lbENvbnRleHQgeG1sbnM9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9ibHVlcHJpbnQiPgorICAgICAgICA8cm91dGU+CisgICAgICAgICAgICA8ZnJvbSB1cmk9InRpbWVyOi8vbXlUaW1lcj9maXhlZFJhdGU9dHJ1ZSZhbXA7cGVyaW9kPTIwMDAiIC8+CisgICAgICAgICAgICA8YmVhbiByZWY9Im15VHJhbnNmb3JtIiBtZXRob2Q9InRyYW5zZm9ybSIvPgorICAgICAgICAgICAgPHRvIHVyaT0ibG9nOkV4YW1wbGVSb3V0ZXJCbHVlcHJpbnQiIC8+CisgICAgICAgIDwvcm91dGU+CisgICAgPC9jYW1lbENvbnRleHQ+CisKKyAgICA8YmVhbiBpZD0ibXlUcmFuc2Zvcm0iIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2FtZWwuTXlUcmFuc2Zvcm0iPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icHJlZml4IiB2YWx1ZT0iJHtwcmVmaXh9IiAvPgorICAgIDwvYmVhbj4KKworPC9ibHVlcHJpbnQ+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC1ubXItYmx1ZXByaW50L1JFQURNRS50eHQgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ubXItYmx1ZXByaW50L1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkMDVlNwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvUkVBRE1FLnR4dApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitDQU1FTCBCTFVFUFJJTlQgTk1SIEVYQU1QTEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitVc2luZyBCbHVlcHJpbnQsIHRoaXMgZXhhbXBsZSBkZXBsb3lzIHR3byBDYW1lbCBFSVAgcm91dGVzIHRoYXQgY29tbXVuaWNhdGUKK3dpdGggZWFjaCBvdGhlciB2aWEgdGhlIFNlcnZpY2VNaXggTk1SLgorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIE5NUiBpcyBhIGdlbmVyYWwtcHVycG9zZSBtZXNzYWdlIGJ1cyB0aGF0IGFwcGxpY2F0aW9ucyBjYW4KK3VzZSB0byBjb21tdW5pY2F0ZSB3aXRoaW4gdGhlIFNlcnZpY2VNaXggT1NHaSBjb250YWluZXIuIEl0IGlzCittb2RlbGVkIG9uIHRoZSBOb3JtYWxpemVkIE1lc3NhZ2UgUm91dGVyIChOTVIpIGRlZmluZWQgaW4gdGhlIAorSmF2YSBCdXNpbmVzcyBJbnRlZ3JhdGlvbiAoSkJJKSBzcGVjaWZpY2F0aW9uLgorCitUaGUgQ2FtZWwgcm91dGVzIGFyZSBkZWZpbmVkIGluIHRoZSBiZWFucy54bWwgZmlsZSB0aGF0IGlzIGxvY2F0ZWQKK2luIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvT1NHSS1JTkYvYmx1ZXByaW50IGRpcmVjdG9yeSBvZiB0aGlzIGV4YW1wbGUuCitUaGUgY29udGVudHMgb2YgdGhlIGJsdWVwcmludC54bWwgZmlsZSBjYW4gYmUgZXhwbGFpbmVkIGFzIGZvbGxvd3M6CisKKzEuIERlZmluZXMgYSByb3V0ZSB0aGF0IGdlbmVyYXRlcyBhIGhlYXJ0YmVhdCBtZXNzYWdlIGV2ZXJ5CisgICAyMDAwbXMgYW5kIHNlbmRzIGl0IHRvIHRoZSBOTVIuCisKKzIuIERlZmluZXMgYSBzZWNvbmQgcm91dGUgdGhhdCByZWNlaXZlcyB0aGUgbWVzc2FnZSBmcm9tIHRoZSBOTVIsCisgICB0cmFuc2Zvcm1zIHRoZSBoZWFydGJlYXQgaW50byBhIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgY3VycmVudAorICAgZGF0ZSBhbmQgdGltZSwgYW5kIGxvZ3MgdGhlIG1lc3NhZ2UuCisKK1RoZSByb3V0ZXMgYXJlIGRlcGxveWVkIGluIGFuIE9TR2kgYnVuZGxlLgorICAgCisKK1ByZXJlcXVpc2l0ZXMgZm9yIEJ1aWxkaW5nIGFuZCBSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIKKworICAgLSBNYXZlbiAyLjAuOSBvciBoaWdoZXIgKGZvciBidWlsZGluZykKKyAgIAorICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbCBleGFtcGxlcworICBkaXJlY3RvcnkuCisKKworMi4gU3RhcnQgU2VydmljZU1peCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICA8c2VydmljZW1peF9ob21lPi9iaW4vc2VydmljZW1peCAgICAgICAgICAob24gVU5JWCkKKyAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgICAgICAgKG9uIFdpbmRvd3MpCisKKworUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiBydW4gdGhlIGV4YW1wbGUgaW4gdHdvIHdheXM6CisKKy0gQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgZXhhbXBsZSB1cCBhbmQKKyAgcnVubmluZyBxdWlja2x5LgorCistIEIuIEJ1aWxkaW5nIHRoZSBFeGFtcGxlIEJ1bmRsZSBZb3Vyc2VsZgorICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBleGFtcGxlIGluIGFueQorICB3YXkuIEl0IHRlbGxzIHlvdSBob3cgdG8gYnVpbGQgYW5kIGRlcGxveSB0aGUgZXhhbXBsZS4gVGhpcworICBvcHRpb24gbWlnaHQgYmUgc2xvd2VyIHRoYW4gb3B0aW9uIEEgYmVjYXVzZSBpZiB5b3UgZG8gbm90IAorICBhbHJlYWR5IGhhdmUgdGhlIHJlcXVpcmVkIGJ1bmRsZXMgaW4geW91ciBsb2NhbCBNYXZlbgorICByZXBvc2l0b3J5LCBNYXZlbiB3aWxsIGhhdmUgdG8gZG93bmxvYWQgdGhlIGJ1bmRsZXMgaXQgbmVlZHMuCisKKworVXBkYXRpbmcgYW5kIFJlZGVwbG95aW5nIHRoZSBQcm9wZXJ0aWVzIEZpbGUgZnJvbSB0aGUgQ29uc29sZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiB1cGRhdGUgYW5kIHJlZGVwbG95IHRoZSBwcm9wZXJ0aWVzIGZpbGUgdGhhdCBpcyB1c2VkIGJ5IHRoZQorcHJvcGVydGllcyBwbGFjZWhvbGRlciBpbiB0aGUgYmx1ZXByaW50LnhtbCBmcm9tIGNvbnNvbGUgYXMgZm9sbG93czoKKworMS4gRWRpdCB0aGUgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNmZyBmaWxlLCBsb2NhdGVkIGluIHRoZQorICAgc2FtZSBmb2xkZXIgYXMgdGhpcyBSRUFETUUsIGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgInByZWZpeCIKKyAgIGtleSB0byB3aGF0ZXZlciB5b3Ugd2FudCAoZm9yIGV4YW1wbGUsIFlvdXJUcmFuc2Zvcm0pLgorCisyLiBDb3B5IHRoZSB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byB5b3VyIDxzZXJ2aWNlbWl4X2hvbWU+L2V0YworICAgZGlyZWN0b3J5LiBZb3UgY2FuIGRvIHRoaXMgZnJvbSB0aGUgU2VydmljZU1peCBjb25zb2xlIGJ5IHR5cGluZzoKKworICAgICBjb3B5ICRZT1VSX1NFUlZJQ0VNSVhfSE9NRS9leGFtcGxlcy9jYW1lbC1vc2dpL29yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jZmcKKyAgICAgJFlPVVJfU0VSVklDRU1JWF9IT01FL2V0YworCisgICBPbiBXaW5kb3dzIHlvdSBuZWVkIHRvIHJlcGxhY2UgLyBpbiB0aGUgcGF0aCB3aXRoIFxcLgorCisgICBOb3RlLCB0aGUgdGV4dCB5b3UgYXJlIHR5cGluZyBtaWdodCBpbnRlcm1pbmdsZSB3aXRoIHRoZSBvdXRwdXQKKyAgIGJlaW5nIGxvZ2dlZC4gVGhpcyBpcyBub3RoaW5nIHRvIHdvcnJ5IGFib3V0LgorCiszLiBSZXN0YXJ0IHRoZSBleGFtcGxlIGJ1bmRsZToKKworICAgKGkpIEZpcnN0IHlvdSBtdXN0IGtub3cgdGhlIGJ1bmRsZSBJRCB0aGF0IFNlcnZpY2VNaXggaGFzIGFzc2lnbmVkCisgICAgICAgdG8gaXQuIFRvIGdldCB0aGUgYnVuZGxlIElELCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlCisgICAgICAgU2VydmljZU1peCBjb25zb2xlOgorCisgICAgICAgICBvc2dpOmxpc3QKKworICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgbGlzdGluZywgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgc2ltaWxhciB0bworICAgICAgdGhlIGZvbGxvd2luZzoKKworICAgICAgWyAxODVdIFtBY3RpdmUgICAgIF0gW0NyZWF0ZWQgICAgIF0gWyAgICAgICBdIFsgICA2MF0gQXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQ2FtZWwgTk1SIEJsdWVwcmludCAoJHtwcm9qZWN0LnZlcnNpb259KQorCisgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBidW5kbGUgSUQgaXMgMTg1LgorCisgICAoaWkpIEVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlIHRvCisgICAgICAgIHJlc3RhcnQgdGhlIGJ1bmRsZToKKworICAgICAgICAgIG9zZ2k6cmVzdGFydCA8YnVuZGxlX2lkPgorCisgIFRoZSBwcmVmaXggb2YgdGhlIG91dHB1dCBzaG91bGQgY2hhbmdlLCBhbmQgdGhlIG91dHB1dCBzaG91bGQgbG9vaworICBzaW1pbGFyIHRvIHRoZSBmb2xsb3dpbmc6CisKKyAgPj4+PiBZb3VyVHJhbnNmb3JtIHNldCBib2R5OiAgVHVlIEF1ZyAxMSAxNzoxNDoxMiBCU1QgMjAwOQorICA+Pj4+IFlvdXJUcmFuc2Zvcm0gc2V0IGJvZHk6ICBUdWUgQXVnIDExIDE3OjE0OjE0IEJTVCAyMDA5CisgID4+Pj4gWW91clRyYW5zZm9ybSBzZXQgYm9keTogIFR1ZSBBdWcgMTEgMTc6MTQ6MTYgQlNUIDIwMDkKKworRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzdG9wIGFuZC9vciB1bmluc3RhbGwgdGhlIGV4YW1wbGUsIHNlZQorIlN0b3BwaW5nIGFuZCBVbmluc3RhbGxpbmcgdGhlIEV4YW1wbGUiIGJlbG93LgorCisKK0EuIFVzaW5nIGEgUHJlYnVpbHQgRGVwbG95bWVudCBCdW5kbGU6UXVpY2sgYW5kIEVhc3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGluc3RhbGwgYW5kIHJ1biBhIHByZWJ1aWx0IHZlcnNpb24gb2YgdGhpcyBleGFtcGxlLCBlbnRlcgordGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jYW1lbC1ubXItYmx1ZXByaW50CisgIAorVGhpcyBjb21tYW5kIG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yIAorbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dAorZmlsZSBpbiB0aGUgZXhhbXBsZXMgcGFyZW50IGRpcmVjdG9yeS4KKworT25jZSB0aGUgZXhhbXBsZSBpcyBydW5uaW5nIHlvdSBzaG91bGQgc2VlIG91dHB1dCBzaW1pbGFyIHRvCit0aGUgZm9sbG93aW5nIGJlaW5nIGxvZ2dlZCB0byB0aGUgY29uc29sZSBzY3JlZW46CisKKz4+Pj4gQmx1ZXByaW50LU5NUi1FeGFtcGxlIHNldCBib2R5OiAgTW9uIEphbiAxMCAwOTowMDoyNCBDRVQgMjAxMQorPj4+PiBCbHVlcHJpbnQtTk1SLUV4YW1wbGUgc2V0IGJvZHk6ICBNb24gSmFuIDEwIDA5OjAwOjI2IENFVCAyMDExCis+Pj4+IEJsdWVwcmludC1OTVItRXhhbXBsZSBzZXQgYm9keTogIE1vbiBKYW4gMTAgMDk6MDA6MjggQ0VUIDIwMTEKKworRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzdG9wIGFuZC9vciB1bmluc3RhbGwgdGhlIGV4YW1wbGUsCitzZWUgIlN0b3BwaW5nIGFuZCBVbmluc3RhbGxpbmcgdGhlIEV4YW1wbGUiIGJlbG93LgorCitCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIHRoZSBleGFtcGxlIHdoZXJlIHlvdSBidWlsZCB0aGUgZXhhbXBsZQorYnVuZGxlIHlvdXJzZWxmLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IHJ1biB0aGUgZXhhbXBsZSB1c2luZyB0aGUgcHJlYnVpbHQKKyAgIHZlcnNpb24gYXMgZGVzY3JpYmVkIGFib3ZlLCB5b3UgbXVzdCBmaXJzdCB1bmluc3RhbGwgdGhlCisgICBleGFtcGxlcy1jYW1lbC1ubXIgZmVhdHVyZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQKKyAgIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgICAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWNhbWVsLW5tci1ibHVlcHJpbnQKKworMi4gQnVpbGQgdGhlIGV4YW1wbGUgYnkgb3BlbmluZyBhIGNvbW1hbmQgcHJvbXB0LCBjaGFuZ2luZworICAgZGlyZWN0b3J5IHRvIGV4YW1wbGVzL2NhbWVsLW5tciAodGhpcyBleGFtcGxlKSBhbmQgZW50ZXJpbmcKKyAgIHRoZSBmb2xsb3dpbmcgTWF2ZW4gY29tbWFuZDoKKworICAgICBtdm4gaW5zdGFsbAorICAgCisgICBJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIKKyAgIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgcXVpY2tseS4KKyAgIE90aGVyd2lzZSBpdCBtYXkgdGFrZSBzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkCisgICBldmVyeXRoaW5nIGl0IG5lZWRzLgorICAgCisgICBUaGUgbXZuIGluc3RhbGwgY29tbWFuZCBidWlsZHMgdGhlIGV4YW1wbGUgZGVwbG95bWVudCBidW5kbGUgYW5kCisgICBjb3BpZXMgaXQgdG8geW91ciBsb2NhbCBNYXZlbiByZXBvc2l0b3J5IGFuZCB0byB0aGUgdGFyZ2V0CisgICBkaXJlY3Rvcnkgb2YgdGhpcyBleGFtcGxlLiAKKyAgICAgCiszLiBJbnN0YWxsIHRoZSBleGFtcGxlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbgorICAgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKyAgIAorICAgICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWNhbWVsLW5tci1ibHVlcHJpbnQKKyAgICAgICAKKyAgIFRoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvcgorICAgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dAorICAgZmlsZSBpbiB0aGUgZXhhbXBsZXMgcGFyZW50IGRpcmVjdG9yeS4KKyAgIAorT25jZSB0aGUgZXhhbXBsZSBpcyBydW5uaW5nIHlvdSBzaG91bGQgc2VlIG91dHB1dCBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nIGJlaW5nIGxvZ2dlZCB0byB0aGUgY29uc29sZSBzY3JlZW46CisKKz4+Pj4gQmx1ZXByaW50LU5NUi1FeGFtcGxlIHNldCBib2R5OiAgTW9uIEphbiAxMCAwOTowMDoyNCBDRVQgMjAxMQorPj4+PiBCbHVlcHJpbnQtTk1SLUV4YW1wbGUgc2V0IGJvZHk6ICBNb24gSmFuIDEwIDA5OjAwOjI2IENFVCAyMDExCis+Pj4+IEJsdWVwcmludC1OTVItRXhhbXBsZSBzZXQgYm9keTogIE1vbiBKYW4gMTAgMDk6MDA6MjggQ0VUIDIwMTEKKworU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCB0aGUgZXhhbXBsZSwgZmlyc3QgeW91IG11c3Qga25vdyB0aGUgYnVuZGxlIElEIHRoYXQgU2VydmljZU1peAoraGFzIGFzc2lnbmVkIHRvIGl0LiBUbyBnZXQgdGhlIGJ1bmRsZSBJRCwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kCitpbiB0aGUgU2VydmljZU1peCBjb25zb2xlIChOb3RlLCB0aGUgdGV4dCB5b3UgYXJlIHR5cGluZyB3aWxsCitpbnRlcm1pbmdsZSB3aXRoIHRoZSBvdXRwdXQgYmVpbmcgbG9nZ2VkLiBUaGlzIGlzIG5vdGhpbmcgdG8gd29ycnkKK2Fib3V0Lik6IAorCisgIG9zZ2k6bGlzdAorCitBdCB0aGUgZW5kIG9mIHRoZSBsaXN0aW5nLCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nOgorCisgIFsgMTg1XSBbQWN0aXZlICAgICBdIFtDcmVhdGVkICAgICBdIFsgICAgICAgXSBbICAgNjBdIEFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IENhbWVsIE5NUiBCbHVlcHJpbnQgKCR7cHJvamVjdC52ZXJzaW9ufSkKKworSW4gdGhpcyBjYXNlLCB0aGUgYnVuZGxlIElEIGlzIDE4NS4KKworVG8gc3RvcCB0aGUgZXhhbXBsZSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4Citjb25zb2xlOgorCisgIG9zZ2k6c3RvcCA8YnVuZGxlX2lkPgorCitGb3IgZXhhbXBsZToKKworICBvc2dpOnN0b3AgMTg1CisKK1RvIHVuaW5zdGFsbCB0aGUgZXhhbXBsZSwgZW50ZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMKK2luIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWNhbWVsLW5tci1ibHVlcHJpbnQKKworb3IKKworICBvc2dpOnVuaW5zdGFsbCA8YnVuZGxlX2lkPgorICAKKworVmlld2luZyB0aGUgTG9nIEVudHJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHZpZXcgdGhlIGVudHJpZXMgaW4gdGhlIGxvZyBmaWxlIGluIHRoZSBkYXRhL2xvZworZGlyZWN0b3J5IG9mIHlvdXIgU2VydmljZU1peCBpbnN0YWxsYXRpb24sIG9yIGJ5IHR5cGluZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgbG9nOmRpc3BsYXkKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNmZyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmVmYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yLWJsdWVwcmludC9vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2ZnCkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgIE9GIEFOWSBLSU5ELCBlaXRoZXIgIGV4cHJlc3MgIG9yCisjIGltcGxpZWQuCisjCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjCisKKworcHJlZml4PVlvdXJUcmFuc2Zvcm0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY1OWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yLWJsdWVwcmludC9wb20ueG1sCkBAIC0wLDAgKzEsNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+Y2FtZWwtbm1yLWJsdWVwcmludDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IENhbWVsIE5NUiBCbHVlcHJpbnQ8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNhbWVsIGV4YW1wbGUgdXNpbmcgTk1SIGNvbXBvbmVudCBhbmQgYmx1ZXByaW50IGNvbmZpZ3VyYXRpb248L2Rlc2NyaXB0aW9uPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1EZXNjcmlwdGlvbj4ke3Byb2plY3QuZGVzY3JpcHRpb259PC9CdW5kbGUtRGVzY3JpcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcixvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaSwqPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxQcml2YXRlLVBhY2thZ2U+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsPC9Qcml2YXRlLVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgIDwvaW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yLWJsdWVwcmludC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jYW1lbC9NeVRyYW5zZm9ybS5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yLWJsdWVwcmludC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jYW1lbC9NeVRyYW5zZm9ybS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZDlkMGUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ubXItYmx1ZXByaW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2NhbWVsL015VHJhbnNmb3JtLmphdmEKQEAgLTAsMCArMSw1NCBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCisvKioKKyAqIEB2ZXJzaW9uICRSZXZpc2lvbjogNjQwNDUwICQKKyAqLworcHVibGljIGNsYXNzIE15VHJhbnNmb3JtICB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgdHJhbnNpZW50IExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE15VHJhbnNmb3JtLmNsYXNzLmdldE5hbWUoKSk7CisgICAgcHJpdmF0ZSBib29sZWFuIHZlcmJvc2UgPSB0cnVlOworICAgIHByaXZhdGUgU3RyaW5nIHByZWZpeCA9ICJNeVRyYW5zZm9ybSI7CisKKyAgICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgYm9keSkgeworICAgICAgICBTdHJpbmcgYW5zd2VyID0gcHJlZml4ICsgIiBzZXQgYm9keTogICIgKyBuZXcgRGF0ZSgpOworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+ICIgKyBhbnN3ZXIpOworICAgICAgICB9CisgICAgICAgIGxvZ2dlci5pbmZvKCI+Pj4+ICIgKyBhbnN3ZXIpOworICAgICAgICByZXR1cm4gYW5zd2VyOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzVmVyYm9zZSgpIHsKKyAgICAgICAgcmV0dXJuIHZlcmJvc2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VmVyYm9zZShib29sZWFuIHZlcmJvc2UpIHsKKyAgICAgICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpIHsKKyAgICAgICAgcmV0dXJuIHByZWZpeDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQcmVmaXgoU3RyaW5nIHByZWZpeCkgeworICAgICAgICB0aGlzLnByZWZpeCA9IHByZWZpeDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC1ubXItYmx1ZXByaW50L3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9ibHVlcHJpbnQvYmx1ZXByaW50LnhtbCBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci1ibHVlcHJpbnQvc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2JsdWVwcmludC9ibHVlcHJpbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OGM4MjYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ubXItYmx1ZXByaW50L3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9ibHVlcHJpbnQvYmx1ZXByaW50LnhtbApAQCAtMCwwICsxLDUwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tPgorPGJsdWVwcmludAorICAgIHhtbG5zPSJodHRwOi8vd3d3Lm9zZ2kub3JnL3htbG5zL2JsdWVwcmludC92MS4wLjAiCisgICAgeG1sbnM6Y209Imh0dHA6Ly9hcmllcy5hcGFjaGUub3JnL2JsdWVwcmludC94bWxucy9ibHVlcHJpbnQtY20vdjEuMC4wIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3Lm9zZ2kub3JnL3htbG5zL2JsdWVwcmludC92MS4wLjAgaHR0cDovL3d3dy5vc2dpLm9yZy94bWxucy9ibHVlcHJpbnQvdjEuMC4wL2JsdWVwcmludC54c2QiPgorCisgICAgPGNtOnByb3BlcnR5LXBsYWNlaG9sZGVyIHBlcnNpc3RlbnQtaWQ9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyI+CisgICAgICAgIDxjbTpkZWZhdWx0LXByb3BlcnRpZXM+CisgICAgICAgICAgICA8Y206cHJvcGVydHkgbmFtZT0icHJlZml4IiB2YWx1ZT0iQmx1ZXByaW50LU5NUi1FeGFtcGxlIi8+CisgICAgICAgIDwvY206ZGVmYXVsdC1wcm9wZXJ0aWVzPgorICAgIDwvY206cHJvcGVydHktcGxhY2Vob2xkZXI+CisKKyAgICA8Y2FtZWxDb250ZXh0IHhtbG5zPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvYmx1ZXByaW50Ij4KKyAgICAgICAgPCEtLSBSb3V0ZSBwZXJpb2RpY2FsbHkgc2VudCBldmVudHMgaW50byB0aGUgTk1SIC0tPgorICAgICAgICA8cm91dGU+CisgICAgICAgICAgICA8ZnJvbSB1cmk9InRpbWVyOi8vbXlUaW1lcj9maXhlZFJhdGU9dHJ1ZSZhbXA7cGVyaW9kPTIwMDAiIC8+CisgICAgICAgICAgICA8dG8gdXJpPSJubXI6RXhhbXBsZVJvdXRlciIgLz4KKyAgICAgICAgPC9yb3V0ZT4KKyAgICAgICAgPCEtLSBSb3V0ZSBleGNoYW5nZSBmcm9tIHRoZSBOTVIgZW5kcG9pbnQgdG8gYSBsb2cgZW5kcG9pbnQgLS0+CisgICAgICAgIDxyb3V0ZT4KKyAgICAgICAgICAgIDxmcm9tIHVyaT0ibm1yOkV4YW1wbGVSb3V0ZXIiIC8+CisgICAgICAgICAgICA8YmVhbiByZWY9Im15VHJhbnNmb3JtIiBtZXRob2Q9InRyYW5zZm9ybSIgLz4KKyAgICAgICAgICAgIDx0byB1cmk9ImxvZzpFeGFtcGxlUm91dGVyIiAvPgorICAgICAgICA8L3JvdXRlPgorICAgIDwvY2FtZWxDb250ZXh0PgorCisgICAgPGJlYW4gaWQ9Im15VHJhbnNmb3JtIiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsLk15VHJhbnNmb3JtIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InByZWZpeCIgdmFsdWU9IiR7cHJlZml4fSIgLz4KKyAgICA8L2JlYW4+CisKKzwvYmx1ZXByaW50PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yL1JFQURNRS50eHQgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ubXIvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2VhMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yL1JFQURNRS50eHQKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ0FNRUwgT1NHSSBOTVIgRVhBTVBMRQorPT09PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitEZXBsb3lzIHR3byBDYW1lbCBFSVAgcm91dGVzIHRoYXQgY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyCit2aWEgdGhlIFNlcnZpY2VNaXggTk1SLgorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIE5NUiBpcyBhIGdlbmVyYWwtcHVycG9zZSBtZXNzYWdlIGJ1cyB0aGF0IGFwcGxpY2F0aW9ucyBjYW4KK3VzZSB0byBjb21tdW5pY2F0ZSB3aXRoaW4gdGhlIFNlcnZpY2VNaXggT1NHaSBjb250YWluZXIuIEl0IGlzCittb2RlbGVkIG9uIHRoZSBOb3JtYWxpemVkIE1lc3NhZ2UgUm91dGVyIChOTVIpIGRlZmluZWQgaW4gdGhlIAorSmF2YSBCdXNpbmVzcyBJbnRlZ3JhdGlvbiAoSkJJKSBzcGVjaWZpY2F0aW9uLgorCitUaGUgQ2FtZWwgcm91dGVzIGFyZSBkZWZpbmVkIGluIHRoZSBiZWFucy54bWwgZmlsZSB0aGF0IGlzIGxvY2F0ZWQKK2luIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nIGRpcmVjdG9yeSBvZiB0aGlzIGV4YW1wbGUuCitUaGUgY29udGVudHMgb2YgdGhlIGJlYW5zLnhtbCBmaWxlIGNhbiBiZSBleHBsYWluZWQgYXMgZm9sbG93czoKKworMS4gSW1wb3J0cyB0aGUgY2FtZWwtbm1yLnhtbCBmaWxlLCB3aGljaCBpbnN0YW50aWF0ZXMgYW5kCisgICBpbml0aWFsaXplcyB0aGUgTk1SIGNvbXBvbmVudC4KKworMi4gRGVmaW5lcyBhIHJvdXRlIHRoYXQgZ2VuZXJhdGVzIGEgaGVhcnRiZWF0IG1lc3NhZ2UgZXZlcnkKKyAgIDIwMDBtcyBhbmQgc2VuZHMgaXQgdG8gdGhlIE5NUi4KKworMy4gRGVmaW5lcyBhIHNlY29uZCByb3V0ZSB0aGF0IHJlY2VpdmVzIHRoZSBtZXNzYWdlIGZyb20gdGhlIE5NUiwKKyAgIHRyYW5zZm9ybXMgdGhlIGhlYXJ0YmVhdCBpbnRvIGEgbWVzc2FnZSBjb250YWluaW5nIHRoZSBjdXJyZW50CisgICBkYXRlIGFuZCB0aW1lLCBhbmQgbG9ncyB0aGUgbWVzc2FnZS4KKworVGhlIHJvdXRlcyBhcmUgZGVwbG95ZWQgaW4gYW4gT1NHaSBidW5kbGUuCisgICAKKworUHJlcmVxdWlzaXRlcyBmb3IgQnVpbGRpbmcgYW5kIFJ1bm5pbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxLiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKKworICAgLSBKREsgMS41IG9yIGhpZ2hlcgorCisgICAtIE1hdmVuIDIuMC45IG9yIGhpZ2hlciAoZm9yIGJ1aWxkaW5nKQorICAgCisgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFJFQURNRSBpbiB0aGUgdG9wLWxldmVsIGV4YW1wbGVzCisgIGRpcmVjdG9yeS4KKworCisyLiBTdGFydCBTZXJ2aWNlTWl4IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgIDxzZXJ2aWNlbWl4X2hvbWU+L2Jpbi9zZXJ2aWNlbWl4ICAgICAgICAgIChvbiBVTklYKQorICA8c2VydmljZW1peF9ob21lPlxiaW5cc2VydmljZW1peCAgICAgICAgICAob24gV2luZG93cykKKworCitSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHJ1biB0aGUgZXhhbXBsZSBpbiB0d28gd2F5czoKKworLSBBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBleGFtcGxlIHVwIGFuZAorICBydW5uaW5nIHF1aWNrbHkuCisKKy0gQi4gQnVpbGRpbmcgdGhlIEV4YW1wbGUgQnVuZGxlIFlvdXJzZWxmCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGV4YW1wbGUgaW4gYW55CisgIHdheS4gSXQgdGVsbHMgeW91IGhvdyB0byBidWlsZCBhbmQgZGVwbG95IHRoZSBleGFtcGxlLiBUaGlzCisgIG9wdGlvbiBtaWdodCBiZSBzbG93ZXIgdGhhbiBvcHRpb24gQSBiZWNhdXNlIGlmIHlvdSBkbyBub3QgCisgIGFscmVhZHkgaGF2ZSB0aGUgcmVxdWlyZWQgYnVuZGxlcyBpbiB5b3VyIGxvY2FsIE1hdmVuCisgIHJlcG9zaXRvcnksIE1hdmVuIHdpbGwgaGF2ZSB0byBkb3dubG9hZCB0aGUgYnVuZGxlcyBpdCBuZWVkcy4KKworQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTpRdWljayBhbmQgRWFzeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIGEgcHJlYnVpbHQgdmVyc2lvbiBvZiB0aGlzIGV4YW1wbGUsIGVudGVyCit0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWNhbWVsLW5tcgorICAKK1RoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvciAKK21vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIGZhY2lsaXR5LCBzZWUgdGhlIFJFQURNRS50eHQKK2ZpbGUgaW4gdGhlIGV4YW1wbGVzIHBhcmVudCBkaXJlY3RvcnkuCisKK09uY2UgdGhlIGV4YW1wbGUgaXMgcnVubmluZyB5b3Ugc2hvdWxkIHNlZSBvdXRwdXQgc2ltaWxhciB0bwordGhlIGZvbGxvd2luZyBiZWluZyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgc2NyZWVuOgorCis+Pj4+IE15VHJhbnNmb3JtIHNldCBib2R5OiAgV2VkIEF1ZyAwNSAxMTo1Mjo0MCBCU1QgMjAwOQorPj4+PiBNeVRyYW5zZm9ybSBzZXQgYm9keTogIFdlZCBBdWcgMDUgMTE6NTI6NDIgQlNUIDIwMDkKKz4+Pj4gTXlUcmFuc2Zvcm0gc2V0IGJvZHk6ICBXZWQgQXVnIDA1IDExOjUyOjQ0IEJTVCAyMDA5CisKK0ZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3RvcCBhbmQvb3IgdW5pbnN0YWxsIHRoZSBleGFtcGxlLAorc2VlICJTdG9wcGluZyBhbmQgVW5pbnN0YWxsaW5nIHRoZSBFeGFtcGxlIiBiZWxvdy4KKworQi4gQnVpbGRpbmcgdGhlIEV4YW1wbGUgQnVuZGxlIFlvdXJzZWxmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGluc3RhbGwgYW5kIHJ1biB0aGUgZXhhbXBsZSB3aGVyZSB5b3UgYnVpbGQgdGhlIGV4YW1wbGUKK2J1bmRsZSB5b3Vyc2VsZiwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczoKKworMS4gSWYgeW91IGhhdmUgYWxyZWFkeSBydW4gdGhlIGV4YW1wbGUgdXNpbmcgdGhlIHByZWJ1aWx0CisgICB2ZXJzaW9uIGFzIGRlc2NyaWJlZCBhYm92ZSwgeW91IG11c3QgZmlyc3QgdW5pbnN0YWxsIHRoZQorICAgZXhhbXBsZXMtY2FtZWwtbm1yIGZlYXR1cmUgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kCisgICBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgICAgIGZlYXR1cmVzOnVuaW5zdGFsbCBleGFtcGxlcy1jYW1lbC1ubXIKKworMi4gQnVpbGQgdGhlIGV4YW1wbGUgYnkgb3BlbmluZyBhIGNvbW1hbmQgcHJvbXB0LCBjaGFuZ2luZworICAgZGlyZWN0b3J5IHRvIGV4YW1wbGVzL2NhbWVsLW5tciAodGhpcyBleGFtcGxlKSBhbmQgZW50ZXJpbmcKKyAgIHRoZSBmb2xsb3dpbmcgTWF2ZW4gY29tbWFuZDoKKworICAgICBtdm4gaW5zdGFsbAorICAgCisgICBJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIKKyAgIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgcXVpY2tseS4KKyAgIE90aGVyd2lzZSBpdCBtYXkgdGFrZSBzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkCisgICBldmVyeXRoaW5nIGl0IG5lZWRzLgorICAgCisgICBUaGUgbXZuIGluc3RhbGwgY29tbWFuZCBidWlsZHMgdGhlIGV4YW1wbGUgZGVwbG95bWVudCBidW5kbGUgYW5kCisgICBjb3BpZXMgaXQgdG8geW91ciBsb2NhbCBNYXZlbiByZXBvc2l0b3J5IGFuZCB0byB0aGUgdGFyZ2V0CisgICBkaXJlY3Rvcnkgb2YgdGhpcyBleGFtcGxlLiAKKyAgICAgCiszLiBJbnN0YWxsIHRoZSBleGFtcGxlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbgorICAgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKyAgIAorICAgICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWNhbWVsLW5tcgorICAgICAgIAorICAgVGhpcyBjb21tYW5kIG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yCisgICBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0CisgICBmaWxlIGluIHRoZSBleGFtcGxlcyBwYXJlbnQgZGlyZWN0b3J5LgorICAgCitPbmNlIHRoZSBleGFtcGxlIGlzIHJ1bm5pbmcgeW91IHNob3VsZCBzZWUgb3V0cHV0IHNpbWlsYXIgdG8gdGhlCitmb2xsb3dpbmcgYmVpbmcgbG9nZ2VkIHRvIHRoZSBjb25zb2xlIHNjcmVlbjoKKworPj4+PiBNeVRyYW5zZm9ybSBzZXQgYm9keTogIFdlZCBBdWcgMDUgMTE6NTI6NDAgQlNUIDIwMDkKKz4+Pj4gTXlUcmFuc2Zvcm0gc2V0IGJvZHk6ICBXZWQgQXVnIDA1IDExOjUyOjQyIEJTVCAyMDA5Cis+Pj4+IE15VHJhbnNmb3JtIHNldCBib2R5OiAgV2VkIEF1ZyAwNSAxMTo1Mjo0NCBCU1QgMjAwOQorCisKK1N0b3BwaW5nIGFuZCBVbmluc3RhbGxpbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGZpcnN0IHlvdSBtdXN0IGtub3cgdGhlIGJ1bmRsZSBJRCB0aGF0IFNlcnZpY2VNaXgKK2hhcyBhc3NpZ25lZCB0byBpdC4gVG8gZ2V0IHRoZSBidW5kbGUgSUQsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZAoraW4gdGhlIFNlcnZpY2VNaXggY29uc29sZSAoTm90ZSwgdGhlIHRleHQgeW91IGFyZSB0eXBpbmcgd2lsbAoraW50ZXJtaW5nbGUgd2l0aCB0aGUgb3V0cHV0IGJlaW5nIGxvZ2dlZC4gVGhpcyBpcyBub3RoaW5nIHRvIHdvcnJ5CithYm91dC4pOiAKKworICBvc2dpOmxpc3QKKworQXQgdGhlIGVuZCBvZiB0aGUgbGlzdGluZywgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgc2ltaWxhciB0byB0aGUKK2ZvbGxvd2luZzoKKworICBbMTYwXSBbQWN0aXZlICAgICBdIFtTdGFydGVkXSBbICA2MF0gQXBhY2hlIFNlcnZpY2VNaXggRXhhbXBsZSA6OiBDYW1lbCBOTVIgKDQuMS4wLjApCisKK0luIHRoaXMgY2FzZSwgdGhlIGJ1bmRsZSBJRCBpcyAxNjAuCisKK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peAorY29uc29sZToKKworICBvc2dpOnN0b3AgPGJ1bmRsZV9pZD4KKworRm9yIGV4YW1wbGU6CisKKyAgb3NnaTpzdG9wIDE2MAorCitUbyB1bmluc3RhbGwgdGhlIGV4YW1wbGUsIGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzCitpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOnVuaW5zdGFsbCBleGFtcGxlcy1jYW1lbC1ubXIKKworb3IKKworICBvc2dpOnVuaW5zdGFsbCA8YnVuZGxlX2lkPgorICAKKworVmlld2luZyB0aGUgTG9nIEVudHJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHZpZXcgdGhlIGVudHJpZXMgaW4gdGhlIGxvZyBmaWxlIGluIHRoZSBkYXRhL2xvZworZGlyZWN0b3J5IG9mIHlvdXIgU2VydmljZU1peCBpbnN0YWxsYXRpb24sIG9yIGJ5IHR5cGluZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgbG9nOmRpc3BsYXkKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkZGViMAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW5tci9wb20ueG1sCkBAIC0wLDAgKzEsNjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+Y2FtZWwtbm1yPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+YnVuZGxlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQ2FtZWwgTk1SPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5DYW1lbCBFeGFtcGxlIHVzaW5nIHRoZSBDYW1lbCBOTVIgY29tcG9uZW50PC9kZXNjcmlwdGlvbj4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1EZXNjcmlwdGlvbj4ke3Byb2plY3QuZGVzY3JpcHRpb259PC9CdW5kbGUtRGVzY3JpcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNhbWVsLm5tcixvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaSwqPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxQcml2YXRlLVBhY2thZ2U+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsPC9Qcml2YXRlLVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgIDwvaW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2NhbWVsL015VHJhbnNmb3JtLmphdmEgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY2FtZWwvTXlUcmFuc2Zvcm0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGY4NjNmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2NhbWVsL015VHJhbnNmb3JtLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKKworLyoqCisgKiBAdmVyc2lvbiAkUmV2aXNpb246IDY0MDQ1MCAkCisgKi8KK3B1YmxpYyBjbGFzcyBNeVRyYW5zZm9ybSAgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHRyYW5zaWVudCBMb2cgTE9HID0gTG9nRmFjdG9yeS5nZXRMb2coTXlUcmFuc2Zvcm0uY2xhc3MpOworICAgIHByaXZhdGUgYm9vbGVhbiB2ZXJib3NlID0gdHJ1ZTsKKyAgICBwcml2YXRlIFN0cmluZyBwcmVmaXggPSAiTXlUcmFuc2Zvcm0iOworCisgICAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IGJvZHkpIHsKKyAgICAgICAgU3RyaW5nIGFuc3dlciA9IHByZWZpeCArICIgc2V0IGJvZHk6ICAiICsgbmV3IERhdGUoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+PiAiICsgYW5zd2VyKTsKKyAgICAgICAgfQorICAgICAgICBMT0cuaW5mbygiPj4+PiAiICsgYW5zd2VyKTsKKyAgICAgICAgcmV0dXJuIGFuc3dlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1ZlcmJvc2UoKSB7CisgICAgICAgIHJldHVybiB2ZXJib3NlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFZlcmJvc2UoYm9vbGVhbiB2ZXJib3NlKSB7CisgICAgICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKSB7CisgICAgICAgIHJldHVybiBwcmVmaXg7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UHJlZml4KFN0cmluZyBwcmVmaXgpIHsKKyAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2M1YTQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1ubXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgICAgeG1sbnM6Y2FtZWw9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmciCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLTIuMC54c2QKKyAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS9zcHJpbmctb3NnaS54c2QKKyAgICAgICBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcvY2FtZWwtc3ByaW5nLnhzZCI+CisKKyAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOm9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvY2FtZWwtbm1yLnhtbCIgLz4KKworICA8Y2FtZWw6Y2FtZWxDb250ZXh0IHhtbG5zPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIj4KKyAgICA8IS0tIFJvdXRlIHBlcmlvZGljYWxseSBzZW50IGV2ZW50cyBpbnRvIHRoZSBOTVIgLS0+CisgICAgPHJvdXRlPgorICAgICAgPGZyb20gdXJpPSJ0aW1lcjovL215VGltZXI/Zml4ZWRSYXRlPXRydWUmYW1wO3BlcmlvZD0yMDAwIi8+CisgICAgICA8dG8gdXJpPSJubXI6RXhhbXBsZVJvdXRlciIvPgorICAgIDwvcm91dGU+CisgICAgPCEtLSBSb3V0ZSBleGNoYW5nZSBmcm9tIHRoZSBOTVIgZW5kcG9pbnQgdG8gYSBsb2cgZW5kcG9pbnQgLS0+CisgICAgPHJvdXRlPgorICAgICAgPGZyb20gdXJpPSJubXI6RXhhbXBsZVJvdXRlciIvPgorICAgICAgPGJlYW4gcmVmPSJteVRyYW5zZm9ybSIgbWV0aG9kPSJ0cmFuc2Zvcm0iLz4KKyAgICAgIDx0byB1cmk9ImxvZzpFeGFtcGxlUm91dGVyIi8+CisgICAgPC9yb3V0ZT4KKyAgPC9jYW1lbDpjYW1lbENvbnRleHQ+CisKKyAgPGJlYW4gaWQ9Im15VHJhbnNmb3JtIiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsLk15VHJhbnNmb3JtIj4KKyAgICA8cHJvcGVydHkgbmFtZT0icHJlZml4IiB2YWx1ZT0iTXlUcmFuc2Zvcm0iLz4KKyAgPC9iZWFuPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGM3MTUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1vc2dpL1JFQURNRS50eHQKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ0FNRUwgT1NHSSBFWEFNUExFCis9PT09PT09PT09PT09PT09PT0KKworUHVycG9zZQorLS0tLS0tLQorRGVwbG95cyBhIENhbWVsIEVJUCByb3V0ZSBhcyBhbiBPU0dpIGJ1bmRsZS4gQ29uZmlndXJhdGlvbiBtYWtlcyB1c2UKK29mIHRoZSBPU0dpIENvbmZpZ3VyYXRpb24gQWRtaW4gc2VydmljZSBhbmQgU3ByaW5nIHByb3BlcnR5IHBsYWNlaG9sZGVycywKK2FuZCB0aGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIGRlcGxveSB0aGUgcHJvcGVydGllcyBmaWxlIGZyb20gdGhlCitTZXJ2aWNlTWl4IGNvbnNvbGUuCisKKworRXhwbGFuYXRpb24KKy0tLS0tLS0tLS0tCitUaGUgQ2FtZWwgcm91dGUgaXMgZGVmaW5lZCBpbiBhIFNwcmluZyBYTUwgZmlsZSwgYmVhbnMueG1sLCB3aGljaCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nIGRpcmVjdG9yeSBvZiB0aGlzIGV4YW1wbGUuCitUaGUgcm91dGUgaXMgZGVmaW5lZCBpbiB0aGUgPHJvdXRlPiBlbGVtZW50IGFuZCBjYW4gYmUgZXhwbGFpbmVkIGFzIGZvbGxvd3M6CisKKzEuIEEgdGltZXIgZW5kcG9pbnQgZ2VuZXJhdGVzIGEgaGVhcnRiZWF0IGV2ZW50IGV2ZXJ5IDIwMDBtcy4KKyAgICAgICAKKzIuIEEgY2FsbG91dCBpcyBtYWRlIHRvIGEgdHJhbnNmb3JtZXIgYmVhbiB0aGF0IHRyYW5zZm9ybXMgZWFjaAorICAgaGVhcnRiZWF0IG1lc3NhZ2UgdG8gdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4KKyAgICAgICAgCiszLiBBIGxvZyBlbmRwb2ludCBzZW5kcyB0aGUgdHJhbnNmb3JtZWQgbWVzc2FnZSB0byB0aGUKKyAgIEpha2FydGEgY29tbW9ucyBsb2dnZXIuCisgICAgICAKK1RoZSBiZWFucy54bWwgZmlsZSBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6IAorCistICBBIDxiZWFuPiBlbGVtZW50IHRoYXQgaW5zdGFudGlhdGVzIHRoZSB0cmFuc2Zvcm1lciBiZWFuIHVzaW5nIHN0YW5kYXJkCisgICBTcHJpbmcgY29uZmlndXJhdGlvbiBzeW50YXggYW5kIHNwZWNpZmllcyBhIHByZWZpeCB2YWx1ZSB1c2luZyBhCisgICBwcm9wZXJ0eSBwbGFjZWhvbGRlci4gCisgICAKKy0gIEFuIDxvc2dpeDpjbS1wcm9wZXJ0aWVzPiBlbGVtZW50IHdoaWNoIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBwbGFjZWhvbGRlcgorICAgdmFsdWVzIHVzaW5nIHRoZSBPU0dpIENvbmZpZ3VyYXRpb24gQWRtaW4gc2VydmljZS4gSW4gdGhpcyBjYXNlLCB0aGUgCisgICBwcm9wZXJ0eSBpcyBhbHNvIGdpdmVuIHRoZSBkZWZhdWx0IHZhbHVlIG9mICJNeVRyYW5zZm9ybSIuCisgICAKK1RoZSByb3V0ZSBhbmQgY29uZmlndXJhdGlvbiBhcmUgZGVwbG95ZWQgaW4gYW4gT1NHaSBidW5kbGUuICAgCisKKyAgIAorUHJlcmVxdWlzaXRlcyBmb3IgUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIKKworICAgLSBNYXZlbiAyLjAuOSBvciBoaWdoZXIgKGZvciBidWlsZGluZykKKyAgIAorICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbCBleGFtcGxlcworICBkaXJlY3RvcnkuCisKKzIuIFN0YXJ0IFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICA8c2VydmljZW1peF9ob21lPi9iaW4vc2VydmljZW1peCAgICAgICAgICAob24gVU5JWCkKKyAgICA8c2VydmljZW1peF9ob21lPlxiaW5cc2VydmljZW1peCAgICAgICAgICAob24gV2luZG93cykKKworCitSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHJ1biB0aGUgZXhhbXBsZSBpbiB0d28gd2F5czoKKworLSBBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBleGFtcGxlIHVwIGFuZAorICBydW5uaW5nIHF1aWNrbHkuCisKKy0gQi4gQnVpbGRpbmcgdGhlIEV4YW1wbGUgQnVuZGxlIFlvdXJzZWxmCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGV4YW1wbGUgaW4gYW55IHdheS4KKyAgSXQgdGVsbHMgeW91IGhvdyB0byBidWlsZCBhbmQgZGVwbG95IHRoZSBleGFtcGxlLiBUaGlzIG9wdGlvbiBtaWdodAorICBiZSBzbG93ZXIgdGhhbiBvcHRpb24gQSBiZWNhdXNlLCBpZiB5b3UgZG8gbm90IGFscmVhZHkgaGF2ZSB0aGUKKyAgcmVxdWlyZWQgYnVuZGxlcyBpbiB5b3VyIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnksIE1hdmVuIHdpbGwgaGF2ZSB0bworICBkb3dubG9hZCB0aGUgYnVuZGxlcyBpdCBuZWVkcy4KKworCitBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGluc3RhbGwgYW5kIHJ1biBhIHByZWJ1aWx0IHZlcnNpb24gb2YgdGhpcyBleGFtcGxlLCBlbnRlciB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jYW1lbC1vc2dpCisgIAorVGhpcyBjb21tYW5kIG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yIG1vcmUKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0IGZpbGUgaW4gdGhlCitleGFtcGxlcyBwYXJlbnQgZGlyZWN0b3J5LgorCitPbmNlIHRoZSBleGFtcGxlIGlzIHJ1bm5pbmcsIHBlcmlvZGljIGV2ZW50cyBhcmUgcm91dGVkIHRvIHRoZSB0cmFuc2Zvcm0KK21ldGhvZCBvZiB0aGUgTXlUcmFuc2Zvcm0gY2xhc3MgYW5kIHlvdSBzaG91bGQgc2VlIG91dHB1dCBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nIGJlaW5nIGxvZ2dlZCB0byB5b3VyIGNvbnNvbGUgc2NyZWVuOgorCis+Pj4+IE15VHJhbnNmb3JtIHNldCBib2R5OiAgVHVlIEF1ZyAxMSAxNjo1NjowNiBCU1QgMjAwOQorPj4+PiBNeVRyYW5zZm9ybSBzZXQgYm9keTogIFR1ZSBBdWcgMTEgMTY6NTY6MDggQlNUIDIwMDkKKz4+Pj4gTXlUcmFuc2Zvcm0gc2V0IGJvZHk6ICBUdWUgQXVnIDExIDE2OjU2OjEwIEJTVCAyMDA5CisKK1VwZGF0aW5nIGFuZCBSZWRlcGxveWluZyB0aGUgUHJvcGVydGllcyBGaWxlIGZyb20gdGhlIENvbnNvbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gdXBkYXRlIGFuZCByZWRlcGxveSB0aGUgcHJvcGVydGllcyBmaWxlIHRoYXQgaXMgdXNlZCBieSB0aGUKK3Byb3BlcnRpZXMgcGxhY2Vob2xkZXIgaW4gdGhlIGJlYW5zLnhtbCBmcm9tIGNvbnNvbGUgYXMgZm9sbG93czoKKworMS4gRWRpdCB0aGUgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNmZyBmaWxlLCBsb2NhdGVkIGluIHRoZQorICAgc2FtZSBmb2xkZXIgYXMgdGhpcyBSRUFETUUsIGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgInByZWZpeCIKKyAgIGtleSB0byB3aGF0ZXZlciB5b3Ugd2FudCAoZm9yIGV4YW1wbGUsIFlvdXJUcmFuc2Zvcm0pLgorICAKKzIuIENvcHkgdGhlIHVwZGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlIHRvIHlvdXIgPHNlcnZpY2VtaXhfaG9tZT4vZXRjCisgICBkaXJlY3RvcnkuIFlvdSBjYW4gZG8gdGhpcyBmcm9tIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGUgYnkgdHlwaW5nOgorCisgICAgIGNvcHkgJFlPVVJfU0VSVklDRU1JWF9IT01FL2V4YW1wbGVzL2NhbWVsLW9zZ2kvb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNmZworICAgICAkWU9VUl9TRVJWSUNFTUlYX0hPTUUvZXRjCisKKyAgIE9uIFdpbmRvd3MgeW91IG5lZWQgdG8gcmVwbGFjZSAvIGluIHRoZSBwYXRoIHdpdGggXFwuCisKKyAgIE5vdGUsIHRoZSB0ZXh0IHlvdSBhcmUgdHlwaW5nIG1pZ2h0IGludGVybWluZ2xlIHdpdGggdGhlIG91dHB1dAorICAgYmVpbmcgbG9nZ2VkLiBUaGlzIGlzIG5vdGhpbmcgdG8gd29ycnkgYWJvdXQuCisKKzMuIFJlc3RhcnQgdGhlIGV4YW1wbGUgYnVuZGxlOgorCisgICAoaSkgRmlyc3QgeW91IG11c3Qga25vdyB0aGUgYnVuZGxlIElEIHRoYXQgU2VydmljZU1peCBoYXMgYXNzaWduZWQKKyAgICAgICB0byBpdC4gVG8gZ2V0IHRoZSBidW5kbGUgSUQsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUKKyAgICAgICBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgICAgICAgIG9zZ2k6bGlzdAorCisgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBsaXN0aW5nLCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBzaW1pbGFyIHRvCisgICAgICB0aGUgZm9sbG93aW5nOgorCisgICAgICBbMTU4XSBbQWN0aXZlICAgICBdIFtTdGFydGVkICBdIFsgIDYwXSBBcGFjaGUgU2VydmljZU1peCBFeGFtcGxlIDo6IENhbWVsIE9TR2kgKDQuMS4wKQorIAorICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgYnVuZGxlIElEIGlzIDE1OC4KKworICAgKGlpKSBFbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZSB0bworICAgICAgICByZXN0YXJ0IHRoZSBidW5kbGU6CisgICAgCisgICAgICAgICAgb3NnaTpyZXN0YXJ0IDxidW5kbGVfaWQ+CisgIAorICBUaGUgcHJlZml4IG9mIHRoZSBvdXRwdXQgc2hvdWxkIGNoYW5nZSwgYW5kIHRoZSBvdXRwdXQgc2hvdWxkIGxvb2sKKyAgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorCisgID4+Pj4gWW91clRyYW5zZm9ybSBzZXQgYm9keTogIFR1ZSBBdWcgMTEgMTc6MTQ6MTIgQlNUIDIwMDkKKyAgPj4+PiBZb3VyVHJhbnNmb3JtIHNldCBib2R5OiAgVHVlIEF1ZyAxMSAxNzoxNDoxNCBCU1QgMjAwOQorICA+Pj4+IFlvdXJUcmFuc2Zvcm0gc2V0IGJvZHk6ICBUdWUgQXVnIDExIDE3OjE0OjE2IEJTVCAyMDA5CisgIAorRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBzdG9wIGFuZC9vciB1bmluc3RhbGwgdGhlIGV4YW1wbGUsIHNlZQorIlN0b3BwaW5nIGFuZCBVbmluc3RhbGxpbmcgdGhlIEV4YW1wbGUiIGJlbG93LgorCisKK0IuIEJ1aWxkaW5nIHRoZSBFeGFtcGxlIEJ1bmRsZSBZb3Vyc2VsZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBpbnN0YWxsIGFuZCBydW4gdGhlIGV4YW1wbGUgd2hlcmUgeW91IGJ1aWxkIHRoZSBleGFtcGxlIGJ1bmRsZQoreW91cnNlbGYsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisKKzEuIElmIHlvdSBoYXZlIGFscmVhZHkgcnVuIHRoZSBleGFtcGxlIHVzaW5nIHRoZSBwcmVidWlsdCB2ZXJzaW9uIGFzCisgICBkZXNjcmliZWQgYWJvdmUsIHlvdSBtdXN0IGZpcnN0IHVuaW5zdGFsbCB0aGUgZXhhbXBsZXMtY2FtZWwtb3NnaQorICAgZmVhdHVyZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICAgICBmZWF0dXJlczp1bmluc3RhbGwgZXhhbXBsZXMtY2FtZWwtb3NnaQorCisyLiBCdWlsZCB0aGUgZXhhbXBsZSBieSBvcGVuaW5nIGEgY29tbWFuZCBwcm9tcHQsIGNoYW5naW5nIGRpcmVjdG9yeSB0bworICAgZXhhbXBsZXMvY2FtZWwtb3NnaSAodGhpcyBleGFtcGxlKSBhbmQgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBNYXZlbgorICAgY29tbWFuZDoKKworICAgICBtdm4gaW5zdGFsbAorICAgCisgICBJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgbG9jYWwgTWF2ZW4KKyAgIHJlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgdmVyeSBxdWlja2x5LiBPdGhlcndpc2UgaXQgbWF5CisgICB0YWtlIHNvbWUgdGltZSBmb3IgTWF2ZW4gdG8gZG93bmxvYWQgZXZlcnl0aGluZyBpdCBuZWVkcy4KKyAgIAorICAgVGhlIG12biBpbnN0YWxsIGNvbW1hbmQgYnVpbGRzIHRoZSBleGFtcGxlIGRlcGxveW1lbnQgYnVuZGxlIGFuZAorICAgY29waWVzIGl0IHRvIHlvdXIgbG9jYWwgTWF2ZW4gcmVwb3NpdG9yeSBhbmQgdG8gdGhlIHRhcmdldCBkaXJlY3RvcnkKKyAgIG9mIHRoaXMgZXhhbXBsZS4KKyAgICAgCiszLiBJbnN0YWxsIHRoZSBleGFtcGxlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbgorICAgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKyAgIAorICAgICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWNhbWVsLW9zZ2kKKyAgICAgICAKKyAgIEl0IG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0IGZpbGUgaW4gdGhlIGV4YW1wbGVzCisgICBwYXJlbnQgZGlyZWN0b3J5LgorICAgCitPbmNlIHRoZSBleGFtcGxlIGlzIHJ1bm5pbmcsIHBlcmlvZGljIGV2ZW50cyBhcmUgcm91dGVkIHRvIHRoZQordHJhbnNmb3JtIG1ldGhvZCBvZiB0aGUgTXlUcmFuc2Zvcm0gY2xhc3MgYW5kIHlvdSBzaG91bGQgc2VlIG91dHB1dAorc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGJlaW5nIGxvZ2dlZCB0byB5b3VyIGNvbnNvbGUgc2NyZWVuOgorCis+Pj4+IE15VHJhbnNmb3JtIHNldCBib2R5OiAgVHVlIEF1ZyAxMSAxNjo1NjowNiBCU1QgMjAwOQorPj4+PiBNeVRyYW5zZm9ybSBzZXQgYm9keTogIFR1ZSBBdWcgMTEgMTY6NTY6MDggQlNUIDIwMDkKKz4+Pj4gTXlUcmFuc2Zvcm0gc2V0IGJvZHk6ICBUdWUgQXVnIDExIDE2OjU2OjEwIEJTVCAyMDA5CisKK05vdywgaWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgdHJ5IHVwZGF0aW5nIGFuZCByZWRlcGxveWluZywKK2Zyb20gdGhlIGNvbnNvbGUsIHRoZSBwcm9wZXJ0aWVzIGZpbGUgdGhhdCBpcyB1c2VkIGJ5IHRoZSBwcm9wZXJ0aWVzCitwbGFjZWhvbGRlciBpbiB0aGUgYmVhbnMueG1sIGZpbGUuIEZvciBkZXRhaWxzIG9uIGhvdyB0byBkbyB0aGlzLCBzZWUKK3RoZSAiVXBkYXRpbmcgYW5kIFJlZGVwbG95aW5nIHRoZSBQcm9wZXJ0aWVzIEZpbGUgZnJvbSB0aGUgQ29uc29sZSIKK3NlY3Rpb24gYWJvdmUuCisKKworU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCB0aGUgZXhhbXBsZSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4Citjb25zb2xlOgorCisgIG9zZ2k6c3RvcCA8YnVuZGxlX2lkPgorCitGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGZpbmQgdGhlIGJ1bmRsZV9pZCBhc3NpZ25lZCB0byB0aGUgZXhhbXBsZSwKK3NlZSBzdGVwIDMgaW4gdGhlICJVcGRhdGluZyBhbmQgUmVkZXBsb3lpbmcgdGhlIFByb3BlcnRpZXMgRmlsZSAKK2Zyb20gdGhlIENvbnNvbGUiIHNlY3Rpb24gYWJvdmUuCisKK1RvIHVuaW5zdGFsbCB0aGUgZXhhbXBsZSwgZW50ZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgaW4KK3RoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWNhbWVsLW9zZ2kKKyAKK29yCisgCisgIG9zZ2k6dW5pbnN0YWxsIDxidW5kbGVfaWQ+CisgIAorCitWaWV3aW5nIHRoZSBMb2cgRW50cmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gdmlldyB0aGUgZW50cmllcyBpbiB0aGUgbG9nIGZpbGUgaW4gdGhlIGRhdGEvbG9nCitkaXJlY3Rvcnkgb2YgeW91ciBTZXJ2aWNlTWl4IGluc3RhbGxhdGlvbiwgb3IgYnkgdHlwaW5nCit0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBsb2c6ZGlzcGxheQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2ZnIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWZiYTYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1vc2dpL29yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jZmcKQEAgLTAsMCArMSwyMiBAQAorIworIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCAgdW5kZXIgdGhlICBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyAgT0YgQU5ZIEtJTkQsIGVpdGhlciAgZXhwcmVzcyAgb3IKKyMgaW1wbGllZC4KKyMKKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMKKworCitwcmVmaXg9WW91clRyYW5zZm9ybQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjM2Q3NjYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1vc2dpL3BvbS54bWwKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5jYW1lbC1vc2dpPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+YnVuZGxlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQ2FtZWwgT1NHaTwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Q2FtZWwgZXhhbXBsZSB1c2luZyBPU0dpIGluc3RlYWQgb2YgSkJJPC9kZXNjcmlwdGlvbj4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY2FtZWw8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC1zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtRGVzY3JpcHRpb24+JHtwcm9qZWN0LmRlc2NyaXB0aW9ufTwvQnVuZGxlLURlc2NyaXB0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPio8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFByaXZhdGUtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2FtZWw8L1ByaXZhdGUtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2NhbWVsL015Um91dGVCdWlsZGVyLmphdmEgYi90cnVuay9leGFtcGxlcy9jYW1lbC1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2NhbWVsL015Um91dGVCdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyN2Y3YgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY2FtZWwvTXlSb3V0ZUJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2FtZWw7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNhbWVsLmJ1aWxkZXIuUm91dGVCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuc3ByaW5nLk1haW47CisKKy8qKgorICogQSBzaW1wbGUgZXhhbXBsZSByb3V0ZXIgdG8gc2hvdyBob3cgdG8gZGVmaW5lIHRoZSByb3V0ZSB3aXRoIEphdmEgRFNMCisgKgorICogQHZlcnNpb24gJFJldmlzaW9uJAorICovCitwdWJsaWMgY2xhc3MgTXlSb3V0ZUJ1aWxkZXIgZXh0ZW5kcyBSb3V0ZUJ1aWxkZXIgeworICAgIC8qKgorICAgICAqIEFsbG93IHRoaXMgcm91dGUgdG8gYmUgcnVuIGFzIGFuIGFwcGxpY2F0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYXJncworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb257CisgICAgICAgIG5ldyBNYWluKCkucnVuKGFyZ3MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgLy8gc2V0IHVwIHRoZSB0cmFuc2Zvcm0gYmVhbgorICAgICAgICBNeVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBuZXcgTXlUcmFuc2Zvcm0oKTsKKyAgICAgICAgdHJhbnNmb3JtLnNldFByZWZpeCgiSmF2YURTTCIpOworICAgICAgICAKKyAgICAgICAgZnJvbSgidGltZXI6Ly9qYXZhVGltZXI/Zml4ZWRSYXRlPXRydWUmcGVyaW9kPTIwMDAiKQorICAgICAgICAgICAgLmJlYW4odHJhbnNmb3JtLCAidHJhbnNmb3JtIikKKyAgICAgICAgICAgIC50bygibG9nOkV4YW1wbGVSb3V0ZXIiKTsgICAgICAgIAorICAgIH0KKworICAgIAorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jYW1lbC9NeVRyYW5zZm9ybS5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jYW1lbC9NeVRyYW5zZm9ybS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZjg2M2YKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2NhbWVsL015VHJhbnNmb3JtLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKKworLyoqCisgKiBAdmVyc2lvbiAkUmV2aXNpb246IDY0MDQ1MCAkCisgKi8KK3B1YmxpYyBjbGFzcyBNeVRyYW5zZm9ybSAgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHRyYW5zaWVudCBMb2cgTE9HID0gTG9nRmFjdG9yeS5nZXRMb2coTXlUcmFuc2Zvcm0uY2xhc3MpOworICAgIHByaXZhdGUgYm9vbGVhbiB2ZXJib3NlID0gdHJ1ZTsKKyAgICBwcml2YXRlIFN0cmluZyBwcmVmaXggPSAiTXlUcmFuc2Zvcm0iOworCisgICAgcHVibGljIE9iamVjdCB0cmFuc2Zvcm0oT2JqZWN0IGJvZHkpIHsKKyAgICAgICAgU3RyaW5nIGFuc3dlciA9IHByZWZpeCArICIgc2V0IGJvZHk6ICAiICsgbmV3IERhdGUoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+PiAiICsgYW5zd2VyKTsKKyAgICAgICAgfQorICAgICAgICBMT0cuaW5mbygiPj4+PiAiICsgYW5zd2VyKTsKKyAgICAgICAgcmV0dXJuIGFuc3dlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1ZlcmJvc2UoKSB7CisgICAgICAgIHJldHVybiB2ZXJib3NlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFZlcmJvc2UoYm9vbGVhbiB2ZXJib3NlKSB7CisgICAgICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2U7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKSB7CisgICAgICAgIHJldHVybiBwcmVmaXg7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0UHJlZml4KFN0cmluZyBwcmVmaXgpIHsKKyAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwtb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxOTBmZgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKQEAgLTAsMCArMSw1MSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpjdHg9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvY29udGV4dCIKKyAgICAgICB4bWxuczpjYW1lbD0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyIKKyAgICAgICB4bWxuczpvc2dpeD0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpLWNvbXBlbmRpdW0iCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLTIuMC54c2QKKyAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2NvbnRleHQgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9jb250ZXh0L3NwcmluZy1jb250ZXh0LnhzZAorICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZy9jYW1lbC1zcHJpbmcueHNkCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpLWNvbXBlbmRpdW0gaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpLWNvbXBlbmRpdW0vc3ByaW5nLW9zZ2ktY29tcGVuZGl1bS54c2QiPgorCisgIDxjYW1lbDpjYW1lbENvbnRleHQgeG1sbnM9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmciPgorICAgIDwhLS0gaW5zdGFsbCB0aGUgSmF2YSBEU0wgcm91dGUgYnVpbGRlciAtLT4KKyAgICA8cGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY2FtZWw8L3BhY2thZ2U+CisgICAgPCEtLSBpbnN0YWxsIHRoZSByb3V0ZSB3aGljaCBpcyBkZWZpbmVkIHdpdGggeG1sIHRhZ3MgLS0+CisgICAgPHJvdXRlPgorICAgICAgPGZyb20gdXJpPSJ0aW1lcjovL3NwcmluZ1RpbWVyP2ZpeGVkUmF0ZT10cnVlJmFtcDtwZXJpb2Q9MjAwMCIvPgorICAgICAgPGJlYW4gcmVmPSJteVRyYW5zZm9ybSIgbWV0aG9kPSJ0cmFuc2Zvcm0iLz4KKyAgICAgIDx0byB1cmk9ImxvZzpFeGFtcGxlUm91dGVyIi8+CisgICAgPC9yb3V0ZT4KKyAgPC9jYW1lbDpjYW1lbENvbnRleHQ+CisKKyAgPGJlYW4gaWQ9Im15VHJhbnNmb3JtIiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsLk15VHJhbnNmb3JtIj4KKyAgICA8cHJvcGVydHkgbmFtZT0icHJlZml4IiB2YWx1ZT0iJHtwcmVmaXh9Ii8+CisgIDwvYmVhbj4KKyAgIAorICAgIDxvc2dpeDpjbS1wcm9wZXJ0aWVzIGlkPSJwcmVQcm9wcyIgcGVyc2lzdGVudC1pZD0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzIj4KKyAgICAgICAgPHByb3Aga2V5PSJwcmVmaXgiPk15VHJhbnNmb3JtPC9wcm9wPgorICAgIDwvb3NnaXg6Y20tcHJvcGVydGllcz4KKworICAgIDxjdHg6cHJvcGVydHktcGxhY2Vob2xkZXIgcHJvcGVydGllcy1yZWY9InByZVByb3BzIiAvPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwvUkVBRE1FLnR4dCBiL3RydW5rL2V4YW1wbGVzL2NhbWVsL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NjgzZAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsL1JFQURNRS50eHQKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ0FNRUwgSkFWQSBKQkkgRVhBTVBMRQorPT09PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitXcml0ZSBhIHNpbXBsZSBDYW1lbCBFSVAgcm91dGUgaW4gSmF2YSwgYW5kIGRlcGxveSBpdCBhcyBhIEpCSQorY29tcG9uZW50LgorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIENhbWVsIHJvdXRlIGlzIHdyaXR0ZW4gaW4gSmF2YSBhbmQgY2FuIGJlIGZvdW5kIGluIHRoZSAKK015Um91dGVCdWlsZGVyLmphdmEgZmlsZSwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUgZm9sbG93aW5nCitkaXJlY3Rvcnkgb2YgdGhpcyBleGFtcGxlOgorCisgIGNhbWVsLXNpbXBsZS1zdS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzCisgIAorVGhlIGNvbnRlbnRzIG9mIHRoZSBNeVJvdXRlQnVpbGRlci5qYXZhIGZpbGUgY2FuIGJlIGRlc2NyaWJlZCBhcworZm9sbG93czoKKworLSBEZWZpbmVzIGEgTXlSb3V0ZUJ1aWxkZXIgY2xhc3MgdGhhdCBleHRlbmRzCisgIG9yZy5hcGFjaGUuY2FtZWwuYnVpbGRlci5Sb3V0ZUJ1aWxkZXIuCisKKy0gV3JpdGVzIGEgY29uZmlndXJlKCkgbWV0aG9kIHRoYXQgc2V0cyB1cCB0aGUgcm91dGUuCisKKy0gVGhlIHJvdXRlIGRvZXMgdGhlIGZvbGxvd2luZzoKKworICAxLiBVc2VzIHRoZSBDYW1lbCB0aW1lciBjb21wb25lbnQgdG8gY3JlYXRlIGEgaGVhcnRiZWF0IGV2ZW50CisgICAgIGV2ZXJ5IHNlY29uZC4KKyAgMi4gU2V0cyB0aGUgZXZlbnQgbWVzc2FnZSBib2R5IHRvICJIZWxsbyBXb3JsZCIuCisgIDMuIEZvcndhcmRzIHRoZSBtZXNzYWdlIHRvIGEgbG9nZ2VyLgorCisKK1RoZSBDYW1lbCBjb25maWd1cmF0aW9uIGZpbGUsIGNhbWVsLWNvbnRleHQueG1sLCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YKK3RoZSBKYXZhIHBhY2thZ2UgY29udGFpbmluZyBvbmUgb3IgbW9yZSBSb3V0ZUJ1aWxlciBjbGFzc2VzLiBXaGVuIHRoZQorYXBwbGljYXRpb24gaXMgZGVwbG95ZWQsIENhbWVsIHNlYXJjaGVzIHRoZSBzcGVjaWZpZWQgSmF2YSBwYWNrYWdlIGZvcgorYW55IGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gUm91dGVCdWlsZGVyLiBBbGwgc3VjaCBjbGFzc2VzIGFyZQoraW5zdGFudGlhdGVkIGFuZCByZWdpc3RlcmVkIHdpdGggdGhlIENhbWVsQ29udGV4dCBvYmplY3QsIHRoZXJlYnkKK2luc3RhbGxpbmcgYW5kIGFjdGl2YXRpbmcgdGhlIEphdmEgcm91dGVzLiBUaGUgY2FtZWwtY29udGVudC54bWwKK2NvbmZpZ3VyYXRpb24gZmlsZSBpcyBsb2NhdGVkIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IG9mIHRoaXMKK2V4YW1wbGU6CisKKyAgY2FtZWwtc2ltcGxlLXN1L3NyYy9tYWluL3Jlc291cmNlcyAKKworCitQcmVyZXF1aXNpdGVzIGZvciBSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxLiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKKworICAgLSBKREsgMS41IG9yIGhpZ2hlcgorICAgCisgICAtIE1hdmVuIDIuMC45IG9yIGhpZ2hlcgorCisgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbAorICAgZXhhbXBsZXMgZGlyZWN0b3J5LgorCisKKzIuIFN0YXJ0IFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXggICAgICAgICAgKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4ICAgICAgICAgIChvbiBXaW5kb3dzKQorCisKK0J1aWxkaW5nIGFuZCBEZXBsb3lpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGJ1aWxkIHRoaXMgZXhhbXBsZSwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCAoZnJvbSB0aGUgZGlyZWN0b3J5Cit0aGF0IGNvbnRhaW5zIHRoaXMgUkVBRE1FKToKKworICBtdm4gaW5zdGFsbAorICAKKworSWYgYWxsIG9mIHRoZSByZXF1aXJlZCBPU0dpIGJ1bmRsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIGxvY2FsCitNYXZlbiByZXBvc2l0b3J5LCB0aGUgZXhhbXBsZSB3aWxsIGJ1aWxkIHF1aWNrbHkuIE90aGVyd2lzZSBpdAorbWF5IHRha2Ugc29tZSB0aW1lIGZvciBNYXZlbiB0byBkb3dubG9hZCBldmVyeXRoaW5nIGl0IG5lZWRzLgorCitPbmNlIGNvbXBsZXRlLCB5b3Ugd2lsbCBmaW5kIHRoZSBleGFtcGxlIHNlcnZpY2UgYXNzZW1ibHksIGNhbGxlZAorY2FtZWwtc2EtJHt2ZXJzaW9ufS56aXAsIGluIHRoZSBjYW1lbC1zYS90YXJnZXQgZGlyZWN0b3J5LgorCitZb3UgY2FuIGRlcGxveSB0aGUgZXhhbXBsZSBpbiB0d28gd2F5czoKKworLSBVc2luZyBIb3QgRGVwbG95bWVudAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgQ29weSB0aGUgY2FtZWwtc2EvdGFyZ2V0L2NhbWVsLXNhLSR7dmVyc2lvbn0uemlwIHRvIHRoZSAKKyAgPHNlcnZpY2VtaXhfaG9tZT4vZGVwbG95IGRpcmVjdG9yeS4KKworCistIFVzaW5nIHRoZSBTZXJ2aWNlTWl4IENvbnNvbGUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgCisgIG9zZ2k6aW5zdGFsbCAtcyBtdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsL2NhbWVsLXNhLyR7dmVyc2lvbn0vemlwCisKKworT25jZSBkZXBsb3llZCwgeW91IGNhbiB2aWV3IHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBpbiB0aGUKK2xvZyBmaWxlIGluIHRoZSBkYXRhL2xvZyBkaXJlY3Rvcnkgb2YgeW91ciBTZXJ2aWNlTWl4CitpbnN0YWxsYXRpb24sIG9yIGJ5IHR5cGluZyAnbG9nOmRpc3BsYXknIGluIHRoZSBTZXJ2aWNlTWl4Citjb25zb2xlOgorCisgIEV4Y2hhbmdlW0JvZHlUeXBlOlN0cmluZywgQm9keTpIZWxsbyBXb3JsZCFdCisgIAorCitDaGFuZ2luZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgY29kZSBvciBjb25maWd1cmF0aW9uIGluIHRoaXMgZXhhbXBsZSwKK3VzZSAnbXZuIGluc3RhbGwnIHRvIHJlYnVpbGQgdGhlIEpCSSBTZXJ2aWNlIEFzc2VtYmx5IHppcCwgYW5kCitkZXBsb3kgaXQgYXMgZGVzY3JpYmVkIGFib3ZlLgorCisKK01vcmUgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgdGhpcyBleGFtcGxlLCBzZWU6CisgIAoraHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jYW1lbC1leGFtcGxlLmh0bWwKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2NhbWVsL2NhbWVsLXNhL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jYW1lbC9jYW1lbC1zYS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWQ0NjYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC9jYW1lbC1zYS9wb20ueG1sCkBAIC0wLDAgKzEsNTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmNhbWVsLXNhPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+amJpLXNlcnZpY2UtYXNzZW1ibHk8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBDYW1lbCA6OiBTQTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1jYW1lbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLXNpbXBsZS1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorICAgIAorICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2NhbWVsL2NhbWVsLXNpbXBsZS1zdS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwvY2FtZWwtc2ltcGxlLXN1L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzYjlkMwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsL2NhbWVsLXNpbXBsZS1zdS9wb20ueG1sCkBAIC0wLDAgKzEsNjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKyAgICAKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmNhbWVsPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmNhbWVsLXNpbXBsZS1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBDYW1lbCA6OiBDYW1lbCBTaW1wbGUgU1U8L25hbWU+CisgICAgCisgICAgPHByb3BlcnRpZXM+CisgICAgICAgIDxjb21wb25lbnROYW1lPnNlcnZpY2VtaXgtY2FtZWw8L2NvbXBvbmVudE5hbWU+CisgICAgPC9wcm9wZXJ0aWVzPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWNhbWVsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8ZGVmYXVsdEdvYWw+aW5zdGFsbDwvZGVmYXVsdEdvYWw+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgorICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuNTwvdGFyZ2V0PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jYW1lbC9jYW1lbC1zaW1wbGUtc3Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9NeVJvdXRlQnVpbGRlci5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwvY2FtZWwtc2ltcGxlLXN1L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvTXlSb3V0ZUJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNmMjIwCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY2FtZWwvY2FtZWwtc2ltcGxlLXN1L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvTXlSb3V0ZUJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDMzIEBACisvKioNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXM7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuYnVpbGRlci5Sb3V0ZUJ1aWxkZXI7DQorDQorLyoqDQorICogQSBDYW1lbCBSb3V0ZXINCisgKiANCisgKiBAdmVyc2lvbiAkUmV2aXNpb246IDEuMSAkDQorICovDQorcHVibGljIGNsYXNzIE15Um91dGVCdWlsZGVyIGV4dGVuZHMgUm91dGVCdWlsZGVyIHsNCisgICAgcHVibGljIHZvaWQgY29uZmlndXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorDQorICAgICAgICBmcm9tKCJ0aW1lcjpteVRpbWVyRXZlbnQ/Zml4ZWRSYXRlPXRydWUiKQ0KKyAgICAgICAgICAgIC5zZXRCb2R5KGNvbnN0YW50KCJIZWxsbyBXb3JsZCEiKSkNCisgICAgICAgICAgICAudG8oImxvZzpvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy5jYW1lbC5FeGFtcGxlQ2FtZWxSb3V0ZSIpOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2NhbWVsL2NhbWVsLXNpbXBsZS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FtZWwtY29udGV4dC54bWwgYi90cnVuay9leGFtcGxlcy9jYW1lbC9jYW1lbC1zaW1wbGUtc3Uvc3JjL21haW4vcmVzb3VyY2VzL2NhbWVsLWNvbnRleHQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jYW1lbC9jYW1lbC1zaW1wbGUtc3Uvc3JjL21haW4vcmVzb3VyY2VzL2NhbWVsLWNvbnRleHQueG1sCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKw0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisNCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIg0KKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Ig0KKyAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLTIuMC54c2QNCisgICAgICAgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyBodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nL2NhbWVsLXNwcmluZy54c2QNCisgICAgIj4NCisNCisgICAgICA8Y2FtZWxDb250ZXh0IHhtbG5zPSJodHRwOi8vY2FtZWwuYXBhY2hlLm9yZy9zY2hlbWEvc3ByaW5nIj4NCisgICAgICAgIDxwYWNrYWdlPm9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzPC9wYWNrYWdlPg0KKyAgICAgIDwvY2FtZWxDb250ZXh0Pg0KKw0KKzwvYmVhbnM+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY2FtZWwvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2NhbWVsL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiM2VlNwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2NhbWVsL3BvbS54bWwKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+Y2FtZWw8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQ2FtZWw8L25hbWU+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKworICAgIDxtb2R1bGVzPgorICAgICAgICA8bW9kdWxlPmNhbWVsLXNpbXBsZS1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmNhbWVsLXNhPC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLWNhbWVsLW5tci9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWNhbWVsLW5tci9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODI0YmYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL1JFQURNRS50eHQKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ1hGLCBDQU1FTCBhbmQgTk1SIEVYQU1QTEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1B1cnBvc2UKKy0tLS0tLS0KK0NyZWF0ZSBhIENhbWVsIHJvdXRlIHRoYXQgdHJhbnNmb3JtcyBhIG1lc3NhZ2UsIHRoZW4gcGFzc2VzIGl0IHRvIGEKK0NYRiB3ZWIgc2VydmljZSB2aWEgdGhlIE5NUi4KKworCitFeHBsYW5hdGlvbgorLS0tLS0tLS0tLS0KK1RoZSBDYW1lbCByb3V0ZSBpcyBkZWZpbmVkIGluIHRoZSBiZWFucy54bWwgZmlsZSB0aGF0IGlzIGxvY2F0ZWQKK2luIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nIGRpcmVjdG9yeSBvZiB0aGlzIGV4YW1wbGUuCisKK1RoZSByb3V0ZSBpcyBkZWZpbmVkIGluIHRoZSA8cm91dGU+IGVsZW1lbnQgYW5kIGNhbiBiZSBleHBsYWluZWQKK2FzIGZvbGxvd3M6CisKKzEuIEEgbWVzc2FnZSBmbG93IGlzIHRyaWdnZXJlZCBldmVyeSBmaXZlIHNlY29uZHMuCisKKzIuIEl0IGlzIHNlbnQgdG8gdGhlIE15VHJhbnNmb3JtIGJlYW4sIHdoaWNoIGFkZHMgYSBTT0FQIG1lc3NhZ2UuCisKKzMuIEl0IGlzIHNlbnQgdmlhIHRoZSBOTVIgdG8gdGhlIEhlbGxvV29ybGQgd2ViIHNlcnZpY2UuCisKKzQuIFJlc3BvbnNlcyBhcmUgcm91dGVkIHRvIHRoZSBkaXNwbGF5IG1ldGhvZCBvZiB0aGUgTXlUcmFuc2Zvcm0KKyAgIGNsYXNzLgorCitUaGUgd2ViIHNlcnZpY2UgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorCisgPGpheHdzOmVuZHBvaW50IGlkPSJoZWxsb1dvcmxkIgorICAgICAgIGltcGxlbWVudG9yPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmY2FtZWwuSGVsbG9Xb3JsZEltcGwiCisgICAgICAgYWRkcmVzcz0ibm1yOkhlbGxvV29ybGQiIC8+CisKKworUHJlcmVxdWlzaXRlcyBmb3IgUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIKKyAgIAorICAgLSBNYXZlbiAyLjAuOSBvciBoaWdoZXIKKyAgIAorICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbCBleGFtcGxlcworICBkaXJlY3RvcnkuCisKKworMi4gU3RhcnQgU2VydmljZU1peCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICA8c2VydmljZW1peF9ob21lPi9iaW4vc2VydmljZW1peCAgICAgICAgICAob24gVU5JWCkKKyAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgICAgICAgKG9uIFdpbmRvd3MpCisgIAorCitSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHJ1biB0aGUgZXhhbXBsZSBpbiB0d28gd2F5czoKKworLSBBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgZXhhbXBsZSB1cCBhbmQKK3J1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKworLSBCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGV4YW1wbGUgaW4gYW55Cit3YXkuIEl0IHRlbGxzIHlvdSBob3cgdG8gYnVpbGQgYW5kIGRlcGxveSB0aGUgZXhhbXBsZS4gVGhpcworb3B0aW9uIG1pZ2h0IGJlIHNsb3dlciB0aGFuIG9wdGlvbiBBIGJlY2F1c2UsIGlmIHlvdSBkbyBub3QKK2FscmVhZHkgaGF2ZSB0aGUgcmVxdWlyZWQgYnVuZGxlcyBpbiB5b3VyIGxvY2FsIE1hdmVuCityZXBvc2l0b3J5LCBNYXZlbiB3aWxsIGhhdmUgdG8gZG93bmxvYWQgdGhlIGJ1bmRsZXMgaXQgbmVlZHMuCisKKworQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBpbnN0YWxsIGFuZCBydW4gYSBwcmVidWlsdCB2ZXJzaW9uIG9mIHRoaXMgZXhhbXBsZSwgZW50ZXIKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOmluc3RhbGwgZXhhbXBsZXMtY3hmLWNhbWVsLW5tcgorICAKK1RoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dAorZmlsZSBpbiB0aGUgZXhhbXBsZXMgcGFyZW50IGRpcmVjdG9yeS4KKworT25jZSB0aGUgZXhhbXBsZSBpcyBydW5uaW5nLCBwZXJpb2RpYyBTT0FQIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgYnkKK3RoZSB0cmFuc2Zvcm0gbWV0aG9kIG9mIHRoZSBNeVRyYW5zZm9ybSBjbGFzcy4gVGhlc2UgbWVzc2FnZXMgYXJlIHJvdXRlZAordG8gdGhlIENYRiBlbmRwb2ludCwgYW5kIHRoZSByZXNwb25zZXMgYXJlIHJvdXRlZCB0byB0aGUgZGlzcGxheSBtZXRob2QKK29mIHRoZSBNeVRyYW5zZm9ybSBjbGFzcy4gWW91IHNob3VsZCBzZWUgb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZworYmVpbmcgbG9nZ2VkIHRvIHlvdXIgY29uc29sZSBzY3JlZW46CisKKz4+Pj4gPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorPHNvYXA6Qm9keT48bnMxOnNheUhpIHhtbG5zOm5zMT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvCisiPjxhcmcwPkd1aWxsYXVtZTwvYXJnMD48L25zMTpzYXlIaT48L3NvYXA6Qm9keT48L3NvYXA6RW52ZWxvcGU+Cis8PDw8IDxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKzxzb2FwOkJvZHk+PG5zMjpzYXlIaVJlc3BvbnNlIHhtbG5zOm5zMj0iaHR0cDovL2N4ZmNhbWVsLmV4YW1wbGVzLgorc2VydmljZW1peC5hcGFjaGUub3JnLyI+PHJldHVybj5IZWxsbyBHdWlsbGF1bWU8L3JldHVybj4KKzwvbnMyOnNheUhpUmVzcG9uc2U+PC9zb2FwOkJvZHk+PC9zb2FwOkVudmVsb3BlPgorCitGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHN0b3AgYW5kL29yIHVuaW5zdGFsbCB0aGUgZXhhbXBsZSwKK3NlZSAiU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZSIgYmVsb3cuCisgIAorCitCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIHRoZSBleGFtcGxlIHdoZXJlIHlvdSBidWlsZCB0aGUgZXhhbXBsZSBidW5kbGUKK3lvdXJzZWxmLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IHJ1biB0aGUgZXhhbXBsZSB1c2luZyB0aGUgcHJlYnVpbHQgdmVyc2lvbiBhcworICAgZGVzY3JpYmVkIGFib3ZlLCB5b3UgbXVzdCBmaXJzdCB1bmluc3RhbGwgdGhlIGV4YW1wbGVzLWN4Zi1jYW1lbC1ubXIKKyAgIGZlYXR1cmUgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgICAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWN4Zi1jYW1lbC1ubXIKKworMi4gQnVpbGQgdGhlIGV4YW1wbGUgYnkgb3BlbmluZyBhIGNvbW1hbmQgcHJvbXB0LCBjaGFuZ2luZyBkaXJlY3RvcnkgdG8KKyAgIGV4YW1wbGVzL2N4Zi1jYW1lbC1ubXIgKHRoaXMgZXhhbXBsZSkgYW5kIGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgTWF2ZW4KKyAgIGNvbW1hbmQ6CisKKyAgICAgbXZuIGluc3RhbGwKKyAgIAorICAgSWYgYWxsIG9mIHRoZSByZXF1aXJlZCBPU0dpIGJ1bmRsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIGxvY2FsIE1hdmVuCisgICByZXBvc2l0b3J5LCB0aGUgZXhhbXBsZSB3aWxsIGJ1aWxkIHZlcnkgcXVpY2tseS4gT3RoZXJ3aXNlIGl0IG1heQorICAgdGFrZSBzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgaXQgbmVlZHMuCisgICAKKyAgIFRoZSBtdm4gaW5zdGFsbCBjb21tYW5kIGJ1aWxkcyB0aGUgZXhhbXBsZSBkZXBsb3ltZW50IGJ1bmRsZSBhbmQKKyAgIGNvcGllcyBpdCB0byB5b3VyIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnkgYW5kIHRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5CisgICBvZiB0aGlzIGV4YW1wbGUuCisgICAgIAorMy4gSW5zdGFsbCB0aGUgZXhhbXBsZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4KKyAgIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisgICAKKyAgICAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jeGYtY2FtZWwtbm1yCisgICAgICAgCisgICBJdCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvciBtb3JlIGluZm9ybWF0aW9uCisgICBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dCBmaWxlIGluIHRoZSBleGFtcGxlcworICAgcGFyZW50IGRpcmVjdG9yeS4KKyAgIAorT25jZSB0aGUgZXhhbXBsZSBpcyBydW5uaW5nLCBwZXJpb2RpYyBTT0FQIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgYnkKK3RoZSB0cmFuc2Zvcm0gbWV0aG9kIG9mIHRoZSBNeVRyYW5zZm9ybSBjbGFzcy4gVGhlc2UgbWVzc2FnZXMgYXJlIHJvdXRlZAordG8gdGhlIENYRiBlbmRwb2ludCwgYW5kIHRoZSByZXNwb25zZXMgYXJlIHJvdXRlZCB0byB0aGUgZGlzcGxheSBtZXRob2QKK29mIHRoZSBNeVRyYW5zZm9ybSBjbGFzcy4gWW91IHNob3VsZCBzZWUgdGhlIG1lc3NhZ2VzIGRpc3BsYXllZCBvbiB5b3VyCitjb25zb2xlLgorCisKK1N0b3BwaW5nIGFuZCBVbmluc3RhbGxpbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHN0b3AgdGhlIGV4YW1wbGUsIHlvdSBtdXN0IGZpcnN0IGtub3cgdGhlIGJ1bmRsZSBJRCB0aGF0IFNlcnZpY2VNaXgKK2hhcyBhc3NpZ25lZCB0byBpdC4gVG8gZ2V0IHRoZSBidW5kbGUgSUQsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZAoraW4gdGhlIFNlcnZpY2VNaXggY29uc29sZSAoTm90ZSwgdGhlIHRleHQgeW91IGFyZSB0eXBpbmcgd2lsbCBpbnRlcm1pbmdsZQord2l0aCB0aGUgb3V0cHV0IGJlaW5nIGxvZ2dlZC4gVGhpcyBpcyBub3RoaW5nIHRvIHdvcnJ5IGFib3V0Lik6CisKKyAgb3NnaTpsaXN0CisKK0F0IHRoZSBlbmQgb2YgdGhlIGxpc3RpbmcsIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IHNpbWlsYXIgdG8gdGhlCitmb2xsb3dpbmc6CisKKyAgWzE2NV0gW0FjdGl2ZSAgICAgXSBbU3RhcnRlZF0gWyAgNjBdIEFwYWNoZSBTZXJ2aWNlTWl4IEV4YW1wbGUgOjogQ1hGLUNhbWVsIE5NUiAoNC4xLjApCisKK0luIHRoaXMgY2FzZSwgdGhlIGJ1bmRsZSBJRCBpcyAxNjUuCisKK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peAorY29uc29sZToKKworICBvc2dpOnN0b3AgPGJ1bmRsZV9pZD4KKworRm9yIGV4YW1wbGU6CisKKyAgb3NnaTpzdG9wIDE2NQorCitUbyB1bmluc3RhbGwgdGhlIGV4YW1wbGUsIGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGluCit0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOnVuaW5zdGFsbCBleGFtcGxlcy1jeGYtY2FtZWwtbm1yCisgCitvcgorIAorICBvc2dpOnVuaW5zdGFsbCA8YnVuZGxlX2lkPgorICAKKworVmlld2luZyB0aGUgTG9nIEVudHJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHZpZXcgdGhlIGVudHJpZXMgaW4gdGhlIGxvZyBmaWxlIGluIHRoZSBkYXRhL2xvZworZGlyZWN0b3J5IG9mIHlvdXIgU2VydmljZU1peCBpbnN0YWxsYXRpb24sIG9yIGJ5IHR5cGluZwordGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgbG9nOmRpc3BsYXkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViYjM2YQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXIvcG9tLnhtbApAQCAtMCwwICsxLDc1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+Y3hmLWNhbWVsLW5tcjwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IENYRi1DYW1lbCBOTVI8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNYRiBFeGFtcGxlIHVzaW5nIHRoZSBDWEYgTk1SIGludGVncmF0aW9uPC9kZXNjcmlwdGlvbj4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWxvZ2dpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxvZ2dpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLURlc2NyaXB0aW9uPiR7cHJvamVjdC5kZXNjcmlwdGlvbn08L0J1bmRsZS1EZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cyxqYXZheC53c2RsLE1FVEEtSU5GLmN4ZixNRVRBLUlORi5jeGYudHJhbnNwb3J0Lm5tciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cyxvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2FtZWwubm1yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGksb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuZXZlbnQsb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuaW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLCAqCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFByaXZhdGUtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmY2FtZWw8L1ByaXZhdGUtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxSZXF1aXJlLUJ1bmRsZT5vcmcuYXBhY2hlLmN4Zi5idW5kbGU8L1JlcXVpcmUtQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmY2FtZWwvSGVsbG9Xb3JsZC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWNhbWVsLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGZjYW1lbC9IZWxsb1dvcmxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyMTZkZAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmY2FtZWwvSGVsbG9Xb3JsZC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmY2FtZWw7CisKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKKworQFdlYlNlcnZpY2UKK3B1YmxpYyBpbnRlcmZhY2UgSGVsbG9Xb3JsZCB7CisgICAgU3RyaW5nIHNheUhpKFN0cmluZyB0ZXh0KTsKK30KKy8vIEVORCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4ZmNhbWVsL0hlbGxvV29ybGRJbXBsLmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4ZmNhbWVsL0hlbGxvV29ybGRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2YzY5MQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmY2FtZWwvSGVsbG9Xb3JsZEltcGwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8vIFNUQVJUIFNOSVBQRVQ6IHNlcnZpY2UKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4ZmNhbWVsOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CisKK0BXZWJTZXJ2aWNlKGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGZjYW1lbC5IZWxsb1dvcmxkIikKK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGQgeworCisgICAgcHVibGljIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCkgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB0ZXh0OworICAgIH0KK30KKy8vIEVORCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4ZmNhbWVsL015VHJhbnNmb3JtLmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4ZmNhbWVsL015VHJhbnNmb3JtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY0ODMwNgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmY2FtZWwvTXlUcmFuc2Zvcm0uamF2YQpAQCAtMCwwICsxLDY2IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmY2FtZWw7CisKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuY29udmVydGVyLmpheHAuU3RyaW5nU291cmNlOworaW1wb3J0IG9yZy5hcGFjaGUuY2FtZWwuY29udmVydGVyLmpheHAuWG1sQ29udmVydGVyOworCisvKioKKyAqIEB2ZXJzaW9uICRSZXZpc2lvbjogNjQwNDUwICQKKyAqLworcHVibGljIGNsYXNzIE15VHJhbnNmb3JtICB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCB0cmFuc2llbnQgTG9nZ2VyIExPRyA9IExvZ2dlci5nZXRMb2dnZXIoTXlUcmFuc2Zvcm0uY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICBwcml2YXRlIGJvb2xlYW4gdmVyYm9zZSA9IHRydWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgdmFsdWU7CisKKyAgICBwdWJsaWMgT2JqZWN0IHRyYW5zZm9ybShPYmplY3QgYm9keSkgeworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+ICIgKyB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgTE9HLmluZm8oIj4+Pj4gIiArIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdTb3VyY2UodmFsdWUpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGRpc3BsYXkoU291cmNlIGJvZHkpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgc3RyID0gbmV3IFhtbENvbnZlcnRlcigpLnRvU3RyaW5nKGJvZHkpOworICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PDw8ICIgKyBzdHIpOworICAgICAgICB9CisgICAgICAgIExPRy5pbmZvKCI8PDw8ICIgKyBzdHIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzVmVyYm9zZSgpIHsKKyAgICAgICAgcmV0dXJuIHZlcmJvc2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VmVyYm9zZShib29sZWFuIHZlcmJvc2UpIHsKKyAgICAgICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3RydW5rL2V4YW1wbGVzL2N4Zi1jYW1lbC1ubXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YjU0YjUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4ZmNhbWVsCitCdW5kbGUtVmVyc2lvbjogMS4wLjAuU05BUFNIT1QKK0ltcG9ydC1QYWNrYWdlOiBNRVRBLUlORi5jeGYsTUVUQS1JTkYuY3hmLm9zZ2ksTUVUQS1JTkYuY3hmLnRyYW5zcG9ydC5ubXIsamF2YXguandzCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtY2FtZWwtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWNhbWVsLW5tci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjBkZTYzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWNhbWVsLW5tci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApAQCAtMCwwICsxLDU2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzwhLS0gU1RBUlQgU05JUFBFVDogYmVhbnMgLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgICAgeG1sbnM6Y2FtZWw9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmciCisgICAgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMtMi4wLnhzZAorICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaSAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpL3NwcmluZy1vc2dpLnhzZAorICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcgaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZy9jYW1lbC1zcHJpbmcueHNkCisgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2pheHdzLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvdHJhbnNwb3J0L25tci9jeGYtdHJhbnNwb3J0LW5tci54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOm9yZy9hcGFjaGUvc2VydmljZW1peC9jYW1lbC9ubXIvY2FtZWwtbm1yLnhtbCIgLz4KKworICAgIDxjYW1lbDpjYW1lbENvbnRleHQgeG1sbnM9Imh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmciPgorICAgICAgICA8IS0tIFJvdXRlIHBlcmlvZGljYWxseSBzZW50IGV2ZW50cyBpbnRvIHRoZSBOTVIgLS0+CisgICAgICAgIDxyb3V0ZT4KKyAgICAgICAgICAgIDxmcm9tIHVyaT0idGltZXI6Ly9teVRpbWVyP2ZpeGVkUmF0ZT10cnVlJmFtcDtwZXJpb2Q9NTAwMCZhbXA7ZXhjaGFuZ2VQYXR0ZXJuPUluT3V0IiAvPgorICAgICAgICAgICAgPGJlYW4gcmVmPSJteVRyYW5zZm9ybSIgbWV0aG9kPSJ0cmFuc2Zvcm0iLz4KKyAgICAgICAgICAgIDx0byB1cmk9Im5tcjpIZWxsb1dvcmxkIi8+CisgICAgICAgICAgICA8YmVhbiByZWY9Im15VHJhbnNmb3JtIiBtZXRob2Q9ImRpc3BsYXkiIC8+CisgICAgICAgIDwvcm91dGU+CisgICAgPC9jYW1lbDpjYW1lbENvbnRleHQ+CisKKyAgICA8YmVhbiBpZD0ibXlUcmFuc2Zvcm0iIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmY2FtZWwuTXlUcmFuc2Zvcm0iPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsdWUiPjx2YWx1ZT48IVtDREFUQVs8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+PHNvYXA6Qm9keT48bnMxOnNheUhpIHhtbG5zOm5zMT0iaHR0cDovL2N4ZmNhbWVsLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iPjxhcmcwPkd1aWxsYXVtZTwvYXJnMD48L25zMTpzYXlIaT48L3NvYXA6Qm9keT48L3NvYXA6RW52ZWxvcGU+XV0+PC92YWx1ZT48L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKworICAgIDxqYXh3czplbmRwb2ludCBpZD0iaGVsbG9Xb3JsZCIKKyAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGZjYW1lbC5IZWxsb1dvcmxkSW1wbCIKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz0ibm1yOkhlbGxvV29ybGQiIC8+CisKKzwvYmVhbnM+Cis8IS0tIEVORCBTTklQUEVUOiBiZWFucyAtLT4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzZjUxNgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9SRUFETUUudHh0CkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK0NYRiBKQVgtUlMgRVhBTVBMRQorPT09PT09PT09PT09PT09PT09CisKK1B1cnBvc2UKKy0tLS0tLS0KK0NyZWF0ZSBhIFJFU1RmdWwgSkFYLVJTIHdlYiBzZXJ2aWNlIHVzaW5nIENYRiBhbmQgZXhwb3NlIGl0IHdpdGggdGhlIAorT1NHaSBIVFRQIFNlcnZpY2UuCisKKworRXhwbGFuYXRpb24KKy0tLS0tLS0tLS0tCitUaGUgd2ViIHNlcnZpY2UgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIEN1c3RvbWVyU2VydmljZS5qYXZhIGZpbGUsIHdoaWNoIGlzCitsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMKK2RpcmVjdG9yeSBvZiB0aGlzIGV4YW1wbGUuIEl0IGNvbnRhaW5zIGFubm90YXRpb25zIGluZGljYXRpbmcgd2hhdCBVUklzCithbmQgSFRUUCBtZXRob2RzIHRvIHVzZSB3aGVuIGFjY2Vzc2luZyB0aGUgcmVzb3VyY2UuIEZvciBpbmZvcm1hdGlvbgorb24gaG93IHRvIHdyaXRlIFJFU1RmdWwgd2ViIHNlcnZpY2VzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIEFwYWNoZSBDWEYKK2RvY3VtZW50YXRpb24uCisKK1RoZSBiZWFucy54bWwgZmlsZSwgbG9jYXRlZCBpbiB0aGUgc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GLworc3ByaW5nIGRpcmVjdG9yeToKKworMS4gSW1wb3J0cyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBuZWVkZWQgdG8gZW5hYmxlIENYRiB0byBzdXBwb3J0CisgICBKQVgtUlMgYW5kIHRvIHVzZSB0aGUgT1NHaSBIVFRQIHNlcnZpY2UuCisKKzIuIENvbmZpZ3VyZXMgdGhlIHdlYiBzZXJ2aWNlLCBhcyBmb2xsb3dzOgorCisgICAgPGpheHJzOnNlcnZlciBpZD0iY3VzdG9tZXJTZXJ2aWNlIiBhZGRyZXNzPSIvY3JtIj4KKyAgICAgICAgPGpheHJzOnNlcnZpY2VCZWFucz4KKyAgICAgICAgICAgIDxyZWYgYmVhbj0iY3VzdG9tZXJTdmMiLz4KKyAgICAgICAgPC9qYXhyczpzZXJ2aWNlQmVhbnM+CisgICAgPC9qYXhyczpzZXJ2ZXI+CisKKyAgICA8YmVhbiBpZD0iY3VzdG9tZXJTdmMiIGNsYXNzPSIgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5qYXhycy5DdXN0b21lclNlcnZpY2UiLz4KKworCitQcmVyZXF1aXNpdGVzIGZvciBSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxLiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKKworICAgLSBKREsgMS41IG9yIGhpZ2hlcgorICAgCisgICAtIE1hdmVuIDIuMC45IG9yIGhpZ2hlcgorICAgCisgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFJFQURNRSBpbiB0aGUgdG9wLWxldmVsIGV4YW1wbGVzCisgIGRpcmVjdG9yeS4KKworMi4gU3RhcnQgU2VydmljZU1peCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICA8c2VydmljZW1peF9ob21lPi9iaW4vc2VydmljZW1peCAgICAgICAgICAob24gVU5JWCkKKyAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgICAgICAgKG9uIFdpbmRvd3MpCisgIAorCitSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHJ1biB0aGUgZXhhbXBsZSBpbiB0d28gd2F5czoKKworLSBBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgZXhhbXBsZSB1cCBhbmQKK3J1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKworLSBCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGV4YW1wbGUgaW4gYW55Cit3YXkuIEl0IHRlbGxzIHlvdSBob3cgdG8gYnVpbGQgYW5kIGRlcGxveSB0aGUgZXhhbXBsZS4gVGhpcworb3B0aW9uIG1pZ2h0IGJlIHNsb3dlciB0aGFuIG9wdGlvbiBBIGJlY2F1c2UsIGlmIHlvdSBkbyBub3QKK2FscmVhZHkgaGF2ZSB0aGUgcmVxdWlyZWQgYnVuZGxlcyBpbiB5b3VyIGxvY2FsIE1hdmVuCityZXBvc2l0b3J5LCBNYXZlbiB3aWxsIGhhdmUgdG8gZG93bmxvYWQgdGhlIGJ1bmRsZXMgaXQgbmVlZHMuCisKKworQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBpbnN0YWxsIGFuZCBydW4gYSBwcmVidWlsdCB2ZXJzaW9uIG9mIHRoaXMgZXhhbXBsZSwgZW50ZXIKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOmluc3RhbGwgZXhhbXBsZXMtY3hmLWpheHJzCisgIAorVGhpcyBjb21tYW5kIG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yCittb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0CitmaWxlIGluIHRoZSBleGFtcGxlcyBwYXJlbnQgZGlyZWN0b3J5LgorCitSdW5uaW5nIGEgQ2xpZW50CistLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYnJvd3NlIFdTREwgYXQ6CisKK2h0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvY3JtL2N1c3RvbWVyc2VydmljZT9fd2FkbCZfdHlwZT14bWwKKworb3IKKworaHR0cDovL2xvY2FsaG9zdDo4MTgxL2N4Zi9jcm0/X3dhZGwmX3R5cGU9eG1sCisKK1RoZSBsYXR0ZXIgVVJJIGNhbiBiZSB1c2VkIHRvIHNlZSB0aGUgZGVzcmlwdGlvbiBvZiBtdWx0aXBsZSByb290CityZXNvdXJjZSBjbGFzc2VzLgorCitZb3UgY2FuIHNlZSB0aGUgc2VydmljZXMgbGlzdGluZyBhdCBodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmLgorCitZb3UgY2FuIG1ha2UgaW52b2NhdGlvbnMgb24gdGhlIHdlYiBzZXJ2aWNlIGluIHNldmVyYWwgd2F5cywgaW5jbHVkaW5nCit1c2luZyBhIHdlYiBjbGllbnQsIHVzaW5nIGEgSmF2YSBjbGllbnQgYW5kIHVzaW5nIGEgY29tbWFuZC1saW5lCit1dGlsaXR5IHN1Y2ggYSBjdXJsIG9yIFdnZXQuIFNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCisoYSkgVG8gcnVuIGEgd2ViIGNsaWVudDoKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCitPcGVuIGEgYnJvd3NlciBhbmQgZ28gdG8gdGhlIGZvbGxvd2luZyBVUkw6CisKKyAgIGh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvY3JtL2N1c3RvbWVyc2VydmljZS9jdXN0b21lcnMvMTIzCisKK0l0IHNob3VsZCBkaXNwbGF5IGFuIFhNTCByZXByZXNlbnRhdGlvbiBmb3IgY3VzdG9tZXIgMTIzLgorCitOb3RlLCBpZiB5b3UgdXNlIFNhZmFyaSwgcmlnaHQgY2xpY2sgdGhlIHdpbmRvdyBhbmQgc2VsZWN0ICdTaG93IFNvdXJjZScuCisKKyhiKSBUbyBydW4gYSBKYXZhIGNsaWVudDoKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorLSBDaGFuZ2UgdG8gdGhlIDxzZXJ2aWNlbWl4X2hvbWU+L2V4YW1wbGVzL2N4Zi1qYXhycworICBkaXJlY3RvcnkuCisKKy0gUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgICAKKyAgICBtdm4gY29tcGlsZSBleGVjOmphdmEKKyAKKyAgSXQgbWFrZXMgYSBzZXF1ZW5jZSBvZiBSRVNUZnVsIGludm9jYXRpb25zIGFuZCBkaXNwbGF5cyB0aGUKKyAgcmVzdWx0cy4KKworKGMpIFRvIHJ1biBhIGNvbW1hbmQtbGluZSB1dGlsaXR5OgorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHVzZSBhIGNvbW1hbmQtbGluZSB1dGlsaXR5LCBzdWNoIGFzIGN1cmwgb3IgV2dldCwgdG8gbWFrZSAKK3RoZSBpbnZvY2F0aW9ucy4gRm9yIGV4YW1wbGUsIHRyeSB1c2luZyBjdXJsIGFzIGZvbGxvd3M6CisKKy0gT3BlbiBhIGNvbW1hbmQgcHJvbXB0IGFuZCBjaGFuZ2UgZGlyZWN0b3J5IHRvCisgIDxzZXJ2aWNlbWl4X2hvbWU+L2V4YW1wbGVzL2N4Zi1qYXhycy4KKyAgCistIFJ1biB0aGUgZm9sbG93aW5nIGN1cmwgY29tbWFuZHM6CisKKyAgIyBDcmVhdGUgYSBjdXN0b21lcgorICAjCisgICMKKyAgY3VybCAtWCBQT1NUIC1UIHNyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL2pheHJzL2NsaWVudC9hZGRfY3VzdG9tZXIueG1sIC1IICJDb250ZW50LVR5cGU6IHRleHQveG1sIiBodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL2NybS9jdXN0b21lcnNlcnZpY2UvY3VzdG9tZXJzCisKKyAgIyBSZXRyaWV2ZSB0aGUgY3VzdG9tZXIgaW5zdGFuY2Ugd2l0aCBpZCAxMjMKKyAgIworICBjdXJsIGh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvY3JtL2N1c3RvbWVyc2VydmljZS9jdXN0b21lcnMvMTIzCisgCisgICMgVXBkYXRlIHRoZSBjdXN0b21lciBpbnN0YW5jZSB3aXRoIGlkIDEyMworICAjCisgIGN1cmwgLVggUFVUIC1UIHNyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL2pheHJzL2NsaWVudC91cGRhdGVfY3VzdG9tZXIueG1sIC1IICJDb250ZW50LVR5cGU6IHRleHQveG1sIiBodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL2NybS9jdXN0b21lcnNlcnZpY2UvY3VzdG9tZXJzCisgIAorICAjIERlbGV0ZSB0aGUgY3VzdG9tZXIgaW5zdGFuY2Ugd2l0aCBpZCAxMjMKKyAgIworICBjdXJsIC1YIERFTEVURSBodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL2NybS9jdXN0b21lcnNlcnZpY2UvY3VzdG9tZXJzLzEyMworCisKK0NoYW5naW5nIC9jeGYgc2VydmxldCBhbGlhcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCeSBkZWZhdWx0IENYRiBTZXJ2bGV0IGlzIGFzc2lnbmVkIGEgJy9jeGYnIGFsaWFzLiBZb3UgY2FuCitjaGFuZ2UgaXQgaW4gYSBjb3VwbGUgb2Ygd2F5cworCithLiBBZGQgb3JnLmFwYWNoZS5jeGYub3NnaS5jZmcgdG8gdGhlIC9ldGMgZGlyZWN0b3J5IGFuZCBzZXQgdGhlCisgICAnb3JnLmFwYWNoZS5jeGYuc2VydmxldC5jb250ZXh0JyBwcm9wZXJ0eSwgZm9yIGV4YW1wbGU6CisgICAKKyAgIG9yZy5hcGFjaGUuY3hmLnNlcnZsZXQuY29udGV4dD0vY3VzdG9tCisKK2IuIFVzZSBzaGVsbCBjb25maWcgY29tbWFuZHMsIGZvciBleGFtcGxlOgorCisgICAgIGNvbmZpZzplZGl0IG9yZy5hcGFjaGUuY3hmLm9zZ2kgICAKKyAgICAgY29uZmlnOnByb3BzZXQgb3JnLmFwYWNoZS5jeGYuc2VydmxldC5jb250ZXh0IC9zdXBlcgorICAgICBjb25maWc6dXBkYXRlCisgIAorCitCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIHRoZSBleGFtcGxlIHdoZXJlIHlvdSBidWlsZCB0aGUgZXhhbXBsZSBidW5kbGUKK3lvdXJzZWxmLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IHJ1biB0aGUgZXhhbXBsZSB1c2luZyB0aGUgcHJlYnVpbHQgdmVyc2lvbiBhcworICAgZGVzY3JpYmVkIGFib3ZlLCB5b3UgbXVzdCBmaXJzdCB1bmluc3RhbGwgdGhlIGV4YW1wbGVzLWN4Zi1qYXhycworICAgZmVhdHVyZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICAgICBmZWF0dXJlczp1bmluc3RhbGwgZXhhbXBsZXMtY3hmLWpheHJzCisKKzIuIEJ1aWxkIHRoZSBleGFtcGxlIGJ5IG9wZW5pbmcgYSBjb21tYW5kIHByb21wdCwgY2hhbmdpbmcgZGlyZWN0b3J5IHRvCisgICBleGFtcGxlcy9jeGYtamF4cnMgKHRoaXMgZXhhbXBsZSkgYW5kIGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgTWF2ZW4KKyAgIGNvbW1hbmQ6CisKKyAgICAgbXZuIGluc3RhbGwKKyAgIAorICAgSWYgYWxsIG9mIHRoZSByZXF1aXJlZCBPU0dpIGJ1bmRsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIGxvY2FsIE1hdmVuCisgICByZXBvc2l0b3J5LCB0aGUgZXhhbXBsZSB3aWxsIGJ1aWxkIHZlcnkgcXVpY2tseS4gT3RoZXJ3aXNlIGl0IG1heQorICAgdGFrZSBzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgaXQgbmVlZHMuCisgICAKKyAgIFRoZSBtdm4gaW5zdGFsbCBjb21tYW5kIGJ1aWxkcyB0aGUgZXhhbXBsZSBkZXBsb3ltZW50IGJ1bmRsZSBhbmQKKyAgIGNvcGllcyBpdCB0byB5b3VyIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnkgYW5kIHRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5CisgICBvZiB0aGlzIGV4YW1wbGUuCisgICAgIAorMy4gSW5zdGFsbCB0aGUgZXhhbXBsZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4KKyAgIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisgICAKKyAgICAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jeGYtamF4cnMKKyAgICAgICAKKyAgIEl0IG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0IGZpbGUgaW4gdGhlIGV4YW1wbGVzCisgICBwYXJlbnQgZGlyZWN0b3J5LgorICAgICAKK1NlZSAiUnVubmluZyBhIENsaWVudCIgYWJvdmUgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBtYWtlIGludm9jYXRpb25zCitvbiB0aGUgd2ViIHNlcnZpY2UuCisKKworU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCB0aGUgZXhhbXBsZSwgeW91IG11c3QgZmlyc3Qga25vdyB0aGUgYnVuZGxlIElEIHRoYXQgU2VydmljZU1peAoraGFzIGFzc2lnbmVkIHRvIGl0LiBUbyBnZXQgdGhlIGJ1bmRsZSBJRCwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kCitpbiB0aGUgU2VydmljZU1peCBjb25zb2xlIChOb3RlLCB0aGUgdGV4dCB5b3UgYXJlIHR5cGluZyB3aWxsIGludGVybWluZ2xlCit3aXRoIHRoZSBvdXRwdXQgYmVpbmcgbG9nZ2VkLiBUaGlzIGlzIG5vdGhpbmcgdG8gd29ycnkgYWJvdXQuKToKKworICBvc2dpOmxpc3QKKworQXQgdGhlIGVuZCBvZiB0aGUgbGlzdGluZywgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgc2ltaWxhciB0byB0aGUKK2ZvbGxvd2luZzoKKworICBbMTU5XSBbQWN0aXZlICAgICBdIFtTdGFydGVkXSBbICA2MF0gQXBhY2hlIFNlcnZpY2VNaXggRXhhbXBsZSA6OiBDWEYgSkFYLVJTIE9TR0kgKDQuMS4wKQorCitJbiB0aGlzIGNhc2UsIHRoZSBidW5kbGUgSUQgaXMgMTU5LgorCitUbyBzdG9wIHRoZSBleGFtcGxlLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXgKK2NvbnNvbGU6CisKKyAgb3NnaTpzdG9wIDxidW5kbGVfaWQ+CisKK0ZvciBleGFtcGxlOgorCisgIG9zZ2k6c3RvcCAxNTkKKworVG8gdW5pbnN0YWxsIHRoZSBleGFtcGxlLCBlbnRlciBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBhdAordGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBmZWF0dXJlczp1bmluc3RhbGwgZXhhbXBsZXMtY3hmLWpheHJzCisgCitvcgorIAorICBvc2dpOnVuaW5zdGFsbCA8YnVuZGxlX2lkPgorICAKKworVmlld2luZyB0aGUgTG9nIEVudHJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHZpZXcgdGhlIGVudHJpZXMgaW4gdGhlIGxvZyBmaWxlIGluIHRoZSBkYXRhL2xvZworZGlyZWN0b3J5IG9mIHlvdXIgU2VydmljZU1peCBpbnN0YWxsYXRpb24sIG9yIGJ5IHR5cGluZwordGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgbG9nOmRpc3BsYXkKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzNTk1YQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9wb20ueG1sCkBAIC0wLDAgKzEsOTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5jeGYtamF4cnM8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBDWEYgSkFYLVJTIE9TR0k8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNYRiBFeGFtcGxlIHVzaW5nIEpBWC1SUzwvZGVzY3JpcHRpb24+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qc3IzMTEtYXBpLTEuMDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXhiLWFwaS0ke2pheGIuYXBpLnZlcnNpb259PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWh0dHBjbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtRGVzY3JpcHRpb24+JHtwcm9qZWN0LmRlc2NyaXB0aW9ufTwvQnVuZGxlLURlc2NyaXB0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53cy5ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLm9zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmNvbmZpZ3VyYXRpb24uc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJpbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuamF4cnMudXRpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmh0dHBfb3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuamF4cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGllbnQubWV0aG9kcworICAgICAgICAgICAgICAgICAgICAgICAgPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxSZXF1aXJlLUJ1bmRsZT5vcmcuYXBhY2hlLmN4Zi5idW5kbGU8L1JlcXVpcmUtQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEV4cG9ydC1QYWNrYWdlPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuamF4cnMKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvRXhwb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8RHluYW1pY0ltcG9ydC1QYWNrYWdlPmphdmF4LndzLnJzLio8L0R5bmFtaWNJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmV4ZWMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8bWFpbkNsYXNzPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuamF4cnMuY2xpZW50LkNsaWVudDwvbWFpbkNsYXNzPgorICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZVBsdWdpbkRlcGVuZGVuY2llcz5mYWxzZTwvaW5jbHVkZVBsdWdpbkRlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMvQ3VzdG9tZXIuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMvQ3VzdG9tZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTZkN2ZmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9DdXN0b21lci5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLmpheHJzOworCitpbXBvcnQgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi5YbWxSb290RWxlbWVudDsKKworQFhtbFJvb3RFbGVtZW50KG5hbWUgPSAiQ3VzdG9tZXIiKQorcHVibGljIGNsYXNzIEN1c3RvbWVyIHsKKyAgICBwcml2YXRlIGxvbmcgaWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKworICAgIHB1YmxpYyBsb25nIGdldElkKCkgeworICAgICAgICByZXR1cm4gaWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SWQobG9uZyBpZCkgeworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9DdXN0b21lclNlcnZpY2UuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMvQ3VzdG9tZXJTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmYWIyNAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMvQ3VzdG9tZXJTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwxMTggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLmpheHJzOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGphdmF4LndzLnJzLkRFTEVURTsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUE9TVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QVVQ7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5SZXNwb25zZTsKKworQFBhdGgoIi9jdXN0b21lcnNlcnZpY2UvIikKK3B1YmxpYyBjbGFzcyBDdXN0b21lclNlcnZpY2UgeworICAgIGxvbmcgY3VycmVudElkID0gMTIzOworICAgIE1hcDxMb25nLCBDdXN0b21lcj4gY3VzdG9tZXJzID0gbmV3IEhhc2hNYXA8TG9uZywgQ3VzdG9tZXI+KCk7CisgICAgTWFwPExvbmcsIE9yZGVyPiBvcmRlcnMgPSBuZXcgSGFzaE1hcDxMb25nLCBPcmRlcj4oKTsKKworICAgIHB1YmxpYyBDdXN0b21lclNlcnZpY2UoKSB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICBAR0VUCisgICAgQFBhdGgoIi9jdXN0b21lcnMve2lkfS8iKQorICAgIEBQcm9kdWNlcygiYXBwbGljYXRpb24veG1sIikKKyAgICBwdWJsaWMgQ3VzdG9tZXIgZ2V0Q3VzdG9tZXIoQFBhdGhQYXJhbSgiaWQiKSBTdHJpbmcgaWQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0taW52b2tpbmcgZ2V0Q3VzdG9tZXIsIEN1c3RvbWVyIGlkIGlzOiAiICsgaWQpOworICAgICAgICBsb25nIGlkTnVtYmVyID0gTG9uZy5wYXJzZUxvbmcoaWQpOworICAgICAgICBDdXN0b21lciBjID0gY3VzdG9tZXJzLmdldChpZE51bWJlcik7CisgICAgICAgIHJldHVybiBjOworICAgIH0KKworICAgIEBQVVQKKyAgICBAUGF0aCgiL2N1c3RvbWVycy8iKQorICAgIHB1YmxpYyBSZXNwb25zZSB1cGRhdGVDdXN0b21lcihDdXN0b21lciBjdXN0b21lcikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS1pbnZva2luZyB1cGRhdGVDdXN0b21lciwgQ3VzdG9tZXIgbmFtZSBpczogIiArIGN1c3RvbWVyLmdldE5hbWUoKSk7CisgICAgICAgIEN1c3RvbWVyIGMgPSBjdXN0b21lcnMuZ2V0KGN1c3RvbWVyLmdldElkKCkpOworICAgICAgICBSZXNwb25zZSByOworICAgICAgICBpZiAoYyAhPSBudWxsKSB7CisgICAgICAgICAgICBjdXN0b21lcnMucHV0KGN1c3RvbWVyLmdldElkKCksIGN1c3RvbWVyKTsKKyAgICAgICAgICAgIHIgPSBSZXNwb25zZS5vaygpLmJ1aWxkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByID0gUmVzcG9uc2Uubm90TW9kaWZpZWQoKS5idWlsZCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorCisgICAgQFBPU1QKKyAgICBAUGF0aCgiL2N1c3RvbWVycy8iKQorICAgIHB1YmxpYyBSZXNwb25zZSBhZGRDdXN0b21lcihDdXN0b21lciBjdXN0b21lcikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS1pbnZva2luZyBhZGRDdXN0b21lciwgQ3VzdG9tZXIgbmFtZSBpczogIiArIGN1c3RvbWVyLmdldE5hbWUoKSk7CisgICAgICAgIGN1c3RvbWVyLnNldElkKCsrY3VycmVudElkKTsKKworICAgICAgICBjdXN0b21lcnMucHV0KGN1c3RvbWVyLmdldElkKCksIGN1c3RvbWVyKTsKKworICAgICAgICByZXR1cm4gUmVzcG9uc2Uub2soKS50eXBlKCJhcHBsaWNhdGlvbi94bWwiKS5lbnRpdHkoY3VzdG9tZXIpLmJ1aWxkKCk7CisgICAgfQorCisgICAgQERFTEVURQorICAgIEBQYXRoKCIvY3VzdG9tZXJzL3tpZH0vIikKKyAgICBwdWJsaWMgUmVzcG9uc2UgZGVsZXRlQ3VzdG9tZXIoQFBhdGhQYXJhbSgiaWQiKSBTdHJpbmcgaWQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0taW52b2tpbmcgZGVsZXRlQ3VzdG9tZXIsIEN1c3RvbWVyIGlkIGlzOiAiICsgaWQpOworICAgICAgICBsb25nIGlkTnVtYmVyID0gTG9uZy5wYXJzZUxvbmcoaWQpOworICAgICAgICBDdXN0b21lciBjID0gY3VzdG9tZXJzLmdldChpZE51bWJlcik7CisKKyAgICAgICAgUmVzcG9uc2UgcjsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkgeworICAgICAgICAgICAgciA9IFJlc3BvbnNlLm9rKCkuYnVpbGQoKTsKKyAgICAgICAgICAgIGN1c3RvbWVycy5yZW1vdmUoaWROdW1iZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgciA9IFJlc3BvbnNlLm5vdE1vZGlmaWVkKCkuYnVpbGQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByOworICAgIH0KKworICAgIEBQYXRoKCIvb3JkZXJzL3tvcmRlcklkfS8iKQorICAgIHB1YmxpYyBPcmRlciBnZXRPcmRlcihAUGF0aFBhcmFtKCJvcmRlcklkIikgU3RyaW5nIG9yZGVySWQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0taW52b2tpbmcgZ2V0T3JkZXIsIE9yZGVyIGlkIGlzOiAiICsgb3JkZXJJZCk7CisgICAgICAgIGxvbmcgaWROdW1iZXIgPSBMb25nLnBhcnNlTG9uZyhvcmRlcklkKTsKKyAgICAgICAgT3JkZXIgYyA9IG9yZGVycy5nZXQoaWROdW1iZXIpOworICAgICAgICByZXR1cm4gYzsKKyAgICB9CisKKyAgICBmaW5hbCB2b2lkIGluaXQoKSB7CisgICAgICAgIEN1c3RvbWVyIGMgPSBuZXcgQ3VzdG9tZXIoKTsKKyAgICAgICAgYy5zZXROYW1lKCJKb2huIik7CisgICAgICAgIGMuc2V0SWQoMTIzKTsKKyAgICAgICAgY3VzdG9tZXJzLnB1dChjLmdldElkKCksIGMpOworCisgICAgICAgIE9yZGVyIG8gPSBuZXcgT3JkZXIoKTsKKyAgICAgICAgby5zZXREZXNjcmlwdGlvbigib3JkZXIgMjIzIik7CisgICAgICAgIG8uc2V0SWQoMjIzKTsKKyAgICAgICAgb3JkZXJzLnB1dChvLmdldElkKCksIG8pOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9PcmRlci5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9PcmRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTljNzMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL2pheHJzL09yZGVyLmphdmEKQEAgLTAsMCArMSw3MSBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlICBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLmpheHJzOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZheC53cy5ycy5HRVQ7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CisKK2ltcG9ydCBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLlhtbFJvb3RFbGVtZW50OworCitAWG1sUm9vdEVsZW1lbnQobmFtZSA9ICJPcmRlciIpCitwdWJsaWMgY2xhc3MgT3JkZXIgeworICAgIHByaXZhdGUgbG9uZyBpZDsKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICBwcml2YXRlIE1hcDxMb25nLCBQcm9kdWN0PiBwcm9kdWN0cyA9IG5ldyBIYXNoTWFwPExvbmcsIFByb2R1Y3Q+KCk7CisKKyAgICBwdWJsaWMgT3JkZXIoKSB7CisgICAgICAgIGluaXQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgbG9uZyBnZXRJZCgpIHsKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldElkKGxvbmcgaWQpIHsKKyAgICAgICAgdGhpcy5pZCA9IGlkOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZCkgeworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZDsKKyAgICB9CisKKyAgICBAR0VUCisgICAgQFBhdGgoInByb2R1Y3RzL3twcm9kdWN0SWR9LyIpCisgICAgQFByb2R1Y2VzKCJhcHBsaWNhdGlvbi94bWwiKQorICAgIHB1YmxpYyBQcm9kdWN0IGdldFByb2R1Y3QoQFBhdGhQYXJhbSgicHJvZHVjdElkIilpbnQgcHJvZHVjdElkKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLWludm9raW5nIGdldFByb2R1Y3Qgd2l0aCBpZDogIiArIHByb2R1Y3RJZCk7CisgICAgICAgIFByb2R1Y3QgcCA9IHByb2R1Y3RzLmdldChuZXcgTG9uZyhwcm9kdWN0SWQpKTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorCisgICAgZmluYWwgdm9pZCBpbml0KCkgeworICAgICAgICBQcm9kdWN0IHAgPSBuZXcgUHJvZHVjdCgpOworICAgICAgICBwLnNldElkKDMyMyk7CisgICAgICAgIHAuc2V0RGVzY3JpcHRpb24oInByb2R1Y3QgMzIzIik7CisgICAgICAgIHByb2R1Y3RzLnB1dChwLmdldElkKCksIHApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMvUHJvZHVjdC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9Qcm9kdWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkOGI4YwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMvUHJvZHVjdC5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLmpheHJzOworCitpbXBvcnQgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi5YbWxSb290RWxlbWVudDsKKworQFhtbFJvb3RFbGVtZW50KG5hbWUgPSAiUHJvZHVjdCIpCitwdWJsaWMgY2xhc3MgUHJvZHVjdCB7CisgICAgcHJpdmF0ZSBsb25nIGlkOworICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOworCisgICAgcHVibGljIGxvbmcgZ2V0SWQoKSB7CisgICAgICAgIHJldHVybiBpZDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJZChsb25nIGlkKSB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICByZXR1cm4gZGVzY3JpcHRpb247CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGQpIHsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL2pheHJzL2NsaWVudC9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzk2MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTAsMCArMSwxMTIgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLmpheHJzLmNsaWVudDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0LlVSTDsKKworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5odHRwY2xpZW50Lkh0dHBDbGllbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGllbnQubWV0aG9kcy5GaWxlUmVxdWVzdEVudGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaHR0cGNsaWVudC5tZXRob2RzLlBvc3RNZXRob2Q7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGllbnQubWV0aG9kcy5QdXRNZXRob2Q7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmh0dHBjbGllbnQubWV0aG9kcy5SZXF1ZXN0RW50aXR5OworCitwdWJsaWMgZmluYWwgY2xhc3MgQ2xpZW50IHsKKworICAgIHByaXZhdGUgQ2xpZW50KCkgeworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBTZW50IEhUVFAgR0VUIHJlcXVlc3QgdG8gcXVlcnkgYWxsIGN1c3RvbWVyIGluZm8KKworICAgICAgICAvLyBTZW50IEhUVFAgR0VUIHJlcXVlc3QgdG8gcXVlcnkgY3VzdG9tZXIgaW5mbworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgSFRUUCBHRVQgcmVxdWVzdCB0byBxdWVyeSBjdXN0b21lciBpbmZvIik7CisgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL2NybS9jdXN0b21lcnNlcnZpY2UvY3VzdG9tZXJzLzEyMyIpOworICAgICAgICBJbnB1dFN0cmVhbSBpbiA9IHVybC5vcGVuU3RyZWFtKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXRTdHJpbmdGcm9tSW5wdXRTdHJlYW0oaW4pKTsKKworICAgICAgICAvLyBTZW50IEhUVFAgR0VUIHJlcXVlc3QgdG8gcXVlcnkgc3ViIHJlc291cmNlIHByb2R1Y3QgaW5mbworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBIVFRQIEdFVCByZXF1ZXN0IHRvIHF1ZXJ5IHN1YiByZXNvdXJjZSBwcm9kdWN0IGluZm8iKTsKKyAgICAgICAgdXJsID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MTgxL2N4Zi9jcm0vY3VzdG9tZXJzZXJ2aWNlL29yZGVycy8yMjMvcHJvZHVjdHMvMzIzIik7CisgICAgICAgIGluID0gdXJsLm9wZW5TdHJlYW0oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldFN0cmluZ0Zyb21JbnB1dFN0cmVhbShpbikpOworCisgICAgICAgIC8vIFNlbnQgSFRUUCBQVVQgcmVxdWVzdCB0byB1cGRhdGUgY3VzdG9tZXIgaW5mbworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBIVFRQIFBVVCByZXF1ZXN0IHRvIHVwZGF0ZSBjdXN0b21lciBpbmZvIik7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CisgICAgICAgIFN0cmluZyBpbnB1dEZpbGUgPSBjbGllbnQuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZSgidXBkYXRlX2N1c3RvbWVyLnhtbCIpLmdldEZpbGUoKTsKKyAgICAgICAgRmlsZSBpbnB1dCA9IG5ldyBGaWxlKGlucHV0RmlsZSk7CisgICAgICAgIFB1dE1ldGhvZCBwdXQgPSBuZXcgUHV0TWV0aG9kKCJodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL2NybS9jdXN0b21lcnNlcnZpY2UvY3VzdG9tZXJzIik7CisgICAgICAgIFJlcXVlc3RFbnRpdHkgZW50aXR5ID0gbmV3IEZpbGVSZXF1ZXN0RW50aXR5KGlucHV0LCAidGV4dC94bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIpOworICAgICAgICBwdXQuc2V0UmVxdWVzdEVudGl0eShlbnRpdHkpOworICAgICAgICBIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gaHR0cGNsaWVudC5leGVjdXRlTWV0aG9kKHB1dCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIHN0YXR1cyBjb2RlOiAiICsgcmVzdWx0KTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgYm9keTogIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHV0LmdldFJlc3BvbnNlQm9keUFzU3RyaW5nKCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgLy8gUmVsZWFzZSBjdXJyZW50IGNvbm5lY3Rpb24gdG8gdGhlIGNvbm5lY3Rpb24gcG9vbCBvbmNlIHlvdSBhcmUKKyAgICAgICAgICAgIC8vIGRvbmUKKyAgICAgICAgICAgIHB1dC5yZWxlYXNlQ29ubmVjdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VudCBIVFRQIFBPU1QgcmVxdWVzdCB0byBhZGQgY3VzdG9tZXIKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgSFRUUCBQT1NUIHJlcXVlc3QgdG8gYWRkIGN1c3RvbWVyIik7CisgICAgICAgIGlucHV0RmlsZSA9IGNsaWVudC5nZXRDbGFzcygpLmdldFJlc291cmNlKCJhZGRfY3VzdG9tZXIueG1sIikuZ2V0RmlsZSgpOworICAgICAgICBpbnB1dCA9IG5ldyBGaWxlKGlucHV0RmlsZSk7CisgICAgICAgIFBvc3RNZXRob2QgcG9zdCA9IG5ldyBQb3N0TWV0aG9kKCJodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL2NybS9jdXN0b21lcnNlcnZpY2UvY3VzdG9tZXJzIik7CisgICAgICAgIHBvc3QuYWRkUmVxdWVzdEhlYWRlcigiQWNjZXB0IiAsICJ0ZXh0L3htbCIpOworICAgICAgICBlbnRpdHkgPSBuZXcgRmlsZVJlcXVlc3RFbnRpdHkoaW5wdXQsICJ0ZXh0L3htbDsgY2hhcnNldD1JU08tODg1OS0xIik7CisgICAgICAgIHBvc3Quc2V0UmVxdWVzdEVudGl0eShlbnRpdHkpOworICAgICAgICBodHRwY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IGh0dHBjbGllbnQuZXhlY3V0ZU1ldGhvZChwb3N0KTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2Ugc3RhdHVzIGNvZGU6ICIgKyByZXN1bHQpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBib2R5OiAiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwb3N0LmdldFJlc3BvbnNlQm9keUFzU3RyaW5nKCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgLy8gUmVsZWFzZSBjdXJyZW50IGNvbm5lY3Rpb24gdG8gdGhlIGNvbm5lY3Rpb24gcG9vbCBvbmNlIHlvdSBhcmUKKyAgICAgICAgICAgIC8vIGRvbmUKKyAgICAgICAgICAgIHBvc3QucmVsZWFzZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZ0Zyb21JbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIGludCBjID0gMDsKKyAgICAgICAgd2hpbGUgKChjID0gaW4ucmVhZCgpKSAhPSAtMSkgeworICAgICAgICAgICAgYm9zLndyaXRlKGMpOworICAgICAgICB9CisgICAgICAgIGluLmNsb3NlKCk7CisgICAgICAgIGJvcy5jbG9zZSgpOworICAgICAgICByZXR1cm4gYm9zLnRvU3RyaW5nKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtamF4cnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtamF4cnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyZGI5NwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmpheHJzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4cnMiCisgICAgICAgIHhtbG5zOm9zZ2k9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249IgoraHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy0yLjAueHNkCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4cnMgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvamF4cnMueHNkCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpL3NwcmluZy1vc2dpLnhzZCI+CisKKyAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1qYXhycy1iaW5kaW5nLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24taHR0cC54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9vc2dpL2N4Zi1leHRlbnNpb24tb3NnaS54bWwiIC8+CisKKyAgICA8amF4cnM6c2VydmVyIGlkPSJjdXN0b21lclNlcnZpY2UiIGFkZHJlc3M9Ii9jcm0iPgorICAgICAgICA8amF4cnM6c2VydmljZUJlYW5zPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJjdXN0b21lclN2YyIvPgorICAgICAgICA8L2pheHJzOnNlcnZpY2VCZWFucz4KKyAgICA8L2pheHJzOnNlcnZlcj4KKworICAgIDxiZWFuIGlkPSJjdXN0b21lclN2YyIgY2xhc3M9IiBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLmpheHJzLkN1c3RvbWVyU2VydmljZSIvPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL2pheHJzL2NsaWVudC9hZGRfY3VzdG9tZXIueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL2pheHJzL2NsaWVudC9hZGRfY3VzdG9tZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMmFmN2YKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtamF4cnMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvamF4cnMvY2xpZW50L2FkZF9jdXN0b21lci54bWwKQEAgLTAsMCArMSwzIEBACis8Q3VzdG9tZXI+CisgIDxuYW1lPkphY2s8L25hbWU+Cis8L0N1c3RvbWVyPiAKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9jbGllbnQvdXBkYXRlX2N1c3RvbWVyLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi1qYXhycy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9qYXhycy9jbGllbnQvdXBkYXRlX2N1c3RvbWVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmRiNjRiCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLWpheHJzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL2pheHJzL2NsaWVudC91cGRhdGVfY3VzdG9tZXIueG1sCkBAIC0wLDAgKzEsNCBAQAorPEN1c3RvbWVyPgorICA8bmFtZT5NYXJ5PC9uYW1lPgorICA8aWQ+MTIzPC9pZD4KKzwvQ3VzdG9tZXI+IApkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLW5tci9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvY3hmLW5tci9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzExNzUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtbm1yL1JFQURNRS50eHQKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ1hGIE5NUiBFeGFtcGxlCis9PT09PT09PT09PT09PT0KKworUHVycG9zZQorLS0tLS0tLQorUHVibGlzaCBhIHdlYiBzZXJ2aWNlIHdyaXR0ZW4gaW4gSkFYLVdTIHRvIHRoZSBOTVIuCisKKworRXhwbGFuYXRpb24KKy0tLS0tLS0tLS0tCitUaGUgd2ViIHNlcnZpY2UgaXMgYSBzaW1wbGUgSkFYLVdTIHdlYiBzZXJ2aWNlIGNhbGxlZCBIZWxsb1dvcmxkLiBUaGUgCitpbnRlcmZhY2UgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBhcmUgbG9jYXRlZCBpbiB0aGUgc3JjL21haW4vamF2YS9vcmcvCithcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYgZGlyZWN0b3J5IG9mIHRoaXMgZXhhbXBsZS4KKworVGhlIGJlYW5zLnhtbCBmaWxlLCBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nCitkaXJlY3Rvcnk6CisKKzEuIEltcG9ydHMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmVlZGVkIHRvIGVuYWJsZSBDWEYgYW5kIHRoZSBOTVIKKyAgIHdvcmsgdG9nZXRoZXIuCisgICAKKzIuIENvbmZpZ3VyZXMgdGhlIHdlYiBzZXJ2aWNlcyBhbmQgYWRkcyBpdCB0byB0aGUgTk1SOgorCisgIDxqYXh3czplbmRwb2ludCBpZD0iaGVsbG9Xb3JsZCIKKwkgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZEltcGwiCisJIGFkZHJlc3M9Im5tcjpIZWxsb1dvcmxkIiAvPgorCisKK1ByZXJlcXVpc2l0ZXMgZm9yIFJ1bm5pbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEuIFlvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lOgorCisgICAtIEpESyAxLjUgb3IgaGlnaGVyCisgICAKKyAgIC0gTWF2ZW4gMi4wLjkgb3IgaGlnaGVyCisgICAKKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgUkVBRE1FIGluIHRoZSB0b3AtbGV2ZWwgZXhhbXBsZXMKKyAgZGlyZWN0b3J5LgorCisKKzIuIFN0YXJ0IFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXggICAgICAgICAgKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4ICAgICAgICAgIChvbiBXaW5kb3dzKQorCisKK1J1bm5pbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gcnVuIHRoZSBleGFtcGxlIGluIHR3byB3YXlzOgorCistIEEuIFVzaW5nIGEgUHJlYnVpbHQgRGVwbG95bWVudCBCdW5kbGU6IFF1aWNrIGFuZCBFYXN5CitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBleGFtcGxlIHVwIGFuZAorcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgorCistIEIuIEJ1aWxkaW5nIHRoZSBFeGFtcGxlIEJ1bmRsZSBZb3Vyc2VsZgorVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgZXhhbXBsZSBpbiBhbnkKK3dheS4gSXQgdGVsbHMgeW91IGhvdyB0byBidWlsZCBhbmQgZGVwbG95IHRoZSBleGFtcGxlLiBUaGlzCitvcHRpb24gbWlnaHQgYmUgc2xvd2VyIHRoYW4gb3B0aW9uIEEgYmVjYXVzZSwgaWYgeW91IGRvIG5vdAorYWxyZWFkeSBoYXZlIHRoZSByZXF1aXJlZCBidW5kbGVzIGluIHlvdXIgbG9jYWwgTWF2ZW4KK3JlcG9zaXRvcnksIE1hdmVuIHdpbGwgaGF2ZSB0byBkb3dubG9hZCB0aGUgYnVuZGxlcyBpdCBuZWVkcy4KKworQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBpbnN0YWxsIGFuZCBydW4gYSBwcmVidWlsdCB2ZXJzaW9uIG9mIHRoaXMgZXhhbXBsZSwgZW50ZXIKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOmluc3RhbGwgZXhhbXBsZXMtY3hmLW5tcgorICAKK1RoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dAorZmlsZSBpbiB0aGUgZXhhbXBsZXMgcGFyZW50IGRpcmVjdG9yeS4KKworVmVyaWZ5aW5nIHRoZSBXZWIgU2VydmljZSBEZXBsb3llZCB0byB0aGUgTk1SCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gdmVyaWZ5IHRoYXQgdGhlIHdlYiBzZXJ2aWNlIHdhcyBkZXBsb3llZCB0byB0aGUgTk1SIGJ5Citsb29raW5nIGF0IHRoZSBsb2cgZmlsZSBpbiB0aGUgZGF0YS9sb2cgZGlyZWN0b3J5IG9mIHlvdXIKK1NlcnZpY2VNaXggaW5zdGFsbGF0aW9uLCBvciBieSB0eXBpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kCitpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGxvZzpkaXNwbGF5CisKK1lvdSBzaG91bGQgc2VlIGFuIGVudHJ5IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworMTA6MjA6NTYsMTY5IHwgSU5GTyAgfCB4dGVuZGVyVGhyZWFkLTc2IHwgQ29uZmlndXJlckltcGwgICAgICAgICAgICAgICAgICAgfAorcmFuc3BvcnQubm1yLk5NUlRyYW5zcG9ydEZhY3RvcnkgIDEyNyB8IENvdWxkIG5vdCBkZXRlcm1pbmUgYmVhbiBuYW1lIGZvcgoraW5zdGFuY2Ugb2YgY2xhc3Mgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yLk5NUkRlc3RpbmF0aW9uLgorMTA6MjA6NTYsMTcxIHwgSU5GTyAgfCB4dGVuZGVyVGhyZWFkLTc2IHwgU2VydmVySW1wbCAgICAgICAgICAgICAgICAgICAgICAgfAorZS5jeGYuZnJvbnRlbmQuU2VydmVyRmFjdG9yeUJlYW4gIDExOCB8IFNldHRpbmcgdGhlIHNlcnZlcidzIHB1Ymxpc2ggYWRkcmVzcwordG8gYmUgbm1yOkhlbGxvV29ybGQKKworVW5pbnN0YWxsaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHVuaW5zdGFsbCB0aGUgZXhhbXBsZSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4Citjb25zb2xlOgorCisgIGZlYXR1cmVzOnVuaW5zdGFsbCBleGFtcGxlcy1jeGYtbm1yCisKKworQi4gQnVpbGRpbmcgdGhlIEV4YW1wbGUgQnVuZGxlIFlvdXJzZWxmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGluc3RhbGwgYW5kIHJ1biB0aGUgZXhhbXBsZSB3aGVyZSB5b3UgYnVpbGQgdGhlIGV4YW1wbGUgYnVuZGxlCit5b3Vyc2VsZiwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczoKKworMS4gSWYgeW91IGhhdmUgYWxyZWFkeSBydW4gdGhlIGV4YW1wbGUgdXNpbmcgdGhlIHByZWJ1aWx0IHZlcnNpb24gYXMKKyAgIGRlc2NyaWJlZCBhYm92ZSwgeW91IG11c3QgdW5pbnN0YWxsIGl0IGFzIGRlc2NyaWJlZCBpbiAiVW5pbnN0YWxsaW5nCisgICB0aGUgRXhhbXBsZSIuCisgICAKKzIuIEJ1aWxkIHRoZSBleGFtcGxlIGJ5IG9wZW5pbmcgYSBjb21tYW5kIHByb21wdCwgY2hhbmdpbmcgZGlyZWN0b3J5IHRvCisgICBleGFtcGxlcy9jeGYtbm1yICh0aGlzIGV4YW1wbGUpIGFuZCBlbnRlcmluZyB0aGUgZm9sbG93aW5nIE1hdmVuCisgICBjb21tYW5kOgorCisgICAgIG12biBpbnN0YWxsCisgICAKKyAgIElmIGFsbCBvZiB0aGUgcmVxdWlyZWQgT1NHaSBidW5kbGVzIGFyZSBhdmFpbGFibGUgaW4geW91ciBsb2NhbCBNYXZlbgorICAgcmVwb3NpdG9yeSwgdGhlIGV4YW1wbGUgd2lsbCBidWlsZCB2ZXJ5IHF1aWNrbHkuIE90aGVyd2lzZSBpdCBtYXkKKyAgIHRha2Ugc29tZSB0aW1lIGZvciBNYXZlbiB0byBkb3dubG9hZCBldmVyeXRoaW5nIGl0IG5lZWRzLgorICAgCisgICBUaGUgbXZuIGluc3RhbGwgY29tbWFuZCBidWlsZHMgdGhlIGV4YW1wbGUgZGVwbG95bWVudCBidW5kbGUgYW5kCisgICBjb3BpZXMgaXQgdG8geW91ciBsb2NhbCBNYXZlbiByZXBvc2l0b3J5IGFuZCB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yeQorICAgb2YgdGhpcyBleGFtcGxlLgorICAgICAKKzMuIEluc3RhbGwgdGhlIGV4YW1wbGUgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluCisgICB0aGUgU2VydmljZU1peCBjb25zb2xlOgorICAgCisgICAgIGZlYXR1cmVzOmluc3RhbGwgZXhhbXBsZXMtY3hmLW5tcgorICAgICAgIAorICAgSXQgbWFrZXMgdXNlIG9mIHRoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzIGZhY2lsaXR5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgYWJvdXQgdGhlIGZlYXR1cmVzIGZhY2lsaXR5LCBzZWUgdGhlIFJFQURNRS50eHQgZmlsZSBpbiB0aGUgZXhhbXBsZXMKKyAgIHBhcmVudCBkaXJlY3RvcnkuCisKK1RvIGVuc3VyZSB5b3VyIGV4YW1wbGUgZGVwbG95ZWQgc3VjY2Vzc2Z1bGx5LCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucworb3V0bGluZWQgaW4gIlZlcmlmeWluZyB0aGUgV2ViIFNlcnZpY2UgRGVwbG95ZWQgdG8gdGhlIE5NUiIgYWJvdmUuCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtbm1yL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtbm1yL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjZWMwMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1ubXIvcG9tLnhtbApAQCAtMCwwICsxLDY2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+Y3hmLW5tcjwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IENYRiBOTVI8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNYRiBFeGFtcGxlIHVzaW5nIHRoZSBOTVIgaW50ZWdyYXRpb248L2Rlc2NyaXB0aW9uPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtRGVzY3JpcHRpb24+JHtwcm9qZWN0LmRlc2NyaXB0aW9ufTwvQnVuZGxlLURlc2NyaXB0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cywgamF2YXgud3NkbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYsTUVUQS1JTkYuY3hmLnRyYW5zcG9ydC5ubXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGksb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuZXZlbnQsb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvSW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8UHJpdmF0ZS1QYWNrYWdlPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGY8L1ByaXZhdGUtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxSZXF1aXJlLUJ1bmRsZT5vcmcuYXBhY2hlLmN4Zi5idW5kbGU8L1JlcXVpcmUtQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGRhZDNhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CisKK0BXZWJTZXJ2aWNlCitwdWJsaWMgaW50ZXJmYWNlIEhlbGxvV29ybGQgeworICAgIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCk7Cit9CisvLyBFTkQgU05JUFBFVDogc2VydmljZQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLW5tci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmZDI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1ubXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGRJbXBsLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisvLyBTVEFSVCBTTklQUEVUOiBzZXJ2aWNlCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGY7CisKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKKworQFdlYlNlcnZpY2UoZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIikKK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGQgeworCisgICAgcHVibGljIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCkgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB0ZXh0OworICAgIH0KK30KKy8vIEVORCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtbm1yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLW5tci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE4ZDRjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLW5tci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzwhLS0gU1RBUlQgU05JUFBFVDogYmVhbnMgLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczpqYXh3cz0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCitodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZAoraHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2pheHdzLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvdHJhbnNwb3J0L25tci9jeGYtdHJhbnNwb3J0LW5tci54bWwiIC8+CisKKyAgICA8amF4d3M6ZW5kcG9pbnQgaWQ9ImhlbGxvV29ybGQiCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudG9yPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGRJbXBsIgorICAgICAgICAgICAgICAgICAgICBhZGRyZXNzPSJubXI6SGVsbG9Xb3JsZCIgLz4KKworPC9iZWFucz4KKzwhLS0gRU5EIFNOSVBQRVQ6IGJlYW5zIC0tPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLW9zZ2kvUkVBRE1FLnR4dCBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1MDE0OAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL1JFQURNRS50eHQKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ1hGIE9TR2kgSFRUUCBXRUIgU0VSVklDRQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitDcmVhdGUgYSB3ZWIgc2VydmljZSB3aXRoIENYRiBhbmQgZXhwb3NlIGl0IHRocm91Z2ggdGhlIE9TR2kgSFRUUAorU2VydmljZS4KKworCitFeHBsYW5hdGlvbgorLS0tLS0tLS0tLS0KK1RoZSB3ZWIgc2VydmljZSBpcyBhIHNpbXBsZSBKQVgtV1Mgd2ViIHNlcnZpY2UgY2FsbGVkIEhlbGxvV29ybGQuIFRoZSAKK2ludGVyZmFjZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGFyZSBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9qYXZhL29yZy8KK2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4ZiBkaXJlY3Rvcnkgb2YgdGhpcyBleGFtcGxlLgorCitUaGUgYmVhbnMueG1sIGZpbGUsIGxvY2F0ZWQgaW4gdGhlIHNyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcKK2RpcmVjdG9yeToKKworMS4gSW1wb3J0cyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBuZWVkZWQgdG8gZW5hYmxlIENYRiBhbmQgT1NHaSB3b3JrCisgICB0b2dldGhlci4KKworMi4gQ29uZmlndXJlcyB0aGUgd2ViIHNlcnZpY2UgZW5kcG9pbnQgYXMgZm9sbG93czoKKworICA8amF4d3M6ZW5kcG9pbnQgaWQ9ImhlbGxvV29ybGQiCisgICAgICAgICBpbXBsZW1lbnRvcj0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkSW1wbCIKKyAgICAgICAgIGFkZHJlc3M9Ii9IZWxsb1dvcmxkIi8+CisKKworUHJlcmVxdWlzaXRlcyBmb3IgUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIKKyAgIAorICAgLSBNYXZlbiAyLjAuOSBvciBoaWdoZXIKKyAgIAorICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbCBleGFtcGxlcworICBkaXJlY3RvcnkuCisKKworMi4gU3RhcnQgU2VydmljZU1peCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICA8c2VydmljZW1peF9ob21lPi9iaW4vc2VydmljZW1peCAgICAgICAgICAob24gVU5JWCkKKyAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgICAgICAgKG9uIFdpbmRvd3MpCisKKworUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiBydW4gdGhlIGV4YW1wbGUgaW4gdHdvIHdheXM6CisKKy0gQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIGV4YW1wbGUgdXAgYW5kCitydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCisKKy0gQi4gQnVpbGRpbmcgdGhlIEV4YW1wbGUgQnVuZGxlIFlvdXJzZWxmCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBleGFtcGxlIGluIGFueQord2F5LiBJdCB0ZWxscyB5b3UgaG93IHRvIGJ1aWxkIGFuZCBkZXBsb3kgdGhlIGV4YW1wbGUuIFRoaXMKK29wdGlvbiBtaWdodCBiZSBzbG93ZXIgdGhhbiBvcHRpb24gQSBiZWNhdXNlLCBpZiB5b3UgZG8gbm90CithbHJlYWR5IGhhdmUgdGhlIHJlcXVpcmVkIGJ1bmRsZXMgaW4geW91ciBsb2NhbCBNYXZlbgorcmVwb3NpdG9yeSwgTWF2ZW4gd2lsbCBoYXZlIHRvIGRvd25sb2FkIHRoZSBidW5kbGVzIGl0IG5lZWRzLgorCitBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGluc3RhbGwgYW5kIHJ1biBhIHByZWJ1aWx0IHZlcnNpb24gb2YgdGhpcyBleGFtcGxlLCBlbnRlcgordGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jeGYtb3NnaQorICAKK1RoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dAorZmlsZSBpbiB0aGUgZXhhbXBsZXMgcGFyZW50IGRpcmVjdG9yeS4KKworVG8gdmlldyB0aGUgc2VydmljZSBXU0RMLCBvcGVuIHlvdXIgYnJvd3NlciBhbmQgZ28gdG8gdGhlIGZvbGxvd2luZworVVJMOgorCisgIGh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvSGVsbG9Xb3JsZD93c2RsCisKK05vdGUsIGlmIHlvdSB1c2UgU2FmYXJpLCByaWdodCBjbGljayB0aGUgd2luZG93IGFuZCBzZWxlY3QKKydTaG93IFNvdXJjZScuCisKK1J1bm5pbmcgYSBDbGllbnQKKy0tLS0tLS0tLS0tLS0tLS0KK1RvIHJ1biB0aGUgd2ViIGNsaWVudDoKKworMS4gT3BlbiB0aGUgY2xpZW50Lmh0bWwsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzCisgICB0aGlzIFJFQURNRSBmaWxlLCBpbiB5b3VyIGZhdm9yaXRlIGJyb3dzZXIuCisKKzIuIENsaWNrIHRoZSBTZW5kIGJ1dHRvbiB0byBzZW5kIGEgcmVxdWVzdC4KKworICAgT25jZSB0aGUgcmVxdWVzdCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCwgYSByZXNwb25zZSBzaW1pbGFyCisgICB0byB0aGUgZm9sbG93aW5nIHNob3VsZCBhcHBlYXIgaW4gdGhlIHJpZ2h0LWhhbmQgcGFuZWwgb2YgdGhlCisgICB3ZWIgcGFnZToKKyAgIAorICAgU1RBVFVTOiAyMDAKKyAgIDxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKyAgICAgPHNvYXA6Qm9keT48bnMyOnNheUhpUmVzcG9uc2UgeG1sbnM6bnMyPSJodHRwOi8vY3hmLmV4YW1wbGVzLgorICAgICBzZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIj48cmV0dXJuPkhlbGxvIEpvaG4gRG9lPC9yZXR1cm4+CisgICAgIDwvbnMyOnNheUhpUmVzcG9uc2U+CisgICAgIDwvc29hcDpCb2R5PgorICAgPC9zb2FwOkVudmVsb3BlPgorCitUbyBydW4gdGhlIGphdmEgY29kZSBjbGllbnQ6CisKKzEuIENoYW5nZSB0byB0aGUgPHNlcnZpY2VtaXhfaG9tZT4vZXhhbXBsZXMvY3hmLW9zZ2kKKyAgIGRpcmVjdG9yeS4KKworMi4gUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgICBtdm4gY29tcGlsZSBleGVjOmphdmEKKworICAgSWYgdGhlIGNsaWVudCByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIGEgcmVzcG9uc2Ugc2ltaWxhciB0byB0aGUKKyAgIGZvbGxvd2luZyBzaG91bGQgYXBwZWFyIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgIDxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKyAgICAgPHNvYXA6Qm9keT48bnMyOnNheUhpUmVzcG9uc2UgeG1sbnM6bnMyPSJodHRwOi8vY3hmLmV4YW1wbGVzLgorICAgICAgIHNlcnZpY2VtaXguYXBhY2hlLm9yZy8iPjxyZXR1cm4+SGVsbG8gSm9obiBEb2U8L3JldHVybj4KKyAgICAgICA8L25zMjpzYXlIaVJlc3BvbnNlPgorICAgICA8L3NvYXA6Qm9keT4KKyAgIDwvc29hcDpFbnZlbG9wZT4KKworCitDaGFuZ2luZyAvY3hmIHNlcnZsZXQgYWxpYXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQnkgZGVmYXVsdCBDWEYgU2VydmxldCBpcyBhc3NpZ25lZCBhICcvY3hmJyBhbGlhcy4gWW91IGNhbgorY2hhbmdlIGl0IGluIGEgY291cGxlIG9mIHdheXMKKworYS4gQWRkIG9yZy5hcGFjaGUuY3hmLm9zZ2kuY2ZnIHRvIHRoZSAvZXRjIGRpcmVjdG9yeSBhbmQgc2V0CisgICB0aGUgJ29yZy5hcGFjaGUuY3hmLnNlcnZsZXQuY29udGV4dCcgcHJvcGVydHksIGZvciBleGFtcGxlOgorICAgCisgICAgIG9yZy5hcGFjaGUuY3hmLnNlcnZsZXQuY29udGV4dD0vY3VzdG9tCisgICAKK2IuIFVzZSBzaGVsbCBjb25maWcgY29tbWFuZHMsIGZvciBleGFtcGxlIDoKKyAgIAorICAgICBjb25maWc6ZWRpdCBvcmcuYXBhY2hlLmN4Zi5vc2dpICAgCisgICAgIGNvbmZpZzpwcm9wc2V0IG9yZy5hcGFjaGUuY3hmLnNlcnZsZXQuY29udGV4dCAvc3VwZXIKKyAgICAgY29uZmlnOnVwZGF0ZQorCisKK0IuIEJ1aWxkaW5nIHRoZSBFeGFtcGxlIEJ1bmRsZSBZb3Vyc2VsZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBpbnN0YWxsIGFuZCBydW4gdGhlIGV4YW1wbGUgd2hlcmUgeW91IGJ1aWxkIHRoZSBleGFtcGxlIGJ1bmRsZQoreW91cnNlbGYsIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisKKzEuIElmIHlvdSBoYXZlIGFscmVhZHkgcnVuIHRoZSBleGFtcGxlIHVzaW5nIHRoZSBwcmVidWlsdCB2ZXJzaW9uIGFzCisgICBkZXNjcmliZWQgYWJvdmUsIHlvdSBtdXN0IGZpcnN0IHVuaW5zdGFsbCB0aGUgZXhhbXBsZXMtY3hmLW9zZ2kKKyAgIGZlYXR1cmUgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgICAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWN4Zi1vc2dpCisKKyAgIAorMi4gQnVpbGQgdGhlIGV4YW1wbGUgYnkgb3BlbmluZyBhIGNvbW1hbmQgcHJvbXB0LCBjaGFuZ2luZyBkaXJlY3RvcnkgdG8KKyAgIGV4YW1wbGVzL2N4Zi1vc2dpICh0aGlzIGV4YW1wbGUpIGFuZCBlbnRlcmluZyB0aGUgZm9sbG93aW5nIE1hdmVuCisgICBjb21tYW5kOgorCisgICAgIG12biBpbnN0YWxsCisgICAKKyAgIElmIGFsbCBvZiB0aGUgcmVxdWlyZWQgT1NHaSBidW5kbGVzIGFyZSBhdmFpbGFibGUgaW4geW91ciBsb2NhbAorICAgTWF2ZW4gcmVwb3NpdG9yeSwgdGhlIGV4YW1wbGUgd2lsbCBidWlsZCB2ZXJ5IHF1aWNrbHkuIE90aGVyd2lzZQorICAgaXQgbWF5IHRha2Ugc29tZSB0aW1lIGZvciBNYXZlbiB0byBkb3dubG9hZCBldmVyeXRoaW5nIGl0IG5lZWRzLgorICAgCisgICBUaGUgbXZuIGluc3RhbGwgY29tbWFuZCBidWlsZHMgdGhlIGV4YW1wbGUgZGVwbG95bWVudCBidW5kbGUgYW5kCisgICBjb3BpZXMgaXQgdG8geW91ciBsb2NhbCBNYXZlbiByZXBvc2l0b3J5IGFuZCB0byB0aGUgdGFyZ2V0IGRpcmVjdG9yeQorICAgb2YgdGhpcyBleGFtcGxlLgorICAgICAKKzMuIEluc3RhbGwgdGhlIGV4YW1wbGUgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluCisgICB0aGUgU2VydmljZU1peCBjb25zb2xlOgorICAgCisgICAgIGZlYXR1cmVzOmluc3RhbGwgZXhhbXBsZXMtY3hmLW9zZ2kKKyAgICAgICAKKyAgIEl0IG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yIG1vcmUKKyAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0IGZpbGUKKyAgIGluIHRoZSBleGFtcGxlcyBwYXJlbnQgZGlyZWN0b3J5LgorCitUbyB2aWV3IHRoZSBzZXJ2aWNlIFdTREwsIG9wZW4geW91ciBicm93c2VyIGFuZCBnbyB0byB0aGUgZm9sbG93aW5nCitVUkw6CisKKyAgaHR0cDovL2xvY2FsaG9zdDo4MTgxL2N4Zi9IZWxsb1dvcmxkP3dzZGwKKworTm90ZSwgaWYgeW91IHVzZSBTYWZhcmksIHJpZ2h0IGNsaWNrIHRoZSB3aW5kb3cgYW5kIHNlbGVjdAorJ1Nob3cgU291cmNlJy4KKworWW91IGNhbiB0cnkgcnVubmluZyBhIGNsaWVudCBhZ2FpbnN0IHlvdXIgc2VydmljZSBieSBmb2xsb3dpbmcgdGhlCitpbnN0cnVjdGlvbnMgaW4gdGhlICJSdW5uaW5nIGEgQ2xpZW50IiBzZWN0aW9uIGFib3ZlLgorCisKK1N0b3BwaW5nIGFuZCBVbmluc3RhbGxpbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHN0b3AgdGhlIGV4YW1wbGUsIHlvdSBtdXN0IGZpcnN0IGtub3cgdGhlIGJ1bmRsZSBJRCB0aGF0IFNlcnZpY2VNaXgKK2hhcyBhc3NpZ25lZCB0byBpdC4gVG8gZ2V0IHRoZSBidW5kbGUgSUQsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZAorYXQgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBvc2dpOmxpc3QKKworQXQgdGhlIGVuZCBvZiB0aGUgbGlzdGluZywgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgc2ltaWxhciB0byB0aGUKK2ZvbGxvd2luZzoKKworICBbMTcwXSBbQWN0aXZlICAgICBdIFtTdGFydGVkXSBbICA2MF0gQXBhY2hlIFNlcnZpY2VNaXggRXhhbXBsZSA6OiBDWEYgT1NHaSAoNC4yLjAuMCkKKworSW4gdGhpcyBjYXNlLCB0aGUgYnVuZGxlIElEIGlzIDE3MC4KKworVG8gc3RvcCB0aGUgZXhhbXBsZSwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kIGF0IHRoZSBTZXJ2aWNlTWl4Citjb25zb2xlOgorCisgIG9zZ2k6c3RvcCA8YnVuZGxlX2lkPgorCitGb3IgZXhhbXBsZToKKworICBvc2dpOnN0b3AgMTcwCisKK1RvIHVuaW5zdGFsbCB0aGUgZXhhbXBsZSwgZW50ZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgaW4KK3RoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWN4Zi1vc2dpCisgCitvcgorIAorICBvc2dpOnVuaW5zdGFsbCA8YnVuZGxlX2lkPgorICAKKworVmlld2luZyB0aGUgTG9nIEVudHJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHZpZXcgdGhlIGVudHJpZXMgaW4gdGhlIGxvZyBmaWxlIGluIHRoZSBkYXRhL2xvZworZGlyZWN0b3J5IG9mIHlvdXIgU2VydmljZU1peCBpbnN0YWxsYXRpb24sIG9yIGJ5IHR5cGluZwordGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgbG9nOmRpc3BsYXkKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL2NsaWVudC5odG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLW9zZ2kvY2xpZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4ZTE0NQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL2NsaWVudC5odG1sCkBAIC0wLDAgKzEsMTM2IEBACis8IS0tCisgICAgCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlNlcnZpY2VNaXggNCBDWEYtT1NHaSBFeGFtcGxlPC90aXRsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK3ZhciB1cmxUb09wZW4gPSAiaHR0cDovL2xvY2FsaG9zdDo4MTgxL2N4Zi9IZWxsb1dvcmxkIjsgLy9kZWZhdWx0IFVSTCB0byBvcGVuCisKK2Z1bmN0aW9uIGdldEhUVFBPYmplY3QoKSB7CisgIHZhciB4bWxodHRwID0gZmFsc2U7CisKKyAgLyogQ29tcGlsYXRpb24gY29uZGl0aW9ubmVsbGUgZCdJRSAqLworICAvKiBDaGVjayBpZiB3ZSBhcmUgdXNpbmcgSUUgKi8KKyAgLypAY2Nfb24KKyAgQGlmIChAX2pzY3JpcHRfdmVyc2lvbiA+PSA1KQorICAgICB0cnkgeworICAgICAgICB4bWxodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworICAgICAgICB9IGNhdGNoIChFKSB7CisgICAgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICB9CisgIEBlbHNlCisgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgQGVuZCBAKi8KKworICAvKiBvbiBlc3NhaWUgZGUgY3LpZXIgbCdvYmpldCBzaSBjZSBuJ2VzdCBwYXMgZOlq4CBmYWl0ICovCisgIC8qIENyZWF0ZSB0aGUgeG1saHR0cCBvYmplY3QgaWYgaXQgaXMgbm90IHlldCBkZWZpbmVkICovCisgIGlmICgheG1saHR0cCAmJiB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgdHJ5IHsKKyAgICAgICAgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgfQorICB9CisKKyAgaWYgKHhtbGh0dHApIHsKKyAgICAgLyogb24gZOlmaW5pdCBjZSBxdWkgZG9pdCBzZSBwYXNzZXIgcXVhbmQgbGEgcGFnZSBy6XBvbmRyYSAqLworICAgICAvKiBEZWZpbmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgcmVzcG9uc2UgKi8KKyAgICAgeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh4bWxodHRwLnJlYWR5U3RhdGUgPT0gNCkgeyAvKiA0IDog6XRhdCAiY29tcGxldGUiICovCisgICAgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOworICAgICAgICAgICB2YXIgcmVzcG9uc2VTdGF0dXMgPSAiIjsKKyAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9IHhtbGh0dHAuc3RhdHVzICsgIiI7CisgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9ICJFUlJPUiBXSElMRSBSRVRSSUVWSU5HIFNUQVRVUzsgTUFZQkUgVU5BQkxFIFRPIENPTk5FQ1QuIjsKKyAgICAgICAgICAgfQorICAgICAgICAgICByZXNwb25zZS52YWx1ZSA9ICJTVEFUVVM6ICIgKyByZXNwb25zZVN0YXR1cyArICJcbiIgKyB4bWxodHRwLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfQorICAgICB9CisgIH0KKyAgcmV0dXJuIHhtbGh0dHA7Cit9CisKK2Z1bmN0aW9uIHNlbmQoKSB7CisgIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlICE9IHVybFRvT3BlbikgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSAhPSAiIikpIHsKKyAgICAvLyB1c2UgdXNlciBlbnRyeSBpZiBpdCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZworICAgIHVybFRvT3BlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZTsKKyAgfSAgCisgIHZhciB4bWxodHRwID0gZ2V0SFRUUE9iamVjdCgpOworICBpZiAoIXhtbGh0dHApIHsKKyAgICBhbGVydCgnY291bmQgbm90IGNyZWF0ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QnKTsKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIHJlcXVlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVxdWVzdCIpOworICB2YXIgcmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzcG9uc2UiKTsKKyAgdHJ5IHsKKyAgICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2aWxlZ2VNYW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgiVW5pdmVyc2FsQnJvd3NlclJlYWQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIik7CisgIH0gY2F0Y2ggKGUpIHsKKyAgfQorICB0cnkgeworICAgIHhtbGh0dHAub3BlbigiUE9TVCIsIHVybFRvT3BlbiwgdHJ1ZSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhbGVydCgnZXJyb3Igb3BlbmluZycpOworICB9CisgIHhtbGh0dHAuc2VuZChyZXF1ZXN0LnZhbHVlKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8aDE+U2VydmljZU1peCA0IENYRi1PU0dpIEV4YW1wbGU8L2gxPgorCis8cD5XZWxjb21lIHRvIHRoZSBDWEYtT1NHaSBleGFtcGxlIGZvciBTZXJ2aWNlTWl4IDQ8L3A+CisKKzxwPlBlcmZvcm0gYSBQT1NUIGludG8gdGhlIEhUVFAgYmluZGluZy4gVGhpcyByZXF1aXJlcyBKYXZhU2NyaXB0LjwvcD4gCis8cD5UYXJnZXQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1MCIgaWQ9InVybFRvT3BlbiIgdmFsdWU9IiI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSA9IHVybFRvT3Blbjs8L3NjcmlwdD4uPC9wPgorICAKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZD4KKyAgPHRleHRhcmVhIGlkPSJyZXF1ZXN0IiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4Ij48P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICA8c29hcDpCb2R5PgorICAgIDxuczI6c2F5SGkgeG1sbnM6bnMyPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iPgorICAgICAgPGFyZzA+Sm9obiBEb2U8L2FyZzA+CisgICAgPC9uczI6c2F5SGk+CisgIDwvc29hcDpCb2R5PgorPC9zb2FwOkVudmVsb3BlPgorCisgIDwvdGV4dGFyZWE+CisgICAgPC90ZD4KKyAgICA8dGQ+CisgIDx0ZXh0YXJlYSBpZD0icmVzcG9uc2UiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NDAwcHgiPgorICA8L3RleHRhcmVhPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0yPgorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU2VuZCIgb25DbGljaz0ic2VuZCgpOyIvPgorICAgIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLW9zZ2kvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiNmE3NAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3BvbS54bWwKQEAgLTAsMCArMSw4NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmV4YW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPmN4Zi1vc2dpPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+YnVuZGxlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQ1hGIE9TR2k8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNYRiBleGFtcGxlIHVzaW5nIE9TR2kgaW5zdGVhZCBvZiBKQkk8L2Rlc2NyaXB0aW9uPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLURlc2NyaXB0aW9uPiR7cHJvamVjdC5kZXNjcmlwdGlvbn08L0J1bmRsZS1EZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5qd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYub3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmh0dHBfb3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgudXRpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFByaXZhdGUtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmPC9Qcml2YXRlLVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8UmVxdWlyZS1CdW5kbGU+b3JnLmFwYWNoZS5jeGYuYnVuZGxlPC9SZXF1aXJlLUJ1bmRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPER5bmFtaWNJbXBvcnQtUGFja2FnZT4qPC9EeW5hbWljSW1wb3J0LVBhY2thZ2U+IC0tPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxtYWluQ2xhc3M+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMuY3hmX29zZ2kuQ2xpZW50PC9tYWluQ2xhc3M+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPmZhbHNlPC9pbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkYWQzYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisvLyBTVEFSVCBTTklQUEVUOiBzZXJ2aWNlCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGY7CisKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKKworQFdlYlNlcnZpY2UKK3B1YmxpYyBpbnRlcmZhY2UgSGVsbG9Xb3JsZCB7CisgICAgU3RyaW5nIHNheUhpKFN0cmluZyB0ZXh0KTsKK30KKy8vIEVORCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZmQyNWYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8vIFNUQVJUIFNOSVBQRVQ6IHNlcnZpY2UKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4ZjsKKworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworCitAV2ViU2VydmljZShlbmRwb2ludEludGVyZmFjZSA9ICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQiKQorcHVibGljIGNsYXNzIEhlbGxvV29ybGRJbXBsIGltcGxlbWVudHMgSGVsbG9Xb3JsZCB7CisKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKFN0cmluZyB0ZXh0KSB7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHRleHQ7CisgICAgfQorfQorLy8gRU5EIFNOSVBQRVQ6IHNlcnZpY2UKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX29zZ2kvQ2xpZW50LmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL2N4Zl9vc2dpL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NzVjMmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL2N4Zl9vc2dpL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMuY3hmX29zZ2k7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnV0aWwuRmlsZVV0aWw7CisKK3B1YmxpYyBjbGFzcyBDbGllbnR7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICB0cnkgeworICAgICAgICBuZXcgQ2xpZW50KCkuc2VuZFJlcXVlc3QoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgc2VuZFJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MTgxL2N4Zi9IZWxsb1dvcmxkIikKKyAgICAgICAgICAgICAgICAub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubmVjdGlvbi5zZXREb0lucHV0KHRydWUpOworICAgICAgICBjb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOworICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpOworICAgICAgICAvLyBQb3N0IHRoZSByZXF1ZXN0IGZpbGUuCisgICAgICAgIElucHV0U3RyZWFtIGZpcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9jeGZfb3NnaS9yZXF1ZXN0LnhtbCIpOworICAgICAgICBGaWxlVXRpbC5jb3B5SW5wdXRTdHJlYW0oZmlzLCBvcyk7CisgICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlLgorICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIEZpbGVVdGlsLmNvcHlJbnB1dFN0cmVhbShpcywgYmFvcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhlIHJlc3BvbnNlIGlzID09PT09PiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmFvcy50b1N0cmluZygpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1YTdmMgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLSBTVEFSVCBTTklQUEVUOiBiZWFucyAtLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCitodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvamF4d3MueHNkIj4KKworICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24tc29hcC54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLWh0dHAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvb3NnaS9jeGYtZXh0ZW5zaW9uLW9zZ2kueG1sIiAvPgorCisgICAgPGpheHdzOmVuZHBvaW50IGlkPSJoZWxsb1dvcmxkIgorICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRvcj0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkSW1wbCIKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz0iL0hlbGxvV29ybGQiLz4KKworPC9iZWFucz4KKzwhLS0gRU5EIFNOSVBQRVQ6IGJlYW5zIC0tPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL2N4Zl9vc2dpL3JlcXVlc3QueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL2N4Zl9vc2dpL3JlcXVlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODE4MDIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX29zZ2kvcmVxdWVzdC54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICA8c29hcDpCb2R5PgorICAgIDxuczI6c2F5SGkgeG1sbnM6bnMyPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iPgorICAgICAgPGFyZzA+Sm9obiBEb2U8L2FyZzA+CisgICAgPC9uczI6c2F5SGk+CisgIDwvc29hcDpCb2R5PgorPC9zb2FwOkVudmVsb3BlPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3NpbmcvUkVBRE1FLnR4dCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0NzgxOAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nL1JFQURNRS50eHQKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ1hGIFdTLUFkZHJlc3NpbmcgRXhhbXBsZQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitVc2UgQ1hGIHRvIGNyZWF0ZSBhIHdlYiBzZXJ2aWNlIGVuYWJsZWQgZm9yIFdTLUFkZHJlc3NpbmcgYW5kCitleHBvc2UgaXQgdGhyb3VnaCB0aGUgT1NHaSBIVFRQIFNlcnZpY2UuCisKKworRXhwbGFuYXRpb24KKy0tLS0tLS0tLS0tCitUaGlzIGV4YW1wbGUgaXMgYmFzZWQgb24gdGhlIFdTLUFkZHJlc3Npbmcgc2FtcGxlIGluIEFwYWNoZSBDWEYKKyhodHRwOi8vY3hmLmFwYWNoZS5vcmcvKS4gVGhlcmUgaXMgYSBtb3JlIGNvbXBsZXRlIGV4cGxhbmF0aW9uCitvZiBXUy1BZGRyZXNzaW5nIGluIHRoYXQgc2FtcGxlJ3MgUkVBRE1FLgorCitUaGUgV1MtQWRkcmVzc2luZyBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkIGFzIGludGVyY2VwdG9ycy4KK0l0IGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGJlYW5zLnhtbCBmaWxlLCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZQorc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZyBkaXJlY3Rvcnkgb2YgdGhpcyBleGFtcGxlLgorVGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGV4cGxhaW5lZCBhcyBmb2xsb3dzOgorCisxLiBUaGUgZm9sbG93aW5nIGVudHJ5IGFkZHMgdGhlIGFkZHJlc3NpbmcgaW50ZXJjZXB0b3JzIChvcmcuYXBhY2hlLgorICAgY3hmLndzLmFkZHJlc3NpbmcuTUFQQWdncmVnYXRvciBhbmQgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy4KKyAgIHNvYXAuTUFQQ29kZWMpIHRvIHRoZSBpbmJvdW5kIGFuZCBvdXRib3VuZCBpbnRlcmNlcHRvciBjaGFpbnMuCisgICBUaGUgaW50ZXJjZXB0b3JzIGFkZCB0aGUgYXBwcm9wcmlhdGUgV1MtQWRkcmVzc2luZyBoZWFkZXJzIHRvIHRoZQorICAgU09BUCBtZXNzYWdlcyBhbmQgcmVtb3ZlIHRoZW0gYXQgdGhlIHNlcnZpY2UgZW5kLgorCisgIDxiZWFuIGlkPSJtYXBBZ2dyZWdhdG9yIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5NQVBBZ2dyZWdhdG9yIi8+CisgIDxiZWFuIGlkPSJtYXBDb2RlYyIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3Npbmcuc29hcC5NQVBDb2RlYyIvPgorCisgICAgPCEtLWJlYW4gaWQ9ImN4ZiIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmJ1cy5DWEZCdXNJbXBsIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImluSW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImluRmF1bHRJbnRlcmNlcHRvcnMiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBBZ2dyZWdhdG9yIi8+CisgICAgICAgICAgICAgICAgPHJlZiBiZWFuPSJtYXBDb2RlYyIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibG9nSW5ib3VuZCIvPgorICAgICAgICAgICAgPC9saXN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0SW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Im91dEZhdWx0SW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L2JlYW4tLT4gCisKKzIuIFRoZSBmb2xsb3dpbmcgZW50cnkgZW5hYmxlcyBXUy1BZGRyZXNzaW5nIGZvciBhbGwgc2VydmljZXMKKyAgIG9uIHRoZSBidXM6CisKKyAgIDxjeGY6YnVzPgorICAgICAgIDxjeGY6ZmVhdHVyZXM+CisgICAgICAgICAgIDx3c2E6YWRkcmVzc2luZy8+CisgICAgICAgPC9jeGY6ZmVhdHVyZXM+CisgICA8L2N4ZjpidXM+CisKK0luIGFkZGl0aW9uLCB0aGUgc2VydmljZSBXU0RMLCBoZWxsb193b3JsZF9hZGRyLndzZGwsIGluY2x1ZGVzCitXUy1BZGRyZXNzaW5nIGNvbmZpZ3VyYXRpb24gYXMgc2hvd24gYmVsb3c6CisKKyAgICA8d3NkbDpzZXJ2aWNlIC4uLiA+CisgICAgICAgIDx3c2RsOnBvcnQgLi4uPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyAuLi4gLz4KKyAgICAgICAgICAgIDx3c3dhOlVzaW5nQWRkcmVzc2luZyB4bWxuczp3c3dhPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzAyL2FkZHJlc3Npbmcvd3NkbCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKworVGhlIFdTREwgZmlsZSBpcyBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvd3NkbAorZGlyZWN0b3J5IG9mIHRoaXMgZXhhbXBsZS4KKworVGhlIHZhcmlvdXMgY2xpZW50cyBzZW5kIHRoZSByZXF1ZXN0LnhtbCBmaWxlLCBsb2NhdGVkIGluIHNyYy9tYWluLworcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvd3NhZGRyZXNzaW5nLiBJdAorY29udGFpbnMgU09BUCByZXF1ZXN0IHdpdGggc29tZSBXUy1BZGRyZXNzaW5nIGhlYWRlcnMgc2V0IGluIGl0LgorCisKK1ByZXJlcXVpc2l0ZXMgZm9yIFJ1bm5pbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEuIFlvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lOgorCisgICAtIEpESyAxLjUgb3IgaGlnaGVyCisgICAKKyAgIC0gTWF2ZW4gMi4wLjkgb3IgaGlnaGVyCisgICAKKyAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgUkVBRE1FIGluIHRoZSB0b3AtbGV2ZWwgZXhhbXBsZXMKKyAgZGlyZWN0b3J5LgorCisKKzIuIFN0YXJ0IFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXggICAgICAgICAgKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4ICAgICAgICAgIChvbiBXaW5kb3dzKQorCisKK1J1bm5pbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gcnVuIHRoZSBleGFtcGxlIGluIHR3byB3YXlzOgorCistIEEuIFVzaW5nIGEgUHJlYnVpbHQgRGVwbG95bWVudCBCdW5kbGU6IFF1aWNrIGFuZCBFYXN5CitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBleGFtcGxlIHVwIGFuZAorcnVubmluZyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgorCistIEIuIEJ1aWxkaW5nIHRoZSBFeGFtcGxlIEJ1bmRsZSBZb3Vyc2VsZgorVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgZXhhbXBsZSBpbiBhbnkKK3dheS4gSXQgdGVsbHMgeW91IGhvdyB0byBidWlsZCBhbmQgZGVwbG95IHRoZSBleGFtcGxlLiBUaGlzCitvcHRpb24gbWlnaHQgYmUgc2xvd2VyIHRoYW4gb3B0aW9uIEEgYmVjYXVzZSwgaWYgeW91IGRvIG5vdAorYWxyZWFkeSBoYXZlIHRoZSByZXF1aXJlZCBidW5kbGVzIGluIHlvdXIgbG9jYWwgTWF2ZW4KK3JlcG9zaXRvcnksIE1hdmVuIHdpbGwgaGF2ZSB0byBkb3dubG9hZCB0aGUgYnVuZGxlcyBpdCBuZWVkcy4KKworQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBpbnN0YWxsIGFuZCBydW4gYSBwcmVidWlsdCB2ZXJzaW9uIG9mIHRoaXMgZXhhbXBsZSwgZW50ZXIKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOmluc3RhbGwgZXhhbXBsZXMtY3hmLXdzLWFkZHJlc3NpbmcKKyAgCitUaGlzIGNvbW1hbmQgbWFrZXMgdXNlIG9mIHRoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzIGZhY2lsaXR5LiBGb3IKK21vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIGZhY2lsaXR5LCBzZWUgdGhlIFJFQURNRS50eHQKK2ZpbGUgaW4gdGhlIGV4YW1wbGVzIHBhcmVudCBkaXJlY3RvcnkuCisKK1RvIHZpZXcgdGhlIHNlcnZpY2UgV1NETCwgb3BlbiB5b3VyIGJyb3dzZXIgYW5kIGdvIHRvIHRoZSBmb2xsb3dpbmcKK1VSTDoKKworICBodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL1NvYXBDb250ZXh0L1NvYXBQb3J0P3dzZGwKKworTm90ZSwgaWYgeW91IHVzZSBTYWZhcmksIHJpZ2h0IGNsaWNrIHRoZSB3aW5kb3cgYW5kIHNlbGVjdAorJ1Nob3cgU291cmNlJy4KKworUnVubmluZyBhIENsaWVudAorLS0tLS0tLS0tLS0tLS0tLQorVG8gcnVuIHRoZSB3ZWIgY2xpZW50OgorCisxLiBPcGVuIHRoZSBjbGllbnQuaHRtbCwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKKyAgIHRoaXMgUkVBRE1FIGZpbGUsIGluIHlvdXIgZmF2b3JpdGUgYnJvd3Nlci4KKworMi4gQ2xpY2sgdGhlIFNlbmQgYnV0dG9uIHRvIHNlbmQgYSByZXF1ZXN0LgorCisgICBPbmNlIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50LCB5b3Ugc2hvdWxkIHJlY2VpdmUKKyAgIGEgU09BUCBtZXNzYWdlIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBhcyBhIHJlc3BvbnNlLiBJdCBzaG91bGQKKyAgIGFwcGVhciBpbiB0aGUgcmlnaHQtaGFuZCBwYW5lbCBvZiB0aGUgd2ViIHBhZ2U6CisgICAKKyAgIFNUQVRVUzogMjAwCisgICA8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+CisgICAgIDxzb2FwOkhlYWRlcj4KKyAgICAgICA8QWN0aW9uIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPgorICAgICAgIGh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cC9HcmVldGVyL3NheUhpUmVzcG9uc2UKKyAgICAgICA8L0FjdGlvbj4KKyAgICAgICA8TWVzc2FnZUlEIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPgorICAgICAgIHVybjp1dWlkOjQzNTI4NjFiLTM0NTEtNGFlOC1iOTdmLTExZjdlMjUzNTgwNzwvTWVzc2FnZUlEPgorICAgICAgIDxUbyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIj4KKyAgICAgICBodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcvYW5vbnltb3VzPC9Ubz4KKyAgICAgICA8UmVsYXRlc1RvIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPgorICAgICAgIHVybjp1dWlkOjEwZmIyZWU2LTQzZGItNGQ4OC1hM2U1LTYzMTZmMTc2MzY2OTwvUmVsYXRlc1RvPgorICAgICA8L3NvYXA6SGVhZGVyPgorICAgICA8c29hcDpCb2R5PgorICAgICAgIDxzYXlIaVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiPgorICAgICAgIDxyZXNwb25zZVR5cGU+Qm9uam91cjwvcmVzcG9uc2VUeXBlPgorICAgICAgIDwvc2F5SGlSZXNwb25zZT4KKyAgICAgPC9zb2FwOkJvZHk+CisgICA8L3NvYXA6RW52ZWxvcGU+CisKKworVG8gcnVuIHRoZSBqYXZhIGNvZGUgY2xpZW50OgorCisxLiBDaGFuZ2UgdG8gdGhlIDxzZXJ2aWNlbWl4X2hvbWU+L2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nCisgICBkaXJlY3RvcnkuCisKKzIuIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgbXZuIGNvbXBpbGUgZXhlYzpqYXZhCisKKyAgIEl0IG1ha2VzIGFuIGludm9jYXRpb24gd2l0aCBXUy1BZGRyZXNzaW5nIGhlYWRlcnMgYW5kIGRpc3BsYXlzLAorICAgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZSwgYSByZXNwb25zZSBzaW1pbGFyIHRvIHRoYXQgc2hvd24gCisgICBpbiB0aGUgd2ViIGNsaWVudCAoc2VlIGFib3ZlKS4KKworQ2hhbmdpbmcgL2N4ZiBzZXJ2bGV0IGFsaWFzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0J5IGRlZmF1bHQgQ1hGIFNlcnZsZXQgaXMgYXNzaWduZWQgYSAnL2N4ZicgYWxpYXMuIFlvdSBjYW4KK2NoYW5nZSBpdCBpbiBhIGNvdXBsZSBvZiB3YXlzOgorCithLiBBZGQgb3JnLmFwYWNoZS5jeGYub3NnaS5jZmcgdG8gdGhlIC9ldGMgZGlyZWN0b3J5IGFuZAorICAgc2V0IHRoZSAnb3JnLmFwYWNoZS5jeGYuc2VydmxldC5jb250ZXh0JyBwcm9wZXJ0eSwgZm9yIGV4YW1wbGU6CisgICAKKyAgICAgb3JnLmFwYWNoZS5jeGYuc2VydmxldC5jb250ZXh0PS9jdXN0b20KKworYi4gVXNlIHNoZWxsIGNvbmZpZyBjb21tYW5kcywgZm9yIGV4YW1wbGU6CisKKyAgICAgY29uZmlnOmVkaXQgb3JnLmFwYWNoZS5jeGYub3NnaSAgIAorICAgICBjb25maWc6cHJvcHNldCBvcmcuYXBhY2hlLmN4Zi5zZXJ2bGV0LmNvbnRleHQgL3N1cGVyCisgICAgIGNvbmZpZzp1cGRhdGUKKworCitCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIHRoZSBleGFtcGxlIHdoZXJlIHlvdSBidWlsZCB0aGUgZXhhbXBsZSBidW5kbGUKK3lvdXJzZWxmLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IHJ1biB0aGUgZXhhbXBsZSB1c2luZyB0aGUgcHJlYnVpbHQgdmVyc2lvbiBhcworICAgZGVzY3JpYmVkIGFib3ZlLCB5b3UgbXVzdCBmaXJzdCB1bmluc3RhbGwgdGhlCisgICBleGFtcGxlcy1jeGYtd3MtYWRkcmVzc2luZyBmZWF0dXJlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcKKyAgIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICAgICBmZWF0dXJlczp1bmluc3RhbGwgZXhhbXBsZXMtY3hmLXdzLWFkZHJlc3NpbmcKKworICAgCisyLiBCdWlsZCB0aGUgZXhhbXBsZSBieSBvcGVuaW5nIGEgY29tbWFuZCBwcm9tcHQsIGNoYW5naW5nIGRpcmVjdG9yeQorICAgdG8gZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3NpbmcgKHRoaXMgZXhhbXBsZSkgYW5kIGVudGVyaW5nIHRoZQorICAgZm9sbG93aW5nIE1hdmVuIGNvbW1hbmQ6CisKKyAgICAgbXZuIGluc3RhbGwKKyAgIAorICAgSWYgYWxsIG9mIHRoZSByZXF1aXJlZCBPU0dpIGJ1bmRsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIGxvY2FsCisgICBNYXZlbiByZXBvc2l0b3J5LCB0aGUgZXhhbXBsZSB3aWxsIGJ1aWxkIHZlcnkgcXVpY2tseS4gT3RoZXJ3aXNlCisgICBpdCBtYXkgdGFrZSBzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgaXQgbmVlZHMuCisgICAKKyAgIFRoZSBtdm4gaW5zdGFsbCBjb21tYW5kIGJ1aWxkcyB0aGUgZXhhbXBsZSBkZXBsb3ltZW50IGJ1bmRsZSBhbmQKKyAgIGNvcGllcyBpdCB0byB5b3VyIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnkgYW5kIHRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5CisgICBvZiB0aGlzIGV4YW1wbGUuCisgICAgIAorMy4gSW5zdGFsbCB0aGUgZXhhbXBsZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4KKyAgIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisgICAKKyAgICAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jeGYtd3MtYWRkcmVzc2luZworICAgICAgIAorICAgSXQgbWFrZXMgdXNlIG9mIHRoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzIGZhY2lsaXR5LiBGb3IgbW9yZQorICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIGZhY2lsaXR5LCBzZWUgdGhlIFJFQURNRS50eHQgZmlsZQorICAgaW4gdGhlIGV4YW1wbGVzIHBhcmVudCBkaXJlY3RvcnkuCisKK1RvIHZpZXcgdGhlIHNlcnZpY2UgV1NETCwgb3BlbiB5b3VyIGJyb3dzZXIgYW5kIGdvIHRvIHRoZSBmb2xsb3dpbmcKK1VSTDoKKworICAgIGh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvU29hcENvbnRleHQvU29hcFBvcnQ/d3NkbAorCitOb3RlLCBpZiB5b3UgdXNlIFNhZmFyaSwgcmlnaHQgY2xpY2sgdGhlIHdpbmRvdyBhbmQgc2VsZWN0CisnU2hvdyBTb3VyY2UnLgorCitZb3UgY2FuIHRyeSBydW5uaW5nIGEgY2xpZW50IGFnYWluc3QgeW91ciBzZXJ2aWNlIGJ5IGZvbGxvd2luZyB0aGUKK2luc3RydWN0aW9ucyBpbiB0aGUgIlJ1bm5pbmcgYSBDbGllbnQiIHNlY3Rpb24gYWJvdmUuCisKKworU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCB0aGUgZXhhbXBsZSwgeW91IG11c3QgZmlyc3Qga25vdyB0aGUgYnVuZGxlIElEIHRoYXQgU2VydmljZU1peAoraGFzIGFzc2lnbmVkIHRvIGl0LiBUbyBnZXQgdGhlIGJ1bmRsZSBJRCwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kCitpbiB0aGUgU2VydmljZU1peCBjb25zb2xlIChOb3RlLCB0aGUgdGV4dCB5b3UgYXJlIHR5cGluZyB3aWxsCitpbnRlcm1pbmdsZSB3aXRoIHRoZSBvdXRwdXQgYmVpbmcgbG9nZ2VkLiBUaGlzIGlzIG5vdGhpbmcgdG8gd29ycnkKK2Fib3V0Lik6CisKKyAgb3NnaTpsaXN0CisKK0F0IHRoZSBlbmQgb2YgdGhlIGxpc3RpbmcsIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IHNpbWlsYXIgdG8gdGhlCitmb2xsb3dpbmc6CisKKyAgWzE3MV0gW0FjdGl2ZSAgICAgXSBbU3RhcnRlZF0gWyAgNjBdIEFwYWNoZSBTZXJ2aWNlTWl4IEV4YW1wbGUgOjogQ1hGIFdTLUFERFJFU1NJTkcgT1NHSSAoNC4yLjApCisKK0luIHRoaXMgY2FzZSwgdGhlIGJ1bmRsZSBJRCBpcyAxNzEuCisKK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peAorY29uc29sZToKKworICBvc2dpOnN0b3AgPGJ1bmRsZV9pZD4KKworRm9yIGV4YW1wbGU6CisKKyAgb3NnaTpzdG9wIDE3MQorCitUbyB1bmluc3RhbGwgdGhlIGV4YW1wbGUsIGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGluCit0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOnVuaW5zdGFsbCBleGFtcGxlcy1jeGYtd3MtYWRkcmVzc2luZworIAorb3IKKyAKKyAgb3NnaTp1bmluc3RhbGwgPGJ1bmRsZV9pZD4KKyAgCisKK1ZpZXdpbmcgdGhlIExvZyBFbnRyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiB2aWV3IHRoZSBlbnRyaWVzIGluIHRoZSBsb2cgZmlsZSBpbiB0aGUgZGF0YS9sb2cKK2RpcmVjdG9yeSBvZiB5b3VyIFNlcnZpY2VNaXggaW5zdGFsbGF0aW9uLCBvciBieSB0eXBpbmcKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGxvZzpkaXNwbGF5CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9jbGllbnQuaHRtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nL2NsaWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZTM0MzEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9jbGllbnQuaHRtbApAQCAtMCwwICsxLDE0NSBAQAorPCEtLQorICAgIAorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5TZXJ2aWNlTWl4IDQgQ1hGLU9TR2kgRXhhbXBsZTwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgdXJsVG9PcGVuID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvU29hcENvbnRleHQvU29hcFBvcnQiOyAvL2RlZmF1bHQgVVJMIHRvIG9wZW4KKworZnVuY3Rpb24gZ2V0SFRUUE9iamVjdCgpIHsKKyAgdmFyIHhtbGh0dHAgPSBmYWxzZTsKKworICAvKiBDb21waWxhdGlvbiBjb25kaXRpb25uZWxsZSBkJ0lFICovCisgIC8qIENoZWNrIGlmIHdlIGFyZSB1c2luZyBJRSAqLworICAvKkBjY19vbgorICBAaWYgKEBfanNjcmlwdF92ZXJzaW9uID49IDUpCisgICAgIHRyeSB7CisgICAgICAgIHhtbGh0dHAgPSBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKKyAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICB4bWxodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7CisgICAgICAgIH0gY2F0Y2ggKEUpIHsKKyAgICAgICAgICAgeG1saHR0cCA9IGZhbHNlOworICAgICAgICB9CisgICAgIH0KKyAgQGVsc2UKKyAgICAgeG1saHR0cCA9IGZhbHNlOworICBAZW5kIEAqLworCisgIC8qIG9uIGVzc2FpZSBkZSBjcullciBsJ29iamV0IHNpIGNlIG4nZXN0IHBhcyBk6WrgIGZhaXQgKi8KKyAgLyogQ3JlYXRlIHRoZSB4bWxodHRwIG9iamVjdCBpZiBpdCBpcyBub3QgeWV0IGRlZmluZWQgKi8KKyAgaWYgKCF4bWxodHRwICYmIHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPSAndW5kZWZpbmVkJykgeworICAgICB0cnkgeworICAgICAgICB4bWxodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgeG1saHR0cCA9IGZhbHNlOworICAgICB9CisgIH0KKworICBpZiAoeG1saHR0cCkgeworICAgICAvKiBvbiBk6WZpbml0IGNlIHF1aSBkb2l0IHNlIHBhc3NlciBxdWFuZCBsYSBwYWdlIHLpcG9uZHJhICovCisgICAgIC8qIERlZmluZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSByZXNwb25zZSAqLworICAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHhtbGh0dHAucmVhZHlTdGF0ZSA9PSA0KSB7IC8qIDQgOiDpdGF0ICJjb21wbGV0ZSIgKi8KKyAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3BvbnNlIik7CisgICAgICAgICAgIHZhciByZXNwb25zZVN0YXR1cyA9ICIiOworICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0geG1saHR0cC5zdGF0dXMgKyAiIjsKKyAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0gIkVSUk9SIFdISUxFIFJFVFJJRVZJTkcgU1RBVFVTOyBNQVlCRSBVTkFCTEUgVE8gQ09OTkVDVC4iOworICAgICAgICAgICB9CisgICAgICAgICAgIHJlc3BvbnNlLnZhbHVlID0gIlNUQVRVUzogIiArIHJlc3BvbnNlU3RhdHVzICsgIlxuIiArIHhtbGh0dHAucmVzcG9uc2VUZXh0OworICAgICAgICB9CisgICAgIH0KKyAgfQorICByZXR1cm4geG1saHR0cDsKK30KKworZnVuY3Rpb24gc2VuZCgpIHsKKyAgaWYgKChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWUgIT0gdXJsVG9PcGVuKSAmJiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlICE9ICIiKSkgeworICAgIC8vIHVzZSB1c2VyIGVudHJ5IGlmIGl0IGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nCisgICAgdXJsVG9PcGVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlOworICB9ICAKKyAgdmFyIHhtbGh0dHAgPSBnZXRIVFRQT2JqZWN0KCk7CisgIGlmICgheG1saHR0cCkgeworICAgIGFsZXJ0KCdjb3VuZCBub3QgY3JlYXRlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCcpOworICAgIHJldHVybjsKKyAgfQorICB2YXIgcmVxdWVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXF1ZXN0Iik7CisgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOworICB0cnkgeworICAgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCJVbml2ZXJzYWxCcm93c2VyUmVhZCBVbml2ZXJzYWxCcm93c2VyV3JpdGUiKTsKKyAgfSBjYXRjaCAoZSkgeworICB9CisgIHRyeSB7CisgICAgeG1saHR0cC5vcGVuKCJQT1NUIiwgdXJsVG9PcGVuLCB0cnVlKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGFsZXJ0KCdlcnJvciBvcGVuaW5nJyk7CisgIH0KKyAgeG1saHR0cC5zZW5kKHJlcXVlc3QudmFsdWUpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxoMT5TZXJ2aWNlTWl4IDQgQ1hGIFdTLUFkZHJlc3NpbmcgRXhhbXBsZTwvaDE+CisKKzxwPldlbGNvbWUgdG8gdGhlIENYRiBXUy1BZGRyZXNzaW5nIGV4YW1wbGUgZm9yIFNlcnZpY2VNaXggNDwvcD4KKworPHA+UGVyZm9ybSBhIFBPU1QgaW50byB0aGUgSFRUUCBiaW5kaW5nLiBUaGlzIHJlcXVpcmVzIEphdmFTY3JpcHQuPC9wPiAKKzxwPlRhcmdldDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjUwIiBpZD0idXJsVG9PcGVuIiB2YWx1ZT0iIj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlID0gdXJsVG9PcGVuOzwvc2NyaXB0Pi48L3A+CisgIAorPHRhYmxlPgorICA8dHI+CisgICAgPHRkPgorICA8dGV4dGFyZWEgaWQ9InJlcXVlc3QiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NDAwcHgiPjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+CisgICA8c29hcDpIZWFkZXI+CisgICAgICA8TWVzc2FnZUlEIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPnVybjp1dWlkOjEwZmIyZWU2LTQzZGItNGQ4OC1hM2U1LTYzMTZmMTc2MzY2OTwvTWVzc2FnZUlEPgorICAgICAgPFRvIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPmh0dHA6Ly9sb2NhbGhvc3Q6OTAwMS9Tb2FwQ29udGV4dC9Tb2FwUG9ydDwvVG8+CisgICAgICA8UmVwbHlUbyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIj4KKyAgICAgICAgIDxBZGRyZXNzPmh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZy9hbm9ueW1vdXM8L0FkZHJlc3M+CisgICAgICA8L1JlcGx5VG8+CisgICAgICA8RmF1bHRUbyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIj4KKyAgICAgICAgIDxBZGRyZXNzPmh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZy9hbm9ueW1vdTwvQWRkcmVzcz4KKyAgICAgIDwvRmF1bHRUbz4KKyAgICAgIDxBY3Rpb24geG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyI+aHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL0dyZWV0ZXIvc2F5SGlSZXF1ZXN0PC9BY3Rpb24+CisgICA8L3NvYXA6SGVhZGVyPgorICAgPHNvYXA6Qm9keT4KKyAgICAgIDxzYXlIaSB4bWxucz0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIi8+CisgICA8L3NvYXA6Qm9keT4KKzwvc29hcDpFbnZlbG9wZT4KKworICA8L3RleHRhcmVhPgorICAgIDwvdGQ+CisgICAgPHRkPgorICA8dGV4dGFyZWEgaWQ9InJlc3BvbnNlIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4Ij4KKyAgPC90ZXh0YXJlYT4KKyAgICA8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkIGNvbHNwYW49Mj4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlNlbmQiIG9uQ2xpY2s9InNlbmQoKTsiLz4KKyAgICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWU2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9wb20ueG1sCkBAIC0wLDAgKzEsMTY2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHByb2plY3QgWworICAgICAgICA8IUVMRU1FTlQgcHJvamVjdCAobW9kZWxWZXJzaW9ufHBhcmVudHxhcnRpZmFjdElkfHBhY2thZ2luZ3xuYW1lfGRlcGVuZGVuY2llc3xidWlsZCkqPgorICAgICAgICA8IUFUVExJU1QgcHJvamVjdAorICAgICAgICAgICAgICAgIHhtbG5zIENEQVRBICNSRVFVSVJFRAorICAgICAgICAgICAgICAgIHhtbG5zOnhzaSBDREFUQSAjUkVRVUlSRUQKKyAgICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb24gQ0RBVEEgI1JFUVVJUkVEPgorICAgICAgICA8IUVMRU1FTlQgbW9kZWxWZXJzaW9uICgjUENEQVRBKT4KKyAgICAgICAgPCFFTEVNRU5UIHBhcmVudCAoZ3JvdXBJZHxhcnRpZmFjdElkfHZlcnNpb24pKj4KKyAgICAgICAgPCFFTEVNRU5UIGdyb3VwSWQgKCNQQ0RBVEEpPgorICAgICAgICA8IUVMRU1FTlQgYXJ0aWZhY3RJZCAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCB2ZXJzaW9uICgjUENEQVRBKT4KKyAgICAgICAgPCFFTEVNRU5UIHBhY2thZ2luZyAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCBuYW1lICgjUENEQVRBKT4KKyAgICAgICAgPCFFTEVNRU5UIGRlcGVuZGVuY2llcyAoZGVwZW5kZW5jeSkqPgorICAgICAgICA8IUVMRU1FTlQgZGVwZW5kZW5jeSAoZ3JvdXBJZHxhcnRpZmFjdElkfHNjb3BlKSo+CisgICAgICAgIDwhRUxFTUVOVCBzY29wZSAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCBidWlsZCAocGx1Z2lucykqPgorICAgICAgICA8IUVMRU1FTlQgcGx1Z2lucyAocGx1Z2luKSo+CisgICAgICAgIDwhRUxFTUVOVCBwbHVnaW4gKGdyb3VwSWR8YXJ0aWZhY3RJZHxleGVjdXRpb25zfGNvbmZpZ3VyYXRpb24pKj4KKyAgICAgICAgPCFFTEVNRU5UIGV4ZWN1dGlvbnMgKGV4ZWN1dGlvbikqPgorICAgICAgICA8IUVMRU1FTlQgZXhlY3V0aW9uIChpZHxwaGFzZXxjb25maWd1cmF0aW9ufGdvYWxzKSo+CisgICAgICAgIDwhRUxFTUVOVCBpZCAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCBwaGFzZSAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCBjb25maWd1cmF0aW9uIChzb3VyY2VSb290fHdzZGxPcHRpb25zfGluc3RydWN0aW9uc3xtYWluQ2xhc3N8aW5jbHVkZVBsdWdpbkRlcGVuZGVuY2llcykqPgorICAgICAgICA8IUVMRU1FTlQgc291cmNlUm9vdCAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCB3c2RsT3B0aW9ucyAod3NkbE9wdGlvbikqPgorICAgICAgICA8IUVMRU1FTlQgd3NkbE9wdGlvbiAod3NkbCkqPgorICAgICAgICA8IUVMRU1FTlQgd3NkbCAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCBnb2FscyAoZ29hbCkqPgorICAgICAgICA8IUVMRU1FTlQgZ29hbCAoI1BDREFUQSk+CisgICAgICAgIDwhRUxFTUVOVCBpbnN0cnVjdGlvbnMgKEJ1bmRsZS1TeW1ib2xpY05hbWV8SW1wb3J0LVBhY2thZ2V8UmVxdWlyZS1CdW5kbGV8RXhwb3J0LVBhY2thZ2UpKj4KKyAgICAgICAgPCFFTEVNRU5UIEJ1bmRsZS1TeW1ib2xpY05hbWUgKCNQQ0RBVEEpPgorICAgICAgICA8IUVMRU1FTlQgSW1wb3J0LVBhY2thZ2UgKCNQQ0RBVEEpPgorICAgICAgICA8IUVMRU1FTlQgUmVxdWlyZS1CdW5kbGUgKCNQQ0RBVEEpPgorICAgICAgICA8IUVMRU1FTlQgRXhwb3J0LVBhY2thZ2UgKCNQQ0RBVEEpPgorICAgICAgICA8IUVMRU1FTlQgbWFpbkNsYXNzICgjUENEQVRBKT4KKyAgICAgICAgPCFFTEVNRU5UIGluY2x1ZGVQbHVnaW5EZXBlbmRlbmNpZXMgKCNQQ0RBVEEpPgorICAgICAgICBdPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+Y3hmLXdzLWFkZHJlc3Npbmc8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBDWEYgV1MtQWRkcmVzc2luZyBPU0dJPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5DWEYgZXhhbXBsZSB1c2luZyBXUy1BZGRyZXNzaW5nPC9kZXNjcmlwdGlvbj4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtZnJvbnRlbmQtamF4d3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXdzLW1ldGFkYXRhXzIuMF9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC11dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLWNvZGVnZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmdlbmVyYXRlLXRlc3Qtc291cmNlczwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlUm9vdD4ke2Jhc2VkaXJ9L3RhcmdldC9nZW5lcmF0ZWQvc3JjL21haW4vamF2YTwvc291cmNlUm9vdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbE9wdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsT3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw+JHtiYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9oZWxsb193b3JsZF9hZGRyLndzZGw8L3dzZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3NkbE9wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzZGwyamF2YTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLURlc2NyaXB0aW9uPiR7cHJvamVjdC5kZXNjcmlwdGlvbn08L0J1bmRsZS1EZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5qd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnNvYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwud3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLndzLmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLndzLmhhbmRsZXIuc29hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLm9zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmNvbmZpZ3VyYXRpb24uc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5odHRwX29zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi53cy5hZGRyZXNzaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3Npbmcuc29hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgudXRpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFJlcXVpcmUtQnVuZGxlPm9yZy5hcGFjaGUuY3hmLmJ1bmRsZTwvUmVxdWlyZS1CdW5kbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RXhwb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi53c2FkZHJlc3NpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICA8L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxtYWluQ2xhc3M+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi53c2FkZHJlc3NpbmcuQ2xpZW50PC9tYWluQ2xhc3M+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPmZhbHNlPC9pbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvd3NhZGRyZXNzaW5nL0NsaWVudC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3dzYWRkcmVzc2luZy9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTkwNmMzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3dzYWRkcmVzc2luZy9DbGllbnQuamF2YQpAQCAtMCwwICsxLDU0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYud3NhZGRyZXNzaW5nOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5ldC5IdHRwVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKKworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC51dGlsLkZpbGVVdGlsOworCitwdWJsaWMgY2xhc3MgQ2xpZW50eworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgbmV3IENsaWVudCgpLnNlbmRSZXF1ZXN0KCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNlbmRSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvU29hcENvbnRleHQvU29hcFBvcnQiKQorICAgICAgICAgICAgICAgIC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0aW9uLnNldERvSW5wdXQodHJ1ZSk7CisgICAgICAgIGNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CisgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIC8vIFBvc3QgdGhlIHJlcXVlc3QgZmlsZS4KKyAgICAgICAgSW5wdXRTdHJlYW0gZmlzID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIm9yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvd3NhZGRyZXNzaW5nL3JlcXVlc3QueG1sIik7CisgICAgICAgIEZpbGVVdGlsLmNvcHlJbnB1dFN0cmVhbShmaXMsIG9zKTsKKyAgICAgICAgLy8gUmVhZCB0aGUgcmVzcG9uc2UuCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgRmlsZVV0aWwuY29weUlucHV0U3RyZWFtKGlzLCBiYW9zKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aGUgcmVzcG9uc2UgaXMgPT09PT0+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiYW9zLnRvU3RyaW5nKCkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3dzYWRkcmVzc2luZy9HcmVldGVySW1wbC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3dzYWRkcmVzc2luZy9HcmVldGVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYTZiZDQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvd3NhZGRyZXNzaW5nL0dyZWV0ZXJJbXBsLmphdmEKQEAgLTAsMCArMSw3OSBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi53c2FkZHJlc3Npbmc7CisKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuUGluZ01lRmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAudHlwZXMuRmF1bHREZXRhaWw7CisKK0BXZWJTZXJ2aWNlKG5hbWUgPSAiU29hcFBvcnQiLAorICAgICAgICAgICAgcG9ydE5hbWUgPSAiU29hcFBvcnQiLAorICAgICAgICAgICAgc2VydmljZU5hbWUgPSAiU09BUFNlcnZpY2UiLAorICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9hcGFjaGUub3JnL2hlbGxvX3dvcmxkX3NvYXBfaHR0cCIsCisgICAgICAgICAgICB3c2RsTG9jYXRpb24gPSAid3NkbC9oZWxsb193b3JsZF9hZGRyLndzZGwiKQorCitwdWJsaWMgY2xhc3MgR3JlZXRlckltcGwgaW1wbGVtZW50cyBHcmVldGVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPQorICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKEdyZWV0ZXJJbXBsLmNsYXNzLmdldFBhY2thZ2UoKS5nZXROYW1lKCkpOworCisgICAgLyogKG5vbi1KYXZhZG9jKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuR3JlZXRlciNncmVldE1lKGphdmEubGFuZy5TdHJpbmcpCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBncmVldE1lKFN0cmluZyBtZSkgeworICAgICAgICBMT0cuaW5mbygiRXhlY3V0aW5nIG9wZXJhdGlvbiBncmVldE1lIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIG9wZXJhdGlvbiBncmVldE1lIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZSByZWNlaXZlZDogIiArIG1lICsgIlxuIik7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIG1lOworICAgIH0KKworICAgIC8qIChub24tSmF2YWRvYykKKyAgICAgKiBAc2VlIG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXIjZ3JlZXRNZU9uZVdheShqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGdyZWV0TWVPbmVXYXkoU3RyaW5nIG1lKSB7CisgICAgICAgIExPRy5pbmZvKCJFeGVjdXRpbmcgb3BlcmF0aW9uIGdyZWV0TWVPbmVXYXkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgb3BlcmF0aW9uIGdyZWV0TWVPbmVXYXlcbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIHRoZXJlICIgKyBtZSk7CisgICAgfQorCisgICAgLyogKG5vbi1KYXZhZG9jKQorICAgICAqIEBzZWUgb3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuR3JlZXRlciNzYXlIaSgpCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBzYXlIaSgpIHsKKyAgICAgICAgTE9HLmluZm8oIkV4ZWN1dGluZyBvcGVyYXRpb24gc2F5SGkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgb3BlcmF0aW9uIHNheUhpXG4iKTsKKyAgICAgICAgcmV0dXJuICJCb25qb3VyIjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwaW5nTWUoKSB0aHJvd3MgUGluZ01lRmF1bHQgeworICAgICAgICBGYXVsdERldGFpbCBmYXVsdERldGFpbCA9IG5ldyBGYXVsdERldGFpbCgpOworICAgICAgICBmYXVsdERldGFpbC5zZXRNYWpvcigoc2hvcnQpMik7CisgICAgICAgIGZhdWx0RGV0YWlsLnNldE1pbm9yKChzaG9ydCkxKTsKKyAgICAgICAgTE9HLmluZm8oIkV4ZWN1dGluZyBvcGVyYXRpb24gcGluZ01lLCB0aHJvd2luZyBQaW5nTWVGYXVsdCBleGNlcHRpb24iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgb3BlcmF0aW9uIHBpbmdNZSwgdGhyb3dpbmcgUGluZ01lRmF1bHQgZXhjZXB0aW9uXG4iKTsKKyAgICAgICAgdGhyb3cgbmV3IFBpbmdNZUZhdWx0KCJQaW5nTWVGYXVsdCByYWlzZWQgYnkgc2VydmVyIiwgZmF1bHREZXRhaWwpOworICAgIH0KKworCit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1hZGRyZXNzaW5nL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWFlM2IKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApAQCAtMCwwICsxLDExMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFNUQVJUIFNOSVBQRVQ6IGJlYW5zIC0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4bWxuczpjeGY9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9jb3JlIiAKKyAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgeG1sbnM6d3NhPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3MvYWRkcmVzc2luZyIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZAorICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvY29yZSBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb3JlLnhzZCAKKyAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2pheHdzLnhzZAorICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpL3NwcmluZy1vc2dpLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1odHRwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL29zZ2kvY3hmLWV4dGVuc2lvbi1vc2dpLnhtbCIgLz4KKworICAgIDxqYXh3czplbmRwb2ludCBpZD0iV3NBZGRyZXNzaW5nRW5kcG9pbnQiCisgICAgICAgIGltcGxlbWVudG9yPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLndzYWRkcmVzc2luZy5HcmVldGVySW1wbCIKKyAgICAgICAgYWRkcmVzcz0iL1NvYXBDb250ZXh0L1NvYXBQb3J0IgorICAgICAgICB3c2RsTG9jYXRpb249IndzZGwvaGVsbG9fd29ybGRfYWRkci53c2RsIgorICAgICAgICBlbmRwb2ludE5hbWU9ImU6U29hcFBvcnQiCisgICAgICAgIHNlcnZpY2VOYW1lPSJzOlNPQVBTZXJ2aWNlIgorICAgICAgICB4bWxuczplPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiCisgICAgICAgICAgICB4bWxuczpzPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiPgorICAgICAgICAgICAgPGpheHdzOmZlYXR1cmVzPgorICAgICAgICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5mZWF0dXJlLkxvZ2dpbmdGZWF0dXJlIi8+CisgICAgICAgICAgICA8L2pheHdzOmZlYXR1cmVzPgorICAgICAgICA8L2pheHdzOmVuZHBvaW50PgorCisgICAgICAgCisgICAgICAgPGpheHdzOmNsaWVudCBpZD0iY2xpZW50IiAKKyAgICAgICAgICAgICBzZXJ2aWNlQ2xhc3M9Im9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXIiICAgIAorICAgICAgICBlbmRwb2ludE5hbWU9ImU6U29hcFBvcnQiCisgICAgICAgIHNlcnZpY2VOYW1lPSJzOlNPQVBTZXJ2aWNlIgorICAgICAgICB4bWxuczplPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiCisgICAgICAgICAgICB4bWxuczpzPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAiCisgICAgICAgICAgICAgd3NkbExvY2F0aW9uPSJ3c2RsL2hlbGxvX3dvcmxkX2FkZHIud3NkbCIKKyAgICAgICAgICAgICBhZGRyZXNzPSJodHRwOi8vbG9jYWxob3N0OjgwODAvY3hmL1NvYXBDb250ZXh0L1NvYXBQb3J0Ij4KKyAgICAgICAgIDwvamF4d3M6Y2xpZW50PgorIAorICAgICAgIDxvc2dpOnNlcnZpY2UgaWQ9InRlc3RXU0FkZHJlc3NpbmciIHJlZj0iY2xpZW50IgorICAgICAgICAgICAgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLmhlbGxvX3dvcmxkX3NvYXBfaHR0cC5HcmVldGVyIi8+CisKKyAgICAgICA8b3NnaTpzZXJ2aWNlIGlkPSJidXNpbnN0YW5jZSIgcmVmPSJjeGYiCisgICAgICAgICAgICBpbnRlcmZhY2U9Im9yZy5hcGFjaGUuY3hmLmJ1cy5DWEZCdXNJbXBsIi8+CisKKworICAgIDxiZWFuIGlkPSJtYXBBZ2dyZWdhdG9yIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5NQVBBZ2dyZWdhdG9yIi8+CisgICAgPGJlYW4gaWQ9Im1hcENvZGVjIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZy5zb2FwLk1BUENvZGVjIi8+CisgICAgPGJlYW4gaWQ9ImxvZ0luYm91bmQiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5Mb2dnaW5nSW5JbnRlcmNlcHRvciIvPgorICAgIDxiZWFuIGlkPSJsb2dPdXRib3VuZCIgY2xhc3M9Im9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvciIvPgorICAgIDwhLS0gV2UgYXJlIGFkZGluZyB0aGUgaW50ZXJjZXB0b3JzIHRvIHRoZSBidXMgYXMgd2Ugd2lsbCBoYXZlIG9ubHkgb25lIGVuZHBvaW50L3NlcnZpY2UvYnVzLiAtLT4KKworICAgIDwhLS1iZWFuIGlkPSJjeGYiIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5idXMuQ1hGQnVzSW1wbCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbkludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbkZhdWx0SW50ZXJjZXB0b3JzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQWdncmVnYXRvciIvPgorICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibWFwQ29kZWMiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49ImxvZ0luYm91bmQiLz4KKyAgICAgICAgICAgIDwvbGlzdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Im91dEludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRGYXVsdEludGVyY2VwdG9ycyI+CisgICAgICAgICAgICA8bGlzdD4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcEFnZ3JlZ2F0b3IiLz4KKyAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im1hcENvZGVjIi8+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgPC9iZWFuLS0+CisgICAgPGN4ZjpidXM+CisgICAgICAgIDxjeGY6ZmVhdHVyZXM+CisgICAgICAgICAgICA8d3NhOmFkZHJlc3NpbmcvPgorICAgICAgICA8L2N4ZjpmZWF0dXJlcz4KKyAgICA8L2N4ZjpidXM+CisKKyAgICAgIAorPC9iZWFucz4KKzwhLS0gRU5EIFNOSVBQRVQ6IGJlYW5zIC0tPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvd3NhZGRyZXNzaW5nL3JlcXVlc3QueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvd3NhZGRyZXNzaW5nL3JlcXVlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzU2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi93c2FkZHJlc3NpbmcvcmVxdWVzdC54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKyAgIDxzb2FwOkhlYWRlcj4KKyAgICAgIDxNZXNzYWdlSUQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyI+dXJuOnV1aWQ6MTIzNDU2Nzg5PC9NZXNzYWdlSUQ+CisgICAgICA8VG8geG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyI+aHR0cDovL2xvY2FsaG9zdDo4MDgwL1NvYXBDb250ZXh0L1NvYXBQb3J0PC9Ubz4KKyAgICAgIDxSZXBseVRvIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPgorICAgICAgICAgPEFkZHJlc3M+aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91czwvQWRkcmVzcz4KKyAgICAgIDwvUmVwbHlUbz4KKyAgICAgIDxGYXVsdFRvIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciPgorICAgICAgICAgPEFkZHJlc3M+aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91czwvQWRkcmVzcz4KKyAgICAgIDwvRmF1bHRUbz4KKyAgICAgIDxBY3Rpb24geG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyI+aHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL0dyZWV0ZXIvc2F5SGlSZXF1ZXN0PC9BY3Rpb24+CisgICA8L3NvYXA6SGVhZGVyPgorICAgPHNvYXA6Qm9keT4KKyAgICAgIDxzYXlIaSB4bWxucz0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIi8+CisgICA8L3NvYXA6Qm9keT4KKzwvc29hcDpFbnZlbG9wZT4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGRfYWRkci53c2RsIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLWFkZHJlc3Npbmcvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGRfYWRkci53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTAyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3MtYWRkcmVzc2luZy9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9oZWxsb193b3JsZF9hZGRyLndzZGwKQEAgLTAsMCArMSwxNzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkhlbGxvV29ybGQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIiAKKyAgICB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAorICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAorICAgIHhtbG5zOnRucz0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwIgorICAgIHhtbG5zOngxPSJodHRwOi8vYXBhY2hlLm9yZy9oZWxsb193b3JsZF9zb2FwX2h0dHAvdHlwZXMiCisgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAorICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICAgIDx3c2RsOnR5cGVzPgorICAgICAgICA8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcvaGVsbG9fd29ybGRfc29hcF9odHRwL3R5cGVzIiAKKyAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZS8+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3BvbnNlVHlwZSIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJncmVldE1lIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlcXVlc3RUeXBlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImdyZWV0TWVSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXNwb25zZVR5cGUiIHR5cGU9InhzZDpzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZ3JlZXRNZU9uZVdheSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZXF1ZXN0VHlwZSIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwaW5nTWUiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZS8+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwaW5nTWVSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlLz4KKyAgICAgICAgICAgIDwvZWxlbWVudD4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImZhdWx0RGV0YWlsIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Im1pbm9yIiB0eXBlPSJ4c2Q6c2hvcnQiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Im1ham9yIiB0eXBlPSJ4c2Q6c2hvcnQiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorICAgICAgICA8L3NjaGVtYT4KKyAgICA8L3dzZGw6dHlwZXM+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXlIaVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9IngxOnNheUhpIiBuYW1lPSJpbiIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0ieDE6c2F5SGlSZXNwb25zZSIgbmFtZT0ib3V0Ii8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJncmVldE1lUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0ieDE6Z3JlZXRNZSIgbmFtZT0iaW4iLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0ieDE6Z3JlZXRNZVJlc3BvbnNlIiBuYW1lPSJvdXQiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImdyZWV0TWVPbmVXYXlSZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJ4MTpncmVldE1lT25lV2F5IiBuYW1lPSJpbiIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGluZ01lUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iaW4iIGVsZW1lbnQ9IngxOnBpbmdNZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGluZ01lUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9Im91dCIgZWxlbWVudD0ieDE6cGluZ01lUmVzcG9uc2UiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4gICAgICAgIAorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0icGluZ01lRmF1bHQiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9ImZhdWx0RGV0YWlsIiBlbGVtZW50PSJ4MTpmYXVsdERldGFpbCIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIAorICAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkdyZWV0ZXIiPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnNheUhpUmVxdWVzdCIgbmFtZT0ic2F5SGlSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOnNheUhpUmVzcG9uc2UiIG5hbWU9InNheUhpUmVzcG9uc2UiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgCisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpncmVldE1lUmVxdWVzdCIgbmFtZT0iZ3JlZXRNZVJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Z3JlZXRNZVJlc3BvbnNlIiBuYW1lPSJncmVldE1lUmVzcG9uc2UiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgCisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJncmVldE1lT25lV2F5Ij4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpncmVldE1lT25lV2F5UmVxdWVzdCIgbmFtZT0iZ3JlZXRNZU9uZVdheVJlcXVlc3QiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKworICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0icGluZ01lIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InBpbmdNZVJlcXVlc3QiIG1lc3NhZ2U9InRuczpwaW5nTWVSZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0icGluZ01lUmVzcG9uc2UiIG1lc3NhZ2U9InRuczpwaW5nTWVSZXNwb25zZSIvPgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0icGluZ01lRmF1bHQiIG1lc3NhZ2U9InRuczpwaW5nTWVGYXVsdCIvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPiAKKyAgICA8L3dzZGw6cG9ydFR5cGU+CisgICAgPHdzZGw6YmluZGluZyBuYW1lPSJHcmVldGVyX1NPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6R3JlZXRlciI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIvPgorICAgICAgICAKKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIHN0eWxlPSJkb2N1bWVudCIvPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F5SGlSZXF1ZXN0Ij4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICAKKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWUiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIgc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJncmVldE1lUmVxdWVzdCI+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJncmVldE1lUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgICAgICAKKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9ImdyZWV0TWVPbmVXYXkiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIgc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJncmVldE1lT25lV2F5UmVxdWVzdCI+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKworICAgICAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InBpbmdNZSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc3R5bGU9ImRvY3VtZW50Ii8+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0icGluZ01lRmF1bHQiPgorICAgICAgICAgICAgICAgIDxzb2FwOmZhdWx0IG5hbWU9InBpbmdNZUZhdWx0IiB1c2U9ImxpdGVyYWwiLz4KKyAgICAgICAgICAgIDwvd3NkbDpmYXVsdD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICAgICAgCisgICAgPC93c2RsOmJpbmRpbmc+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJTT0FQU2VydmljZSI+CisgICAgICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkdyZWV0ZXJfU09BUEJpbmRpbmciIG5hbWU9IlNvYXBQb3J0Ij4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvU29hcENvbnRleHQvU29hcFBvcnQiLz4KKyAgICAgICAgICAgIDx3c3dhOlVzaW5nQWRkcmVzc2luZyB4bWxuczp3c3dhPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzAyL2FkZHJlc3Npbmcvd3NkbCIvPgorICAgICAgICA8L3dzZGw6cG9ydD4KKyAgICA8L3dzZGw6c2VydmljZT4KKzwvd3NkbDpkZWZpbml0aW9ucz4KKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL1JFQURNRS50eHQgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUwODlhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL1JFQURNRS50eHQKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworQ1hGIE9TR2kgSFRUUCBXRUIgU0VSVklDRQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitQdXJwb3NlCistLS0tLS0tCitDcmVhdGUgYSB3ZWIgc2VydmljZSB3aXRoIENYRiBhbmQgd3Nfcm0gZmVhdHVyZSBlbmFibGVkLgorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIGNsaWVudCBhbmQgc2VydmVyIGJvdGggYXBwbHkgdGhlIHJlbGlhYmxlTWVzc2FnaW5nIGZlYXR1cmUgdG8gdGhlIGJ1cy4KK1RoaXMgZW5zdXJlcyBpbnN0YWxsYXRpb24gb2YgdGhlIFdTLVJNIGludGVyY2VwdG9ycywKK2NvbXByaXNpbmcgbG9naWNhbCBpbnRlcmNlcHRvcnMgKFJNSW5JbnRlcmNlcHRvci9STU91dEludGVyY2VwdG9yKQorcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSByZWxpYWJpbGl0eSBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IG1lc3NhZ2UsIGFuZCBhCitwcm90b2NvbCBpbnRlcmNlcHRvciAoUk1Tb2FwSW50ZXJjZXB0b3IpIHJlc3BvbnNpYmxlIGZvciBlbmNvZGluZy9kZWNvZGluZwordGhlc2UgcHJvcGVydGllcyBhcyBTT0FQIEhlYWRlcnMuCisKK0FzIFdTLVJNIGlzIGRlcGVuZGVudCBvbiBXUy1BZGRyZXNzaW5nLCB0aGUgZGVtbyB1c2VzIAordGhlIHNhbWUgYXBwcm9hY2ggYXMgdGhlIHdzX2FkZHJlc3Npbmcgc2FtcGxlIHRvIGVuYWJsZSB0aGlzCitmdW5jdGlvbmFsaXR5LiBIb3dldmVyLCB5b3UgbWF5IG5vdGljZSB0aGF0IHRoZSBXUy1BZGRyZXNzaW5nCituYW1lc3BhY2UgVVJJIGlzIGRpZmZlcmVudCBpbiB0aGlzIGNhc2UgKGkuZS4KK2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDgvYWRkcmVzc2luZyBhcyBvcHBvc2VkIHRvCitodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmcpLiBUaGlzIGlzIGJlY2F1c2UgdGhlIFdTLVJNCitzcGVjaWZpY2F0aW9uIGlzIHN0aWxsIGJhc2VkIG9uIGFuIG9sZGVyIHZlcnNpb24gb2YgV1MtQWRkcmVzc2luZy4KKworVGhlIGxvZ2dpbmcgZmVhdHVyZSBpcyB1c2VkIHRvIGxvZyB0aGUgaW5ib3VuZCBhbmQgb3V0Ym91bmQKK1NPQVAgbWVzc2FnZXMgYW5kIGRpc3BsYXkgdGhlc2UgdG8gdGhlIGNvbnNvbGUuIE5vdGljZSB0aGUgdXNhZ2Ugb2YgCitvdXQtb2YtYmFuZCBSTSBwcm90b2NvbCBtZXNzYWdlcyAoQ3JlYXRlU2VxdWVuY2UgYW5kIENyZWF0ZVNlcXVlbmNlUmVzcG9uc2UpCithbmQgdGhlIFdTLVJNIGhlYWRlcnMgaW4gYXBwbGljYXRpb24tbGV2ZWwgbWVzc2FnZXMgKFNlcXVlbmNlLAorU2VxdWVuY2VBY2tub3dsZWRnZW1lbnQsIEFja1JlcXVlc3RlZCBldGMuKSAgCisKK0ZpbmFsbHksIHRoZSBNZXNzYWdlTG9zc1NpbXVsYXRvciBpbnRlcmNlcHRvciBpcyBpbnN0YWxsZWQKK29uIHRoZSBjbGllbnQtc2lkZSB0byBzaW11bGF0ZSBtZXNzYWdlIGxvc3MgYnkgZGlzY2FyZGluZyBldmVyeSBzZWNvbmQKK2FwcGxpY2F0aW9uIGxldmVsIG1lc3NhZ2UuIFRoaXMgc2ltdWxhdGVkIHVucmVsaWFiaWxpdHkgYWxsb3dzIHRoZSByZXRyYW5zbWlzc2lvbgorb2YgdW5hY2tub3dsZWRnZWQgbWVzc2FnZXMgdG8gYmUgb2JzZXJ2ZWQuCisKK1RoaXMgZGVtbyBhbHNvIGlsbHVzdHJhdGVzIHVzYWdlIG9mIHRoZSBkZWNvdXBsZWQgSFRUUCB0cmFuc3BvcnQsIHdoZXJlYnkKK2Egc2VwYXJhdGUgc2VydmVyLT5jbGllbnQgSFRUUCBjb25uZWN0aW9uIGlzIHVzZWQgdG8gZGVsaXZlciByZXNwb25zZXMKK3RvIChhcHBsaWNhdGlvbiBvciBSTSBwcm90b2NvbCkgcmVxdWVzdHMgYW5kIHNlcnZlciBzaWRlIG9yaWdpbmF0ZWQgCitzdGFuZGFsb25lIGFja25vd2xlZGdtZW50cy4KK1RoZSAicGFydGlhbCByZXNwb25zZSIgcmVmZXJyZWQgdG8gaW4gdGhlIGxvZyBvdXRwdXQgaXMgdGhlIHBheWxvYWQgb2YKK3RoZSBIVFRQIDIwMiBBY2NlcHRlZCByZXNwb25zZSBzZW50IG9uIHRoZSBiYWNrLWNoYW5uZWwgb2YgdGhlIG9yaWdpbmFsIAorY2xpZW50LT5zZXJ2ZXIgY29ubmVjdGlvbi4gCisKKworVGhlIGJlYW5zLnhtbCBmaWxlLCBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nCitkaXJlY3Rvcnk6CisKKzEuIEltcG9ydHMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmVlZGVkIHRvIGVuYWJsZSBDWEYgYW5kIE9TR2kgd29yaworICAgdG9nZXRoZXIuCisKKzIuIENvbmZpZ3VyZXMgdGhlIHdlYiBzZXJ2aWNlIGVuZHBvaW50IGFzIGZvbGxvd3M6CisKKyAgPGpheHdzOmVuZHBvaW50IGlkPSJoZWxsb1dvcmxkIgorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZEltcGwiCisgICAgICAgICAgICAgICAgICAgICAgICB3c2RsTG9jYXRpb249ImNsYXNzcGF0aDpIZWxsb1dvcmxkLndzZGwiCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzPSJodHRwOi8vbG9jYWxob3N0OjkxOTEvSGVsbG9Xb3JsZCIvPgorCitQcmVyZXF1aXNpdGVzIGZvciBSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxLiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKKworICAgLSBKREsgMS41IG9yIGhpZ2hlcgorICAgCisgICAtIE1hdmVuIDIuMC45IG9yIGhpZ2hlcgorICAgCisgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFJFQURNRSBpbiB0aGUgdG9wLWxldmVsIGV4YW1wbGVzCisgIGRpcmVjdG9yeS4KKworCisyLiBTdGFydCBTZXJ2aWNlTWl4IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgIDxzZXJ2aWNlbWl4X2hvbWU+L2Jpbi9zZXJ2aWNlbWl4ICAgICAgICAgIChvbiBVTklYKQorICA8c2VydmljZW1peF9ob21lPlxiaW5cc2VydmljZW1peCAgICAgICAgICAob24gV2luZG93cykKKworCitSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tCitZb3UgY2FuIHJ1biB0aGUgZXhhbXBsZSBpbiB0d28gd2F5czoKKworLSBBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorVGhpcyBvcHRpb24gaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgZXhhbXBsZSB1cCBhbmQKK3J1bm5pbmcgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKworLSBCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGV4YW1wbGUgaW4gYW55Cit3YXkuIEl0IHRlbGxzIHlvdSBob3cgdG8gYnVpbGQgYW5kIGRlcGxveSB0aGUgZXhhbXBsZS4gVGhpcworb3B0aW9uIG1pZ2h0IGJlIHNsb3dlciB0aGFuIG9wdGlvbiBBIGJlY2F1c2UsIGlmIHlvdSBkbyBub3QKK2FscmVhZHkgaGF2ZSB0aGUgcmVxdWlyZWQgYnVuZGxlcyBpbiB5b3VyIGxvY2FsIE1hdmVuCityZXBvc2l0b3J5LCBNYXZlbiB3aWxsIGhhdmUgdG8gZG93bmxvYWQgdGhlIGJ1bmRsZXMgaXQgbmVlZHMuCisKK0EuIFVzaW5nIGEgUHJlYnVpbHQgRGVwbG95bWVudCBCdW5kbGU6IFF1aWNrIGFuZCBFYXN5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIGEgcHJlYnVpbHQgdmVyc2lvbiBvZiB0aGlzIGV4YW1wbGUsIGVudGVyCit0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWN4Zi13cy1ybQorICAKK1RoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dAorZmlsZSBpbiB0aGUgZXhhbXBsZXMgcGFyZW50IGRpcmVjdG9yeS4KKworCitSdW5uaW5nIGEgQ2xpZW50CistLS0tLS0tLS0tLS0tLS0tCitUbyBydW4gdGhlIGphdmEgY29kZSBjbGllbnQ6CisKKzEuIENoYW5nZSB0byB0aGUgPHNlcnZpY2VtaXhfaG9tZT4vZXhhbXBsZXMvY3hmLXdzLXJtCisgICBkaXJlY3RvcnkuCisKKzIuIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgbXZuIGNvbXBpbGUgZXhlYzpqYXZhCisKKworCitCLiBCdWlsZGluZyB0aGUgRXhhbXBsZSBCdW5kbGUgWW91cnNlbGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbCBhbmQgcnVuIHRoZSBleGFtcGxlIHdoZXJlIHlvdSBidWlsZCB0aGUgZXhhbXBsZSBidW5kbGUKK3lvdXJzZWxmLCBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLiBJZiB5b3UgaGF2ZSBhbHJlYWR5IHJ1biB0aGUgZXhhbXBsZSB1c2luZyB0aGUgcHJlYnVpbHQgdmVyc2lvbiBhcworICAgZGVzY3JpYmVkIGFib3ZlLCB5b3UgbXVzdCBmaXJzdCB1bmluc3RhbGwgdGhlIGV4YW1wbGVzLWN4Zi13cy1ybQorICAgZmVhdHVyZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICAgICBmZWF0dXJlczp1bmluc3RhbGwgZXhhbXBsZXMtY3hmLXdzLXJtCisKKyAgIAorMi4gQnVpbGQgdGhlIGV4YW1wbGUgYnkgb3BlbmluZyBhIGNvbW1hbmQgcHJvbXB0LCBjaGFuZ2luZyBkaXJlY3RvcnkgdG8KKyAgIGV4YW1wbGVzL2N4Zi13cy1ybSAodGhpcyBleGFtcGxlKSBhbmQgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBNYXZlbgorICAgY29tbWFuZDoKKworICAgICBtdm4gaW5zdGFsbAorICAgCisgICBJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgbG9jYWwKKyAgIE1hdmVuIHJlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgdmVyeSBxdWlja2x5LiBPdGhlcndpc2UKKyAgIGl0IG1heSB0YWtlIHNvbWUgdGltZSBmb3IgTWF2ZW4gdG8gZG93bmxvYWQgZXZlcnl0aGluZyBpdCBuZWVkcy4KKyAgIAorICAgVGhlIG12biBpbnN0YWxsIGNvbW1hbmQgYnVpbGRzIHRoZSBleGFtcGxlIGRlcGxveW1lbnQgYnVuZGxlIGFuZAorICAgY29waWVzIGl0IHRvIHlvdXIgbG9jYWwgTWF2ZW4gcmVwb3NpdG9yeSBhbmQgdG8gdGhlIHRhcmdldCBkaXJlY3RvcnkKKyAgIG9mIHRoaXMgZXhhbXBsZS4KKyAgICAgCiszLiBJbnN0YWxsIHRoZSBleGFtcGxlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbgorICAgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKyAgIAorICAgICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWN4Zi13cy1ybQorICAgICAgIAorICAgSXQgbWFrZXMgdXNlIG9mIHRoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzIGZhY2lsaXR5LiBGb3IgbW9yZQorICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIGZhY2lsaXR5LCBzZWUgdGhlIFJFQURNRS50eHQgZmlsZQorICAgaW4gdGhlIGV4YW1wbGVzIHBhcmVudCBkaXJlY3RvcnkuCisKKworWW91IGNhbiB0cnkgcnVubmluZyBhIGNsaWVudCBhZ2FpbnN0IHlvdXIgc2VydmljZSBieSBmb2xsb3dpbmcgdGhlCitpbnN0cnVjdGlvbnMgaW4gdGhlICJSdW5uaW5nIGEgQ2xpZW50IiBzZWN0aW9uIGFib3ZlLgorCisKK1N0b3BwaW5nIGFuZCBVbmluc3RhbGxpbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHN0b3AgdGhlIGV4YW1wbGUsIHlvdSBtdXN0IGZpcnN0IGtub3cgdGhlIGJ1bmRsZSBJRCB0aGF0IFNlcnZpY2VNaXgKK2hhcyBhc3NpZ25lZCB0byBpdC4gVG8gZ2V0IHRoZSBidW5kbGUgSUQsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZAorYXQgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBvc2dpOmxpc3QKKworQXQgdGhlIGVuZCBvZiB0aGUgbGlzdGluZywgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgc2ltaWxhciB0byB0aGUKK2ZvbGxvd2luZzoKKworICBbMTcwXSBbQWN0aXZlICAgICBdIFtTdGFydGVkXSBbICA2MF0gQXBhY2hlIFNlcnZpY2VNaXggRXhhbXBsZSA6OiBDWEYgV1MtUk0gKDQuMi4wLjApCisKK0luIHRoaXMgY2FzZSwgdGhlIGJ1bmRsZSBJRCBpcyAxNzAuCisKK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBhdCB0aGUgU2VydmljZU1peAorY29uc29sZToKKworICBvc2dpOnN0b3AgPGJ1bmRsZV9pZD4KKworRm9yIGV4YW1wbGU6CisKKyAgb3NnaTpzdG9wIDE3MAorCitUbyB1bmluc3RhbGwgdGhlIGV4YW1wbGUsIGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGluCit0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOnVuaW5zdGFsbCBleGFtcGxlcy1jeGYtd3Mtcm0KKyAKK29yCisgCisgIG9zZ2k6dW5pbnN0YWxsIDxidW5kbGVfaWQ+CisgIAorCitWaWV3aW5nIHRoZSBMb2cgRW50cmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gdmlldyB0aGUgZW50cmllcyBpbiB0aGUgbG9nIGZpbGUgaW4gdGhlIGRhdGEvbG9nCitkaXJlY3Rvcnkgb2YgeW91ciBTZXJ2aWNlTWl4IGluc3RhbGxhdGlvbiwgb3IgYnkgdHlwaW5nCit0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBsb2c6ZGlzcGxheQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YTMzMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3BvbS54bWwKQEAgLTAsMCArMSwxMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5jeGYtd3Mtcm08L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBDWEYgV1MtUk0gT1NHaTwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Q1hGIGV4YW1wbGUgdXNpbmcgV1MtUk08L2Rlc2NyaXB0aW9uPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtZnJvbnRlbmQtamF4d3M8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC10cmFuc3BvcnRzLWh0dHA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC10cmFuc3BvcnRzLWh0dHAtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC13cy1ybTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LXdzLWFkZHI8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC13cy1wb2xpY3k8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1jb21tb24tdXRpbGl0aWVzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLURlc2NyaXB0aW9uPiR7cHJvamVjdC5kZXNjcmlwdGlvbn08L0J1bmRsZS1EZXNjcmlwdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5qd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwud3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLm9zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmNvbmZpZ3VyYXRpb24uc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLCBvcmcuYXBhY2hlLmN4Zi5pbywgb3JnLmFwYWNoZS5jeGYubWVzc2FnZSwgb3JnLmFwYWNoZS5jeGYucGhhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYud3MuYWRkcmVzc2luZywgb3JnLmFwYWNoZS5jeGYud3Mucm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmh0dHBfb3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXgudXRpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFByaXZhdGUtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmPC9Qcml2YXRlLVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8UmVxdWlyZS1CdW5kbGU+b3JnLmFwYWNoZS5jeGYuYnVuZGxlPC9SZXF1aXJlLUJ1bmRsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmV4ZWMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8bWFpbkNsYXNzPm9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLmN4Zl93c19ybS5DbGllbnQ8L21haW5DbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVQbHVnaW5EZXBlbmRlbmNpZXM+ZmFsc2U8L2luY2x1ZGVQbHVnaW5EZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0ZGFkM2EKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGQuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8vIFNUQVJUIFNOSVBQRVQ6IHNlcnZpY2UKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4ZjsKKworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworCitAV2ViU2VydmljZQorcHVibGljIGludGVyZmFjZSBIZWxsb1dvcmxkIHsKKyAgICBTdHJpbmcgc2F5SGkoU3RyaW5nIHRleHQpOworfQorLy8gRU5EIFNOSVBQRVQ6IHNlcnZpY2UKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWZkMjVmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CisKK0BXZWJTZXJ2aWNlKGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZCIpCitwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEltcGwgaW1wbGVtZW50cyBIZWxsb1dvcmxkIHsKKworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGkoU3RyaW5nIHRleHQpIHsKKyAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgdGV4dDsKKyAgICB9Cit9CisvLyBFTkQgU05JUFBFVDogc2VydmljZQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX3dzX3JtL0NsaWVudC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX3dzX3JtL0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4NWE0MDIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9jeGZfd3Nfcm0vQ2xpZW50LmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy5jeGZfd3Nfcm07CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5VbmRlY2xhcmVkVGhyb3dhYmxlRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworaW1wb3J0IGphdmF4LnhtbC53cy5TZXJ2aWNlOworaW1wb3J0IGphdmF4LnhtbC53cy5zb2FwLlNPQVBCaW5kaW5nOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcuU3ByaW5nQnVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQ7CisKKworcHVibGljIGZpbmFsIGNsYXNzIENsaWVudCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFUl9OQU1FID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLm5hbWUiKTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFNFUlZJQ0VfTkFNRSAKKyAgICAgICAgPSBuZXcgUU5hbWUoImh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIsICJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX05BTUUgCisgICAgICAgID0gbmV3IFFOYW1lKCJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iLCAiSGVsbG9Xb3JsZEltcGxQb3J0Iik7CisKKyAgICBwcml2YXRlIENsaWVudCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgU3ByaW5nQnVzRmFjdG9yeSBiZiA9IG5ldyBTcHJpbmdCdXNGYWN0b3J5KCk7CisgICAgICAgICAgICBVUkwgYnVzRmlsZSA9IENsaWVudC5jbGFzcy5nZXRSZXNvdXJjZSgid3Nfcm0ueG1sIik7CisgICAgICAgICAgICBCdXMgYnVzID0gYmYuY3JlYXRlQnVzKGJ1c0ZpbGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBiZi5zZXREZWZhdWx0QnVzKGJ1cyk7CisgICAgICAgICAgICBidXMuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKG5ldyBNZXNzYWdlTG9zc1NpbXVsYXRvcigpKTsKKyAgICAgICAgICAgIC8vIEVuZHBvaW50IEFkZHJlc3MKKyAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IFNlcnZpY2UuY3JlYXRlKENsaWVudC5jbGFzcy5nZXRSZXNvdXJjZSgiL0hlbGxvV29ybGQud3NkbCIpLCBTRVJWSUNFX05BTUUpOworCisgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnRBZGRyZXNzID0gImh0dHA6Ly9sb2NhbGhvc3Q6OTE5MS9IZWxsb1dvcmxkIjsKKworICAgICAgICAgICAgLy8gQWRkIGEgcG9ydCB0byB0aGUgU2VydmljZQorICAgICAgICAgICAgc2VydmljZS5hZGRQb3J0KFBPUlRfTkFNRSwgU09BUEJpbmRpbmcuU09BUDExSFRUUF9CSU5ESU5HLCBlbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgSGVsbG9Xb3JsZCBodyA9IHNlcnZpY2UuZ2V0UG9ydChIZWxsb1dvcmxkLmNsYXNzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nW10gbmFtZXMgPSBuZXcgU3RyaW5nW10geyJBbm5lIiwgIkJpbGwiLCAiQ2hyaXMiLCAiRGFpc3kifTsKKyAgICAgICAgICAgIC8vIG1ha2UgYSBzZXF1ZW5jZSBvZiA0IGludm9jYXRpb25zCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBIZWxsb1dvcmxkIHNlcnZpY2UiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaHcuc2F5SGkobmFtZXNbaV0pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gYWxsb3cgYXluY2hyb25vdXMgcmVzZW5kcyB0byBvY2N1cgorICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDYwICogMTAwMCk7CisgICAgICAgICAgICBidXMuc2h1dGRvd24odHJ1ZSk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX3dzX3JtL01lc3NhZ2VMb3NzU2ltdWxhdG9yLmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9jeGZfd3Nfcm0vTWVzc2FnZUxvc3NTaW11bGF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wY2RkMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX3dzX3JtL01lc3NhZ2VMb3NzU2ltdWxhdG9yLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLmN4Zl93c19ybTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5GYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvci5JbnRlcmNlcHRvckNoYWluOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLk1lc3NhZ2VTZW5kZXJJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5pby5BYnN0cmFjdFdyYXBwZWRPdXRwdXRTdHJlYW07CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWVzc2FnZS5NZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLnBoYXNlLkFic3RyYWN0UGhhc2VJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmN4Zi5waGFzZS5QaGFzZUludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLndzLmFkZHJlc3NpbmcuQWRkcmVzc2luZ1Byb3BlcnRpZXM7CitpbXBvcnQgb3JnLmFwYWNoZS5jeGYud3Mucm0uUk1Db250ZXh0VXRpbHM7CisKKy8qKgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlTG9zc1NpbXVsYXRvciBleHRlbmRzIEFic3RyYWN0UGhhc2VJbnRlcmNlcHRvcjxNZXNzYWdlPiB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihNZXNzYWdlTG9zc1NpbXVsYXRvci5jbGFzcy5nZXROYW1lKCkpOworICAgIHByaXZhdGUgaW50IGFwcE1lc3NhZ2VDb3VudDsgCisgICAgCisgICAgcHVibGljIE1lc3NhZ2VMb3NzU2ltdWxhdG9yKCkgeworICAgICAgICBzdXBlcihQaGFzZS5QUkVQQVJFX1NFTkQpOworICAgICAgICBhZGRCZWZvcmUoTWVzc2FnZVNlbmRlckludGVyY2VwdG9yLmNsYXNzLmdldE5hbWUoKSk7CisgICAgfQorCisgICAgCisgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHRocm93cyBGYXVsdCB7CisgICAgICAgIEFkZHJlc3NpbmdQcm9wZXJ0aWVzIG1hcHMgPQorICAgICAgICAgICAgUk1Db250ZXh0VXRpbHMucmV0cmlldmVNQVBzKG1lc3NhZ2UsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgUk1Db250ZXh0VXRpbHMuZW5zdXJlRXhwb3NlZFZlcnNpb24obWFwcyk7CisgICAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOworICAgICAgICBpZiAobWFwcyAhPSBudWxsICYmIG51bGwgIT0gbWFwcy5nZXRBY3Rpb24oKSkgeworICAgICAgICAgICAgYWN0aW9uID0gbWFwcy5nZXRBY3Rpb24oKS5nZXRWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChSTUNvbnRleHRVdGlscy5pc1JNUHJvdG9jb2xNZXNzYWdlKGFjdGlvbikpIHsgCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXBwTWVzc2FnZUNvdW50Kys7CisgICAgICAgIC8vIGRvIG5vdCBkaXNjYXJkIG9kZC1udW1iZXJlZCBtZXNzYWdlcworICAgICAgICBpZiAoMCAhPSAoYXBwTWVzc2FnZUNvdW50ICUgMikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gZGlzY2FyZCBldmVuLW51bWJlcmVkIG1lc3NhZ2UKKyAgICAgICAgSW50ZXJjZXB0b3JDaGFpbiBjaGFpbiA9IG1lc3NhZ2UuZ2V0SW50ZXJjZXB0b3JDaGFpbigpOworICAgICAgICBMaXN0SXRlcmF0b3IgaXQgPSBjaGFpbi5nZXRJdGVyYXRvcigpOworICAgICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICBQaGFzZUludGVyY2VwdG9yIHBpID0gKFBoYXNlSW50ZXJjZXB0b3IpaXQubmV4dCgpOworICAgICAgICAgICAgaWYgKE1lc3NhZ2VTZW5kZXJJbnRlcmNlcHRvci5jbGFzcy5nZXROYW1lKCkuZXF1YWxzKHBpLmdldElkKCkpKSB7CisgICAgICAgICAgICAgICAgY2hhaW4ucmVtb3ZlKHBpKTsKKyAgICAgICAgICAgICAgICBMT0cuZmluZSgiUmVtb3ZlZCBNZXNzYWdlU2VuZGVySW50ZXJjZXB0b3IgZnJvbSBpbnRlcmNlcHRvciBjaGFpbi4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbWVzc2FnZS5zZXRDb250ZW50KE91dHB1dFN0cmVhbS5jbGFzcywgbmV3IFdyYXBwZWRPdXRwdXRTdHJlYW0obWVzc2FnZSkpOyAgCisKKyAgICAgICAgbWVzc2FnZS5nZXRJbnRlcmNlcHRvckNoYWluKCkuYWRkKG5ldyBBYnN0cmFjdFBoYXNlSW50ZXJjZXB0b3I8TWVzc2FnZT4oUGhhc2UuUFJFUEFSRV9TRU5EX0VORElORykgeworCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIEZhdWx0IHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldENvbnRlbnQoT3V0cHV0U3RyZWFtLmNsYXNzKS5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZhdWx0KGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9KTsgICAKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSBjbGFzcyBXcmFwcGVkT3V0cHV0U3RyZWFtIGV4dGVuZHMgQWJzdHJhY3RXcmFwcGVkT3V0cHV0U3RyZWFtIHsKKworICAgICAgICBwcml2YXRlIE1lc3NhZ2Ugb3V0TWVzc2FnZTsKKworICAgICAgICBwdWJsaWMgV3JhcHBlZE91dHB1dFN0cmVhbShNZXNzYWdlIG0pIHsKKyAgICAgICAgICAgIHRoaXMub3V0TWVzc2FnZSA9IG07CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25GaXJzdFdyaXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGlmIChMT0cuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSkgeworICAgICAgICAgICAgICAgIEJpZ0ludGVnZXIgbnIgPSBSTUNvbnRleHRVdGlscy5yZXRyaWV2ZVJNUHJvcGVydGllcyhvdXRNZXNzYWdlLCB0cnVlKQorICAgICAgICAgICAgICAgICAgICAuZ2V0U2VxdWVuY2UoKS5nZXRNZXNzYWdlTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgTE9HLmZpbmUoIkxvc2luZyBtZXNzYWdlICIgKyBucik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cmFwcGVkU3RyZWFtID0gbmV3IER1bW15T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIH0KKyAgICB9ICAgIAorCisgICAgICAgICAgICAKKyAgICAKKyAgICBwcml2YXRlIGNsYXNzIER1bW15T3V0cHV0U3RyZWFtIGV4dGVuZHMgT3V0cHV0U3RyZWFtIHsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGUoaW50IGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICB9CisgICAgCisgICAgCisgICAgCit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGQud3NkbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZC53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTAwMjYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtcm0vc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGQud3NkbApAQCAtMCwwICsxLDUyIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/Pjx3c2RsOmRlZmluaXRpb25zIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiB4bWxuczp0bnM9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8d3NkbDp0eXBlcz4KKyAgICA8eHM6c2NoZW1hIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIHhtbG5zPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgICAgICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic2F5SGkiPgorICAgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJhcmcwIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgIDwveHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9InJldHVybiIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgICA8L3hzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2F5SGkiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJzYXlIaSIvPgorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2F5SGlSZXNwb25zZSIgbmlsbGFibGU9InRydWUiIHR5cGU9InNheUhpUmVzcG9uc2UiLz4KKyAgICA8L3hzOnNjaGVtYT4KKyAgPC93c2RsOnR5cGVzPgorICA8d3NkbDptZXNzYWdlIG5hbWU9InNheUhpIj4KKyAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpzYXlIaSIgbmFtZT0icGFyYW1ldGVycyI+CisgICAgPC93c2RsOnBhcnQ+CisgIDwvd3NkbDptZXNzYWdlPgorICA8d3NkbDptZXNzYWdlIG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOnNheUhpUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiPgorICAgIDwvd3NkbDpwYXJ0PgorICA8L3dzZGw6bWVzc2FnZT4KKyAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSGVsbG9Xb3JsZCI+CisgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNheUhpIj4KKyAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpzYXlIaSIgbmFtZT0ic2F5SGkiPgorICAgICAgPC93c2RsOmlucHV0PgorICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpzYXlIaVJlc3BvbnNlIiBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgPC93c2RsOnBvcnRUeXBlPgorICA8d3NkbDpiaW5kaW5nIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG9Xb3JsZCI+CisgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIi8+CisgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNheUhpIj4KKyAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIHN0eWxlPSJkb2N1bWVudCIvPgorICAgICAgPHdzZGw6aW5wdXQgbmFtZT0ic2F5SGkiPgorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgPC93c2RsOmlucHV0PgorICAgICAgPHdzZGw6b3V0cHV0IG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPgorICAgICAgPC93c2RsOm91dHB1dD4KKyAgICA8L3dzZGw6b3BlcmF0aW9uPgorICA8L3dzZGw6YmluZGluZz4KKyAgPHdzZGw6c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiPgorICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkhlbGxvV29ybGRJbXBsU2VydmljZVNvYXBCaW5kaW5nIiBuYW1lPSJIZWxsb1dvcmxkSW1wbFBvcnQiPgorICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo5MTkxL0hlbGxvV29ybGQiLz4KKyAgICAgIDx3c3dhOlVzaW5nQWRkcmVzc2luZyB4bWxuczp3c3dhPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzAyL2FkZHJlc3Npbmcvd3NkbCIvPgorICAgIDwvd3NkbDpwb3J0PgorICA8L3dzZGw6c2VydmljZT4KKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NWQxM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCkBAIC0wLDAgKzEsNjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLSBTVEFSVCBTTklQUEVUOiBiZWFucyAtLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgICAgIHhtbG5zOmN4Zj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL2NvcmUiCisgICAgICAgIHhtbG5zOndzYT0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL2FkZHJlc3NpbmciCisgICAgICAgIHhtbG5zOmh0dHA9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2h0dHAvY29uZmlndXJhdGlvbiIKKyAgICAgICAgeG1sbnM6d3NybS1wb2xpY3k9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IgorICAgICAgICB4bWxuczp3c3JtLW1ncj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIiCisgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2NvcmUgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29yZS54c2QKKyAgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZAorICAgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy90cmFuc3BvcnRzL2h0dHAvY29uZmlndXJhdGlvbiBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9jb25maWd1cmF0aW9uL2h0dHAtY29uZi54c2QKKyAgICAgICAgICBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3BvbGljeSBodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzAyL3JtL3dzcm0tcG9saWN5LnhzZAorICAgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy93cy9ybS9tYW5hZ2VyIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2NvbmZpZ3VyYXRpb24vd3NybS1tYW5hZ2VyLnhzZAorICAgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QiPgorCisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1zb2FwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24taHR0cC54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXJtLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24tYWRkci54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLWh0dHAtamV0dHkueG1sIiAvPgorCisgICAgPGpheHdzOmVuZHBvaW50IGlkPSJoZWxsb1dvcmxkIgorICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRvcj0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkSW1wbCIKKyAgICAgICAgICAgICAgICAgICAgd3NkbExvY2F0aW9uPSJjbGFzc3BhdGg6SGVsbG9Xb3JsZC53c2RsIgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz0iaHR0cDovL2xvY2FsaG9zdDo5MTkxL0hlbGxvV29ybGQiLz4KKyAgICAgICAgPGN4ZjpidXM+CisgICAgICAgIDxjeGY6ZmVhdHVyZXM+CisgICAgICAgICAgICA8Y3hmOmxvZ2dpbmcvPgorICAgICAgICAgICAgPHdzYTphZGRyZXNzaW5nLz4KKyAgICAgICAgICAgIDx3c3JtLW1ncjpyZWxpYWJsZU1lc3NhZ2luZz4KKyAgICAgICAgICAgICAgICA8d3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgICAgICAgICAgICAgICAgIDx3c3JtLXBvbGljeTpCYXNlUmV0cmFuc21pc3Npb25JbnRlcnZhbCBNaWxsaXNlY29uZHM9IjQwMDAiLz4gICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICA8d3NybS1wb2xpY3k6QWNrbm93bGVkZ2VtZW50SW50ZXJ2YWwgTWlsbGlzZWNvbmRzPSIyMDAwIi8+ICAgICAgICAgIAorICAgICAgICAgICAgICAgIDwvd3NybS1wb2xpY3k6Uk1Bc3NlcnRpb24+CisgICAgICAgICAgICAgICAgPHdzcm0tbWdyOmRlc3RpbmF0aW9uUG9saWN5PgorICAgICAgICAgICAgICAgICAgICA8d3NybS1tZ3I6YWNrc1BvbGljeSBpbnRyYU1lc3NhZ2VUaHJlc2hvbGQ9IjAiIC8+CisgICAgICAgICAgICAgICAgPC93c3JtLW1ncjpkZXN0aW5hdGlvblBvbGljeT4KKyAgICAgICAgICAgIDwvd3NybS1tZ3I6cmVsaWFibGVNZXNzYWdpbmc+CisgICAgICAgIDwvY3hmOmZlYXR1cmVzPgorICAgICAgICA8L2N4ZjpidXM+CisgICAgICAgIDxodHRwOmNvbmR1aXQgbmFtZT0ie2h0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnL31IZWxsb1dvcmxkSW1wbFBvcnQuaHR0cC1jb25kdWl0Ij4KKyAgICAgICAgICAgIDxodHRwOmNsaWVudCBEZWNvdXBsZWRFbmRwb2ludD0iaHR0cDovL2xvY2FsaG9zdDo5OTkwL2RlY291cGxlZF9lbmRwb2ludCIvPgorICAgICAgICA8L2h0dHA6Y29uZHVpdD4KKzwvYmVhbnM+Cis8IS0tIEVORCBTTklQUEVUOiBiZWFucyAtLT4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX3dzX3JtL3dzX3JtLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1ybS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvY3hmX3dzX3JtL3dzX3JtLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODRmMTRhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXJtL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9jeGZfd3Nfcm0vd3Nfcm0ueG1sCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgIHhtbG5zOmN4Zj0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL2NvcmUiCisgICAgICAgeG1sbnM6d3NhPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3MvYWRkcmVzc2luZyIKKyAgICAgICB4bWxuczpodHRwPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvdHJhbnNwb3J0cy9odHRwL2NvbmZpZ3VyYXRpb24iCisgICAgICAgeG1sbnM6d3NybS1wb2xpY3k9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IgorICAgICAgIHhtbG5zOndzcm0tbWdyPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvd3Mvcm0vbWFuYWdlciIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9jb3JlIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2NvcmUueHNkCisgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvaHR0cC9jb25maWd1cmF0aW9uIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2NvbmZpZ3VyYXRpb24vaHR0cC1jb25mLnhzZAorICAgICAgIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vcG9saWN5IGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDIvcm0vd3NybS1wb2xpY3kueHNkCisgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3dzL3JtL21hbmFnZXIgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29uZmlndXJhdGlvbi93c3JtLW1hbmFnZXIueHNkCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QiPgorIAorICAgIDxjeGY6YnVzPgorICAgICAgICA8Y3hmOmZlYXR1cmVzPgorICAgICAgICAgICAgPGN4Zjpsb2dnaW5nLz4KKyAgICAgICAgICAgIDx3c2E6YWRkcmVzc2luZy8+CisgICAgICAgICAgICA8d3NybS1tZ3I6cmVsaWFibGVNZXNzYWdpbmc+CisgICAgICAgICAgICAgICAgPHdzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPgorICAgICAgICAgICAgICAgICAgICA8d3NybS1wb2xpY3k6QmFzZVJldHJhbnNtaXNzaW9uSW50ZXJ2YWwgTWlsbGlzZWNvbmRzPSI0MDAwIi8+ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPHdzcm0tcG9saWN5OkFja25vd2xlZGdlbWVudEludGVydmFsIE1pbGxpc2Vjb25kcz0iMjAwMCIvPiAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8L3dzcm0tcG9saWN5OlJNQXNzZXJ0aW9uPgorICAgICAgICAgICAgICAgIDx3c3JtLW1ncjpkZXN0aW5hdGlvblBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgPHdzcm0tbWdyOmFja3NQb2xpY3kgaW50cmFNZXNzYWdlVGhyZXNob2xkPSIwIiAvPgorICAgICAgICAgICAgICAgIDwvd3NybS1tZ3I6ZGVzdGluYXRpb25Qb2xpY3k+CisgICAgICAgICAgICA8L3dzcm0tbWdyOnJlbGlhYmxlTWVzc2FnaW5nPgorICAgICAgICA8L2N4ZjpmZWF0dXJlcz4KKyAgICA8L2N4ZjpidXM+CisgICAgCisgICAgPGh0dHA6Y29uZHVpdCBuYW1lPSJ7aHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvfUhlbGxvV29ybGRJbXBsUG9ydC5odHRwLWNvbmR1aXQiPgorICAgICAgPGh0dHA6Y2xpZW50IERlY291cGxlZEVuZHBvaW50PSJodHRwOi8vbG9jYWxob3N0Ojk5OTAvZGVjb3VwbGVkX2VuZHBvaW50Ii8+CisgICAgPC9odHRwOmNvbmR1aXQ+Cis8L2JlYW5zPgorCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDlkNTZkCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvUkVBRE1FLnR4dApAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitDWEYgV1MtU0VDVVJJVFkgT1NHaSBIVFRQIFdFQiBTRVJWSUNFCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1B1cnBvc2UKKy0tLS0tLS0KK0NyZWF0ZSBhIHdlYiBzZXJ2aWNlIHdpdGggQ1hGIHVzaW5nIFdTLVNFQ1VSSVRZIGFuZCBleHBvc2UgaXQgdGhyb3VnaCB0aGUgT1NHaSBIVFRQCitTZXJ2aWNlLgorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIHdlYiBzZXJ2aWNlIGlzIGEgc2ltcGxlIEpBWC1XUyB3ZWIgc2VydmljZSB3aXRoIHdzLXNlY3VyaXR5IFVzZXJuYW1lVG9rZW4gYWN0aW9uIGNhbGxlZCBIZWxsb1dvcmxkU2VjdXJpdHkuIFRoZSAKK2ludGVyZmFjZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGFyZSBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9qYXZhL29yZy8KK2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4ZiBkaXJlY3Rvcnkgb2YgdGhpcyBleGFtcGxlLgorCitUaGUgYmVhbnMueG1sIGZpbGUsIGxvY2F0ZWQgaW4gdGhlIHNyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcKK2RpcmVjdG9yeToKKworMS4gSW1wb3J0cyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBuZWVkZWQgdG8gZW5hYmxlIENYRiBhbmQgT1NHaSB3b3JrCisgICB0b2dldGhlci4KKworMi4gQ29uZmlndXJlcyB0aGUgd2ViIHNlcnZpY2UgZW5kcG9pbnQgYXMgZm9sbG93czoKKworICAgPGpheHdzOmVuZHBvaW50IGlkPSJoZWxsb1dvcmxkIgorICAgICAgICBpbXBsZW1lbnRvcj0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkSW1wbCIKKyAgICAgICAgYWRkcmVzcz0iL0hlbGxvV29ybGRTZWN1cml0eSI+CisgICAgICAgIDxqYXh3czppbkludGVyY2VwdG9ycz4KKyAgICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi53cy5zZWN1cml0eS53c3M0ai5XU1M0SkluSW50ZXJjZXB0b3IiPgorICAgICAgICAgICAgICAgIDxjb25zdHJ1Y3Rvci1hcmc+CisgICAgICAgICAgICAgICAgICAgIDxtYXA+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJhY3Rpb24iIHZhbHVlPSJVc2VybmFtZVRva2VuIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJwYXNzd29yZFR5cGUiIHZhbHVlPSJQYXNzd29yZFRleHQiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9InBhc3N3b3JkQ2FsbGJhY2tSZWYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWYgYmVhbj0ibXlQYXNzd29yZENhbGxiYWNrIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2VudHJ5PgorCisgICAgICAgICAgICAgICAgICAgIDwvbWFwPgorICAgICAgICAgICAgICAgIDwvY29uc3RydWN0b3ItYXJnPgorICAgICAgICAgICAgPC9iZWFuPgorICAgICAgICA8L2pheHdzOmluSW50ZXJjZXB0b3JzPgorICAgIDwvamF4d3M6ZW5kcG9pbnQ+CisKKworUHJlcmVxdWlzaXRlcyBmb3IgUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIKKyAgIAorICAgLSBNYXZlbiAyLjAuOSBvciBoaWdoZXIKKyAgIAorICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbCBleGFtcGxlcworICBkaXJlY3RvcnkuCisKKworMi4gU3RhcnQgU2VydmljZU1peCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICA8c2VydmljZW1peF9ob21lPi9iaW4vc2VydmljZW1peCAgICAgICAgICAob24gVU5JWCkKKyAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgICAgICAgKG9uIFdpbmRvd3MpCisKKworUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiBydW4gdGhlIGV4YW1wbGUgaW4gdHdvIHdheXM6CisKKy0gQS4gVXNpbmcgYSBQcmVidWlsdCBEZXBsb3ltZW50IEJ1bmRsZTogUXVpY2sgYW5kIEVhc3kKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIGV4YW1wbGUgdXAgYW5kCitydW5uaW5nIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCisKKy0gQi4gQnVpbGRpbmcgdGhlIEV4YW1wbGUgQnVuZGxlIFlvdXJzZWxmCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBleGFtcGxlIGluIGFueQord2F5LiBJdCB0ZWxscyB5b3UgaG93IHRvIGJ1aWxkIGFuZCBkZXBsb3kgdGhlIGV4YW1wbGUuIFRoaXMKK29wdGlvbiBtaWdodCBiZSBzbG93ZXIgdGhhbiBvcHRpb24gQSBiZWNhdXNlLCBpZiB5b3UgZG8gbm90CithbHJlYWR5IGhhdmUgdGhlIHJlcXVpcmVkIGJ1bmRsZXMgaW4geW91ciBsb2NhbCBNYXZlbgorcmVwb3NpdG9yeSwgTWF2ZW4gd2lsbCBoYXZlIHRvIGRvd25sb2FkIHRoZSBidW5kbGVzIGl0IG5lZWRzLgorCitBLiBVc2luZyBhIFByZWJ1aWx0IERlcGxveW1lbnQgQnVuZGxlOiBRdWljayBhbmQgRWFzeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGluc3RhbGwgYW5kIHJ1biBhIHByZWJ1aWx0IHZlcnNpb24gb2YgdGhpcyBleGFtcGxlLCBlbnRlcgordGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jeGYtd3Mtc2VjdXJpdHktb3NnaQorICAKK1RoaXMgY29tbWFuZCBtYWtlcyB1c2Ugb2YgdGhlIFNlcnZpY2VNaXggZmVhdHVyZXMgZmFjaWxpdHkuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmVhdHVyZXMgZmFjaWxpdHksIHNlZSB0aGUgUkVBRE1FLnR4dAorZmlsZSBpbiB0aGUgZXhhbXBsZXMgcGFyZW50IGRpcmVjdG9yeS4KKworVG8gdmlldyB0aGUgc2VydmljZSBXU0RMLCBvcGVuIHlvdXIgYnJvd3NlciBhbmQgZ28gdG8gdGhlIGZvbGxvd2luZworVVJMOgorCisgIGh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvSGVsbG9Xb3JsZFNlY3VyaXR5P3dzZGwKKworTm90ZSwgaWYgeW91IHVzZSBTYWZhcmksIHJpZ2h0IGNsaWNrIHRoZSB3aW5kb3cgYW5kIHNlbGVjdAorJ1Nob3cgU291cmNlJy4KKworUnVubmluZyBhIENsaWVudAorLS0tLS0tLS0tLS0tLS0tLQorVG8gcnVuIHRoZSB3ZWIgY2xpZW50OgorCisxLiBPcGVuIHRoZSBjbGllbnQuaHRtbCwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKKyAgIHRoaXMgUkVBRE1FIGZpbGUsIGluIHlvdXIgZmF2b3JpdGUgYnJvd3Nlci4KKworMi4gQ2xpY2sgdGhlIFNlbmQgYnV0dG9uIHRvIHNlbmQgYSByZXF1ZXN0LgorCisgICBPbmNlIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50LCBhIHJlc3BvbnNlIHNpbWlsYXIKKyAgIHRvIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGFwcGVhciBpbiB0aGUgcmlnaHQtaGFuZCBwYW5lbCBvZiB0aGUKKyAgIHdlYiBwYWdlOgorICAgCisgICBTVEFUVVM6IDIwMAorICAgPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICAgICA8c29hcDpCb2R5PjxuczI6c2F5SGlSZXNwb25zZSB4bWxuczpuczI9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuCisgICAgIHNlcnZpY2VtaXguYXBhY2hlLm9yZy8iPjxyZXR1cm4+SGVsbG8gSm9obiBEb2U8L3JldHVybj4KKyAgICAgPC9uczI6c2F5SGlSZXNwb25zZT4KKyAgICAgPC9zb2FwOkJvZHk+CisgICA8L3NvYXA6RW52ZWxvcGU+CisKK1RvIHJ1biB0aGUgamF2YSBjb2RlIGNsaWVudDoKKworMS4gQ2hhbmdlIHRvIHRoZSA8c2VydmljZW1peF9ob21lPi9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaQorICAgZGlyZWN0b3J5LgorCisyLiBSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgICAgIG12biBjb21waWxlIGV4ZWM6amF2YQorCisgICBJZiB0aGUgY2xpZW50IHJlcXVlc3QgaXMgc3VjY2Vzc2Z1bCwgYSByZXNwb25zZSBzaW1pbGFyIHRvIHRoZQorICAgZm9sbG93aW5nIHNob3VsZCBhcHBlYXIgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICAgPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICAgICA8c29hcDpCb2R5PjxuczI6c2F5SGlSZXNwb25zZSB4bWxuczpuczI9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuCisgICAgICAgc2VydmljZW1peC5hcGFjaGUub3JnLyI+PHJldHVybj5IZWxsbyBKb2huIERvZTwvcmV0dXJuPgorICAgICAgIDwvbnMyOnNheUhpUmVzcG9uc2U+CisgICAgIDwvc29hcDpCb2R5PgorICAgPC9zb2FwOkVudmVsb3BlPgorCisKK0NoYW5naW5nIC9jeGYgc2VydmxldCBhbGlhcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCeSBkZWZhdWx0IENYRiBTZXJ2bGV0IGlzIGFzc2lnbmVkIGEgJy9jeGYnIGFsaWFzLiBZb3UgY2FuCitjaGFuZ2UgaXQgaW4gYSBjb3VwbGUgb2Ygd2F5cworCithLiBBZGQgb3JnLmFwYWNoZS5jeGYub3NnaS5jZmcgdG8gdGhlIC9ldGMgZGlyZWN0b3J5IGFuZCBzZXQKKyAgIHRoZSAnb3JnLmFwYWNoZS5jeGYuc2VydmxldC5jb250ZXh0JyBwcm9wZXJ0eSwgZm9yIGV4YW1wbGU6CisgICAKKyAgICAgb3JnLmFwYWNoZS5jeGYuc2VydmxldC5jb250ZXh0PS9jdXN0b20KKyAgIAorYi4gVXNlIHNoZWxsIGNvbmZpZyBjb21tYW5kcywgZm9yIGV4YW1wbGUgOgorICAgCisgICAgIGNvbmZpZzplZGl0IG9yZy5hcGFjaGUuY3hmLm9zZ2kgICAKKyAgICAgY29uZmlnOnByb3BzZXQgb3JnLmFwYWNoZS5jeGYuc2VydmxldC5jb250ZXh0IC9zdXBlcgorICAgICBjb25maWc6dXBkYXRlCisKKworQi4gQnVpbGRpbmcgdGhlIEV4YW1wbGUgQnVuZGxlIFlvdXJzZWxmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGluc3RhbGwgYW5kIHJ1biB0aGUgZXhhbXBsZSB3aGVyZSB5b3UgYnVpbGQgdGhlIGV4YW1wbGUgYnVuZGxlCit5b3Vyc2VsZiwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczoKKworMS4gSWYgeW91IGhhdmUgYWxyZWFkeSBydW4gdGhlIGV4YW1wbGUgdXNpbmcgdGhlIHByZWJ1aWx0IHZlcnNpb24gYXMKKyAgIGRlc2NyaWJlZCBhYm92ZSwgeW91IG11c3QgZmlyc3QgdW5pbnN0YWxsIHRoZSBleGFtcGxlcy1jeGYtd3Mtc2VjdXJpdHktb3NnaQorICAgZmVhdHVyZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICAgICBmZWF0dXJlczp1bmluc3RhbGwgZXhhbXBsZXMtY3hmLXdzLXNlY3VyaXR5LW9zZ2kKKworICAgCisyLiBCdWlsZCB0aGUgZXhhbXBsZSBieSBvcGVuaW5nIGEgY29tbWFuZCBwcm9tcHQsIGNoYW5naW5nIGRpcmVjdG9yeSB0bworICAgZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kgKHRoaXMgZXhhbXBsZSkgYW5kIGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgTWF2ZW4KKyAgIGNvbW1hbmQ6CisKKyAgICAgbXZuIGluc3RhbGwKKyAgIAorICAgSWYgYWxsIG9mIHRoZSByZXF1aXJlZCBPU0dpIGJ1bmRsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIGxvY2FsCisgICBNYXZlbiByZXBvc2l0b3J5LCB0aGUgZXhhbXBsZSB3aWxsIGJ1aWxkIHZlcnkgcXVpY2tseS4gT3RoZXJ3aXNlCisgICBpdCBtYXkgdGFrZSBzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgaXQgbmVlZHMuCisgICAKKyAgIFRoZSBtdm4gaW5zdGFsbCBjb21tYW5kIGJ1aWxkcyB0aGUgZXhhbXBsZSBkZXBsb3ltZW50IGJ1bmRsZSBhbmQKKyAgIGNvcGllcyBpdCB0byB5b3VyIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnkgYW5kIHRvIHRoZSB0YXJnZXQgZGlyZWN0b3J5CisgICBvZiB0aGlzIGV4YW1wbGUuCisgICAgIAorMy4gSW5zdGFsbCB0aGUgZXhhbXBsZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4KKyAgIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisgICAKKyAgICAgZmVhdHVyZXM6aW5zdGFsbCBleGFtcGxlcy1jeGYtd3Mtc2VjdXJpdHktb3NnaQorICAgICAgIAorICAgSXQgbWFrZXMgdXNlIG9mIHRoZSBTZXJ2aWNlTWl4IGZlYXR1cmVzIGZhY2lsaXR5LiBGb3IgbW9yZQorICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZlYXR1cmVzIGZhY2lsaXR5LCBzZWUgdGhlIFJFQURNRS50eHQgZmlsZQorICAgaW4gdGhlIGV4YW1wbGVzIHBhcmVudCBkaXJlY3RvcnkuCisKK1RvIHZpZXcgdGhlIHNlcnZpY2UgV1NETCwgb3BlbiB5b3VyIGJyb3dzZXIgYW5kIGdvIHRvIHRoZSBmb2xsb3dpbmcKK1VSTDoKKworICBodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL0hlbGxvV29ybGRTZWN1cml0eT93c2RsCisKK05vdGUsIGlmIHlvdSB1c2UgU2FmYXJpLCByaWdodCBjbGljayB0aGUgd2luZG93IGFuZCBzZWxlY3QKKydTaG93IFNvdXJjZScuCisKK1lvdSBjYW4gdHJ5IHJ1bm5pbmcgYSBjbGllbnQgYWdhaW5zdCB5b3VyIHNlcnZpY2UgYnkgZm9sbG93aW5nIHRoZQoraW5zdHJ1Y3Rpb25zIGluIHRoZSAiUnVubmluZyBhIENsaWVudCIgc2VjdGlvbiBhYm92ZS4KKworCitTdG9wcGluZyBhbmQgVW5pbnN0YWxsaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUbyBzdG9wIHRoZSBleGFtcGxlLCB5b3UgbXVzdCBmaXJzdCBrbm93IHRoZSBidW5kbGUgSUQgdGhhdCBTZXJ2aWNlTWl4CitoYXMgYXNzaWduZWQgdG8gaXQuIFRvIGdldCB0aGUgYnVuZGxlIElELCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQKK2F0IHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgb3NnaTpsaXN0CisKK0F0IHRoZSBlbmQgb2YgdGhlIGxpc3RpbmcsIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IHNpbWlsYXIgdG8gdGhlCitmb2xsb3dpbmc6CisKKyAgWzE3MF0gW0FjdGl2ZSAgICAgXSBbU3RhcnRlZF0gWyAgNjBdIEFwYWNoZSBTZXJ2aWNlTWl4IEV4YW1wbGUgOjogQ1hGIFdTIFNFQ1VSSVRZIE9TR0kgKDQuMi4wLjApCisKK0luIHRoaXMgY2FzZSwgdGhlIGJ1bmRsZSBJRCBpcyAxNzAuCisKK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBhdCB0aGUgU2VydmljZU1peAorY29uc29sZToKKworICBvc2dpOnN0b3AgPGJ1bmRsZV9pZD4KKworRm9yIGV4YW1wbGU6CisKKyAgb3NnaTpzdG9wIDE3MAorCitUbyB1bmluc3RhbGwgdGhlIGV4YW1wbGUsIGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGluCit0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGZlYXR1cmVzOnVuaW5zdGFsbCBleGFtcGxlcy1jeGYtd3Mtc2VjdXJpdHktb3NnaQorIAorb3IKKyAKKyAgb3NnaTp1bmluc3RhbGwgPGJ1bmRsZV9pZD4KKyAgCisKK1ZpZXdpbmcgdGhlIExvZyBFbnRyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiB2aWV3IHRoZSBlbnRyaWVzIGluIHRoZSBsb2cgZmlsZSBpbiB0aGUgZGF0YS9sb2cKK2RpcmVjdG9yeSBvZiB5b3VyIFNlcnZpY2VNaXggaW5zdGFsbGF0aW9uLCBvciBieSB0eXBpbmcKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGxvZzpkaXNwbGF5CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9jbGllbnQuaHRtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL2NsaWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzM5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9jbGllbnQuaHRtbApAQCAtMCwwICsxLDE0NCBAQAorPCEtLQorICAgIAorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5TZXJ2aWNlTWl4IDQgQ1hGLVdTLVNFQ1VSSVRZLU9TR2kgRXhhbXBsZTwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgdXJsVG9PcGVuID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvSGVsbG9Xb3JsZFNlY3VyaXR5IjsgLy9kZWZhdWx0IFVSTCB0byBvcGVuCisKK2Z1bmN0aW9uIGdldEhUVFBPYmplY3QoKSB7CisgIHZhciB4bWxodHRwID0gZmFsc2U7CisKKyAgLyogQ29tcGlsYXRpb24gY29uZGl0aW9ubmVsbGUgZCdJRSAqLworICAvKiBDaGVjayBpZiB3ZSBhcmUgdXNpbmcgSUUgKi8KKyAgLypAY2Nfb24KKyAgQGlmIChAX2pzY3JpcHRfdmVyc2lvbiA+PSA1KQorICAgICB0cnkgeworICAgICAgICB4bWxodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworICAgICAgICB9IGNhdGNoIChFKSB7CisgICAgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICB9CisgIEBlbHNlCisgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgQGVuZCBAKi8KKworICAvKiBvbiBlc3NhaWUgZGUgY3LpZXIgbCdvYmpldCBzaSBjZSBuJ2VzdCBwYXMgZOlq4CBmYWl0ICovCisgIC8qIENyZWF0ZSB0aGUgeG1saHR0cCBvYmplY3QgaWYgaXQgaXMgbm90IHlldCBkZWZpbmVkICovCisgIGlmICgheG1saHR0cCAmJiB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgdHJ5IHsKKyAgICAgICAgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgfQorICB9CisKKyAgaWYgKHhtbGh0dHApIHsKKyAgICAgLyogb24gZOlmaW5pdCBjZSBxdWkgZG9pdCBzZSBwYXNzZXIgcXVhbmQgbGEgcGFnZSBy6XBvbmRyYSAqLworICAgICAvKiBEZWZpbmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgcmVzcG9uc2UgKi8KKyAgICAgeG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh4bWxodHRwLnJlYWR5U3RhdGUgPT0gNCkgeyAvKiA0IDog6XRhdCAiY29tcGxldGUiICovCisgICAgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOworICAgICAgICAgICB2YXIgcmVzcG9uc2VTdGF0dXMgPSAiIjsKKyAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9IHhtbGh0dHAuc3RhdHVzICsgIiI7CisgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9ICJFUlJPUiBXSElMRSBSRVRSSUVWSU5HIFNUQVRVUzsgTUFZQkUgVU5BQkxFIFRPIENPTk5FQ1QuIjsKKyAgICAgICAgICAgfQorICAgICAgICAgICByZXNwb25zZS52YWx1ZSA9ICJTVEFUVVM6ICIgKyByZXNwb25zZVN0YXR1cyArICJcbiIgKyB4bWxodHRwLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfQorICAgICB9CisgIH0KKyAgcmV0dXJuIHhtbGh0dHA7Cit9CisKK2Z1bmN0aW9uIHNlbmQoKSB7CisgIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlICE9IHVybFRvT3BlbikgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSAhPSAiIikpIHsKKyAgICAvLyB1c2UgdXNlciBlbnRyeSBpZiBpdCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZworICAgIHVybFRvT3BlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZTsKKyAgfSAgCisgIHZhciB4bWxodHRwID0gZ2V0SFRUUE9iamVjdCgpOworICBpZiAoIXhtbGh0dHApIHsKKyAgICBhbGVydCgnY291bmQgbm90IGNyZWF0ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QnKTsKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIHJlcXVlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVxdWVzdCIpOworICB2YXIgcmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzcG9uc2UiKTsKKyAgdHJ5IHsKKyAgICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2aWxlZ2VNYW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgiVW5pdmVyc2FsQnJvd3NlclJlYWQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIik7CisgIH0gY2F0Y2ggKGUpIHsKKyAgfQorICB0cnkgeworICAgIHhtbGh0dHAub3BlbigiUE9TVCIsIHVybFRvT3BlbiwgdHJ1ZSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhbGVydCgnZXJyb3Igb3BlbmluZycpOworICB9CisgIHhtbGh0dHAuc2VuZChyZXF1ZXN0LnZhbHVlKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8aDE+U2VydmljZU1peCA0IENYRi1XUy1TRUNVUklUWS1PU0dpIEV4YW1wbGU8L2gxPgorCis8cD5XZWxjb21lIHRvIHRoZSBDWEYtV1MtU0VDVVJJVFktT1NHaSBleGFtcGxlIGZvciBTZXJ2aWNlTWl4IDQ8L3A+CisKKzxwPlBlcmZvcm0gYSBQT1NUIGludG8gdGhlIEhUVFAgYmluZGluZy4gVGhpcyByZXF1aXJlcyBKYXZhU2NyaXB0LjwvcD4gCis8cD5UYXJnZXQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1MCIgaWQ9InVybFRvT3BlbiIgdmFsdWU9IiI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSA9IHVybFRvT3Blbjs8L3NjcmlwdD4uPC9wPgorICAKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZD4KKyAgPHRleHRhcmVhIGlkPSJyZXF1ZXN0IiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4Ij48P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorICA8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+CisgICAgPHNvYXA6SGVhZGVyPgorICAgICAgICA8d3NzZTpTZWN1cml0eSB4bWxuczp3c3NlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QiPgorICAgICAgICAgICAgPHdzc2U6VXNlcm5hbWVUb2tlbiA+CisgICAgICAgICAgICAgICAgPHdzc2U6VXNlcm5hbWU+am9lPC93c3NlOlVzZXJuYW1lPgorICAgICAgICAgICAgICAgIDx3c3NlOlBhc3N3b3JkIFR5cGU9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MtdXNlcm5hbWUtdG9rZW4tcHJvZmlsZS0xLjAjUGFzc3dvcmRUZXh0Ij5wYXNzd29yZDwvd3NzZTpQYXNzd29yZD4KKyAgICAgICAgICAgIDwvd3NzZTpVc2VybmFtZVRva2VuPgorICAgICAgICA8L3dzc2U6U2VjdXJpdHk+CisgICAgPC9zb2FwOkhlYWRlcj4KKyAgICA8c29hcDpCb2R5PgorICAgICAgICA8bnMyOnNheUhpIHhtbG5zOm5zMj0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIj4KKyAgICAgICAgICAgIDxhcmcwPkpvaG4gRG9lPC9hcmcwPgorICAgICAgICA8L25zMjpzYXlIaT4KKyAgICA8L3NvYXA6Qm9keT4KKzwvc29hcDpFbnZlbG9wZT4KKworICA8L3RleHRhcmVhPgorICAgIDwvdGQ+CisgICAgPHRkPgorICA8dGV4dGFyZWEgaWQ9InJlc3BvbnNlIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4Ij4KKyAgPC90ZXh0YXJlYT4KKyAgICA8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkIGNvbHNwYW49Mj4KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlNlbmQiIG9uQ2xpY2s9InNlbmQoKTsiLz4KKyAgICA8L3RkPgorICA8L3RyPgorPC90YWJsZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZGIyMjgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9wb20ueG1sCkBAIC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5jeGYtd3Mtc2VjdXJpdHktb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IENYRiBXUy1TZWN1cml0eSBPU0dpPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5DWEYgZXhhbXBsZSB1c2luZyBXUy1TZWN1cml0eTwvZGVzY3JpcHRpb24+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby13cy1tZXRhZGF0YV8yLjBfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLnNlY3VyaXR5PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3NzNGo8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtRGVzY3JpcHRpb24+JHtwcm9qZWN0LmRlc2NyaXB0aW9ufTwvQnVuZGxlLURlc2NyaXB0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4Zi5vc2dpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMuc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQuaHR0cF9vc2dpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLndzLnNlY3VyaXR5LndzczRqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLndzLnNlY3VyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC51dGlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUud3Muc2VjdXJpdHkucHJvY2Vzc29yCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEV4cG9ydC1QYWNrYWdlPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGY8L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFJlcXVpcmUtQnVuZGxlPm9yZy5hcGFjaGUuY3hmLmJ1bmRsZTwvUmVxdWlyZS1CdW5kbGU+CisgICAgICAgICAgICAgICAgICAgIDwvaW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5leGVjLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG1haW5DbGFzcz5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkNsaWVudDwvbWFpbkNsYXNzPgorICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZVBsdWdpbkRlcGVuZGVuY2llcz5mYWxzZTwvaW5jbHVkZVBsdWdpbkRlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9DbGllbnQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODkwYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4ZjsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247CisKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgudXRpbC5GaWxlVXRpbDsKKworcHVibGljIGNsYXNzIENsaWVudHsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIG5ldyBDbGllbnQoKS5zZW5kUmVxdWVzdCgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZW5kUmVxdWVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL0hlbGxvV29ybGRTZWN1cml0eSIpCisgICAgICAgICAgICAgICAgLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGNvbm5lY3Rpb24uc2V0RG9JbnB1dCh0cnVlKTsKKyAgICAgICAgY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKKyAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gY29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgLy8gUG9zdCB0aGUgcmVxdWVzdCBmaWxlLgorICAgICAgICBJbnB1dFN0cmVhbSBmaXMgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgib3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9yZXF1ZXN0LnhtbCIpOworICAgICAgICBGaWxlVXRpbC5jb3B5SW5wdXRTdHJlYW0oZmlzLCBvcyk7CisgICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlLgorICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIEZpbGVVdGlsLmNvcHlJbnB1dFN0cmVhbShpcywgYmFvcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhlIHJlc3BvbnNlIGlzID09PT09PiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmFvcy50b1N0cmluZygpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkLmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0ZGFkM2EKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CisKK0BXZWJTZXJ2aWNlCitwdWJsaWMgaW50ZXJmYWNlIEhlbGxvV29ybGQgeworICAgIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCk7Cit9CisvLyBFTkQgU05JUFBFVDogc2VydmljZQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGRJbXBsLmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWZkMjVmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGRJbXBsLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisvLyBTVEFSVCBTTklQUEVUOiBzZXJ2aWNlCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGY7CisKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKKworQFdlYlNlcnZpY2UoZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIikKK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGQgeworCisgICAgcHVibGljIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCkgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB0ZXh0OworICAgIH0KK30KKy8vIEVORCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvU2VydmVyUGFzc3dvcmRDYWxsYmFjay5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL1NlcnZlclBhc3N3b3JkQ2FsbGJhY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTE1MzFjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL1NlcnZlclBhc3N3b3JkQ2FsbGJhY2suamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNhbGxiYWNrOworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2FsbGJhY2tIYW5kbGVyOworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVW5zdXBwb3J0ZWRDYWxsYmFja0V4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLndzLnNlY3VyaXR5LldTUGFzc3dvcmRDYWxsYmFjazsKKworcHVibGljIGNsYXNzIFNlcnZlclBhc3N3b3JkQ2FsbGJhY2sgaW1wbGVtZW50cyBDYWxsYmFja0hhbmRsZXIgeworCisgICAgcHVibGljIHZvaWQgaGFuZGxlKENhbGxiYWNrW10gY2FsbGJhY2tzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFVuc3VwcG9ydGVkQ2FsbGJhY2tFeGNlcHRpb24geworCisgICAgICAgIFdTUGFzc3dvcmRDYWxsYmFjayBwYyA9IChXU1Bhc3N3b3JkQ2FsbGJhY2spIGNhbGxiYWNrc1swXTsKKworICAgICAgICBpZiAocGMuZ2V0SWRlbnRpZmVyKCkuZXF1YWxzKCJqb2UiKSkgeworICAgICAgICAgICAgcGMuc2V0UGFzc3dvcmQoInBhc3N3b3JkIik7CisgICAgICAgIH0KKyAgICB9CisKK30KKworCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmZTMyNjUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApAQCAtMCwwICsxLDU1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFNUQVJUIFNOSVBQRVQ6IGJlYW5zIC0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCisgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2pheHdzLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1odHRwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL29zZ2kvY3hmLWV4dGVuc2lvbi1vc2dpLnhtbCIgLz4KKworICAgIDxiZWFuIGlkPSJteVBhc3N3b3JkQ2FsbGJhY2siIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLlNlcnZlclBhc3N3b3JkQ2FsbGJhY2siLz4KKworICAgIDxqYXh3czplbmRwb2ludCBpZD0iaGVsbG9Xb3JsZCIKKyAgICAgICAgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZEltcGwiCisgICAgICAgIGFkZHJlc3M9Ii9IZWxsb1dvcmxkU2VjdXJpdHkiPgorICAgICAgICA8amF4d3M6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3Muc2VjdXJpdHkud3NzNGouV1NTNEpJbkludGVyY2VwdG9yIj4KKyAgICAgICAgICAgICAgICA8Y29uc3RydWN0b3ItYXJnPgorICAgICAgICAgICAgICAgICAgICA8bWFwPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0iYWN0aW9uIiB2YWx1ZT0iVXNlcm5hbWVUb2tlbiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0icGFzc3dvcmRUeXBlIiB2YWx1ZT0iUGFzc3dvcmRUZXh0Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJwYXNzd29yZENhbGxiYWNrUmVmIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im15UGFzc3dvcmRDYWxsYmFjayIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKworICAgICAgICAgICAgICAgICAgICA8L21hcD4KKyAgICAgICAgICAgICAgICA8L2NvbnN0cnVjdG9yLWFyZz4KKyAgICAgICAgICAgIDwvYmVhbj4KKyAgICAgICAgPC9qYXh3czppbkludGVyY2VwdG9ycz4KKyAgICA8L2pheHdzOmVuZHBvaW50PgorCis8L2JlYW5zPgorPCEtLSBFTkQgU05JUFBFVDogYmVhbnMgLS0+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9yZXF1ZXN0LnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3JlcXVlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmMDAwNTAKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9yZXF1ZXN0LnhtbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICAgIDxzb2FwOkhlYWRlcj4KKyAgICAgICAgPHdzc2U6U2VjdXJpdHkgeG1sbnM6d3NzZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXNlY2V4dC0xLjAueHNkIj4KKyAgICAgICAgICAgIDx3c3NlOlVzZXJuYW1lVG9rZW4gPgorICAgICAgICAgICAgICAgIDx3c3NlOlVzZXJuYW1lPmpvZTwvd3NzZTpVc2VybmFtZT4KKyAgICAgICAgICAgICAgICA8d3NzZTpQYXNzd29yZCBUeXBlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXVzZXJuYW1lLXRva2VuLXByb2ZpbGUtMS4wI1Bhc3N3b3JkVGV4dCI+cGFzc3dvcmQ8L3dzc2U6UGFzc3dvcmQ+CisgICAgICAgICAgICA8L3dzc2U6VXNlcm5hbWVUb2tlbj4KKyAgICAgICAgPC93c3NlOlNlY3VyaXR5PgorICAgIDwvc29hcDpIZWFkZXI+CisgICAgPHNvYXA6Qm9keT4KKyAgICAgICAgPG5zMjpzYXlIaSB4bWxuczpuczI9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyI+CisgICAgICAgICAgICA8YXJnMD5Kb2huIERvZTwvYXJnMD4KKyAgICAgICAgPC9uczI6c2F5SGk+CisgICAgPC9zb2FwOkJvZHk+Cis8L3NvYXA6RW52ZWxvcGU+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UvUkVBRE1FLnR4dCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZjZhMmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UvUkVBRE1FLnR4dApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitXU0RMIEZpcnN0IE9TR2kgQnVuZGxlcyBFeGFtcGxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1B1cnBvc2UKKy0tLS0tLS0KK1B1Ymxpc2ggYSBXU0RMLWRlZmluZWQgd2ViIHNlcnZpY2UsIHBhY2thZ2VkIGFzIE9TR2kgYnVuZGxlcywgCit1c2luZyBDWEYuCisKK1RoaXMgZXhhbXBsZSBpcyB0aGUgc2FtZSBhcyB0aGUgY3hmLXdzZGwtZmlyc3QgZXhhbXBsZSBleGNlcHQgaXQKK2lzIGRlcGxveWVkIGFzIE9TR2kgYnVuZGxlcywgd2hlcmVhcyB0aGUgY3hmLXdzZGwtZmlyc3QgZXhhbXBsZQoraXMgZGVwbG95ZWQgYXMgYSBzZXJ2aWNlIGFzc2VtYmx5LgorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIENYRiBzZXJ2aWNlIGVuZ2luZSBhbmQgQ1hGIGJpbmRpbmcgY29tcG9uZW50IGFyZSB1c2VkIHRvIGV4cG9zZSB0aGUKK3dlYiBzZXJ2aWNlLiBFYWNoIG9uZSBpcyBwYWNrYWdlZCBpbiBhcyBhbiBPU0dpIGJ1bmRsZSwgYXMgZm9sbG93czoKKworMS4gQ1hGIHNlcnZpY2UgZW5naW5lIChzZWUgdGhlIHdzZGwtZmlyc3QtY3hmc2UtYnVuZGxlIGRpcmVjdG9yeSk6CisgICAKKyAgIC0gQ29udGFpbnMgYSBjb3B5IG9mIHRoZSBzZXJ2aWNlIFdTREwgZmlsZSwgcGVyc29uLndzZGwsIGluIHRoZQorICAgICBzcmMvbWFpbi9yZXNvdXJjZXMgZGlyZWN0b3J5LgorICAgCisgICAtIFRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIGZpbGUsIFBlcnNvbkltcGwuamF2YSwgaW4gdGhlCisgICAgIHNyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdCBkaXJlY3RvcnkuCisgICAgIEl0IGNvbnRhaW5zIEpBWC1XUyBhbm5vdGF0aW9ucyB0aGF0IHNwZWNpZnkgd2hpY2ggd2ViIHNlcnZpY2UKKyAgICAgaXQgaW1wbGVtZW50czoKKworICAgICAgIEBXZWJTZXJ2aWNlKHNlcnZpY2VOYW1lID0gIlBlcnNvblNlcnZpY2UiLCAKKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0IiwKKyAgICAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC5QZXJzb24iKQorICAgCisgICAtIEEgY29uZmlndXJhdGlvbiBmaWxlLCBiZWFucy54bWwsIGxvY2F0ZWQgaW4gdGhlIHNyYy9tYWluL3Jlc291cmNlcy8KKyAgICAgTUVUQS1JTkYvc3ByaW5nIGRpcmVjdG9yeSwgd2hpY2ggY29uZmlndXJlcyB0aGUgQ1hGIGVuZHBvaW50OgorICAgICAKKyAgICAgICA8Y3hmc2U6ZW5kcG9pbnQ+CisgICAgICAgICAgIDxjeGZzZTpwb2pvPgorICAgICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0LlBlcnNvbkltcGwiIC8+CisgICAgICAgICAgIDwvY3hmc2U6cG9qbz4KKyAgICAgICA8L2N4ZnNlOmVuZHBvaW50PgorICAgIAorMi4gQ1hGIGJpbmRpbmcgY29tcG9uZW50IChzZWUgdGhlIHdzZGwtZmlyc3QtY3hmYmMtYnVuZGxlIGRpcmVjdG9yeSk6CisKKyAgIC0gQ29udGFpbnMgYSBjb3B5IG9mIHRoZSBzZXJ2aWNlIFdTREwgZmlsZSwgcGVyc29uLndzZGwsIGluIHRoZQorICAgICBzcmMvbWFpbi9yZXNvdXJjZXMgZGlyZWN0b3J5LgorICAgIAorICAgLSBBIGNvbmZpZ3VyYXRpb24gZmlsZSwgYmVhbnMueG1sLCBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMvCisgICAgIE1FVEEtSU5GL3NwcmluZyBkaXJlY3RvcnksIHdoaWNoIHNwZWNpZmllcyBhIENYRiBjb25zdW1lciB0aGF0IHdpbGwKKyAgICAgYWNjZXB0IGluY29taW5nIGNhbGxzIGZvciB0aGF0IHdlYiBzZXJ2aWNlIGFuZCBwYXNzIHRoZW0gdG8gdGhlIE5NUjoKKworICAgICAgIDxjeGZiYzpjb25zdW1lciB3c2RsPSJjbGFzc3BhdGg6cGVyc29uLndzZGwiCisgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2VydmljZT0icGVyc29uOlBlcnNvblNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SW50ZXJmYWNlPSJwZXJzb246UGVyc29uIi8+CisKKyAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNvbW1vbi5vc2dpLkVuZHBvaW50RXhwb3J0ZXIiIC8+CisKKworUHJlcmVxdWlzaXRlcyBmb3IgUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIKKyAgIAorICAgLSBNYXZlbiAyLjAuOSBvciBoaWdoZXIKKyAgIAorICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbCBleGFtcGxlcworICBkaXJlY3RvcnkuCisKKzIuIFN0YXJ0IFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXggICAgICAgICAgKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4ICAgICAgICAgIChvbiBXaW5kb3dzKQorCisKK0J1aWxkaW5nIGFuZCBSdW5uaW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gYnVpbGQgYW5kIHJ1biB0aGUgZXhhbXBsZSwgY29tcGxldGUgdGhlIGZvbGxvd2luZyBzdGVwczoKKworMS4gQnVpbGQgdGhlIGV4YW1wbGUgYnkgb3BlbmluZyBhIGNvbW1hbmQgcHJvbXB0LCBjaGFuZ2luZyBkaXJlY3RvcnkKKyAgIHRvIGV4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZSAodGhpcyBleGFtcGxlKSBhbmQgZW50ZXJpbmcKKyAgIHRoZSBmb2xsb3dpbmcgTWF2ZW4gY29tbWFuZDoKKworICAgICBtdm4gaW5zdGFsbAorICAgCisgICBJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgbG9jYWwKKyAgIE1hdmVuIHJlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgdmVyeSBxdWlja2x5LiBPdGhlcndpc2UKKyAgIGl0IG1heSB0YWtlIHNvbWUgdGltZSBmb3IgTWF2ZW4gdG8gZG93bmxvYWQgZXZlcnl0aGluZyBpdCBuZWVkcy4KKyAgIAorICAgVGhlIG12biBpbnN0YWxsIGNvbW1hbmQgYnVpbGRzIHRoZSBleGFtcGxlIGRlcGxveW1lbnQgYnVuZGxlIGFuZAorICAgY29waWVzIGl0IHRvIHlvdXIgbG9jYWwgTWF2ZW4gcmVwb3NpdG9yeSBhbmQgdG8gdGhlIHRhcmdldCBkaXJlY3RvcnkKKyAgIG9mIHRoaXMgZXhhbXBsZS4KKyAgICAgCisyLiBJbnN0YWxsIHRoZSBleGFtcGxlIGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbgorICAgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKyAgIAorICAgICBmZWF0dXJlczppbnN0YWxsIGV4YW1wbGVzLWN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZQorICAgICAKKyAgIEl0IG1ha2VzIHVzZSBvZiB0aGUgU2VydmljZU1peCBmZWF0dXJlcyBmYWNpbGl0eS4gRm9yIG1vcmUKKyAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyBmYWNpbGl0eSwgc2VlIHRoZSBSRUFETUUudHh0IGZpbGUKKyAgIGluIHRoZSBleGFtcGxlcyBwYXJlbnQgZGlyZWN0b3J5LgorCitZb3UgY2FuIGJyb3dzZSB0aGUgV1NETCBhdDoKKworICBodHRwOi8vbG9jYWxob3N0OjgwOTIvUGVyc29uU2VydmljZT93c2RsCisKK05vdGUsIGlmIHlvdSB1c2UgU2FmYXJpLCByaWdodCBjbGljayB0aGUgd2luZG93IGFuZCBzZWxlY3QKKydTaG93IFNvdXJjZScuCisKKworUnVubmluZyBhIENsaWVudAorLS0tLS0tLS0tLS0tLS0tLQorVG8gcnVuIHRoZSB3ZWIgY2xpZW50OgorCisxLiBPcGVuIHRoZSBjbGllbnQuaHRtbCwgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKKyAgIHRoaXMgUkVBRE1FIGZpbGUsIGluIHlvdXIgZmF2b3JpdGUgYnJvd3Nlci4KKworMi4gQ2xpY2sgdGhlIFNlbmQgYnV0dG9uIHRvIHNlbmQgYSByZXF1ZXN0LgorCisgICBPbmNlIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50LCBhIHJlc3BvbnNlIHNpbWlsYXIKKyAgIHRvIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGFwcGVhciBpbiB0aGUgcmlnaHQtaGFuZCBwYW5lbCBvZiB0aGUKKyAgIHdlYiBwYWdlOgorICAgCisgICBTVEFUVVM6IDIwMAorICAgPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICAgICA8c29hcDpCb2R5PjxHZXRQZXJzb25SZXNwb25zZSB4bWxucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy8KKyAgICAgc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIj48cGVyc29uSWQ+d29ybGQ8L3BlcnNvbklkPgorICAgICA8c3NuPjAwMC0wMDAtMDAwMDwvc3NuPjxuYW1lPkd1aWxsYXVtZTwvbmFtZT48L0dldFBlcnNvblJlc3BvbnNlPgorICAgICA8L3NvYXA6Qm9keT4KKyAgIDwvc29hcDpFbnZlbG9wZT4KKworVG8gcnVuIHRoZSBqYXZhIGNvZGUgY2xpZW50OgorCisxLiBDaGFuZ2UgdG8gdGhlIDxzZXJ2aWNlbWl4X2hvbWU+L2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS8KKyAgIGNsaWVudCBkaXJlY3RvcnkuCisKKzIuIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgbXZuIGNvbXBpbGUgZXhlYzpqYXZhCisgICAgIAorICAgSWYgdGhlIGNsaWVudCByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIGEgcmVzcG9uc2Ugc2ltaWxhciB0byB0aGUKKyAgIGZvbGxvd2luZyBzaG91bGQgYXBwZWFyIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisgICAgICAgIAorICAgPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICAgICA8c29hcDpCb2R5PjxHZXRQZXJzb25SZXNwb25zZSB4bWxucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy8KKyAgICAgICBzYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiPjxwZXJzb25JZD53b3JsZDwvcGVyc29uSWQ+CisgICAgICAgPHNzbj4wMDAtMDAwLTAwMDA8L3Nzbj48bmFtZT5HdWlsbGF1bWU8L25hbWU+PC9HZXRQZXJzb25SZXNwb25zZT4KKyAgICAgPC9zb2FwOkJvZHk+CisgICA8L3NvYXA6RW52ZWxvcGU+CisgICAKKworU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCB0aGUgZXhhbXBsZSwgeW91IG11c3QgZmlyc3Qga25vdyB0aGUgYnVuZGxlIElEIHRoYXQgU2VydmljZU1peAoraGFzIGFzc2lnbmVkIHRvIGl0LiBUbyBnZXQgdGhlIGJ1bmRsZSBJRCwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kCitpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIG9zZ2k6bGlzdAorCitBdCB0aGUgZW5kIG9mIHRoZSBsaXN0aW5nLCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nOgorCisgIFsxODBdIFtBY3RpdmUgICAgIF0gWyAgICAgXSBbICA2MF0gU2VydmljZU1peCA6OiBTYW1wbGVzIDo6IFdTREwgZmlyc3QgOjogQ1hGIEJDIEJVTkRMRSAoNC4yLjApCisgIFsxODFdIFtBY3RpdmUgICAgIF0gWyAgICAgXSBbICA2MF0gU2VydmljZU1peCA6OiBTYW1wbGVzIDo6IFdTREwgZmlyc3QgOjogQ1hGIFNFIEJVTkRMRSAoNC4yLjApCisKKworSW4gdGhpcyBjYXNlLCB0aGUgYnVuZGxlIElEcyBhcmUgMTgwIGFuZCAxODEuCisKK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peAorY29uc29sZToKKworICBvc2dpOnN0b3AgPGJ1bmRsZV9pZD4KKworRm9yIGV4YW1wbGU6CisKKyAgb3NnaTpzdG9wIDE4MAorICBvc2dpOnN0b3AgMTgxCisKK1RvIHVuaW5zdGFsbCB0aGUgZXhhbXBsZSwgZW50ZXIgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgaW4KK3RoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgZmVhdHVyZXM6dW5pbnN0YWxsIGV4YW1wbGVzLWN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZQorIAorb3IKKyAKKyAgb3NnaTp1bmluc3RhbGwgPGJ1bmRsZV9pZD4KKyAgCisKK1ZpZXdpbmcgdGhlIExvZyBFbnRyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiB2aWV3IHRoZSBlbnRyaWVzIGluIHRoZSBsb2cgZmlsZSBpbiB0aGUgZGF0YS9sb2cKK2RpcmVjdG9yeSBvZiB5b3VyIFNlcnZpY2VNaXggaW5zdGFsbGF0aW9uLCBvciBieSB0eXBpbmcKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIGxvZzpkaXNwbGF5CisKKworQ2hhbmdpbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvZGUgb3IgY29uZmlndXJhdGlvbiwganVzdCB1c2UgJ212biBpbnN0YWxsJwordG8gcmVidWlsZCB0aGUgT1NHaSBidW5kbGVzIGFuZCBkZXBsb3kgYXMgYmVmb3JlLgorCisKK01vcmUgSW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0KK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CisKKyAgaHR0cDovL2N3aWtpLmFwYWNoZS5vcmcvU01YNC9jcmVhdGluZy1hbi1vc2dpLWJ1bmRsZS1mb3ItZGVwbG95aW5nLWpiaS1lbmRwb2ludHMuaHRtbApkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL2NsaWVudC5odG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL2NsaWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDZiNWQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UvY2xpZW50Lmh0bWwKQEAgLTAsMCArMSwxMzUgQEAKKzwhLS0KKyAgICAKKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLT4KKzwhLS0gJFJldiQgJERhdGUkIC0tPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5TZXJ2aWNlTWl4IFdTREwtRmlyc3QgRXhhbXBsZTwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cit2YXIgdXJsVG9PcGVuID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA5Mi9QZXJzb25TZXJ2aWNlLyI7IC8vZGVmYXVsdCBVUkwgdG8gb3BlbgorCitmdW5jdGlvbiBnZXRIVFRQT2JqZWN0KCkgeworICB2YXIgeG1saHR0cCA9IGZhbHNlOworCisgIC8qIENvbXBpbGF0aW9uIGNvbmRpdGlvbm5lbGxlIGQnSUUgKi8KKyAgLypAY2Nfb24KKyAgQGlmIChAX2pzY3JpcHRfdmVyc2lvbiA+PSA1KQorICAgICB0cnkgeworICAgICAgICB4bWxodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworICAgICAgICB9IGNhdGNoIChFKSB7CisgICAgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICB9CisgIEBlbHNlCisgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgQGVuZCBAKi8KKworICAvKiBvbiBlc3NhaWUgZGUgY3LpZXIgbCdvYmpldCBzaSBjZSBuJ2VzdCBwYXMgZOlq4CBmYWl0ICovCisgIGlmICgheG1saHR0cCAmJiB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgdHJ5IHsKKyAgICAgICAgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgfQorICB9CisKKyAgaWYgKHhtbGh0dHApIHsKKyAgICAgLyogb24gZOlmaW5pdCBjZSBxdWkgZG9pdCBzZSBwYXNzZXIgcXVhbmQgbGEgcGFnZSBy6XBvbmRyYSAqLworICAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHhtbGh0dHAucmVhZHlTdGF0ZSA9PSA0KSB7IC8qIDQgOiDpdGF0ICJjb21wbGV0ZSIgKi8KKyAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3BvbnNlIik7CisgICAgICAgICAgIHZhciByZXNwb25zZVN0YXR1cyA9ICIiOworICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0geG1saHR0cC5zdGF0dXMgKyAiIjsKKyAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0gIkVSUk9SIFdISUxFIFJFVFJJRVZJTkcgU1RBVFVTOyBNQVlCRSBVTkFCTEUgVE8gQ09OTkVDVC4iOworICAgICAgICAgICB9CisgICAgICAgICAgIHJlc3BvbnNlLnZhbHVlID0gIlNUQVRVUzogIiArIHJlc3BvbnNlU3RhdHVzICsgIlxuIiArIHhtbGh0dHAucmVzcG9uc2VUZXh0OworICAgICAgICB9CisgICAgIH0KKyAgfQorICByZXR1cm4geG1saHR0cDsKK30KKworZnVuY3Rpb24gc2VuZCgpIHsKKyAgaWYgKChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWUgIT0gdXJsVG9PcGVuKSAmJiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlICE9ICIiKSkgeworICAgIC8vdXNlIHVzZXIgZW50cnkgb25seSBpZiBpdCBhdCBsZWFzdCBjYW4gYmUgb2theQorICAgIHVybFRvT3BlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZTsKKyAgfSAgCisgIHZhciB4bWxodHRwID0gZ2V0SFRUUE9iamVjdCgpOworICBpZiAoIXhtbGh0dHApIHsKKyAgICBhbGVydCgnY291bmQgbm90IGNyZWF0ZSBYTUxIdHRwUmVxdWVzdCBvYmplY3QnKTsKKyAgICByZXR1cm47CisgIH0KKyAgdmFyIHJlcXVlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVxdWVzdCIpOworICB2YXIgcmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzcG9uc2UiKTsKKyAgdHJ5IHsKKyAgICBuZXRzY2FwZS5zZWN1cml0eS5Qcml2aWxlZ2VNYW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgiVW5pdmVyc2FsQnJvd3NlclJlYWQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIik7CisgIH0gY2F0Y2ggKGUpIHsKKyAgfQorICB0cnkgeworICAgIHhtbGh0dHAub3BlbigiUE9TVCIsIHVybFRvT3BlbiwgdHJ1ZSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhbGVydCgnZXJyb3Igb3BlbmluZycpOworICB9CisgIHhtbGh0dHAuc2VuZChyZXF1ZXN0LnZhbHVlKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8aDE+U2VydmljZU1peCBXU0RMLUZpcnN0IEV4YW1wbGU8L2gxPgorCis8cD5XZWxjb21lIHRvIHRoZSBXU0RMLUZpcnN0IGV4YW1wbGUgZm9yIFNlcnZpY2VNaXg8L3A+CisKKzxwPlBlcmZvcm0gYSBQT1NUIGludG8gdGhlIEhUVFAgYmluZGluZy4gVGhpcyByZXF1aXJlcyBKYXZhU2NyaXB0LjwvcD4gCis8cD5UYXJnZXQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1MCIgaWQ9InVybFRvT3BlbiIgdmFsdWU9IiI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSA9IHVybFRvT3Blbjs8L3NjcmlwdD4uPC9wPgorICAKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZD4KKyAgPHRleHRhcmVhIGlkPSJyZXF1ZXN0IiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4IiBvbktleVVwPSJzZW5kKCk7Ij48P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVudjpFbnZlbG9wZSB4bWxuczplbnY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIgorICAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIj4KKyAgPGVudjpCb2R5PgorICAgIDx0bnM6R2V0UGVyc29uPgorICAgICAgPHRuczpwZXJzb25JZD53b3JsZDwvdG5zOnBlcnNvbklkPgorICAgIDwvdG5zOkdldFBlcnNvbj4KKyAgPC9lbnY6Qm9keT4KKzwvZW52OkVudmVsb3BlPgorCisgIDwvdGV4dGFyZWE+CisgICAgPC90ZD4KKyAgICA8dGQ+CisgIDx0ZXh0YXJlYSBpZD0icmVzcG9uc2UiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NDAwcHgiPgorICA8L3RleHRhcmVhPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0yPgorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU2VuZCIgb25DbGljaz0ic2VuZCgpOyIvPgorICAgIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL2NsaWVudC9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL2NsaWVudC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzJiYmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UvY2xpZW50L3BvbS54bWwKQEAgLTAsMCArMSw2MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPndzZGwtZmlyc3QtY2xpZW50PC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IFdTREwgRmlyc3QgT1NHaSBQYWNrYWdlIDo6IENsaWVudDwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC11dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgorICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuNTwvdGFyZ2V0PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5leGVjLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG1haW5DbGFzcz5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0LkNsaWVudDwvbWFpbkNsYXNzPgorICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZVBsdWdpbkRlcGVuZGVuY2llcz5mYWxzZTwvaW5jbHVkZVBsdWdpbkRlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UvY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9DbGllbnQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS9jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy93c2RsX2ZpcnN0L0NsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTJhOTIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UvY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9DbGllbnQuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnV0aWwuRmlsZVV0aWw7CisKK3B1YmxpYyBjbGFzcyBDbGllbnR7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICB0cnkgeworICAgICAgICBuZXcgQ2xpZW50KCkuc2VuZFJlcXVlc3QoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgc2VuZFJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDkyL1BlcnNvblNlcnZpY2UvIikKKyAgICAgICAgICAgICAgICAub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubmVjdGlvbi5zZXREb0lucHV0KHRydWUpOworICAgICAgICBjb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOworICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpOworICAgICAgICAvLyBQb3N0IHRoZSByZXF1ZXN0IGZpbGUuCisgICAgICAgIElucHV0U3RyZWFtIGZpcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJvcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy93c2RsX2ZpcnN0L3JlcXVlc3QueG1sIik7CisgICAgICAgIEZpbGVVdGlsLmNvcHlJbnB1dFN0cmVhbShmaXMsIG9zKTsKKyAgICAgICAgLy8gUmVhZCB0aGUgcmVzcG9uc2UuCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgRmlsZVV0aWwuY29weUlucHV0U3RyZWFtKGlzLCBiYW9zKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aGUgcmVzcG9uc2UgaXMgPT09PT0+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihiYW9zLnRvU3RyaW5nKCkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9yZXF1ZXN0LnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS9jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QvcmVxdWVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1NmYxYwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS9jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QvcmVxdWVzdC54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVudjpFbnZlbG9wZSB4bWxuczplbnY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIgorICAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIj4KKyAgPGVudjpCb2R5PgorICAgIDx0bnM6R2V0UGVyc29uPgorICAgICAgPHRuczpwZXJzb25JZD53b3JsZDwvdG5zOnBlcnNvbklkPgorICAgIDwvdG5zOkdldFBlcnNvbj4KKyAgPC9lbnY6Qm9keT4KKzwvZW52OkVudmVsb3BlPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODg3MmY2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3BvbS54bWwKQEAgLTAsMCArMSw0MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmV4YW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2U8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogQ1hGIFdTREwgRmlyc3QgT1NHaSBQYWNrYWdlPC9uYW1lPgorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisKKyAgICA8bW9kdWxlcz4KKyAgICAgICAgPG1vZHVsZT53c2RsLWZpcnN0LWN4ZnNlLWJ1bmRsZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPndzZGwtZmlyc3QtY3hmYmMtYnVuZGxlPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2xpZW50PC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZiYy1idW5kbGUvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZmJjLWJ1bmRsZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMGEwZjAKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZiYy1idW5kbGUvcG9tLnhtbApAQCAtMCwwICsxLDgxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2U8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+d3NkbC1maXJzdC1jeGZiYy1idW5kbGU8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBXU0RMIEZpcnN0IE9TR2kgUGFja2FnZSA6OiBDWEYgQkMgQnVuZGxlPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5DWEYgV1NETCBmaXJzdCBleGFtcGxlIDo6IENYRiBCQyBCdW5kbGU8L2Rlc2NyaXB0aW9uPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC1mcm9udGVuZC1qYXh3czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5qd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnNvYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLndzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZmJjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNvbW1vbi5vc2dpCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFJlcXVpcmUtQnVuZGxlPm9yZy5hcGFjaGUuY3hmLmJ1bmRsZTwvUmVxdWlyZS1CdW5kbGU+CisgICAgICAgICAgICAgICAgICAgIDwvaW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZmJjLWJ1bmRsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZmJjLWJ1bmRsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ5NGFmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3dzZGwtZmlyc3QtY3hmYmMtYnVuZGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisKKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgeG1sbnM6Y3hmYmM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvY3hmYmMvMS4wIgorICAgICAgIHhtbG5zOnBlcnNvbj0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiCisgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QKKyAgICAgICAgICAgICAgICBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2N4ZmJjLzEuMCBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2N4ZmJjLzEuMC9zZXJ2aWNlbWl4LWN4Zi1iYy54c2QiPgorCisgIDxjeGZiYzpjb25zdW1lciB3c2RsPSJjbGFzc3BhdGg6cGVyc29uLndzZGwiCisgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2VydmljZT0icGVyc29uOlBlcnNvblNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SW50ZXJmYWNlPSJwZXJzb246UGVyc29uIi8+CisgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY29tbW9uLm9zZ2kuRW5kcG9pbnRFeHBvcnRlciIgLz4KKworPC9iZWFucz4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZmJjLWJ1bmRsZS9zcmMvbWFpbi9yZXNvdXJjZXMvcGVyc29uLndzZGwgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZiYy1idW5kbGUvc3JjL21haW4vcmVzb3VyY2VzL3BlcnNvbi53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjI0ODMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZiYy1idW5kbGUvc3JjL21haW4vcmVzb3VyY2VzL3BlcnNvbi53c2RsCkBAIC0wLDAgKzEsOTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0+Cis8IS0tICRSZXYkICREYXRlJCAtLT4KKzx3c2RsOmRlZmluaXRpb25zIG5hbWU9IndzZGwtZmlyc3QiCisgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6dG5zPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdCIKKyAgICB4bWxuczp0eXBlbnM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIgorICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiPgorCisgICAgPHdzZGw6dHlwZXM+CisgICAgICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJHZXRQZXJzb24iPgorICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJHZXRQZXJzb25SZXNwb25zZSI+CisgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icGVyc29uSWQiIHR5cGU9InhzZDpzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzc24iIHR5cGU9InhzZDpzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVbmtub3duUGVyc29uRmF1bHQiPgorICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KKyAgICAgICAgPC94c2Q6c2NoZW1hPgorICA8L3dzZGw6dHlwZXM+CisgICAgCisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJHZXRQZXJzb25SZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0eXBlbnM6R2V0UGVyc29uIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJHZXRQZXJzb25SZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idHlwZW5zOkdldFBlcnNvblJlc3BvbnNlIi8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJVbmtub3duUGVyc29uRmF1bHQiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InR5cGVuczpVbmtub3duUGVyc29uRmF1bHQiLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKworICAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBlcnNvbiI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJHZXRQZXJzb24iPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOkdldFBlcnNvblJlcXVlc3QiLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6R2V0UGVyc29uUmVzcG9uc2UiLz4KKyAgICAgICAgICAgIDx3c2RsOmZhdWx0IG5hbWU9IlVua25vd25QZXJzb24iIG1lc3NhZ2U9InRuczpVbmtub3duUGVyc29uRmF1bHQiLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICA8L3dzZGw6cG9ydFR5cGU+CisgICAgCisgICAgPHdzZGw6YmluZGluZyBuYW1lPSJQZXJzb25TT0FQQmluZGluZyIgdHlwZT0idG5zOlBlcnNvbiI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9IkdldFBlcnNvbiI+CisgICAgICAgICAgICA8d3NkbDppbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJVbmtub3duUGVyc29uIj4KKyAgICAgICAgICAgICAgICA8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9IlVua25vd25QZXJzb24iIC8+CisgICAgICAgICAgICA8L3dzZGw6ZmF1bHQ+CisgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgIDwvd3NkbDpiaW5kaW5nPgorCisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJQZXJzb25TZXJ2aWNlIj4KKyAgICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6UGVyc29uU09BUEJpbmRpbmciIG5hbWU9InNvYXAiPgorICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwOTIvUGVyc29uU2VydmljZS8iIC8+CisgICAgICAgPC93c2RsOnBvcnQ+CisgICA8L3dzZGw6c2VydmljZT4KKworPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3dzZGwtZmlyc3QtY3hmc2UtYnVuZGxlL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZzZS1idW5kbGUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDA4ZGEwCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3dzZGwtZmlyc3QtY3hmc2UtYnVuZGxlL3BvbS54bWwKQEAgLTAsMCArMSwxMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2U8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZTwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD53c2RsLWZpcnN0LWN4ZnNlLWJ1bmRsZTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IFdTREwgRmlyc3QgT1NHaSBQYWNrYWdlIDo6IENYRiBTRSBCdW5kbGU8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNYRiBXU0RMIGZpcnN0IGV4YW1wbGUgOjogQ1hGIFNFIEJ1bmRsZTwvZGVzY3JpcHRpb24+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWZyb250ZW5kLWpheHdzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby13cy1tZXRhZGF0YV8yLjBfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgorICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuNTwvdGFyZ2V0PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtY29kZWdlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlUm9vdD4ke2Jhc2VkaXJ9L3RhcmdldC9qYXh3czwvc291cmNlUm9vdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbE9wdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsT3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw+JHtiYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXMvcGVyc29uLndzZGw8L3dzZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0cmFhcmdzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRyYWFyZz4tdmVyYm9zZTwvZXh0cmFhcmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dHJhYXJncz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsT3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3NkbE9wdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+d3NkbDJqYXZhPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtU3ltYm9saWNOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvQnVuZGxlLVN5bWJvbGljTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxJbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5qd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuYmluZC5hbm5vdGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5uYW1lc3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnNvYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLndzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNvbW1vbi5vc2dpCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFJlcXVpcmUtQnVuZGxlPm9yZy5hcGFjaGUuY3hmLmJ1bmRsZTwvUmVxdWlyZS1CdW5kbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RXhwb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0LnR5cGVzCisgICAgICAgICAgICAgICAgICAgICAgICA8L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZzZS1idW5kbGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy93c2RsX2ZpcnN0L1BlcnNvbkltcGwuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZnNlLWJ1bmRsZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QvUGVyc29uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YmM1OWUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZzZS1idW5kbGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy93c2RsX2ZpcnN0L1BlcnNvbkltcGwuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3Q7CisKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKK2ltcG9ydCBqYXZheC54bWwud3MuSG9sZGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC50eXBlcy5HZXRQZXJzb247CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC50eXBlcy5HZXRQZXJzb25SZXNwb25zZTsKKworQFdlYlNlcnZpY2Uoc2VydmljZU5hbWUgPSAiUGVyc29uU2VydmljZSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdCIsIGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uIikKK3B1YmxpYyBjbGFzcyBQZXJzb25JbXBsIGltcGxlbWVudHMgUGVyc29uIHsKKworICAgIHB1YmxpYyB2b2lkIGdldFBlcnNvbihIb2xkZXI8U3RyaW5nPiBwZXJzb25JZCwgSG9sZGVyPFN0cmluZz4gc3NuLCBIb2xkZXI8U3RyaW5nPiBuYW1lKQorICAgICAgICB0aHJvd3MgVW5rbm93blBlcnNvbkZhdWx0CisgICAgeworICAgICAgICBpZiAocGVyc29uSWQudmFsdWUgPT0gbnVsbCB8fCBwZXJzb25JZC52YWx1ZS5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0LnR5cGVzLlVua25vd25QZXJzb25GYXVsdCBmYXVsdCA9IG5ldyBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0LnR5cGVzLlVua25vd25QZXJzb25GYXVsdCgpOworICAgICAgICAgICAgZmF1bHQuc2V0UGVyc29uSWQocGVyc29uSWQudmFsdWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFVua25vd25QZXJzb25GYXVsdChudWxsLCBmYXVsdCk7CisgICAgICAgIH0KKyAgICAgICAgbmFtZS52YWx1ZSA9ICJHdWlsbGF1bWUiOworICAgICAgICBzc24udmFsdWUgPSAiMDAwLTAwMC0wMDAwIjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZnNlLWJ1bmRsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0LW9zZ2ktcGFja2FnZS93c2RsLWZpcnN0LWN4ZnNlLWJ1bmRsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU0MGNmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3dzZGwtZmlyc3QtY3hmc2UtYnVuZGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgIAorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgIHhtbG5zOmN4ZnNlPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2N4ZnNlLzEuMCIKKyAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZAorICAgICAgICAgICAgICAgIGh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvY3hmc2UvMS4wIGh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvY3hmc2UvMS4wL3NlcnZpY2VtaXgtY3hmLXNlLnhzZCI+CisKKworICAgIDxjeGZzZTplbmRwb2ludD4KKyAgICAgICAgPGN4ZnNlOnBvam8+CisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uSW1wbCIgLz4KKyAgICAgICAgPC9jeGZzZTpwb2pvPgorICAgIDwvY3hmc2U6ZW5kcG9pbnQ+CisKKyAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNvbW1vbi5vc2dpLkVuZHBvaW50RXhwb3J0ZXIiIC8+CisKKzwvYmVhbnM+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2Uvd3NkbC1maXJzdC1jeGZzZS1idW5kbGUvc3JjL21haW4vcmVzb3VyY2VzL3BlcnNvbi53c2RsIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3dzZGwtZmlyc3QtY3hmc2UtYnVuZGxlL3NyYy9tYWluL3Jlc291cmNlcy9wZXJzb24ud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmYyNDgzCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlL3dzZGwtZmlyc3QtY3hmc2UtYnVuZGxlL3NyYy9tYWluL3Jlc291cmNlcy9wZXJzb24ud3NkbApAQCAtMCwwICsxLDk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIAorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tPgorPCEtLSAkUmV2JCAkRGF0ZSQgLS0+Cis8d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJ3c2RsLWZpcnN0IgorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iCisgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOnRucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiCisgICAgeG1sbnM6dHlwZW5zPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdC90eXBlcyIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0Ij4KKworICAgIDx3c2RsOnR5cGVzPgorICAgICAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIgorICAgICAgICAgICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iR2V0UGVyc29uIj4KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwZXJzb25JZCIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+CisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iR2V0UGVyc29uUmVzcG9uc2UiPgorICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3NuIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+CisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVW5rbm93blBlcnNvbkZhdWx0Ij4KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwZXJzb25JZCIgdHlwZT0ieHNkOnN0cmluZyIvPgorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+CisgICAgICAgIDwveHNkOnNjaGVtYT4KKyAgPC93c2RsOnR5cGVzPgorICAgIAorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iR2V0UGVyc29uUmVxdWVzdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idHlwZW5zOkdldFBlcnNvbiIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iR2V0UGVyc29uUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InR5cGVuczpHZXRQZXJzb25SZXNwb25zZSIvPgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iVW5rbm93blBlcnNvbkZhdWx0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0eXBlbnM6VW5rbm93blBlcnNvbkZhdWx0Ii8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisKKyAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJQZXJzb24iPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iR2V0UGVyc29uIj4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpHZXRQZXJzb25SZXF1ZXN0Ii8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOkdldFBlcnNvblJlc3BvbnNlIi8+CisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJVbmtub3duUGVyc29uIiBtZXNzYWdlPSJ0bnM6VW5rbm93blBlcnNvbkZhdWx0Ii8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOnBvcnRUeXBlPgorICAgIAorICAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iUGVyc29uU09BUEJpbmRpbmciIHR5cGU9InRuczpQZXJzb24iPgorICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJHZXRQZXJzb24iPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iVW5rbm93blBlcnNvbiI+CisgICAgICAgICAgICAgICAgPHNvYXA6ZmF1bHQgdXNlPSJsaXRlcmFsIiBuYW1lPSJVbmtub3duUGVyc29uIiAvPgorICAgICAgICAgICAgPC93c2RsOmZhdWx0PgorICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICA8L3dzZGw6YmluZGluZz4KKworICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iUGVyc29uU2VydmljZSI+CisgICAgICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOlBlcnNvblNPQVBCaW5kaW5nIiBuYW1lPSJzb2FwIj4KKyAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDkyL1BlcnNvblNlcnZpY2UvIiAvPgorICAgICAgIDwvd3NkbDpwb3J0PgorICAgPC93c2RsOnNlcnZpY2U+CisKKzwvd3NkbDpkZWZpbml0aW9ucz4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L1JFQURNRS50eHQgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3M2IwZmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC9SRUFETUUudHh0CkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK1dTREwgRmlyc3QgSkJJIFNlcnZpY2UgQXNzZW1ibHkgRXhhbXBsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1B1cnBvc2UKKy0tLS0tLS0KK1B1Ymxpc2ggYSBXU0RMLWRlZmluZWQgd2ViIHNlcnZpY2UsIGFzIGEgSkJJIHNlcnZpY2UgYXNzZW1ibHksIHVzaW5nIENYRi4KKworVGhpcyBleGFtcGxlIGlzIHRoZSBzYW1lIGFzIHRoZSBjeGYtd3NkbC1maXJzdC1vc2dpLXBhY2thZ2UgZXhhbXBsZSBleGNlcHQKK2l0IGlzIGRlcGxveWVkIGFzIGEgSkJJIHNlcnZpY2UgYXNzZW1ibHksIHdoZXJlYXMgdGhlIGN4Zi13c2RsLWZpcnN0LW9zZ2ktCitwYWNrYWdlIGV4YW1wbGUgaXMgZGVwbG95ZWQgYXMgT1NHaSBidW5kbGVzLgorCisKK0V4cGxhbmF0aW9uCistLS0tLS0tLS0tLQorVGhlIENYRiBzZXJ2aWNlIGVuZ2luZSBhbmQgQ1hGIGJpbmRpbmcgY29tcG9uZW50IGFyZSB1c2VkIHRvIGV4cG9zZSB0aGUKK3dlYiBzZXJ2aWNlLiBFYWNoIG9uZSBpcyBwYWNrYWdlZCBpbiBhIHNlcnZpY2UgdW5pdCAoU1UpLCBhcyBmb2xsb3dzOgorCisxLiBDWEYgc2VydmljZSBlbmdpbmUgKHNlZSB0aGUgd3NkbC1maXJzdC1jeGZzZS1zdSBkaXJlY3RvcnkpOgorICAgCisgICAtIENvbnRhaW5zIGEgY29weSBvZiB0aGUgc2VydmljZSBXU0RMIGZpbGUsIHBlcnNvbi53c2RsLCBpbiB0aGUKKyAgICAgc3JjL21haW4vcmVzb3VyY2VzIGRpcmVjdG9yeS4KKyAgIAorICAgLSBUaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBmaWxlLCBQZXJzb25JbXBsLmphdmEsIGluIHRoZQorICAgICBzcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QgZGlyZWN0b3J5LgorICAgICBJdCBjb250YWlucyBKQVgtV1MgYW5ub3RhdGlvbnMgdGhhdCBzcGVjaWZ5IHdoaWNoIHdlYiBzZXJ2aWNlCisgICAgIGl0IGltcGxlbWVudHM6CisKKyAgICAgICBAV2ViU2VydmljZShzZXJ2aWNlTmFtZSA9ICJQZXJzb25TZXJ2aWNlIiwgCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdCIsCisgICAgICAgICAgIGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uIikKKyAgIAorICAgLSBBIGNvbmZpZ3VyYXRpb24gZmlsZSwgeGJlYW4ueG1sLCBsb2NhdGVkIGluIHRoZSBzcmMvbWFpbi9yZXNvdXJjZXMKKyAgICAgZGlyZWN0b3J5LCB3aGljaCBjb25maWd1cmVzIHRoZSBDWEYgZW5kcG9pbnQ6CisgICAgIAorICAgICAgPGN4ZnNlOmVuZHBvaW50PgorICAgICAgICAgIDxjeGZzZTpwb2pvPgorICAgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uSW1wbCIgLz4KKyAgICAgICAgICA8L2N4ZnNlOnBvam8+CisgICAgICA8L2N4ZnNlOmVuZHBvaW50PgorICAgIAorMi4gQ1hGIGJpbmRpbmcgY29tcG9uZW50IChzZWUgdGhlIHdzZGwtZmlyc3QtY3hmYmMtc3UgZGlyZWN0b3J5KToKKworICAgLSBDb250YWlucyBhIGNvcHkgb2YgdGhlIHNlcnZpY2UgV1NETCBmaWxlLCBwZXJzb24ud3NkbCwgaW4gdGhlCisgICAgIHNyYy9tYWluL3Jlc291cmNlcyBkaXJlY3RvcnkuCisgICAgCisgICAtIEEgY29uZmlndXJhdGlvbiBmaWxlLCB4YmVhbi54bWwsIGxvY2F0ZWQgaW4gdGhlIHNyYy9tYWluL3Jlc291cmNlcworICAgICBkaXJlY3RvcnksIHdoaWNoIHNwZWNpZmllcyBhIENYRiBjb25zdW1lciB0aGF0IHdpbGwgYWNjZXB0CisgICAgIGluY29taW5nIGNhbGxzIGZvciB0aGF0IHdlYiBzZXJ2aWNlIGFuZCBwYXNzIHRoZW0gdG8gdGhlIE5NUjoKKworICAgICA8Y3hmYmM6Y29uc3VtZXIgd3NkbD0iY2xhc3NwYXRoOnBlcnNvbi53c2RsIgorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNlcnZpY2U9InBlcnNvbjpQZXJzb25TZXJ2aWNlIgorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEludGVyZmFjZT0icGVyc29uOlBlcnNvbiIvPgorCitMYXN0bHksIE1hdmVuIHVzZXMgdGhlIHBvbS54bWwgZmlsZSwgbG9jYXRlZCBpbiB0aGUgd3NkbC1maXJzdC1jeGYtc2EKK2RpcmVjdG9yeSwgdG8gcGFja2FnZSB0aGUgU1VzIGludG8gYSBKQkkgc2VydmljZSBhc3NlbWJseSAoU0EpIHJlYWR5Citmb3IgZGVwbG95bWVudC4KKworCitQcmVyZXF1aXNpdGVzIGZvciBCdWlsZGluZyBhbmQgUnVubmluZyB0aGlzIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIuCisKKyAgIC0gQXBhY2hlIE1hdmVuIDIuMC45IG9yIGhpZ2hlci4KKworICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgUkVBRE1FIGluIHRoZSB0b3AtbGV2ZWwgZXhhbXBsZXMKKyAgIGRpcmVjdG9yeS4KKworMi4gTGF1bmNoIFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXgJKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4ICAgKG9uIFdpbmRvd3MpCisKKworQnVpbGRpbmcgYW5kIERlcGxveWluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gYnVpbGQgdGhlIGV4YW1wbGUsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgKGZyb20gdGhlCitkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIFJFQURNRSk6CisKKyAgbXZuIGluc3RhbGwKKyAgCitJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIE9TR2kgYnVuZGxlcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgbG9jYWwgTWF2ZW4KK3JlcG9zaXRvcnksIHRoZSBleGFtcGxlIHdpbGwgYnVpbGQgcXVpY2tseS4gT3RoZXJ3aXNlIGl0IG1heSB0YWtlCitzb21lIHRpbWUgZm9yIE1hdmVuIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgaXQgbmVlZHMuCisKK09uY2UgY29tcGxldGUsIHlvdSB3aWxsIGZpbmQgdGhlIFNBLCBjYWxsZWQgd3NkbC1maXJzdC1jeGYtc2EtCiske3ZlcnNpb259LnppcCwgaW4gdGhlIHdzZGwtZmlyc3QtY3hmLXNhL3RhcmdldCBkaXJlY3RvcnkuCisKK1lvdSBjYW4gZGVwbG95IHRoZSBTQSBpbiB0d28gd2F5czoKKworLSBVc2luZyBIb3QgRGVwbG95bWVudAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAKKyAgQ29weSB0aGUgd3NkbC1maXJzdC1jeGYtc2EvdGFyZ2V0L3dzZGwtZmlyc3QtY3hmLXNhLSR7dmVyc2lvbn0uemlwCisgIHRvIHRoZSA8c2VydmljZW1peF9ob21lPi9kZXBsb3kgZGlyZWN0b3J5LgorICAgICAKKy0gVXNpbmcgdGhlIFNlcnZpY2VNaXggQ29uc29sZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorICBFbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgb3NnaTppbnN0YWxsIC1zIG12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGYtc2EvJHt2ZXJzaW9ufS96aXAKKyAKK1lvdSBjYW4gYnJvd3NlIHRoZSBXU0RMIGF0OgorCisgIGh0dHA6Ly9sb2NhbGhvc3Q6ODA5Mi9QZXJzb25TZXJ2aWNlP3dzZGwKKworCitSdW5uaW5nIGEgQ2xpZW50CistLS0tLS0tLS0tLS0tLS0tCitUbyBydW4gdGhlIHdlYiBjbGllbnQ6CisKKzEuIE9wZW4gdGhlIGNsaWVudC5odG1sLCB3aGljaCBpcyBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgYXMgdGhpcyBSRUFETUUgZmlsZSwgaW4geW91ciBmYXZvcml0ZSBicm93c2VyLgorCisyLiBDbGljayB0aGUgU2VuZCBidXR0b24gdG8gc2VuZCBhIHJlcXVlc3QuCisKKyAgIE9uY2UgdGhlIHJlcXVlc3QgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQsIGEgcmVzcG9uc2Ugc2ltaWxhcgorICAgdG8gdGhlIGZvbGxvd2luZyBzaG91bGQgYXBwZWFyIGluIHRoZSByaWdodC1oYW5kIHBhbmVsIG9mIHRoZQorICAgd2ViIHBhZ2U6CisgICAKKyAgIFNUQVRVUzogMjAwCisgICA8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+CisgICAgIDxzb2FwOkJvZHk+PEdldFBlcnNvblJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnLworICAgICBzYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiPjxwZXJzb25JZD53b3JsZDwvcGVyc29uSWQ+CisgICAgIDxzc24+MDAwLTAwMC0wMDAwPC9zc24+PG5hbWU+R3VpbGxhdW1lPC9uYW1lPjwvR2V0UGVyc29uUmVzcG9uc2U+CisgICAgIDwvc29hcDpCb2R5PgorICAgPC9zb2FwOkVudmVsb3BlPgorCitUbyBydW4gdGhlIEphdmEgY29kZSBjbGllbnQ6CisKKzEuIENoYW5nZSB0byB0aGUgPHNlcnZpY2VtaXhfaG9tZT4vZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3QvY2xpZW50CisgICBkaXJlY3RvcnkuCisKKzIuIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgICAgbXZuIGNvbXBpbGUgZXhlYzpqYXZhCisgICAgIAorICAgSWYgdGhlIGNsaWVudCByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIGEgcmVzcG9uc2Ugc2ltaWxhciB0byB0aGUKKyAgIGZvbGxvd2luZyBzaG91bGQgYXBwZWFyIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisgICAgICAgIAorICAgPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZS8iPgorICAgICA8c29hcDpCb2R5PjxHZXRQZXJzb25SZXNwb25zZSB4bWxucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy8KKyAgICAgICBzYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiPjxwZXJzb25JZD53b3JsZDwvcGVyc29uSWQ+CisgICAgICAgPHNzbj4wMDAtMDAwLTAwMDA8L3Nzbj48bmFtZT5HdWlsbGF1bWU8L25hbWU+PC9HZXRQZXJzb25SZXNwb25zZT4KKyAgICAgPC9zb2FwOkJvZHk+CisgICA8L3NvYXA6RW52ZWxvcGU+CisKKworU3RvcHBpbmcgYW5kIFVuaW5zdGFsbGluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCB0aGUgZXhhbXBsZSwgeW91IG11c3QgZmlyc3Qga25vdyB0aGUgYnVuZGxlIElEIHRoYXQgU2VydmljZU1peAoraGFzIGFzc2lnbmVkIHRvIGl0LiBUbyBnZXQgdGhlIGJ1bmRsZSBJRCwgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kCitpbiB0aGUgU2VydmljZU1peCBjb25zb2xlOgorCisgIG9zZ2k6bGlzdAorCitBdCB0aGUgZW5kIG9mIHRoZSBsaXN0aW5nLCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBzaW1pbGFyIHRvIG9uZSBvZgordGhlIGZvbGxvd2luZyAoZGVwZW5kaW5nIG9uIGhvdyB5b3UgZGVwbG95ZWQgdGhlIGV4YW1wbGUpOgorCitbIDE4M10gW0FjdGl2ZSAgICAgXSBbICAgICAgIF0gWyAgICAgXSBbICAgNjBdIG12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGYtc2EvJHt2ZXJzaW9ufS96aXAKKworWyAxODNdIFtBY3RpdmUgICAgIF0gWyAgICAgICBdIFsgICAgIF0gWyAgIDYwXSB3c2RsLWZpcnN0LWN4Zi1zYSAoMC4wLjApCisKK0luIHRoaXMgY2FzZSwgdGhlIGJ1bmRsZSBJRCBpcyAxODMuCisKK1RvIHN0b3AgdGhlIGV4YW1wbGUsIGVudGVyIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiB0aGUgU2VydmljZU1peAorY29uc29sZToKKworICBvc2dpOnN0b3AgPGJ1bmRsZV9pZD4KKworVG8gdW5pbnN0YWxsIHRoZSBleGFtcGxlLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlCitTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgb3NnaTp1bmluc3RhbGwgPGJ1bmRsZV9pZD4KKworCitWaWV3aW5nIHRoZSBMb2cgRW50cmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gdmlldyB0aGUgZW50cmllcyBpbiB0aGUgbG9nIGZpbGUgaW4gdGhlIGRhdGEvbG9nIGRpcmVjdG9yeQorb2YgeW91ciBTZXJ2aWNlTWl4IGluc3RhbGxhdGlvbiwgb3IgYnkgdHlwaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZAoraW4gdGhlIFNlcnZpY2VNaXggY29uc29sZToKKworICBsb2c6ZGlzcGxheQorCisKK0NoYW5naW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb2RlIG9yIGNvbmZpZ3VyYXRpb24sIGp1c3QgdXNlICdtdm4gaW5zdGFsbCcKK3RvIHJlYnVpbGQgdGhlIEpCSSBTZXJ2aWNlIEFzc2VtYmx5IHppcCBmaWxlLCBhbmQgZGVwbG95IGl0IGFzIGJlZm9yZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC9jbGllbnQuaHRtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L2NsaWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZmNiNjMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC9jbGllbnQuaHRtbApAQCAtMCwwICsxLDEzNSBAQAorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPCEtLSAkUmV2OiA1OTMwMDQgJCAkRGF0ZTogMjAwNy0xMS0wOCAwNDowNDo1NCArMDAwMCAoVGh1LCAwOCBOb3YgMjAwNykgJCAtLT4NCis8aHRtbD4NCis8aGVhZD4NCis8dGl0bGU+U2VydmljZU1peCBXU0RMLUZpcnN0IEV4YW1wbGU8L3RpdGxlPg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCit2YXIgdXJsVG9PcGVuID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA5Mi9QZXJzb25TZXJ2aWNlLyI7IC8vZGVmYXVsdCBVUkwgdG8gb3Blbg0KKw0KK2Z1bmN0aW9uIGdldEhUVFBPYmplY3QoKSB7DQorICB2YXIgeG1saHR0cCA9IGZhbHNlOw0KKw0KKyAgLyogQ29tcGlsYXRpb24gY29uZGl0aW9ubmVsbGUgZCdJRSAqLw0KKyAgLypAY2Nfb24NCisgIEBpZiAoQF9qc2NyaXB0X3ZlcnNpb24gPj0gNSkNCisgICAgIHRyeSB7DQorICAgICAgICB4bWxodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7DQorICAgICB9IGNhdGNoIChlKSB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOw0KKyAgICAgICAgfSBjYXRjaCAoRSkgew0KKyAgICAgICAgICAgeG1saHR0cCA9IGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgfQ0KKyAgQGVsc2UNCisgICAgIHhtbGh0dHAgPSBmYWxzZTsNCisgIEBlbmQgQCovDQorDQorICAvKiBvbiBlc3NhaWUgZGUgY3LpZXIgbCdvYmpldCBzaSBjZSBuJ2VzdCBwYXMgZOlq4CBmYWl0ICovDQorICBpZiAoIXhtbGh0dHAgJiYgdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICd1bmRlZmluZWQnKSB7DQorICAgICB0cnkgew0KKyAgICAgICAgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOw0KKyAgICAgfSBjYXRjaCAoZSkgew0KKyAgICAgICAgeG1saHR0cCA9IGZhbHNlOw0KKyAgICAgfQ0KKyAgfQ0KKw0KKyAgaWYgKHhtbGh0dHApIHsNCisgICAgIC8qIG9uIGTpZmluaXQgY2UgcXVpIGRvaXQgc2UgcGFzc2VyIHF1YW5kIGxhIHBhZ2Ugculwb25kcmEgKi8NCisgICAgIHhtbGh0dHAub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCkgew0KKyAgICAgICAgaWYgKHhtbGh0dHAucmVhZHlTdGF0ZSA9PSA0KSB7IC8qIDQgOiDpdGF0ICJjb21wbGV0ZSIgKi8NCisgICAgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOw0KKyAgICAgICAgICAgdmFyIHJlc3BvbnNlU3RhdHVzID0gIiI7DQorICAgICAgICAgICB0cnkgew0KKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9IHhtbGh0dHAuc3RhdHVzICsgIiI7DQorICAgICAgICAgICB9IGNhdGNoIChlKSB7DQorICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0gIkVSUk9SIFdISUxFIFJFVFJJRVZJTkcgU1RBVFVTOyBNQVlCRSBVTkFCTEUgVE8gQ09OTkVDVC4iOw0KKyAgICAgICAgICAgfQ0KKyAgICAgICAgICAgcmVzcG9uc2UudmFsdWUgPSAiU1RBVFVTOiAiICsgcmVzcG9uc2VTdGF0dXMgKyAiXG4iICsgeG1saHR0cC5yZXNwb25zZVRleHQ7DQorICAgICAgICB9DQorICAgICB9DQorICB9DQorICByZXR1cm4geG1saHR0cDsNCit9DQorDQorZnVuY3Rpb24gc2VuZCgpIHsNCisgIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlICE9IHVybFRvT3BlbikgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSAhPSAiIikpIHsNCisgICAgLy91c2UgdXNlciBlbnRyeSBvbmx5IGlmIGl0IGF0IGxlYXN0IGNhbiBiZSBva2F5DQorICAgIHVybFRvT3BlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZTsNCisgIH0gIA0KKyAgdmFyIHhtbGh0dHAgPSBnZXRIVFRQT2JqZWN0KCk7DQorICBpZiAoIXhtbGh0dHApIHsNCisgICAgYWxlcnQoJ2NvdW5kIG5vdCBjcmVhdGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0Jyk7DQorICAgIHJldHVybjsNCisgIH0NCisgIHZhciByZXF1ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlcXVlc3QiKTsNCisgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOw0KKyAgdHJ5IHsNCisgICAgbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoIlVuaXZlcnNhbEJyb3dzZXJSZWFkIFVuaXZlcnNhbEJyb3dzZXJXcml0ZSIpOw0KKyAgfSBjYXRjaCAoZSkgew0KKyAgfQ0KKyAgdHJ5IHsNCisgICAgeG1saHR0cC5vcGVuKCJQT1NUIiwgdXJsVG9PcGVuLCB0cnVlKTsNCisgIH0gY2F0Y2ggKGUpIHsNCisgICAgYWxlcnQoJ2Vycm9yIG9wZW5pbmcnKTsNCisgIH0NCisgIHhtbGh0dHAuc2VuZChyZXF1ZXN0LnZhbHVlKTsNCit9DQorDQorPC9zY3JpcHQ+DQorPC9oZWFkPg0KKw0KKzxib2R5Pg0KKw0KKzxoMT5TZXJ2aWNlTWl4IFdTREwtRmlyc3QgRXhhbXBsZTwvaDE+DQorDQorPHA+V2VsY29tZSB0byB0aGUgV1NETC1GaXJzdCBleGFtcGxlIGZvciBTZXJ2aWNlTWl4PC9wPg0KKw0KKzxwPlBlcmZvcm0gYSBQT1NUIGludG8gdGhlIEhUVFAgYmluZGluZy4gVGhpcyByZXF1aXJlcyBKYXZhU2NyaXB0LjwvcD4gDQorPHA+VGFyZ2V0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNTAiIGlkPSJ1cmxUb09wZW4iIHZhbHVlPSIiPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWUgPSB1cmxUb09wZW47PC9zY3JpcHQ+LjwvcD4NCisgIA0KKzx0YWJsZT4NCisgIDx0cj4NCisgICAgPHRkPg0KKyAgPHRleHRhcmVhIGlkPSJyZXF1ZXN0IiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4IiBvbktleVVwPSJzZW5kKCk7Ij48P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlbnY6RW52ZWxvcGUgeG1sbnM6ZW52PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyINCisgICAgICAgICAgICAgIHhtbG5zOnRucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiPg0KKyAgPGVudjpCb2R5Pg0KKyAgICA8dG5zOkdldFBlcnNvbj4NCisgICAgICA8dG5zOnBlcnNvbklkPndvcmxkPC90bnM6cGVyc29uSWQ+DQorICAgIDwvdG5zOkdldFBlcnNvbj4NCisgIDwvZW52OkJvZHk+DQorPC9lbnY6RW52ZWxvcGU+DQorDQorICA8L3RleHRhcmVhPg0KKyAgICA8L3RkPg0KKyAgICA8dGQ+DQorICA8dGV4dGFyZWEgaWQ9InJlc3BvbnNlIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4Ij4NCisgIDwvdGV4dGFyZWE+DQorICAgIDwvdGQ+DQorICA8L3RyPg0KKyAgPHRyPg0KKyAgICA8dGQgY29sc3Bhbj0yPg0KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlNlbmQiIG9uQ2xpY2s9InNlbmQoKTsiLz4NCisgICAgPC90ZD4NCisgIDwvdHI+DQorPC90YWJsZT4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L2NsaWVudC9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3QvY2xpZW50L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiMTRkOQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L2NsaWVudC9wb20ueG1sCkBAIC0wLDAgKzEsNjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtd3NkbC1maXJzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLXdzZGwtZmlyc3Q8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+d3NkbC1maXJzdC1jbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogV1NETCBGaXJzdCA6OiBDbGllbnQ8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT4xLjU8L3NvdXJjZT4KKyAgICAgICAgICAgICAgICAgICAgPHRhcmdldD4xLjU8L3RhcmdldD4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxtYWluQ2xhc3M+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC5DbGllbnQ8L21haW5DbGFzcz4KKyAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVQbHVnaW5EZXBlbmRlbmNpZXM+ZmFsc2U8L2luY2x1ZGVQbHVnaW5EZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3QvY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9DbGllbnQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L2NsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhMmE5MgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L2NsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QvQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0OworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKKworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC51dGlsLkZpbGVVdGlsOworCitwdWJsaWMgY2xhc3MgQ2xpZW50eworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgbmV3IENsaWVudCgpLnNlbmRSZXF1ZXN0KCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNlbmRSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA5Mi9QZXJzb25TZXJ2aWNlLyIpCisgICAgICAgICAgICAgICAgLm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGNvbm5lY3Rpb24uc2V0RG9JbnB1dCh0cnVlKTsKKyAgICAgICAgY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKKyAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gY29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgLy8gUG9zdCB0aGUgcmVxdWVzdCBmaWxlLgorICAgICAgICBJbnB1dFN0cmVhbSBmaXMgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgib3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9yZXF1ZXN0LnhtbCIpOworICAgICAgICBGaWxlVXRpbC5jb3B5SW5wdXRTdHJlYW0oZmlzLCBvcyk7CisgICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlLgorICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIEZpbGVVdGlsLmNvcHlJbnB1dFN0cmVhbShpcywgYmFvcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhlIHJlc3BvbnNlIGlzID09PT09PiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmFvcy50b1N0cmluZygpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9yZXF1ZXN0LnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9yZXF1ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTU2ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3QvY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy93c2RsX2ZpcnN0L3JlcXVlc3QueG1sCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlbnY6RW52ZWxvcGUgeG1sbnM6ZW52PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIKKyAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdC90eXBlcyI+CisgIDxlbnY6Qm9keT4KKyAgICA8dG5zOkdldFBlcnNvbj4KKyAgICAgIDx0bnM6cGVyc29uSWQ+d29ybGQ8L3RuczpwZXJzb25JZD4KKyAgICA8L3RuczpHZXRQZXJzb24+CisgIDwvZW52OkJvZHk+Cis8L2VudjpFbnZlbG9wZT4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNmU5NDkKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC9wb20ueG1sCkBAIC0wLDAgKzEsNzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5jeGYtd3NkbC1maXJzdDwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBDWEYgV1NETCBGaXJzdDwvbmFtZT4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCisgICAgPG1vZHVsZXM+CisgICAgICAgIDxtb2R1bGU+d3NkbC1maXJzdC1jeGZzZS1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPndzZGwtZmlyc3QtY3hmYmMtc3U8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT53c2RsLWZpcnN0LWN4Zi1zYTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmNsaWVudDwvbW9kdWxlPgorICAgIDwvbW9kdWxlcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hc3NlbWJseS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGluaGVyaXRlZD5mYWxzZTwvaW5oZXJpdGVkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnNyYzwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2luZ2xlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc2NyaXB0b3I+c3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbDwvZGVzY3JpcHRvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvc3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3NyYy9tYWluL2Fzc2VtYmx5L3NyYy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2Mzc0MgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3NyYy9tYWluL2Fzc2VtYmx5L3NyYy54bWwKQEAgLTAsMCArMSwzOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKw0KKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisNCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCistLT4NCis8YXNzZW1ibHk+DQorICA8aWQ+c3JjPC9pZD4NCisgIDxmb3JtYXRzPg0KKyAgICA8Zm9ybWF0PnRhci5nejwvZm9ybWF0Pg0KKyAgICA8Zm9ybWF0PnppcDwvZm9ybWF0Pg0KKyAgPC9mb3JtYXRzPg0KKyAgPGZpbGVTZXRzPg0KKyAgICA8ZmlsZVNldD4NCisgICAgICA8aW5jbHVkZXM+DQorICAgICAgICA8aW5jbHVkZT5SRUFETUUqPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+TElDRU5TRSo8L2luY2x1ZGU+DQorICAgICAgICA8aW5jbHVkZT5OT1RJQ0UqPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+cG9tLnhtbDwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPiouaHRtbDwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPnNyYy8qKi8qPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+Ki9wb20ueG1sPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+Ki9zcmMvKiovKjwvaW5jbHVkZT4NCisgICAgICA8L2luY2x1ZGVzPg0KKyAgICA8L2ZpbGVTZXQ+DQorICA8L2ZpbGVTZXRzPg0KKzwvYXNzZW1ibHk+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGYtc2EvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3dzZGwtZmlyc3QtY3hmLXNhL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhYzA0OQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3dzZGwtZmlyc3QtY3hmLXNhL3BvbS54bWwKQEAgLTAsMCArMSw1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmN4Zi13c2RsLWZpcnN0PC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYtd3NkbC1maXJzdDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD53c2RsLWZpcnN0LWN4Zi1zYTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLWFzc2VtYmx5PC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogV1NETCBGaXJzdCA6OiBTQTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi13c2RsLWZpcnN0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3NkbC1maXJzdC1jeGZzZS1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYtd3NkbC1maXJzdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndzZGwtZmlyc3QtY3hmYmMtc3U8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGZiYy1zdS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGZiYy1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzMzN2IKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZmJjLXN1L3BvbS54bWwKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmN4Zi13c2RsLWZpcnN0PC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYtd3NkbC1maXJzdDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD53c2RsLWZpcnN0LWN4ZmJjLXN1PC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+amJpLXNlcnZpY2UtdW5pdDwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IFdTREwgRmlyc3QgOjogQ1hGIEJDIFNVPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWN4Zi1iYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGZiYy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvcGVyc29uLndzZGwgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZmJjLXN1L3NyYy9tYWluL3Jlc291cmNlcy9wZXJzb24ud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdjNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGZiYy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvcGVyc29uLndzZGwKQEAgLTAsMCArMSw5OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgIA0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgDQorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICANCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8IS0tICRSZXY6IDU5MzAwNCAkICREYXRlOiAyMDA3LTExLTA4IDA0OjA0OjU0ICswMDAwIChUaHUsIDA4IE5vdiAyMDA3KSAkIC0tPg0KKzx3c2RsOmRlZmluaXRpb25zIG5hbWU9IndzZGwtZmlyc3QiDQorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KKyAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIg0KKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczp0bnM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0Ig0KKyAgICB4bWxuczp0eXBlbnM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIg0KKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0Ij4NCisNCisgICAgPHdzZGw6dHlwZXM+DQorICAgICAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIg0KKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPg0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJHZXRQZXJzb24iPg0KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4NCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iR2V0UGVyc29uUmVzcG9uc2UiPg0KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNzbiIgdHlwZT0ieHNkOnN0cmluZyIvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4NCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVW5rbm93blBlcnNvbkZhdWx0Ij4NCisgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+DQorICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwZXJzb25JZCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KKyAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+DQorICAgICAgICA8L3hzZDpzY2hlbWE+DQorICA8L3dzZGw6dHlwZXM+DQorICAgIA0KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IkdldFBlcnNvblJlcXVlc3QiPg0KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0eXBlbnM6R2V0UGVyc29uIi8+DQorICAgIDwvd3NkbDptZXNzYWdlPg0KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IkdldFBlcnNvblJlc3BvbnNlIj4NCisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idHlwZW5zOkdldFBlcnNvblJlc3BvbnNlIi8+DQorICAgIDwvd3NkbDptZXNzYWdlPg0KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IlVua25vd25QZXJzb25GYXVsdCI+DQorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InR5cGVuczpVbmtub3duUGVyc29uRmF1bHQiLz4NCisgICAgPC93c2RsOm1lc3NhZ2U+DQorDQorICAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBlcnNvbiI+DQorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iR2V0UGVyc29uIj4NCisgICAgICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6R2V0UGVyc29uUmVxdWVzdCIvPg0KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6R2V0UGVyc29uUmVzcG9uc2UiLz4NCisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJVbmtub3duUGVyc29uIiBtZXNzYWdlPSJ0bnM6VW5rbm93blBlcnNvbkZhdWx0Ii8+DQorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPg0KKyAgICA8L3dzZGw6cG9ydFR5cGU+DQorICAgIA0KKyAgICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBlcnNvblNPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6UGVyc29uIj4NCisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4NCisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJHZXRQZXJzb24iPg0KKyAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+DQorICAgICAgICAgICAgPHdzZGw6b3V0cHV0Pg0KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0Pg0KKyAgICAgICAgICAgIDx3c2RsOmZhdWx0IG5hbWU9IlVua25vd25QZXJzb24iPg0KKyAgICAgICAgICAgICAgICA8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9IlVua25vd25QZXJzb24iIC8+DQorICAgICAgICAgICAgPC93c2RsOmZhdWx0Pg0KKyAgICAgICA8L3dzZGw6b3BlcmF0aW9uPg0KKyAgIDwvd3NkbDpiaW5kaW5nPg0KKw0KKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlBlcnNvblNlcnZpY2UiPg0KKyAgICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6UGVyc29uU09BUEJpbmRpbmciIG5hbWU9InNvYXAiPg0KKyAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDkyL1BlcnNvblNlcnZpY2UvIiAvPg0KKyAgICAgICA8L3dzZGw6cG9ydD4NCisgICA8L3dzZGw6c2VydmljZT4NCisNCis8L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGZiYy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGZiYy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZTE0OTMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZmJjLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKw0KKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisNCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8YmVhbnMgeG1sbnM6Y3hmYmM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvY3hmYmMvMS4wIg0KKyAgICAgICB4bWxuczpwZXJzb249Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0Ij4NCisNCisgIDxjeGZiYzpjb25zdW1lciB3c2RsPSJjbGFzc3BhdGg6cGVyc29uLndzZGwiDQorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNlcnZpY2U9InBlcnNvbjpQZXJzb25TZXJ2aWNlIg0KKyAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRJbnRlcmZhY2U9InBlcnNvbjpQZXJzb24iLz4NCisNCis8L2JlYW5zPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3dzZGwtZmlyc3QtY3hmc2Utc3UvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3dzZGwtZmlyc3QtY3hmc2Utc3UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc3ZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvY3hmLXdzZGwtZmlyc3Qvd3NkbC1maXJzdC1jeGZzZS1zdS9wb20ueG1sCkBAIC0wLDAgKzEsMTE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXdzZGwtZmlyc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi13c2RsLWZpcnN0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPndzZGwtZmlyc3QtY3hmc2Utc3U8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5qYmktc2VydmljZS11bml0PC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogV1NETCBGaXJzdCA6OiBDWEYgU0UgU1U8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtY3hmLXNlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLndzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4d3MtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYW5ub3RhdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+anNyMjUwLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC54bWwuc29hcDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2Fhai1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLnN0cmVhbTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLmJpbmQ8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheGItYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4LnhtbC5iaW5kPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc3IxNzNfYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4Lmp3czwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+anNyMTgxLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5qd3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjE4MTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c291cmNlPjEuNTwvc291cmNlPgorICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuNTwvdGFyZ2V0PgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtY29kZWdlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlUm9vdD4ke2Jhc2VkaXJ9L3RhcmdldC9qYXh3czwvc291cmNlUm9vdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbE9wdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsT3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw+JHtiYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXMvcGVyc29uLndzZGw8L3dzZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0cmFhcmdzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRyYWFyZz4tdmVyYm9zZTwvZXh0cmFhcmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dHJhYXJncz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsT3B0aW9uPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsT3B0aW9ucz4KKworICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzZGwyamF2YTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZnNlLXN1L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9QZXJzb25JbXBsLmphdmEgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZnNlLXN1L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9QZXJzb25JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4ZDdkMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3dzZGwtZmlyc3QtY3hmc2Utc3Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy93c2RsX2ZpcnN0L1BlcnNvbkltcGwuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0Ow0KKw0KK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsNCitpbXBvcnQgamF2YXgueG1sLndzLkhvbGRlcjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC50eXBlcy5HZXRQZXJzb247DQoraW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QudHlwZXMuR2V0UGVyc29uUmVzcG9uc2U7DQorDQorQFdlYlNlcnZpY2Uoc2VydmljZU5hbWUgPSAiUGVyc29uU2VydmljZSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdCIsIGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uIikNCitwdWJsaWMgY2xhc3MgUGVyc29uSW1wbCBpbXBsZW1lbnRzIFBlcnNvbiB7DQorDQorICAgIHB1YmxpYyB2b2lkIGdldFBlcnNvbihIb2xkZXI8U3RyaW5nPiBwZXJzb25JZCwgSG9sZGVyPFN0cmluZz4gc3NuLCBIb2xkZXI8U3RyaW5nPiBuYW1lKQ0KKyAgICAgICAgdGhyb3dzIFVua25vd25QZXJzb25GYXVsdA0KKyAgICB7DQorICAgICAgICBpZiAocGVyc29uSWQudmFsdWUgPT0gbnVsbCB8fCBwZXJzb25JZC52YWx1ZS5sZW5ndGgoKSA9PSAwKSB7DQorICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC50eXBlcy5Vbmtub3duUGVyc29uRmF1bHQgZmF1bHQgPSBuZXcgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC50eXBlcy5Vbmtub3duUGVyc29uRmF1bHQoKTsNCisgICAgICAgICAgICBmYXVsdC5zZXRQZXJzb25JZChwZXJzb25JZC52YWx1ZSk7DQorICAgICAgICAgICAgdGhyb3cgbmV3IFVua25vd25QZXJzb25GYXVsdChudWxsLCBmYXVsdCk7DQorICAgICAgICB9DQorICAgICAgICBuYW1lLnZhbHVlID0gIkd1aWxsYXVtZSI7DQorICAgICAgICBzc24udmFsdWUgPSAiMDAwLTAwMC0wMDAwIjsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZnNlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9wZXJzb24ud3NkbCBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3dzZGwtZmlyc3QtY3hmc2Utc3Uvc3JjL21haW4vcmVzb3VyY2VzL3BlcnNvbi53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmN2M0YTUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZnNlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9wZXJzb24ud3NkbApAQCAtMCwwICsxLDk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICANCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgIA0KKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKw0KKy0tPg0KKzwhLS0gJFJldjogNTkzMDA0ICQgJERhdGU6IDIwMDctMTEtMDggMDQ6MDQ6NTQgKzAwMDAgKFRodSwgMDggTm92IDIwMDcpICQgLS0+DQorPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0id3NkbC1maXJzdCINCisgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iDQorICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iDQorICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOnRucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiDQorICAgIHhtbG5zOnR5cGVucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiDQorICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiPg0KKw0KKyAgICA8d3NkbDp0eXBlcz4NCisgICAgICAgIDx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiDQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+DQorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkdldFBlcnNvbiI+DQorICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPg0KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icGVyc29uSWQiIHR5cGU9InhzZDpzdHJpbmciLz4NCisgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisgICAgICAgICAgICA8L3hzZDplbGVtZW50Pg0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJHZXRQZXJzb25SZXNwb25zZSI+DQorICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPg0KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icGVyc29uSWQiIHR5cGU9InhzZDpzdHJpbmciLz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3NuIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4NCisgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisgICAgICAgICAgICA8L3hzZDplbGVtZW50Pg0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVbmtub3duUGVyc29uRmF1bHQiPg0KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4NCisgICAgICAgIDwveHNkOnNjaGVtYT4NCisgIDwvd3NkbDp0eXBlcz4NCisgICAgDQorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iR2V0UGVyc29uUmVxdWVzdCI+DQorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InR5cGVuczpHZXRQZXJzb24iLz4NCisgICAgPC93c2RsOm1lc3NhZ2U+DQorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iR2V0UGVyc29uUmVzcG9uc2UiPg0KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0eXBlbnM6R2V0UGVyc29uUmVzcG9uc2UiLz4NCisgICAgPC93c2RsOm1lc3NhZ2U+DQorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iVW5rbm93blBlcnNvbkZhdWx0Ij4NCisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idHlwZW5zOlVua25vd25QZXJzb25GYXVsdCIvPg0KKyAgICA8L3dzZGw6bWVzc2FnZT4NCisNCisgICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iUGVyc29uIj4NCisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJHZXRQZXJzb24iPg0KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpHZXRQZXJzb25SZXF1ZXN0Ii8+DQorICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpHZXRQZXJzb25SZXNwb25zZSIvPg0KKyAgICAgICAgICAgIDx3c2RsOmZhdWx0IG5hbWU9IlVua25vd25QZXJzb24iIG1lc3NhZ2U9InRuczpVbmtub3duUGVyc29uRmF1bHQiLz4NCisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+DQorICAgIDwvd3NkbDpwb3J0VHlwZT4NCisgICAgDQorICAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iUGVyc29uU09BUEJpbmRpbmciIHR5cGU9InRuczpQZXJzb24iPg0KKyAgICAgICAgPHNvYXA6YmluZGluZyBzdHlsZT0iZG9jdW1lbnQiIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiAvPg0KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9IkdldFBlcnNvbiI+DQorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+DQorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4NCisgICAgICAgICAgICA8d3NkbDpvdXRwdXQ+DQorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPg0KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+DQorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iVW5rbm93blBlcnNvbiI+DQorICAgICAgICAgICAgICAgIDxzb2FwOmZhdWx0IHVzZT0ibGl0ZXJhbCIgbmFtZT0iVW5rbm93blBlcnNvbiIgLz4NCisgICAgICAgICAgICA8L3dzZGw6ZmF1bHQ+DQorICAgICAgIDwvd3NkbDpvcGVyYXRpb24+DQorICAgPC93c2RsOmJpbmRpbmc+DQorDQorICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iUGVyc29uU2VydmljZSI+DQorICAgICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpQZXJzb25TT0FQQmluZGluZyIgbmFtZT0ic29hcCI+DQorICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwOTIvUGVyc29uU2VydmljZS8iIC8+DQorICAgICAgIDwvd3NkbDpwb3J0Pg0KKyAgIDwvd3NkbDpzZXJ2aWNlPg0KKw0KKzwvd3NkbDpkZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZnNlLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwgYi90cnVuay9leGFtcGxlcy9jeGYtd3NkbC1maXJzdC93c2RsLWZpcnN0LWN4ZnNlLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0MDg1MAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2N4Zi13c2RsLWZpcnN0L3dzZGwtZmlyc3QtY3hmc2Utc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICANCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgIA0KKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKw0KKy0tPg0KKzxiZWFucyB4bWxuczpjeGZzZT0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9jeGZzZS8xLjAiPg0KKw0KKyAgICA8Y3hmc2U6ZW5kcG9pbnQ+DQorICAgICAgICA8Y3hmc2U6cG9qbz4NCisgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QuUGVyc29uSW1wbCIgLz4NCisgICAgICAgIDwvY3hmc2U6cG9qbz4NCisgICAgPC9jeGZzZTplbmRwb2ludD4NCisNCis8L2JlYW5zPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTJkY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1oYW5kbGVyLWNmZy9wb20ueG1sCkBAIC0wLDAgKzEsMTA0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1oYW5kbGVyLWNmZzwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IGlUZXN0cyA6OiBDWEYgU09BUCBIYW5kbGVyIE9TR2k8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWZyb250ZW5kLWpheHdzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby13cy1tZXRhZGF0YV8yLjBfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLWNvZGVnZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmdlbmVyYXRlLXRlc3Qtc291cmNlczwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlUm9vdD4ke2Jhc2VkaXJ9L3RhcmdldC9nZW5lcmF0ZWQvc3JjL21haW4vamF2YTwvc291cmNlUm9vdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbE9wdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsT3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGw+JHtiYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9hZGROdW1iZXJzLndzZGw8L3dzZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3NkbE9wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzZGwyamF2YTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguandzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5zb2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLndzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC53cy5oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC53cy5oYW5kbGVyLnNvYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4Zi5vc2dpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMuc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQuaHR0cF9vc2dpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvSW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8UmVxdWlyZS1CdW5kbGU+b3JnLmFwYWNoZS5jeGYuYnVuZGxlPC9SZXF1aXJlLUJ1bmRsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT5vcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycy50eXBlcyxvcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycyxvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLnNwcmluZ2NmZ2hhbmRsZXI8L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3NwcmluZ2NmZ2hhbmRsZXIvQWRkTnVtYmVyc0ltcGwuamF2YSBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3NwcmluZ2NmZ2hhbmRsZXIvQWRkTnVtYmVyc0ltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjIxNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1oYW5kbGVyLWNmZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvc3ByaW5nY2ZnaGFuZGxlci9BZGROdW1iZXJzSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuc3ByaW5nY2ZnaGFuZGxlcjsKKworaW1wb3J0IGphdmF4Lmp3cy5IYW5kbGVyQ2hhaW47CitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CitpbXBvcnQgb3JnLmFwYWNoZS5zcHJpbmdjZmcuaGFuZGxlcnMuQWRkTnVtYmVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycy5BZGROdW1iZXJzRmF1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zcHJpbmdjZmcuaGFuZGxlcnMudHlwZXMuRmF1bHREZXRhaWw7CisKKworQFdlYlNlcnZpY2UobmFtZSA9ICJBZGROdW1iZXJzIiwKKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vYXBhY2hlLm9yZy9oYW5kbGVycyIsCisgICAgICAgICAgICBwb3J0TmFtZSA9ICJBZGROdW1iZXJzUG9ydCIsCisgICAgICAgICAgICBlbmRwb2ludEludGVyZmFjZSA9ICJvcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycy5BZGROdW1iZXJzIiwKKyAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gIkFkZE51bWJlcnNTZXJ2aWNlIikKKworcHVibGljIGNsYXNzIEFkZE51bWJlcnNJbXBsIGltcGxlbWVudHMgQWRkTnVtYmVycyB7CisKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBudW1iZXIxCisgICAgICogQHBhcmFtIG51bWJlcjIKKyAgICAgKiBAcmV0dXJuIFRoZSBzdW0KKyAgICAgKiBAdGhyb3dzIEFkZE51bWJlcnNFeGNlcHRpb24KKyAgICAgKiAgICAgICAgICAgICBpZiBhbnkgb2YgdGhlIG51bWJlcnMgdG8gYmUgYWRkZWQgaXMgbmVnYXRpdmUuCisgICAgICovCisgICAgcHVibGljIGludCBhZGROdW1iZXJzKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgdGhyb3dzIEFkZE51bWJlcnNGYXVsdCB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWRkTnVtYmVycyBjYWxsZWQuLi4uLiIgKyBudW1iZXIxICsgIjoiICsgbnVtYmVyMik7CisgICAgICAgIGlmIChudW1iZXIxIDwgMCB8fCBudW1iZXIyIDwgMCkgeworICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiTmVnYXRpdmUgbnVtYmVyIGNhbnQgYmUgYWRkZWQhIjsKKyAgICAgICAgICAgIFN0cmluZyBkZXRhaWwgPSAiTnVtYmVyczogIiArIG51bWJlcjEgKyAiLCAiICsgbnVtYmVyMjsKKyAgICAgICAgICAgIEZhdWx0RGV0YWlsIGZhdWx0ID0gbmV3IEZhdWx0RGV0YWlsKCk7CisgICAgICAgICAgICBmYXVsdC5zZXRNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgICAgZmF1bHQuc2V0RmF1bHRJbmZvKGRldGFpbCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWRkTnVtYmVyc0ZhdWx0KG1lc3NhZ2UsIGZhdWx0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVtYmVyMSArIG51bWJlcjI7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWhhbmRsZXItY2ZnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zcHJpbmdjZmdoYW5kbGVyL01vZGlmeU51bWJlckhhbmRsZXIuamF2YSBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3NwcmluZ2NmZ2hhbmRsZXIvTW9kaWZ5TnVtYmVySGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjMzYzgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWhhbmRsZXItY2ZnL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zcHJpbmdjZmdoYW5kbGVyL01vZGlmeU51bWJlckhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDc2IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5zcHJpbmdjZmdoYW5kbGVyOworCisKK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCQ29udGV4dDsKK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCRWxlbWVudDsKK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC53cy5Mb2dpY2FsTWVzc2FnZTsKK2ltcG9ydCBqYXZheC54bWwud3MuUHJvdG9jb2xFeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLndzLmhhbmRsZXIuTG9naWNhbEhhbmRsZXI7CitpbXBvcnQgamF2YXgueG1sLndzLmhhbmRsZXIuTG9naWNhbE1lc3NhZ2VDb250ZXh0OworaW1wb3J0IGphdmF4LnhtbC53cy5oYW5kbGVyLk1lc3NhZ2VDb250ZXh0OworCitpbXBvcnQgb3JnLmFwYWNoZS5zcHJpbmdjZmcuaGFuZGxlcnMudHlwZXMuQWRkTnVtYmVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycy50eXBlcy5PYmplY3RGYWN0b3J5OworCisKKy8qKgorICogaGFuZGxlcyBhZGRpdGlvbiBvZiBzbWFsbCBudW1iZXJzLgorICovCitwdWJsaWMgY2xhc3MgTW9kaWZ5TnVtYmVySGFuZGxlciBpbXBsZW1lbnRzIExvZ2ljYWxIYW5kbGVyPExvZ2ljYWxNZXNzYWdlQ29udGV4dD4geworCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShMb2dpY2FsTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQpIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkxvZ2ljYWxNZXNzYWdlSGFuZGxlciBoYW5kbGVNZXNzYWdlIGNhbGxlZCIpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBnZXQgdGhlIExvZ2ljYWxNZXNzYWdlIGZyb20gb3VyIGNvbnRleHQKKyAgICAgICAgICAgIExvZ2ljYWxNZXNzYWdlIG1zZyA9IG1lc3NhZ2VDb250ZXh0LmdldE1lc3NhZ2UoKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBheWxvYWQsIGlmIGl0cyBhbiBBZGROdW1iZXJzIHJlcXVlc3QsIHdlJ2xsIGludGVydmVuZQorICAgICAgICAgICAgSkFYQkNvbnRleHQgamF4YkNvbnRleHQgPSBKQVhCQ29udGV4dC5uZXdJbnN0YW5jZShPYmplY3RGYWN0b3J5LmNsYXNzKTsKKyAgICAgICAgICAgIE9iamVjdCBwYXlsb2FkID0gbXNnLmdldFBheWxvYWQoamF4YkNvbnRleHQpOworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gcGF5bG9hZDsKKyAgICAgICAgICAgIGlmIChwYXlsb2FkIGluc3RhbmNlb2YgSkFYQkVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICgoSkFYQkVsZW1lbnQpcGF5bG9hZCkuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQWRkTnVtYmVycykgeworICAgICAgICAgICAgICAgIEFkZE51bWJlcnMgcmVxID0gKEFkZE51bWJlcnMpdmFsdWU7CisKKyAgICAgICAgICAgICAgICBpbnQgYSA9IHJlcS5nZXRBcmcwKCk7CisgICAgICAgICAgICAgICAgcmVxLnNldEFyZzAoYSAqIDEwKTsKKyAgICAgICAgICAgICAgICBtc2cuc2V0UGF5bG9hZChwYXlsb2FkLCBqYXhiQ29udGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoSkFYQkV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFByb3RvY29sRXhjZXB0aW9uKGV4KTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFuZGxlRmF1bHQoTG9naWNhbE1lc3NhZ2VDb250ZXh0IG1lc3NhZ2VDb250ZXh0KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGN0eCkgeworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1oYW5kbGVyLWNmZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2ZGZlYgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKQEAgLTAsMCArMSw2OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFNUQVJUIFNOSVBQRVQ6IGJlYW5zIC0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4bWxuczpjeGY9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9jb3JlIiAKKyAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QKKyAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2NvcmUgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvY29yZS54c2QgCisgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QKKyAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS9zcHJpbmctb3NnaS54c2QiPgorCisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1zb2FwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24taHR0cC54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9vc2dpL2N4Zi1leHRlbnNpb24tb3NnaS54bWwiIC8+CisKKyAgICA8amF4d3M6ZW5kcG9pbnQgaWQ9IlNvYXBIYW5kbGVyRW5kcG9pbnQiCisgICAgICAgIGltcGxlbWVudG9yPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLnNwcmluZ2NmZ2hhbmRsZXIuQWRkTnVtYmVyc0ltcGwiCisgICAgICAgIGFkZHJlc3M9Ii9TcHJpbmdDb25maWdIYW5kbGVyIgorICAgICAgICB3c2RsTG9jYXRpb249IndzZGwvYWRkTnVtYmVycy53c2RsIgorICAgICAgICBlbmRwb2ludE5hbWU9ImU6QWRkTnVtYmVyc1BvcnQiCisgICAgICAgIHNlcnZpY2VOYW1lPSJzOkFkZE51bWJlcnNTZXJ2aWNlIgorICAgICAgICB4bWxuczplPSJodHRwOi8vYXBhY2hlLm9yZy9zcHJpbmdjZmcvaGFuZGxlcnMiCisgICAgICAgICAgICB4bWxuczpzPSJodHRwOi8vYXBhY2hlLm9yZy9zcHJpbmdjZmcvaGFuZGxlcnMiPgorICAgICAgICA8amF4d3M6aGFuZGxlcnM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5zcHJpbmdjZmdoYW5kbGVyLk1vZGlmeU51bWJlckhhbmRsZXIiLz4KKyAgICAgICAgICAgIDwvamF4d3M6aGFuZGxlcnM+CisgICAgICAgIDwvamF4d3M6ZW5kcG9pbnQ+CisKKyAgICAgICAKKyAgICAgICA8amF4d3M6Y2xpZW50IGlkPSJjbGllbnQiIAorICAgICAgICAgICAgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5zcHJpbmdjZmcuaGFuZGxlcnMuQWRkTnVtYmVycyIgICAgCisgICAgICAgIGVuZHBvaW50TmFtZT0iZTpBZGROdW1iZXJzUG9ydCIKKyAgICAgICAgc2VydmljZU5hbWU9InM6QWRkTnVtYmVyc1NlcnZpY2UiCisgICAgICAgIHhtbG5zOmU9Imh0dHA6Ly9hcGFjaGUub3JnL3NwcmluZ2NmZy9oYW5kbGVycyIKKyAgICAgICAgICAgIHhtbG5zOnM9Imh0dHA6Ly9hcGFjaGUub3JnL3NwcmluZ2NmZy9oYW5kbGVycyIKKyAgICAgICAgICAgICB3c2RsTG9jYXRpb249IndzZGwvYWRkTnVtYmVycy53c2RsIgorICAgICAgICAgICAgIGFkZHJlc3M9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jeGYvU3ByaW5nQ29uZmlnSGFuZGxlciI+CisgICAgICAgICAgICAgPGpheHdzOmhhbmRsZXJzPgorICAgICAgICAgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuc3ByaW5nY2ZnaGFuZGxlci5Nb2RpZnlOdW1iZXJIYW5kbGVyIi8+CisgICAgICAgICAgICA8L2pheHdzOmhhbmRsZXJzPgorICAgICAgICAgPC9qYXh3czpjbGllbnQ+CisgCisgICAgICAgPG9zZ2k6c2VydmljZSBpZD0idGVzdFNwcmluZ0NmZ0hhbmRsZXIiIHJlZj0iY2xpZW50IgorICAgICAgICAgICAgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycy5BZGROdW1iZXJzIi8+CisKKyAgICAgICAKKzwvYmVhbnM+Cis8IS0tIEVORCBTTklQUEVUOiBiZWFucyAtLT4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvYWRkTnVtYmVycy53c2RsIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1oYW5kbGVyLWNmZy9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9hZGROdW1iZXJzLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmMjM1MgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaGFuZGxlci1jZmcvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvYWRkTnVtYmVycy53c2RsCkBAIC0wLDAgKzEsOTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGRlZmluaXRpb25zCisgICAgbmFtZT0iQWRkTnVtYmVycyIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9hcGFjaGUub3JnL3NwcmluZ2NmZy9oYW5kbGVycyIKKyAgICB4bWxuczp0bnM9Imh0dHA6Ly9hcGFjaGUub3JnL3NwcmluZ2NmZy9oYW5kbGVycyIKKyAgICB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgorICAgIHhtbG5zOngxPSJodHRwOi8vYXBhY2hlLm9yZy9zcHJpbmdjZmcvaGFuZGxlcnMvdHlwZXMiPgorICAgIDx0eXBlcz4KKyAgICAgICAgPHhzZDpzY2hlbWEKKyAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcvc3ByaW5nY2ZnL2hhbmRsZXJzL3R5cGVzIgorICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisgICAgICAgICAgICA8Y29tcGxleFR5cGUgbmFtZT0iYWRkTnVtYmVyc1Jlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJldHVybiIgdHlwZT0ieHNkOmludCIgLz4KKyAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFkZE51bWJlcnNSZXNwb25zZSIgdHlwZT0ieDE6YWRkTnVtYmVyc1Jlc3BvbnNlIi8+CisKKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJhZGROdW1iZXJzIj4KKyAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InhzZDppbnQiIC8+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFyZzEiIHR5cGU9InhzZDppbnQiIC8+CisgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJhZGROdW1iZXJzIiB0eXBlPSJ4MTphZGROdW1iZXJzIi8+CisKKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkZhdWx0RGV0YWlsIiB0eXBlPSJ4MTpGYXVsdERldGFpbCIgLz4KKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJGYXVsdERldGFpbCI+CisgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJmYXVsdEluZm8iIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgIDwveHNkOnNjaGVtYT4KKyAgICA8L3R5cGVzPgorICAgIDxtZXNzYWdlIG5hbWU9ImFkZE51bWJlcnMiPgorICAgICAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ4MTphZGROdW1iZXJzIiAvPgorICAgIDwvbWVzc2FnZT4KKyAgICA8bWVzc2FnZSBuYW1lPSJhZGROdW1iZXJzUmVzcG9uc2UiPgorICAgICAgICA8cGFydCBuYW1lPSJyZXN1bHQiIGVsZW1lbnQ9IngxOmFkZE51bWJlcnNSZXNwb25zZSIgLz4KKyAgICA8L21lc3NhZ2U+CisgICAgPG1lc3NhZ2UgbmFtZT0iYWRkTnVtYmVyc0ZhdWx0Ij4KKyAgICAgICAgPHBhcnQgbmFtZT0iQWRkTnVtYmVyc0ZhdWx0IiBlbGVtZW50PSJ4MTpGYXVsdERldGFpbCIgLz4KKyAgICA8L21lc3NhZ2U+CisgICAgPHBvcnRUeXBlIG5hbWU9IkFkZE51bWJlcnMiPgorICAgICAgICA8b3BlcmF0aW9uIG5hbWU9ImFkZE51bWJlcnMiPgorICAgICAgICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczphZGROdW1iZXJzIiAvPgorICAgICAgICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6YWRkTnVtYmVyc1Jlc3BvbnNlIiAvPgorICAgICAgICAgICAgPGZhdWx0IG5hbWU9ImFkZE51bWJlcnNGYXVsdCIgbWVzc2FnZT0idG5zOmFkZE51bWJlcnNGYXVsdCIvPgorICAgICAgICA8L29wZXJhdGlvbj4KKyAgICA8L3BvcnRUeXBlPgorICAgIDxiaW5kaW5nIG5hbWU9IkFkZE51bWJlcnNCaW5kaW5nIiB0eXBlPSJ0bnM6QWRkTnVtYmVycyI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIgLz4KKyAgICAgICAgPG9wZXJhdGlvbiBuYW1lPSJhZGROdW1iZXJzIj4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIC8+CisgICAgICAgICAgICA8aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L2lucHV0PgorICAgICAgICAgICAgPG91dHB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvb3V0cHV0PgorICAgICAgICAgICAgPGZhdWx0IG5hbWU9ImFkZE51bWJlcnNGYXVsdCI+CisgICAgICAgICAgICAgICAgPHNvYXA6ZmF1bHQgbmFtZT0iYWRkTnVtYmVyc0ZhdWx0IiB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L2ZhdWx0PgorICAgICAgICA8L29wZXJhdGlvbj4KKyAgICA8L2JpbmRpbmc+CisgICAgPHNlcnZpY2UgbmFtZT0iQWRkTnVtYmVyc1NlcnZpY2UiPgorICAgICAgICA8cG9ydCBuYW1lPSJBZGROdW1iZXJzUG9ydCIgYmluZGluZz0idG5zOkFkZE51bWJlcnNCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvU3ByaW5nQ29uZmlnSGFuZGxlciIgLz4KKyAgICAgICAgPC9wb3J0PgorICAgIDwvc2VydmljZT4KKzwvZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWh0dHAtb3NnaS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1odHRwLW9zZ2kvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjY3NDRhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1odHRwLW9zZ2kvcG9tLnhtbApAQCAtMCwwICsxLDg1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1odHRwLW9zZ2k8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBpVGVzdHMgOjogQ1hGIE9TR2k8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWZyb250ZW5kLWpheHdzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby13cy1tZXRhZGF0YV8yLjBfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMudGVzdC1jb21tb25zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguandzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC53cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLm9zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmNvbmZpZ3VyYXRpb24uc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5odHRwX29zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEV4cG9ydC1QYWNrYWdlPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGZfaHR0cF9vc2dpPC9FeHBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxSZXF1aXJlLUJ1bmRsZT5vcmcuYXBhY2hlLmN4Zi5idW5kbGU8L1JlcXVpcmUtQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaHR0cC1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zl9odHRwX29zZ2kvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaHR0cC1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zl9odHRwX29zZ2kvSGVsbG9Xb3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTBlNjNiCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1odHRwLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmX2h0dHBfb3NnaS9IZWxsb1dvcmxkSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmX2h0dHBfb3NnaTsKKworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuKjsKKy8vQFdlYlNlcnZpY2UoZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIikKK0BXZWJTZXJ2aWNlKHNlcnZpY2VOYW1lID0gIkhlbGxvV29ybGRJbXBsU2VydmljZSIsCisgICAgICAgICAgICBwb3J0TmFtZSA9ICJIZWxsb1dvcmxkSW1wbFBvcnQiLAorICAgICAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIiwKKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iKQorcHVibGljIGNsYXNzIEhlbGxvV29ybGRJbXBsIGltcGxlbWVudHMgSGVsbG9Xb3JsZCB7CisKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKFN0cmluZyB0ZXh0KSB7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHRleHQ7CisgICAgfQorfQorLy8gRU5EIFNOSVBQRVQ6IHNlcnZpY2UKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaHR0cC1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1odHRwLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjNTA4YgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaHR0cC1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCkBAIC0wLDAgKzEsNjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLSBTVEFSVCBTTklQUEVUOiBiZWFucyAtLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgeG1sbnM6b3NnaT0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCisgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QKKyAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS9zcHJpbmctb3NnaS54c2QiPgorCisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1zb2FwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24taHR0cC54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9vc2dpL2N4Zi1leHRlbnNpb24tb3NnaS54bWwiIC8+CisKKyAgICA8amF4d3M6ZW5kcG9pbnQgaWQ9IkhUVFBFbmRwb2ludCIKKyAgICAgICAgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGZfaHR0cF9vc2dpLkhlbGxvV29ybGRJbXBsIgorICAgICAgICBhZGRyZXNzPSIvSGVsbG9Xb3JsZE9TR2kiCisgICAgICAgIHdzZGxMb2NhdGlvbj0id3NkbC9oZWxsb193b3JsZC53c2RsIgorICAgICAgICBlbmRwb2ludE5hbWU9ImU6SGVsbG9Xb3JsZEltcGxQb3J0IgorICAgICAgICBzZXJ2aWNlTmFtZT0iczpIZWxsb1dvcmxkSW1wbFNlcnZpY2UiCisgICAgICAgIHhtbG5zOmU9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIKKyAgICAgICAgeG1sbnM6cz0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIi8+CisKKworICAgIDxqYXh3czpjbGllbnQgaWQ9ImNsaWVudCIgCisgICAgICAgICBzZXJ2aWNlQ2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZCIgICAgCisgICAgICAgIGVuZHBvaW50TmFtZT0iZTpIZWxsb1dvcmxkSW1wbFBvcnQiCisgICAgICAgIHNlcnZpY2VOYW1lPSJzOkhlbGxvV29ybGRJbXBsU2VydmljZSIKKyAgICAgICAgeG1sbnM6ZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIgorICAgICAgICB4bWxuczpzPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iCisgICAgICAgICB3c2RsTG9jYXRpb249IndzZGwvaGVsbG9fd29ybGQud3NkbCIKKyAgICAgICAgIGFkZHJlc3M9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jeGYvSGVsbG9Xb3JsZE9TR2kiLz4gICAKKyAKKyAgICA8b3NnaTpzZXJ2aWNlIGlkPSJ0ZXN0SGVsbG9Xb3JsZCIgcmVmPSJjbGllbnQiCisgICAgICAgIGludGVyZmFjZT0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIj4KKyAgICAgICAgPG9zZ2k6c2VydmljZS1wcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGVudHJ5IGtleT0iVEVTVC1CVU5ETEUtTkFNRSIgdmFsdWU9ImN4Zi1odHRwLW9zZ2kiIC8+CisgICAgICAgIDwvb3NnaTpzZXJ2aWNlLXByb3BlcnRpZXM+CisgICAgPC9vc2dpOnNlcnZpY2U+CisKKworPC9iZWFucz4KKzwhLS0gRU5EIFNOSVBQRVQ6IGJlYW5zIC0tPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1odHRwLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGQud3NkbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaHR0cC1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2hlbGxvX3dvcmxkLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmNjZiZAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtaHR0cC1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2hlbGxvX3dvcmxkLndzZGwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiIAorICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgCisgICAgICAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIgCisgICAgICAgICAgICAgICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCisgICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgICA8d3NkbDp0eXBlcz4KKyAgICAgICAgPHhzZDpzY2hlbWEgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIiAKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgCisgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIiAKKyAgICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIAorICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzYXlIaSIgdHlwZT0idG5zOnNheUhpIiAvPgorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iYXJnMCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNheUhpUmVzcG9uc2UiIHR5cGU9InRuczpzYXlIaVJlc3BvbnNlIiAvPgorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJyZXR1cm4iIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgPC94c2Q6c2NoZW1hPgorICAgIDwvd3NkbDp0eXBlcz4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpzYXlIaVJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIj4KKyAgICAgICAgPC93c2RsOnBhcnQ+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXlIaSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOnNheUhpIiBuYW1lPSJwYXJhbWV0ZXJzIj4KKyAgICAgICAgPC93c2RsOnBhcnQ+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSGVsbG9Xb3JsZCI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6c2F5SGkiIG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6c2F5SGlSZXNwb25zZSIgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgIDwvd3NkbDpwb3J0VHlwZT4KKyAgICA8d3NkbDpiaW5kaW5nIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG9Xb3JsZCI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIHN0eWxlPSJkb2N1bWVudCIgLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOmJpbmRpbmc+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiPgorICAgICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpIZWxsb1dvcmxkSW1wbFNlcnZpY2VTb2FwQmluZGluZyIgbmFtZT0iSGVsbG9Xb3JsZEltcGxQb3J0Ij4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODE4MS9jeGYvSGVsbG9Xb3JsZCIgLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+Cis8L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWptcy1vc2dpL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWptcy1vc2dpL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4YjViOAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtam1zLW9zZ2kvcG9tLnhtbApAQCAtMCwwICsxLDk3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1qbXMtb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IGlUZXN0cyA6OiBDWEYgSk1TIFRyYW5zcG9ydCBPU0dpPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC1mcm9udGVuZC1qYXh3czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLnRlc3QtY29tbW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLmFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwud3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMuc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmFjdGl2ZW1xLnhiZWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYWN0aXZlbXEuYnJva2VyLnJlZ2lvbi5wb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgudHJhbnNhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5hY3RpdmVtcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmFjdGl2ZW1xLnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5hY3RpdmVtcS51dGlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuYWN0aXZlbXEuYnJva2VyLmpteCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmFjdGl2ZW1xLm5ldHdvcmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5hY3RpdmVtcS5zdG9yZS5hbXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5hY3RpdmVtcS51c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmFjdGl2ZW1xLmJyb2tlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5qbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmptcywgb3JnLnNwcmluZ2ZyYW1ld29yay5qbXMuY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmX2ptc19vc2dpPC9FeHBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxSZXF1aXJlLUJ1bmRsZT5vcmcuYXBhY2hlLmN4Zi5idW5kbGU8L1JlcXVpcmUtQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtam1zLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmX2ptc19vc2dpL0hlbGxvV29ybGRJbXBsLmphdmEgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWptcy1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zl9qbXNfb3NnaS9IZWxsb1dvcmxkSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjhkMWUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWptcy1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zl9qbXNfb3NnaS9IZWxsb1dvcmxkSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmX2ptc19vc2dpOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi4qOworCisvL0BXZWJTZXJ2aWNlKGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZCIpCitAV2ViU2VydmljZShzZXJ2aWNlTmFtZSA9ICJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiLAorICAgICAgICAgICAgcG9ydE5hbWUgPSAiSGVsbG9Xb3JsZEltcGxQb3J0IiwKKyAgICAgICAgICAgIGVuZHBvaW50SW50ZXJmYWNlID0gIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZCIsCisgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIikKK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGQgeworCisgICAgcHVibGljIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCkgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB0ZXh0OworICAgIH0KK30KKy8vIEVORCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWptcy1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYWN0aXZlbXEtYnJva2VyLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtam1zLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9hY3RpdmVtcS1icm9rZXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlY2IyOTMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLWptcy1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYWN0aXZlbXEtYnJva2VyLnhtbApAQCAtMCwwICsxLDEzMyBAQAorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmVhbnMKKyAgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgIHhtbG5zOmFtcT0iaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvc2NoZW1hL2NvcmUiCisgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgIHhtbG5zOm9zZ2k9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaSIKKyAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLTIuMC54c2QKKyAgaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvc2NoZW1hL2NvcmUgaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvc2NoZW1hL2NvcmUvYWN0aXZlbXEtY29yZS54c2QgICAKKyAgaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvY2FtZWwvc2NoZW1hL3NwcmluZyBodHRwOi8vYWN0aXZlbXEuYXBhY2hlLm9yZy9jYW1lbC9zY2hlbWEvc3ByaW5nL2NhbWVsLXNwcmluZy54c2QKKyAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS9zcHJpbmctb3NnaS54c2QiPgorCisgICAgPCEtLSBBbGxvd3MgdXMgdG8gdXNlIHN5c3RlbSBwcm9wZXJ0aWVzIGFzIHZhcmlhYmxlcyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSAtLT4KKyAgICA8YmVhbiBjbGFzcz0ib3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5Qcm9wZXJ0eVBsYWNlaG9sZGVyQ29uZmlndXJlciIvPgorCisgICAgPGJyb2tlciB4bWxucz0iaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvc2NoZW1hL2NvcmUiIGJyb2tlck5hbWU9ImRlZmF1bHQiIGRhdGFEaXJlY3Rvcnk9IiR7a2FyYWYuYmFzZX0vZGF0YS9hY3RpdmVtcS9kZWZhdWx0IiB1c2VTaHV0ZG93bkhvb2s9InRydWUiPgorCisgICAgICAgIDwhLS0gRGVzdGluYXRpb24gc3BlY2lmaWMgcG9saWNpZXMgdXNpbmcgZGVzdGluYXRpb24gbmFtZXMgb3Igd2lsZGNhcmRzIC0tPgorICAgICAgICA8ZGVzdGluYXRpb25Qb2xpY3k+CisgICAgICAgICAgICA8cG9saWN5TWFwPgorICAgICAgICAgICAgICAgIDxwb2xpY3lFbnRyaWVzPgorICAgICAgICAgICAgICAgICAgICA8cG9saWN5RW50cnkgcXVldWU9Ij4iIG1lbW9yeUxpbWl0PSI1bWIiLz4KKyAgICAgICAgICAgICAgICAgICAgPHBvbGljeUVudHJ5IHRvcGljPSI+IiBtZW1vcnlMaW1pdD0iNW1iIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzdWJzY3JpcHRpb25SZWNvdmVyeVBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFzdEltYWdlU3Vic2NyaXB0aW9uUmVjb3ZlcnlQb2xpY3kvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zdWJzY3JpcHRpb25SZWNvdmVyeVBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgPC9wb2xpY3lFbnRyeT4KKyAgICAgICAgICAgICAgICA8L3BvbGljeUVudHJpZXM+CisgICAgICAgICAgICA8L3BvbGljeU1hcD4KKyAgICAgICAgPC9kZXN0aW5hdGlvblBvbGljeT4KKworICAgICAgICA8IS0tIFVzZSB0aGUgZm9sbG93aW5nIHRvIGNvbmZpZ3VyZSBob3cgQWN0aXZlTVEgaXMgZXhwb3NlZCBpbiBKTVggLS0+CisgICAgICAgIDxtYW5hZ2VtZW50Q29udGV4dD4KKyAgICAgICAgICAgIDxtYW5hZ2VtZW50Q29udGV4dCBjcmVhdGVDb25uZWN0b3I9ImZhbHNlIi8+CisgICAgICAgIDwvbWFuYWdlbWVudENvbnRleHQ+CisKKyAgICAgICAgPCEtLSBUaGUgc3RvcmUgYW5kIGZvcndhcmQgYnJva2VyIG5ldHdvcmtzIEFjdGl2ZU1RIHdpbGwgbGlzdGVuIHRvIC0tPgorICAgICAgICA8bmV0d29ya0Nvbm5lY3RvcnM+CisgICAgICAgICAgICA8IS0tIGJ5IGRlZmF1bHQganVzdCBhdXRvIGRpc2NvdmVyIHRoZSBvdGhlciBicm9rZXJzIC0tPgorICAgICAgICAgICAgPG5ldHdvcmtDb25uZWN0b3IgbmFtZT0iZGVmYXVsdC1uYyIgdXJpPSJtdWx0aWNhc3Q6Ly9kZWZhdWx0Ii8+CisgICAgICAgICAgICA8IS0tIEV4YW1wbGUgb2YgYSBzdGF0aWMgY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgIDxuZXR3b3JrQ29ubmVjdG9yIG5hbWU9Imhvc3QxIGFuZCBob3N0MiIgdXJpPSJzdGF0aWM6Ly8odGNwOi8vaG9zdDE6NjE2MTYsdGNwOi8vaG9zdDI6NjE2MTYpIi8+CisgICAgICAgICAgICAtLT4KKyAgICAgICAgPC9uZXR3b3JrQ29ubmVjdG9ycz4KKworICAgICAgICA8cGVyc2lzdGVuY2VBZGFwdGVyPgorICAgICAgICAgICAgPGFtcVBlcnNpc3RlbmNlQWRhcHRlciBzeW5jT25Xcml0ZT0iZmFsc2UiIGRpcmVjdG9yeT0iJHtrYXJhZi5iYXNlfS9kYXRhL2FjdGl2ZW1xL2RlZmF1bHQiIG1heEZpbGVMZW5ndGg9IjIwIG1iIi8+CisgICAgICAgIDwvcGVyc2lzdGVuY2VBZGFwdGVyPgorCisgICAgICAgIDwhLS0gVXNlIHRoZSBmb2xsb3dpbmcgaWYgeW91IHdpc2ggdG8gY29uZmlndXJlIHRoZSBqb3VybmFsIHdpdGggSkRCQyAtLT4KKyAgICAgICAgPCEtLQorICAgICAgICA8cGVyc2lzdGVuY2VBZGFwdGVyPgorICAgICAgICAgICAgPGpvdXJuYWxlZEpEQkMgZGF0YURpcmVjdG9yeT0iJHthY3RpdmVtcS5iYXNlfS9kYXRhIiBkYXRhU291cmNlPSIjcG9zdGdyZXMtZHMiLz4KKyAgICAgICAgPC9wZXJzaXN0ZW5jZUFkYXB0ZXI+CisgICAgICAgIC0tPgorCisgICAgICAgIDwhLS0gT3IgaWYgeW91IHdhbnQgdG8gdXNlIHB1cmUgSkRCQyB3aXRob3V0IGEgam91cm5hbCAtLT4KKyAgICAgICAgPCEtLQorICAgICAgICA8cGVyc2lzdGVuY2VBZGFwdGVyPgorICAgICAgICAgICAgPGpkYmNQZXJzaXN0ZW5jZUFkYXB0ZXIgZGF0YVNvdXJjZT0iI3Bvc3RncmVzLWRzIi8+CisgICAgICAgIDwvcGVyc2lzdGVuY2VBZGFwdGVyPgorICAgICAgICAtLT4KKworICAgICAgICA8IS0tICBUaGUgbWF4aW11bSBhYm91dCBvZiBzcGFjZSB0aGUgYnJva2VyIHdpbGwgdXNlIGJlZm9yZSBzbG93aW5nIGRvd24gcHJvZHVjZXJzIC0tPgorICAgICAgICA8c3lzdGVtVXNhZ2U+CisgICAgICAgICAgICA8c3lzdGVtVXNhZ2U+CisgICAgICAgICAgICAgICAgPG1lbW9yeVVzYWdlPgorICAgICAgICAgICAgICAgICAgICA8bWVtb3J5VXNhZ2UgbGltaXQ9IjIwIG1iIi8+CisgICAgICAgICAgICAgICAgPC9tZW1vcnlVc2FnZT4KKyAgICAgICAgICAgICAgICA8c3RvcmVVc2FnZT4KKyAgICAgICAgICAgICAgICAgICAgPHN0b3JlVXNhZ2UgbGltaXQ9IjEgZ2IiIG5hbWU9ImZvbyIvPgorICAgICAgICAgICAgICAgIDwvc3RvcmVVc2FnZT4KKyAgICAgICAgICAgICAgICA8dGVtcFVzYWdlPgorICAgICAgICAgICAgICAgICAgICA8dGVtcFVzYWdlIGxpbWl0PSIxMDAgbWIiLz4KKyAgICAgICAgICAgICAgICA8L3RlbXBVc2FnZT4KKyAgICAgICAgICAgIDwvc3lzdGVtVXNhZ2U+CisgICAgICAgIDwvc3lzdGVtVXNhZ2U+CisKKworICAgICAgICA8IS0tIFRoZSB0cmFuc3BvcnQgY29ubmVjdG9ycyBBY3RpdmVNUSB3aWxsIGxpc3RlbiB0byAtLT4KKyAgICAgICAgPHRyYW5zcG9ydENvbm5lY3RvcnM+CisgICAgICAgICAgICA8dHJhbnNwb3J0Q29ubmVjdG9yIG5hbWU9Im9wZW53aXJlIiB1cmk9InRjcDovL2xvY2FsaG9zdDo2MTYxNiIgZGlzY292ZXJ5VXJpPSJtdWx0aWNhc3Q6Ly9kZWZhdWx0Ii8+CisgICAgICAgICAgICA8dHJhbnNwb3J0Q29ubmVjdG9yIG5hbWU9InN0b21wIiB1cmk9InN0b21wOi8vbG9jYWxob3N0OjYxNjEzIi8+CisgICAgICAgIDwvdHJhbnNwb3J0Q29ubmVjdG9ycz4KKworICAgIDwvYnJva2VyPgorCisgICAgPGJlYW4gaWQ9ImFjdGl2ZW1xQ29ubmVjdGlvbkZhY3RvcnkiIGNsYXNzPSJvcmcuYXBhY2hlLmFjdGl2ZW1xLkFjdGl2ZU1RQ29ubmVjdGlvbkZhY3RvcnkiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnJva2VyVVJMIiB2YWx1ZT0idGNwOi8vbG9jYWxob3N0OjYxNjE2IiAvPgorICAgIDwvYmVhbj4KKworICAgIDxiZWFuIGlkPSJwb29sZWRDb25uZWN0aW9uRmFjdG9yeUZhY3RvcnkiIGNsYXNzPSJvcmcuYXBhY2hlLmFjdGl2ZW1xLnBvb2wuUG9vbGVkQ29ubmVjdGlvbkZhY3RvcnkiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibWF4Q29ubmVjdGlvbnMiIHZhbHVlPSI4IiAvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibWF4aW11bUFjdGl2ZSIgdmFsdWU9IjUwMCIgLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNvbm5lY3Rpb25GYWN0b3J5IiByZWY9ImFjdGl2ZW1xQ29ubmVjdGlvbkZhY3RvcnkiIC8+CisgICAgPC9iZWFuPgorICAgIDxiZWFuIGlkPSJwb29sZWRDb25uZWN0aW9uRmFjdG9yeSIgZmFjdG9yeS1iZWFuPSJwb29sZWRDb25uZWN0aW9uRmFjdG9yeUZhY3RvcnkiIGZhY3RvcnktbWV0aG9kPSJnZXRDb25uZWN0aW9uRmFjdG9yeSIgLz4KKworICAgIDxiZWFuIGlkPSJyZXNvdXJjZU1hbmFnZXIiIGNsYXNzPSJvcmcuYXBhY2hlLmFjdGl2ZW1xLnBvb2wuQWN0aXZlTVFSZXNvdXJjZU1hbmFnZXIiIGluaXQtbWV0aG9kPSJyZWNvdmVyUmVzb3VyY2UiPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0cmFuc2FjdGlvbk1hbmFnZXIiIHJlZj0idHJhbnNhY3Rpb25NYW5hZ2VyIiAvPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb25uZWN0aW9uRmFjdG9yeSIgcmVmPSJhY3RpdmVtcUNvbm5lY3Rpb25GYWN0b3J5IiAvPgorICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNvdXJjZU5hbWUiIHZhbHVlPSJhY3RpdmVtcS5kZWZhdWx0IiAvPgorICAgIDwvYmVhbj4KKworICAgIDxvc2dpOnJlZmVyZW5jZSBpZD0idHJhbnNhY3Rpb25NYW5hZ2VyIiBpbnRlcmZhY2U9ImphdmF4LnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uTWFuYWdlciIKKyAgICAgICAgICAgICAgICAgICAgY2FyZGluYWxpdHk9IjAuLjEiLz4KKworICAgIDxvc2dpOnNlcnZpY2UgcmVmPSJwb29sZWRDb25uZWN0aW9uRmFjdG9yeSI+CisgICAgICAgIDxvc2dpOmludGVyZmFjZXM+CisgICAgICAgICAgICA8dmFsdWU+amF2YXguam1zLkNvbm5lY3Rpb25GYWN0b3J5PC92YWx1ZT4KKyAgICAgICAgPC9vc2dpOmludGVyZmFjZXM+CisgICAgICAgIDxvc2dpOnNlcnZpY2UtcHJvcGVydGllcz4KKyAgICAgICAgICAgIDxlbnRyeSBrZXk9Im5hbWUiIHZhbHVlPSJkZWZhdWx0Ii8+CisgICAgICAgIDwvb3NnaTpzZXJ2aWNlLXByb3BlcnRpZXM+CisgICAgPC9vc2dpOnNlcnZpY2U+CisKKzwvYmVhbnM+CisKKwpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1qbXMtb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtam1zLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlOGUyYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtam1zLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKQEAgLTAsMCArMSw4NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFNUQVJUIFNOSVBQRVQ6IGJlYW5zIC0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgeG1sbnM6cD0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9wIgorICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMvc3ByaW5nLWJlYW5zLnhzZAorICAgICAgICBodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MgaHR0cDovL2N4Zi5hcGFjaGUub3JnL3NjaGVtYXMvamF4d3MueHNkCisgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaSBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kvc3ByaW5nLW9zZ2kueHNkIj4KKworICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi1leHRlbnNpb24tc29hcC54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLWptcy54bWwiIC8+CisKKyAgICA8amF4d3M6ZW5kcG9pbnQgaWQ9IkpNU0VuZHBvaW50IgorICAgICAgICBpbXBsZW1lbnRvcj0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zl9qbXNfb3NnaS5IZWxsb1dvcmxkSW1wbCIKKyAgICAgICAgd3NkbExvY2F0aW9uPSJ3c2RsL2hlbGxvX3dvcmxkLndzZGwiCisgICAgICAgIGVuZHBvaW50TmFtZT0iZTpIZWxsb1dvcmxkSW1wbFBvcnQiCisgICAgICAgIHNlcnZpY2VOYW1lPSJzOkhlbGxvV29ybGRJbXBsU2VydmljZSIKKyAgICAgICAgeG1sbnM6ZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIgorICAgICAgICAgICAgeG1sbnM6cz0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIj4KKyAgICAgICAgICAgIDxqYXh3czpmZWF0dXJlcz4KKyAgICAgICAgICAgICAgICA8YmVhbiB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi50cmFuc3BvcnQuam1zLkpNU0NvbmZpZ0ZlYXR1cmUiCisgICAgICAgICAgICAgICAgICAgICAgICBwOmptc0NvbmZpZy1yZWY9Imptc0NvbmZpZyIvPgorICAgICAgICAgICAgPC9qYXh3czpmZWF0dXJlcz4KKyAgICAgICAgPC9qYXh3czplbmRwb2ludD4KKworCisgICAgPGpheHdzOmNsaWVudCBpZD0iY2xpZW50IiAKKyAgICAgICAgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIiAgICAKKyAgICAgICAgZW5kcG9pbnROYW1lPSJlOkhlbGxvV29ybGRJbXBsUG9ydCIKKyAgICAgICAgc2VydmljZU5hbWU9InM6SGVsbG9Xb3JsZEltcGxTZXJ2aWNlIgorICAgICAgICB4bWxuczplPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iCisgICAgICAgIHhtbG5zOnM9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIKKyAgICAgICAgIHdzZGxMb2NhdGlvbj0id3NkbC9oZWxsb193b3JsZC53c2RsIgorICAgICAgICAgPgorICAgICAgICA8amF4d3M6ZmVhdHVyZXM+CisgICAgICAgICAgICAgICAgPGJlYW4geG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmptcy5KTVNDb25maWdGZWF0dXJlIgorICAgICAgICAgICAgICAgICAgICAgICAgcDpqbXNDb25maWctcmVmPSJqbXNDb25maWciLz4KKyAgICAgICAgPC9qYXh3czpmZWF0dXJlcz4KKyAgICA8L2pheHdzOmNsaWVudD4gICAKKyAKKyAgICA8YmVhbiBpZD0iam1zQ29uZmlnIiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmptcy5KTVNDb25maWd1cmF0aW9uIgorICAgICAgICBwOmNvbm5lY3Rpb25GYWN0b3J5LXJlZj0iam1zQ29ubmVjdGlvbkZhY3RvcnkiCisgICAgICAgIHA6dGFyZ2V0RGVzdGluYXRpb249InRlc3QuY3hmLmptc3RyYW5zcG9ydC5xdWV1ZSIKKyAgICAgLz4KKworICAgICA8YmVhbiBpZD0iam1zQ29ubmVjdGlvbkZhY3RvcnkiIGNsYXNzPSJvcmcuc3ByaW5nZnJhbWV3b3JrLmptcy5jb25uZWN0aW9uLlNpbmdsZUNvbm5lY3Rpb25GYWN0b3J5Ij4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InRhcmdldENvbm5lY3Rpb25GYWN0b3J5Ij4KKyAgICAgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5hY3RpdmVtcS5BY3RpdmVNUUNvbm5lY3Rpb25GYWN0b3J5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJicm9rZXJVUkwiIHZhbHVlPSJ0Y3A6Ly9sb2NhbGhvc3Q6NjE2MTYiIC8+CisgICAgICAgICAgICAgICAgPC9iZWFuPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKworICAgIDxvc2dpOnNlcnZpY2UgaWQ9InRlc3RIZWxsb1dvcmxkIiByZWY9ImNsaWVudCIKKyAgICAgICAgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQiPgorICAgICAgICA8b3NnaTpzZXJ2aWNlLXByb3BlcnRpZXM+CisgICAgICAgICAgICA8ZW50cnkga2V5PSJURVNULUJVTkRMRS1OQU1FIiB2YWx1ZT0iY3hmLWptcy1vc2dpIiAvPgorICAgICAgICA8L29zZ2k6c2VydmljZS1wcm9wZXJ0aWVzPgorICAgIDwvb3NnaTpzZXJ2aWNlPgorCisKKzwvYmVhbnM+Cis8IS0tIEVORCBTTklQUEVUOiBiZWFucyAtLT4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtam1zLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGQud3NkbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtam1zLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGQud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDk5OWZjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1qbXMtb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9oZWxsb193b3JsZC53c2RsCkBAIC0wLDAgKzEsODYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlIiAKKyAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIiAKKyAgICAgICAgICAgICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICAgICAgICAgICAgICAgIHhtbG5zOmptcz0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvam1zIj4KKyAgICA8d3NkbDp0eXBlcz4KKyAgICAgICAgPHhzZDpzY2hlbWEgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIiAKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgCisgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIiAKKyAgICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIAorICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzYXlIaSIgdHlwZT0idG5zOnNheUhpIiAvPgorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iYXJnMCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNheUhpUmVzcG9uc2UiIHR5cGU9InRuczpzYXlIaVJlc3BvbnNlIiAvPgorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJyZXR1cm4iIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgPC94c2Q6c2NoZW1hPgorICAgIDwvd3NkbDp0eXBlcz4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpzYXlIaVJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIj4KKyAgICAgICAgPC93c2RsOnBhcnQ+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXlIaSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOnNheUhpIiBuYW1lPSJwYXJhbWV0ZXJzIj4KKyAgICAgICAgPC93c2RsOnBhcnQ+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSGVsbG9Xb3JsZCI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6c2F5SGkiIG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6c2F5SGlSZXNwb25zZSIgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgIDwvd3NkbDpwb3J0VHlwZT4KKyAgICA8d3NkbDpiaW5kaW5nIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG9Xb3JsZCI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIHN0eWxlPSJkb2N1bWVudCIgLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOmJpbmRpbmc+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiPgorICAgICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpIZWxsb1dvcmxkSW1wbFNlcnZpY2VTb2FwQmluZGluZyIgbmFtZT0iSGVsbG9Xb3JsZEltcGxQb3J0Ij4KKyAgICAgICAgICAgIDxqbXM6YWRkcmVzcworICAgICAgICAgICAgICAgICAgIGpuZGlDb25uZWN0aW9uRmFjdG9yeU5hbWU9IkNvbm5lY3Rpb25GYWN0b3J5IgorICAgICAgICAgICAgICAgICAgIGpuZGlEZXN0aW5hdGlvbk5hbWU9ImR5bmFtaWNRdWV1ZXMvdGVzdC5qbXN0cmFuc3BvcnQudGV4dCI+ICAgICAgICAgICAgICAgICAgICA8am1zOkpNU05hbWluZ1Byb3BlcnR5IG5hbWU9ImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIgdmFsdWU9Im9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeSIvPgorICAgICAgICAgICAgICAgICAgIDxqbXM6Sk1TTmFtaW5nUHJvcGVydHkgbmFtZT0iamF2YS5uYW1pbmcucHJvdmlkZXIudXJsIiB2YWx1ZT0idGNwOi8vbG9jYWxob3N0OjYxNjE2Ii8+CisgICAgICAgICAgICA8L2ptczphZGRyZXNzPgorCisgICAgICAgICAgICA8am1zOnNlcnZlciBkdXJhYmxlU3Vic2NyaWJlck5hbWU9IkNYRl9zdWJzY3JpYmVyIi8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1tdG9tLW9zZ2kvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbXRvbS1vc2dpL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjNGY3MAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbXRvbS1vc2dpL3BvbS54bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMuY3hmLW10b20tb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IGlUZXN0cyA6OiBDWEYgTVRPTSBPU0dpPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC1mcm9udGVuZC1qYXh3czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1jb2RlZ2VuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5nZW5lcmF0ZS10ZXN0LXNvdXJjZXM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZVJvb3Q+JHtiYXNlZGlyfS90YXJnZXQvZ2VuZXJhdGVkL3NyYy9tYWluL2phdmE8L3NvdXJjZVJvb3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbE9wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsPiR7YmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvbXRvbS53c2RsPC93c2RsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxPcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsT3B0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD53c2RsMmphdmE8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLmFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuc29hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwudHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC53cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC5hY3RpdmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cy5zb2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lm1haWwudXRpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLm9zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmh0dHBfb3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFJlcXVpcmUtQnVuZGxlPm9yZy5hcGFjaGUuY3hmLmJ1bmRsZTwvUmVxdWlyZS1CdW5kbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RXhwb3J0LVBhY2thZ2U+b3JnLmFwYWNoZS5jeGYubWltZSwgb3JnLmFwYWNoZS5jeGYubWltZS50eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLm10b208L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbXRvbS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9tdG9tL1Rlc3RNdG9tSW1wbC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1tdG9tLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL210b20vVGVzdE10b21JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1N2QwMwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbXRvbS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9tdG9tL1Rlc3RNdG9tSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5tdG9tOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCitpbXBvcnQgamF2YXguYWN0aXZhdGlvbi5EYXRhSGFuZGxlcjsKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKK2ltcG9ydCBqYXZheC5tYWlsLnV0aWwuQnl0ZUFycmF5RGF0YVNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwud3MuSG9sZGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYubWltZS5UZXN0TXRvbTsKKworQFdlYlNlcnZpY2Uoc2VydmljZU5hbWUgPSAiVGVzdE10b21TZXJ2aWNlIiwgCisgICAgICAgIHBvcnROYW1lID0gIlRlc3RNdG9tUG9ydCIsIAorICAgICAgICB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2N4Zi5hcGFjaGUub3JnL21pbWUiLCAKKyAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5jeGYubWltZS5UZXN0TXRvbSIsCisgICAgICAgICAgICB3c2RsTG9jYXRpb24gPSAidGVzdHV0aWxzL210b21feG9wLndzZGwiKQorcHVibGljIGNsYXNzIFRlc3RNdG9tSW1wbCBpbXBsZW1lbnRzIFRlc3RNdG9tIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0WG9wKEhvbGRlcjxTdHJpbmc+IG5hbWUsIEhvbGRlcjxEYXRhSGFuZGxlcj4gYXR0YWNoaW5mbykgeworICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIGltYWdlIHdpdGggbXRvbSBlbmFibGVkIGZyb20gY2xpZW50Iik7CisgICAgICAgICAgICBJbnB1dFN0cmVhbSBtdG9tSW4gPSBhdHRhY2hpbmZvLnZhbHVlLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICAgICAgY29weShtdG9tSW4sIG91dCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBpbWFnZSBkYXRhIHNpemUgaXMgIiArIG91dC5zaXplKCkpOworICAgICAgICAgICAgbmFtZS52YWx1ZSA9ICJIZWxsbyAiICsgbmFtZS52YWx1ZTsKKyAgICAgICAgICAgIG10b21Jbi5jbG9zZSgpOworICAgICAgICAgICAgYXR0YWNoaW5mby52YWx1ZSA9IG5ldyBEYXRhSGFuZGxlcihuZXcgQnl0ZUFycmF5RGF0YVNvdXJjZShvdXQudG9CeXRlQXJyYXkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoaW5mby52YWx1ZS5nZXRDb250ZW50VHlwZSgpKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvcHkoZmluYWwgSW5wdXRTdHJlYW0gaW5wdXQsIGZpbmFsIE91dHB1dFN0cmVhbSBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVs0MDk2XTsKKyAgICAgICAgaW50IG4gPSAwOworICAgICAgICBuID0gaW5wdXQucmVhZChidWZmZXIpOworICAgICAgICBpbnQgdG90YWwgPSAwOworICAgICAgICB3aGlsZSAoLTEgIT0gbikgeworICAgICAgICAgICAgb3V0cHV0LndyaXRlKGJ1ZmZlciwgMCwgbik7CisgICAgICAgICAgICB0b3RhbCArPSBuOworICAgICAgICAgICAgbiA9IGlucHV0LnJlYWQoYnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG90YWw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1tdG9tLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW10b20tb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMTA2OWIyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1tdG9tLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKQEAgLTAsMCArMSw3MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFNUQVJUIFNOSVBQRVQ6IGJlYW5zIC0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QKKyAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2pheHdzLnhzZAorICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpL3NwcmluZy1vc2dpLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1odHRwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL29zZ2kvY3hmLWV4dGVuc2lvbi1vc2dpLnhtbCIgLz4KKworICAgIDxqYXh3czplbmRwb2ludCBpZD0iTXRvbUVuZHBvaW50IgorICAgICAgICBpbXBsZW1lbnRvcj0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5tdG9tLlRlc3RNdG9tSW1wbCIKKyAgICAgICAgYWRkcmVzcz0iL210b20iCisgICAgICAgIHdzZGxMb2NhdGlvbj0id3NkbC9tdG9tLndzZGwiCisgICAgICAgIGVuZHBvaW50TmFtZT0iZTpUZXN0TXRvbVBvcnQiCisgICAgICAgIHNlcnZpY2VOYW1lPSJzOlRlc3RNdG9tU2VydmljZSIKKyAgICAgICAgeG1sbnM6ZT0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL21pbWUiCisgICAgICAgICAgICB4bWxuczpzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvbWltZSI+CisgICAgICAgICAgICAgPGpheHdzOmZlYXR1cmVzPgorICAgICAgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuZmVhdHVyZS5Mb2dnaW5nRmVhdHVyZSIvPgorICAgICAgICAgICAgIDwvamF4d3M6ZmVhdHVyZXM+CisgICAgICAgICAgICAgPGpheHdzOnByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9Im10b20tZW5hYmxlZCIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgICAgICA8L2pheHdzOnByb3BlcnRpZXM+CisgICAgICAgIDwvamF4d3M6ZW5kcG9pbnQ+CisKKyAgICAgICAKKyAgICAgICA8amF4d3M6Y2xpZW50IGlkPSJjbGllbnQiIAorICAgICAgICAgICAgIHNlcnZpY2VDbGFzcz0ib3JnLmFwYWNoZS5jeGYubWltZS5UZXN0TXRvbSIgICAgCisgICAgICAgICAgICAgZW5kcG9pbnROYW1lPSJlOlRlc3RNdG9tUG9ydCIKKyAgICAgICAgICAgIHNlcnZpY2VOYW1lPSJzOlRlc3RNdG9tU2VydmljZSIKKyAgICAgICAgICAgIHhtbG5zOmU9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9taW1lIgorICAgICAgICAgICAgeG1sbnM6cz0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL21pbWUiCisgICAgICAgICAgICB3c2RsTG9jYXRpb249IndzZGwvbXRvbS53c2RsIgorICAgICAgICAgICAgIGFkZHJlc3M9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jeGYvbXRvbSI+CisgICAgICAgICAgICAgPGpheHdzOmZlYXR1cmVzPgorICAgICAgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuZmVhdHVyZS5Mb2dnaW5nRmVhdHVyZSIvPgorICAgICAgICAgICAgIDwvamF4d3M6ZmVhdHVyZXM+CisgICAgICAgICAgICAgPGpheHdzOnByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgIDxlbnRyeSBrZXk9Im10b20tZW5hYmxlZCIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgICAgICA8L2pheHdzOnByb3BlcnRpZXM+CisgICAgICAgIDwvamF4d3M6Y2xpZW50PiAgIAorIAorICAgICAgIDxvc2dpOnNlcnZpY2UgaWQ9InRlc3RNdG9tIiByZWY9ImNsaWVudCIKKyAgICAgICAgICAgIGludGVyZmFjZT0ib3JnLmFwYWNoZS5jeGYubWltZS5UZXN0TXRvbSIvPgorCisgICAgICAgCis8L2JlYW5zPgorPCEtLSBFTkQgU05JUFBFVDogYmVhbnMgLS0+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW10b20tb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9tdG9tLndzZGwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW10b20tb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9tdG9tLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3YzcwYgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbXRvbS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL210b20ud3NkbApAQCAtMCwwICsxLDgzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx3c2RsOmRlZmluaXRpb25zIG5hbWU9IlNPQVBCdWlsZGVycy1taW1lLWNyLXRlc3QiIHhtbG5zOnR5cGVzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvbWltZS90eXBlcyIKKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIgorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczp0bnM9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9taW1lIgorICAgIHhtbG5zOmptcz0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvam1zIgorICAgIHhtbG5zOnhtaW1lPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA1L3htbG1pbWUiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL21pbWUiPgorCisgICAgPHdzZGw6dHlwZXM+CisgICAgICAgIDxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9taW1lL3R5cGVzIgorICAgICAgICAgICAgeG1sbnM6eG1pbWU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDUveG1sbWltZSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorICAgICAgICAgICAgPGNvbXBsZXhUeXBlIG5hbWU9IlhvcFR5cGUiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYXR0YWNoaW5mbyIgdHlwZT0ieHNkOmJhc2U2NEJpbmFyeSIgeG1pbWU6ZXhwZWN0ZWRDb250ZW50VHlwZXM9ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIvPgorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idGVzdFhvcCIgdHlwZT0idHlwZXM6WG9wVHlwZSIgLz4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InRlc3RYb3BSZXNwb25zZSIgdHlwZT0idHlwZXM6WG9wVHlwZSIgLz4KKyAgICAgICAgPC9zY2hlbWE+CisKKyAgICA8L3dzZGw6dHlwZXM+CisKKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InRlc3RYb3BJbiI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iZGF0YSIgZWxlbWVudD0idHlwZXM6dGVzdFhvcCIgLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKworICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0idGVzdFhvcE91dCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0iZGF0YSIgZWxlbWVudD0idHlwZXM6dGVzdFhvcFJlc3BvbnNlIiAvPgorICAgIDwvd3NkbDptZXNzYWdlPgorCisKKyAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJUZXN0TXRvbSI+CisKKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InRlc3RYb3AiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnRlc3RYb3BJbiIgLz4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6dGVzdFhvcE91dCIgLz4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKworICAgIDwvd3NkbDpwb3J0VHlwZT4KKworICAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iVGVzdE10b21CaW5kaW5nIiB0eXBlPSJ0bnM6VGVzdE10b20iPgorICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+CisKKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InRlc3RYb3AiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIgLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgorICAgICAgICAgICAgPC93c2RsOmlucHV0PgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgorICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKworCisgICAgPC93c2RsOmJpbmRpbmc+CisKKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlRlc3RNdG9tU2VydmljZSI+CisgICAgICAgIDx3c2RsOnBvcnQgbmFtZT0iVGVzdE10b21Qb3J0IiBiaW5kaW5nPSJ0bnM6VGVzdE10b21CaW5kaW5nIj4KKyAgICAgICAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6OTAzNi9taW1lLXRlc3QiIC8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorCis8L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW5tci1vc2dpL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW5tci1vc2dpL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwYzE4NwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbm1yLW9zZ2kvcG9tLnhtbApAQCAtMCwwICsxLDg5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1ubXItb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IGlUZXN0cyA6OiBDWEYgTk1SIFRyYW5zcG9ydCBPU0dpPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC1mcm9udGVuZC1qYXh3czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLnRlc3QtY29tbW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLmFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwud3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4Zi50cmFuc3BvcnQubm1yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMuc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5jb25maWd1cmF0aW9uLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5mZWF0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLmV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLmludGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvSW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8RXhwb3J0LVBhY2thZ2U+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zl9ubXJfb3NnaTwvRXhwb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8UmVxdWlyZS1CdW5kbGU+b3JnLmFwYWNoZS5jeGYuYnVuZGxlPC9SZXF1aXJlLUJ1bmRsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW5tci1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zl9ubXJfb3NnaS9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1ubXItb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGZfbm1yX29zZ2kvSGVsbG9Xb3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZThmZDYxCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1ubXItb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGZfbm1yX29zZ2kvSGVsbG9Xb3JsZEltcGwuamF2YQpAQCAtMCwwICsxLDM1IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKy8vIFNUQVJUIFNOSVBQRVQ6IHNlcnZpY2UKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zl9ubXJfb3NnaTsKKworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuKjsKKy8vQFdlYlNlcnZpY2UoZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIikKK0BXZWJTZXJ2aWNlKHNlcnZpY2VOYW1lID0gIkhlbGxvV29ybGRJbXBsU2VydmljZSIsCisgICAgICAgICAgICBwb3J0TmFtZSA9ICJIZWxsb1dvcmxkSW1wbFBvcnQiLAorICAgICAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIiwKKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iKQorcHVibGljIGNsYXNzIEhlbGxvV29ybGRJbXBsIGltcGxlbWVudHMgSGVsbG9Xb3JsZCB7CisKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKFN0cmluZyB0ZXh0KSB7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHRleHQ7CisgICAgfQorfQorLy8gRU5EIFNOSVBQRVQ6IHNlcnZpY2UKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbm1yLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW5tci1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzU0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLW5tci1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcvYmVhbnMueG1sCkBAIC0wLDAgKzEsNjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLSBTVEFSVCBTTklQUEVUOiBiZWFucyAtLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmpheHdzPSJodHRwOi8vY3hmLmFwYWNoZS5vcmcvamF4d3MiCisgICAgeG1sbnM6b3NnaT0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCisgICAgICAgIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyBodHRwOi8vY3hmLmFwYWNoZS5vcmcvc2NoZW1hcy9qYXh3cy54c2QKKyAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS9zcHJpbmctb3NnaS54c2QiPgorCisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1zb2FwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL3RyYW5zcG9ydC9ubXIvY3hmLXRyYW5zcG9ydC1ubXIueG1sIiAvPgorCisgICAgPGpheHdzOmVuZHBvaW50IGlkPSJOTVJFbmRwb2ludCIKKyAgICAgICAgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGZfbm1yX29zZ2kuSGVsbG9Xb3JsZEltcGwiCisgICAgICAgICAgICBlbmRwb2ludE5hbWU9ImU6SGVsbG9Xb3JsZEltcGxQb3J0IgorICAgICAgICBzZXJ2aWNlTmFtZT0iczpIZWxsb1dvcmxkSW1wbFNlcnZpY2UiCisgICAgICAgIHhtbG5zOmU9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIKKyAgICAgICAgICAgIGFkZHJlc3M9Im5tcjpIZWxsb1dvcmxkIgorICAgICAgICB4bWxuczpzPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iPgorICAgICAgICAgICAgPGpheHdzOmZlYXR1cmVzPgorICAgICAgICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmN4Zi5mZWF0dXJlLkxvZ2dpbmdGZWF0dXJlIi8+CisgICAgICAgICAgICA8L2pheHdzOmZlYXR1cmVzPgorICAgICAgICA8L2pheHdzOmVuZHBvaW50PgorCisKKyAgICA8amF4d3M6Y2xpZW50IGlkPSJjbGllbnQiIAorICAgICAgICAgc2VydmljZUNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQiICAgIAorICAgICAgICB4bWxuczplPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iCisgICAgICAgIHhtbG5zOnM9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIKKyAgICAgICAgZW5kcG9pbnROYW1lPSJlOkhlbGxvV29ybGRJbXBsUG9ydCIgICAgIAorICAgICAgICAgICAgc2VydmljZU5hbWU9InM6SGVsbG9Xb3JsZEltcGxTZXJ2aWNlIgorICAgICAgICBhZGRyZXNzPSJubXI6SGVsbG9Xb3JsZCIKKyAgICAgICAgID4gICAKKyAgICAgICAgPGpheHdzOmZlYXR1cmVzPgorICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYuZmVhdHVyZS5Mb2dnaW5nRmVhdHVyZSIvPgorICAgICAgICA8L2pheHdzOmZlYXR1cmVzPgorICAgIDwvamF4d3M6Y2xpZW50PgorIAorICAgIDxvc2dpOnNlcnZpY2UgaWQ9InRlc3RIZWxsb1dvcmxkIiByZWY9ImNsaWVudCIKKyAgICAgICAgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQiPgorICAgICAgICA8b3NnaTpzZXJ2aWNlLXByb3BlcnRpZXM+CisgICAgICAgICAgICA8ZW50cnkga2V5PSJURVNULUJVTkRMRS1OQU1FIiB2YWx1ZT0iY3hmLW5tci1vc2dpIiAvPgorICAgICAgICA8L29zZ2k6c2VydmljZS1wcm9wZXJ0aWVzPgorICAgIDwvb3NnaTpzZXJ2aWNlPgorCisKKzwvYmVhbnM+Cis8IS0tIEVORCBTTklQUEVUOiBiZWFucyAtLT4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbm1yLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGQud3NkbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtbm1yLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGQud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY3YjJhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1ubXItb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9oZWxsb193b3JsZC53c2RsCkBAIC0wLDAgKzEsODEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlIiAKKyAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIiAKKyAgICAgICAgICAgICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICAgICAgICAgICAgICAgIHhtbG5zOmptcz0iaHR0cDovL2N4Zi5hcGFjaGUub3JnL3RyYW5zcG9ydHMvam1zIgorICAgICAgICAgICAgICAgICAgeG1sbnM6bm1yPSJodHRwOi8vY3hmLnNlcnZpY2VtaXguYXBhY2hlLm9yZy90cmFuc3BvcnQvbm1yIj4KKyAgICA8d3NkbDp0eXBlcz4KKyAgICAgICAgPHhzZDpzY2hlbWEgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIiAKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgCisgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIiAKKyAgICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIAorICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzYXlIaSIgdHlwZT0idG5zOnNheUhpIiAvPgorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iYXJnMCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNheUhpUmVzcG9uc2UiIHR5cGU9InRuczpzYXlIaVJlc3BvbnNlIiAvPgorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJyZXR1cm4iIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgPC94c2Q6c2NoZW1hPgorICAgIDwvd3NkbDp0eXBlcz4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpzYXlIaVJlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIj4KKyAgICAgICAgPC93c2RsOnBhcnQ+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXlIaSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOnNheUhpIiBuYW1lPSJwYXJhbWV0ZXJzIj4KKyAgICAgICAgPC93c2RsOnBhcnQ+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSGVsbG9Xb3JsZCI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6c2F5SGkiIG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6c2F5SGlSZXNwb25zZSIgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgIDwvd3NkbDpwb3J0VHlwZT4KKyAgICA8d3NkbDpiaW5kaW5nIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG9Xb3JsZCI+CisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4KKyAgICAgICAgPHdzZGw6b3BlcmF0aW9uIG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiIHN0eWxlPSJkb2N1bWVudCIgLz4KKyAgICAgICAgICAgIDx3c2RsOmlucHV0IG5hbWU9InNheUhpIj4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOmJpbmRpbmc+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiPgorICAgICAgICA8d3NkbDpwb3J0IGJpbmRpbmc9InRuczpIZWxsb1dvcmxkSW1wbFNlcnZpY2VTb2FwQmluZGluZyIgbmFtZT0iSGVsbG9Xb3JsZEltcGxQb3J0Ij4KKyAgICAgICAgICAgIDxubXI6YWRkcmVzcyBsb2NhdGlvbj0ibm1yOkhlbGxvV29ybGQiLz4KKyAgICAgICAgPC93c2RsOnBvcnQ+CisgICAgPC93c2RsOnNlcnZpY2U+Cis8L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlOTc0YgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvcG9tLnhtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtc29hcC1oYW5kbGVyLW9zZ2k8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5idW5kbGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBpVGVzdHMgOjogQ1hGIFNPQVAgSGFuZGxlciBPU0dpPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC1mcm9udGVuZC1qYXh3czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1jb2RlZ2VuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5nZW5lcmF0ZS10ZXN0LXNvdXJjZXM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZVJvb3Q+JHtiYXNlZGlyfS90YXJnZXQvZ2VuZXJhdGVkL3NyYy9tYWluL2phdmE8L3NvdXJjZVJvb3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbE9wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsPiR7YmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvYWRkTnVtYmVycy53c2RsPC93c2RsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxPcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsT3B0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD53c2RsMmphdmE8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8aW5zdHJ1Y3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9PC9CdW5kbGUtU3ltYm9saWNOYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgPEltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4Lmp3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC53c2RsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLmFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLm5hbWVzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwuc29hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwudHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC53cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwud3MuaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwud3MuaGFuZGxlci5zb2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYub3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmh0dHBfb3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICA8L0ltcG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgPFJlcXVpcmUtQnVuZGxlPm9yZy5hcGFjaGUuY3hmLmJ1bmRsZTwvUmVxdWlyZS1CdW5kbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RXhwb3J0LVBhY2thZ2U+b3JnLmFwYWNoZS5oYW5kbGVycy50eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmhhbmRsZXJzLG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuc29hcGhhbmRsZXI8L0V4cG9ydC1QYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3NvYXBoYW5kbGVyL0FkZE51bWJlcnNJbXBsLmphdmEgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zb2FwaGFuZGxlci9BZGROdW1iZXJzSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NTFlZDgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zb2FwaGFuZGxlci9BZGROdW1iZXJzSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuc29hcGhhbmRsZXI7CisKK2ltcG9ydCBqYXZheC5qd3MuSGFuZGxlckNoYWluOworaW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuaGFuZGxlcnMuQWRkTnVtYmVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLmhhbmRsZXJzLkFkZE51bWJlcnNGYXVsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmhhbmRsZXJzLnR5cGVzLkZhdWx0RGV0YWlsOworCisKK0BXZWJTZXJ2aWNlKG5hbWUgPSAiQWRkTnVtYmVycyIsCisgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2FwYWNoZS5vcmcvaGFuZGxlcnMiLAorICAgICAgICAgICAgcG9ydE5hbWUgPSAiQWRkTnVtYmVyc1BvcnQiLAorICAgICAgICAgICAgZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5oYW5kbGVycy5BZGROdW1iZXJzIiwKKyAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gIkFkZE51bWJlcnNTZXJ2aWNlIikKK0BIYW5kbGVyQ2hhaW4oZmlsZSA9ICIvL2NvbmZpZy9kZW1vX2hhbmRsZXJzLnhtbCIpCitwdWJsaWMgY2xhc3MgQWRkTnVtYmVyc0ltcGwgaW1wbGVtZW50cyBBZGROdW1iZXJzIHsKKworCisgICAgLyoqCisgICAgICogQHBhcmFtIG51bWJlcjEKKyAgICAgKiBAcGFyYW0gbnVtYmVyMgorICAgICAqIEByZXR1cm4gVGhlIHN1bQorICAgICAqIEB0aHJvd3MgQWRkTnVtYmVyc0V4Y2VwdGlvbgorICAgICAqICAgICAgICAgICAgIGlmIGFueSBvZiB0aGUgbnVtYmVycyB0byBiZSBhZGRlZCBpcyBuZWdhdGl2ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGFkZE51bWJlcnMoaW50IG51bWJlcjEsIGludCBudW1iZXIyKSB0aHJvd3MgQWRkTnVtYmVyc0ZhdWx0IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZGROdW1iZXJzIGNhbGxlZC4uLi4uIiArIG51bWJlcjEgKyAiOiIgKyBudW1iZXIyKTsKKyAgICAgICAgaWYgKG51bWJlcjEgPCAwIHx8IG51bWJlcjIgPCAwKSB7CisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJOZWdhdGl2ZSBudW1iZXIgY2FudCBiZSBhZGRlZCEiOworICAgICAgICAgICAgU3RyaW5nIGRldGFpbCA9ICJOdW1iZXJzOiAiICsgbnVtYmVyMSArICIsICIgKyBudW1iZXIyOworICAgICAgICAgICAgRmF1bHREZXRhaWwgZmF1bHQgPSBuZXcgRmF1bHREZXRhaWwoKTsKKyAgICAgICAgICAgIGZhdWx0LnNldE1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICBmYXVsdC5zZXRGYXVsdEluZm8oZGV0YWlsKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBBZGROdW1iZXJzRmF1bHQobWVzc2FnZSwgZmF1bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudW1iZXIxICsgbnVtYmVyMjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3NvYXBoYW5kbGVyL0xvZ2dpbmdIYW5kbGVyLmphdmEgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zb2FwaGFuZGxlci9Mb2dnaW5nSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNThhNjIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zb2FwaGFuZGxlci9Mb2dnaW5nSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLnNvYXBoYW5kbGVyOworCisKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLnNvYXAuU09BUE1lc3NhZ2U7CitpbXBvcnQgamF2YXgueG1sLndzLmhhbmRsZXIuTWVzc2FnZUNvbnRleHQ7CitpbXBvcnQgamF2YXgueG1sLndzLmhhbmRsZXIuc29hcC5TT0FQSGFuZGxlcjsKK2ltcG9ydCBqYXZheC54bWwud3MuaGFuZGxlci5zb2FwLlNPQVBNZXNzYWdlQ29udGV4dDsKKworLyoKKyAqIFRoaXMgc2ltcGxlIFNPQVBIYW5kbGVyIHdpbGwgb3V0cHV0IHRoZSBjb250ZW50cyBvZiBpbmNvbWluZworICogYW5kIG91dGdvaW5nIG1lc3NhZ2VzLgorICovCitwdWJsaWMgY2xhc3MgTG9nZ2luZ0hhbmRsZXIgaW1wbGVtZW50cyBTT0FQSGFuZGxlcjxTT0FQTWVzc2FnZUNvbnRleHQ+IHsKKworICAgIHByaXZhdGUgUHJpbnRTdHJlYW0gb3V0OworCisgICAgcHVibGljIExvZ2dpbmdIYW5kbGVyKCkgeworICAgICAgICBzZXRMb2dTdHJlYW0oU3lzdGVtLm91dCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0TG9nU3RyZWFtKFByaW50U3RyZWFtIHBzKSB7CisgICAgICAgIG91dCA9IHBzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGluaXQoTWFwIGMpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2dnaW5nSGFuZGxlciA6IGluaXQoKSBDYWxsZWQuLi4uIik7CisgICAgfQorCisgICAgcHVibGljIFNldDxRTmFtZT4gZ2V0SGVhZGVycygpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShTT0FQTWVzc2FnZUNvbnRleHQgc21jKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9nZ2luZ0hhbmRsZXIgOiBoYW5kbGVNZXNzYWdlIENhbGxlZC4uLi4iKTsKKyAgICAgICAgbG9nVG9TeXN0ZW1PdXQoc21jKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlRmF1bHQoU09BUE1lc3NhZ2VDb250ZXh0IHNtYykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvZ2dpbmdIYW5kbGVyIDogaGFuZGxlRmF1bHQgQ2FsbGVkLi4uLiIpOworICAgICAgICBsb2dUb1N5c3RlbU91dChzbWMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBub3RoaW5nIHRvIGNsZWFuIHVwCisgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2dnaW5nSGFuZGxlciA6IGNsb3NlKCkgQ2FsbGVkLi4uLiIpOworICAgIH0KKworICAgIC8vIG5vdGhpbmcgdG8gY2xlYW4gdXAKKyAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvZ2dpbmdIYW5kbGVyIDogZGVzdHJveSgpIENhbGxlZC4uLi4iKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoZSBNRVNTQUdFX09VVEJPVU5EX1BST1BFUlRZIGluIHRoZSBjb250ZXh0CisgICAgICogdG8gc2VlIGlmIHRoaXMgaXMgYW4gb3V0Z29pbmcgb3IgaW5jb21pbmcgbWVzc2FnZS4KKyAgICAgKiBXcml0ZSBhIGJyaWVmIG1lc3NhZ2UgdG8gdGhlIHByaW50IHN0cmVhbSBhbmQKKyAgICAgKiBvdXRwdXQgdGhlIG1lc3NhZ2UuIFRoZSB3cml0ZVRvKCkgbWV0aG9kIGNhbiB0aHJvdworICAgICAqIFNPQVBFeGNlcHRpb24gb3IgSU9FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBsb2dUb1N5c3RlbU91dChTT0FQTWVzc2FnZUNvbnRleHQgc21jKSB7CisgICAgICAgIEJvb2xlYW4gb3V0Ym91bmRQcm9wZXJ0eSA9IChCb29sZWFuKQorICAgICAgICAgICAgc21jLmdldChNZXNzYWdlQ29udGV4dC5NRVNTQUdFX09VVEJPVU5EX1BST1BFUlRZKTsKKworICAgICAgICBpZiAob3V0Ym91bmRQcm9wZXJ0eS5ib29sZWFuVmFsdWUoKSkgeworICAgICAgICAgICAgb3V0LnByaW50bG4oIlxuT3V0Ym91bmQgbWVzc2FnZToiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJcbkluYm91bmQgbWVzc2FnZToiKTsKKyAgICAgICAgfQorCisgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbWVzc2FnZS53cml0ZVRvKG91dCk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgb3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBoYW5kbGVyOiAiICsgZSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zb2FwaGFuZGxlci9TbWFsbE51bWJlckhhbmRsZXIuamF2YSBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL3NvYXBoYW5kbGVyL1NtYWxsTnVtYmVySGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MzY1YWQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9zb2FwaGFuZGxlci9TbWFsbE51bWJlckhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDEzNSBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5zb2FwaGFuZGxlcjsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkNvbnRleHQ7CitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkVsZW1lbnQ7CitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwud3MuTG9naWNhbE1lc3NhZ2U7CitpbXBvcnQgamF2YXgueG1sLndzLlByb3RvY29sRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC53cy5XZWJTZXJ2aWNlRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC53cy5oYW5kbGVyLkxvZ2ljYWxIYW5kbGVyOworaW1wb3J0IGphdmF4LnhtbC53cy5oYW5kbGVyLkxvZ2ljYWxNZXNzYWdlQ29udGV4dDsKK2ltcG9ydCBqYXZheC54bWwud3MuaGFuZGxlci5NZXNzYWdlQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLmhhbmRsZXJzLnR5cGVzLkFkZE51bWJlcnM7CitpbXBvcnQgb3JnLmFwYWNoZS5oYW5kbGVycy50eXBlcy5BZGROdW1iZXJzUmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5oYW5kbGVycy50eXBlcy5PYmplY3RGYWN0b3J5OworCisKKworLyoqCisgKiBoYW5kbGVzIGFkZGl0aW9uIG9mIHNtYWxsIG51bWJlcnMuCisgKi8KK3B1YmxpYyBjbGFzcyBTbWFsbE51bWJlckhhbmRsZXIgaW1wbGVtZW50cyBMb2dpY2FsSGFuZGxlcjxMb2dpY2FsTWVzc2FnZUNvbnRleHQ+IHsKKworCisgICAgLy8gSW1wbGVtZW50YXRpb24gb2YgamF2YXgueG1sLndzLmhhbmRsZXIuSGFuZGxlcgorCisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShMb2dpY2FsTWVzc2FnZUNvbnRleHQgbWVzc2FnZUNvbnRleHQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2dpY2FsTWVzc2FnZUhhbmRsZXIgaGFuZGxlTWVzc2FnZSBjYWxsZWQiKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgYm9vbGVhbiBvdXRib3VuZCA9IChCb29sZWFuKW1lc3NhZ2VDb250ZXh0LmdldChNZXNzYWdlQ29udGV4dC5NRVNTQUdFX09VVEJPVU5EX1BST1BFUlRZKTsKKworICAgICAgICAgICAgaWYgKG91dGJvdW5kKSB7CisgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBMb2dpY2FsTWVzc2FnZSBmcm9tIG91ciBjb250ZXh0CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBMb2dpY2FsTWVzc2FnZSBtc2cgPSBtZXNzYWdlQ29udGV4dC5nZXRNZXNzYWdlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGUgcGF5bG9hZCwgaWYgaXRzIGFuIEFkZE51bWJlcnMgcmVxdWVzdCwgd2UnbGwgaW50ZXJ2ZW5lCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBKQVhCQ29udGV4dCBqYXhiQ29udGV4dCA9IEpBWEJDb250ZXh0Lm5ld0luc3RhbmNlKE9iamVjdEZhY3RvcnkuY2xhc3MpOworICAgICAgICAgICAgICAgIE9iamVjdCBwYXlsb2FkID0gbXNnLmdldFBheWxvYWQoamF4YkNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkIGluc3RhbmNlb2YgSkFYQkVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9ICgoSkFYQkVsZW1lbnQpcGF5bG9hZCkuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIEFkZE51bWJlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgQWRkTnVtYmVycyByZXEgPSAoQWRkTnVtYmVycylwYXlsb2FkOworCisgICAgICAgICAgICAgICAgICAgIC8vIG5vdywgaWYgdGhlIGFyZ3VtZW50cyBhcmUgc21hbGwsIGxldCdzIGRvIHRoZSBjYWxjdWxhdGlvbiBoZXJlCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIGludCBhID0gcmVxLmdldEFyZzAoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGIgPSByZXEuZ2V0QXJnMSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChpc1NtYWxsKGEpICYmIGlzU21hbGwoYikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbnN3ZXIgPSBhICsgYjsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50ZigiU21hbGxOdW1iZXJIYW5kbGVyIGFkZE51bWJlcnMoJWQsICVkKSA9PSAlZFxuIiwgYSwgYiwgYW5zd2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9rLCB3ZSd2ZSBkb25lIHRoZSBjYWxjdWxhdGlvbiwgc28gYnVpbGQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSBhbmQgc2V0IGl0IGFzIHRoZSBwYXlsb2FkIG9mIHRoZSBtZXNzYWdlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZE51bWJlcnNSZXNwb25zZSByZXNwID0gbmV3IEFkZE51bWJlcnNSZXNwb25zZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5zZXRSZXR1cm4oYW5zd2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zZXRQYXlsb2FkKG5ldyBPYmplY3RGYWN0b3J5KCkuY3JlYXRlQWRkTnVtYmVyc1Jlc3BvbnNlKHJlc3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF4YkNvbnRleHQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2Ugc3JjID0gbXNnLmdldFBheWxvYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zZXRQYXlsb2FkKHNyYyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBtc2cuZ2V0UGF5bG9hZChqYXhiQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIEpBWEJFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9ICgoSkFYQkVsZW1lbnQpcGF5bG9hZCkuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgQWRkTnVtYmVyc1Jlc3BvbnNlIHJlc3AyID0gKEFkZE51bWJlcnNSZXNwb25zZSlwYXlsb2FkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3AyID09IHJlc3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU2VydmljZUV4Y2VwdGlvbigiU2hvdWxkbid0IGJlIHRoZSBzYW1lIG9iamVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5hbGx5LCByZXR1cm4gZmFsc2UsIGluZGljYXRpbmcgdGhhdCByZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzaW5nIHN0b3BzIGhlcmUgYW5kIG91ciBhbnN3ZXIgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgdG8gdGhlIGNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gY2F0Y2ggKEpBWEJFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBQcm90b2NvbEV4Y2VwdGlvbihleCk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhbmRsZUZhdWx0KExvZ2ljYWxNZXNzYWdlQ29udGV4dCBtZXNzYWdlQ29udGV4dCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvZ2ljYWxNZXNzYWdlSGFuZGxlciBoYW5kbGVGYXVsdCBjYWxsZWQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2VDb250ZXh0KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjbG9zZShNZXNzYWdlQ29udGV4dCBjdHgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2dpY2FsSGFuZGxlciBjbG9zZSBjYWxsZWQiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBpbml0KE1hcCBjb25maWcpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2dpY2FsSGFuZGxlciBpbml0IGNhbGxlZCIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9naWNhbEhhbmRsZXIgY2xvc2UgY2FsbGVkIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzU21hbGwoaW50IGkpIHsKKyAgICAgICAgcmV0dXJuIGkgPiAwICYmIGkgPD0gMTA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1zb2FwLWhhbmRsZXItb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzOWQxZgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKQEAgLTAsMCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFNUQVJUIFNOSVBQRVQ6IGJlYW5zIC0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QKKyAgICAgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2pheHdzLnhzZAorICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpL3NwcmluZy1vc2dpLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1odHRwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL29zZ2kvY3hmLWV4dGVuc2lvbi1vc2dpLnhtbCIgLz4KKworICAgIDxqYXh3czplbmRwb2ludCBpZD0iU29hcEhhbmRsZXJFbmRwb2ludCIKKyAgICAgICAgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuc29hcGhhbmRsZXIuQWRkTnVtYmVyc0ltcGwiCisgICAgICAgIGFkZHJlc3M9Ii9Tb2FwSGFuZGxlciIKKyAgICAgICAgd3NkbExvY2F0aW9uPSJ3c2RsL2FkZE51bWJlcnMud3NkbCIKKyAgICAgICAgZW5kcG9pbnROYW1lPSJlOkFkZE51bWJlcnNQb3J0IgorICAgICAgICBzZXJ2aWNlTmFtZT0iczpBZGROdW1iZXJzU2VydmljZSIKKyAgICAgICAgeG1sbnM6ZT0iaHR0cDovL2FwYWNoZS5vcmcvaGFuZGxlcnMiCisgICAgICAgICAgICB4bWxuczpzPSJodHRwOi8vYXBhY2hlLm9yZy9oYW5kbGVycyIvPgorCisgICAgICAgCisgICAgICAgPGpheHdzOmNsaWVudCBpZD0iY2xpZW50IiAKKyAgICAgICAgICAgICBzZXJ2aWNlQ2xhc3M9Im9yZy5hcGFjaGUuaGFuZGxlcnMuQWRkTnVtYmVycyIgICAgCisgICAgICAgIGVuZHBvaW50TmFtZT0iZTpBZGROdW1iZXJzUG9ydCIKKyAgICAgICAgc2VydmljZU5hbWU9InM6QWRkTnVtYmVyc1NlcnZpY2UiCisgICAgICAgIHhtbG5zOmU9Imh0dHA6Ly9hcGFjaGUub3JnL2hhbmRsZXJzIgorICAgICAgICAgICAgeG1sbnM6cz0iaHR0cDovL2FwYWNoZS5vcmcvaGFuZGxlcnMiCisgICAgICAgICAgICAgd3NkbExvY2F0aW9uPSJ3c2RsL2FkZE51bWJlcnMud3NkbCIKKyAgICAgICAgICAgICBhZGRyZXNzPSJodHRwOi8vbG9jYWxob3N0OjgwODAvY3hmL1NvYXBIYW5kbGVyIi8+ICAgCisgCisgICAgICAgPG9zZ2k6c2VydmljZSBpZD0idGVzdEhlbGxvV29ybGQiIHJlZj0iY2xpZW50IgorICAgICAgICAgICAgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLmhhbmRsZXJzLkFkZE51bWJlcnMiLz4KKworICAgICAgIAorPC9iZWFucz4KKzwhLS0gRU5EIFNOSVBQRVQ6IGJlYW5zIC0tPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1zb2FwLWhhbmRsZXItb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvY29uZmlnL2RlbW9faGFuZGxlcnMueG1sIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1zb2FwLWhhbmRsZXItb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvY29uZmlnL2RlbW9faGFuZGxlcnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZDI3YjUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXNvYXAtaGFuZGxlci1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9jb25maWcvZGVtb19oYW5kbGVycy54bWwKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGhhbmRsZXItY2hhaW5zIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIAoreG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCit4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSI+CisgICAgPGhhbmRsZXItY2hhaW4+CisgICAgPGhhbmRsZXI+CisgICAgICAgIDxoYW5kbGVyLW5hbWU+TG9nZ2luZ0hhbmRsZXI8L2hhbmRsZXItbmFtZT4KKyAgICAgICAgPGhhbmRsZXItY2xhc3M+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5zb2FwaGFuZGxlci5Mb2dnaW5nSGFuZGxlcjwvaGFuZGxlci1jbGFzcz4KKyAgICA8L2hhbmRsZXI+CisgICAgPC9oYW5kbGVyLWNoYWluPgorPC9oYW5kbGVyLWNoYWlucz4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvYWRkTnVtYmVycy53c2RsIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi1zb2FwLWhhbmRsZXItb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9hZGROdW1iZXJzLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlNTZlMwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtc29hcC1oYW5kbGVyLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvYWRkTnVtYmVycy53c2RsCkBAIC0wLDAgKzEsOTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGRlZmluaXRpb25zCisgICAgbmFtZT0iQWRkTnVtYmVycyIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9hcGFjaGUub3JnL2hhbmRsZXJzIgorICAgIHhtbG5zOnRucz0iaHR0cDovL2FwYWNoZS5vcmcvaGFuZGxlcnMiCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIKKyAgICB4bWxuczp4MT0iaHR0cDovL2FwYWNoZS5vcmcvaGFuZGxlcnMvdHlwZXMiPgorICAgIDx0eXBlcz4KKyAgICAgICAgPHhzZDpzY2hlbWEKKyAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcvaGFuZGxlcnMvdHlwZXMiCisgICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisKKyAgICAgICAgICAgIDxjb21wbGV4VHlwZSBuYW1lPSJhZGROdW1iZXJzUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4c2Q6aW50IiAvPgorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYWRkTnVtYmVyc1Jlc3BvbnNlIiB0eXBlPSJ4MTphZGROdW1iZXJzUmVzcG9uc2UiLz4KKworICAgICAgICAgICAgPGNvbXBsZXhUeXBlIG5hbWU9ImFkZE51bWJlcnMiPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYXJnMCIgdHlwZT0ieHNkOmludCIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iYXJnMSIgdHlwZT0ieHNkOmludCIgLz4KKyAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFkZE51bWJlcnMiIHR5cGU9IngxOmFkZE51bWJlcnMiLz4KKworICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iRmF1bHREZXRhaWwiIHR5cGU9IngxOkZhdWx0RGV0YWlsIiAvPgorICAgICAgICAgICAgPGNvbXBsZXhUeXBlIG5hbWU9IkZhdWx0RGV0YWlsIj4KKyAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImZhdWx0SW5mbyIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibWVzc2FnZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KKyAgICAgICAgPC94c2Q6c2NoZW1hPgorICAgIDwvdHlwZXM+CisgICAgPG1lc3NhZ2UgbmFtZT0iYWRkTnVtYmVycyI+CisgICAgICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9IngxOmFkZE51bWJlcnMiIC8+CisgICAgPC9tZXNzYWdlPgorICAgIDxtZXNzYWdlIG5hbWU9ImFkZE51bWJlcnNSZXNwb25zZSI+CisgICAgICAgIDxwYXJ0IG5hbWU9InJlc3VsdCIgZWxlbWVudD0ieDE6YWRkTnVtYmVyc1Jlc3BvbnNlIiAvPgorICAgIDwvbWVzc2FnZT4KKyAgICA8bWVzc2FnZSBuYW1lPSJhZGROdW1iZXJzRmF1bHQiPgorICAgICAgICA8cGFydCBuYW1lPSJBZGROdW1iZXJzRmF1bHQiIGVsZW1lbnQ9IngxOkZhdWx0RGV0YWlsIiAvPgorICAgIDwvbWVzc2FnZT4KKyAgICA8cG9ydFR5cGUgbmFtZT0iQWRkTnVtYmVycyI+CisgICAgICAgIDxvcGVyYXRpb24gbmFtZT0iYWRkTnVtYmVycyI+CisgICAgICAgICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmFkZE51bWJlcnMiIC8+CisgICAgICAgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczphZGROdW1iZXJzUmVzcG9uc2UiIC8+CisgICAgICAgICAgICA8ZmF1bHQgbmFtZT0iYWRkTnVtYmVyc0ZhdWx0IiBtZXNzYWdlPSJ0bnM6YWRkTnVtYmVyc0ZhdWx0Ii8+CisgICAgICAgIDwvb3BlcmF0aW9uPgorICAgIDwvcG9ydFR5cGU+CisgICAgPGJpbmRpbmcgbmFtZT0iQWRkTnVtYmVyc0JpbmRpbmciIHR5cGU9InRuczpBZGROdW1iZXJzIj4KKyAgICAgICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50IiAvPgorICAgICAgICA8b3BlcmF0aW9uIG5hbWU9ImFkZE51bWJlcnMiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIgLz4KKyAgICAgICAgICAgIDxpbnB1dD4KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvaW5wdXQ+CisgICAgICAgICAgICA8b3V0cHV0PgorICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgorICAgICAgICAgICAgPC9vdXRwdXQ+CisgICAgICAgICAgICA8ZmF1bHQgbmFtZT0iYWRkTnVtYmVyc0ZhdWx0Ij4KKyAgICAgICAgICAgICAgICA8c29hcDpmYXVsdCBuYW1lPSJhZGROdW1iZXJzRmF1bHQiIHVzZT0ibGl0ZXJhbCIgLz4KKyAgICAgICAgICAgIDwvZmF1bHQ+CisgICAgICAgIDwvb3BlcmF0aW9uPgorICAgIDwvYmluZGluZz4KKyAgICA8c2VydmljZSBuYW1lPSJBZGROdW1iZXJzU2VydmljZSI+CisgICAgICAgIDxwb3J0IG5hbWU9IkFkZE51bWJlcnNQb3J0IiBiaW5kaW5nPSJ0bnM6QWRkTnVtYmVyc0JpbmRpbmciPgorICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MTgxL2N4Zi9Tb2FwSGFuZGxlciIgLz4KKyAgICAgICAgPC9wb3J0PgorICAgIDwvc2VydmljZT4KKzwvZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZTViMWEKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvcG9tLnhtbApAQCAtMCwwICsxLDg0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi13cy1zZWN1cml0eS1vc2dpPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+YnVuZGxlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogaVRlc3RzIDo6IENYRiBXUyBTZWN1cml0eSBPU0dpPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS53cy5zZWN1cml0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndzczRqPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguandzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC5iaW5kLmFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgud3NkbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEEtSU5GLmN4ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYub3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnNwcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi5idXMucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuY29uZmlndXJhdGlvbi5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYudHJhbnNwb3J0Lmh0dHBfb3NnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmN4Zi53cy5zZWN1cml0eS53c3M0aiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS53cy5zZWN1cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZworICAgICAgICAgICAgICAgICAgICAgICAgPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmPC9FeHBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxSZXF1aXJlLUJ1bmRsZT5vcmcuYXBhY2hlLmN4Zi5idW5kbGU8L1JlcXVpcmUtQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTRkYWQzYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvSGVsbG9Xb3JsZC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworLy8gU1RBUlQgU05JUFBFVDogc2VydmljZQorcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmOworCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7CisKK0BXZWJTZXJ2aWNlCitwdWJsaWMgaW50ZXJmYWNlIEhlbGxvV29ybGQgeworICAgIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCk7Cit9CisvLyBFTkQgU05JUFBFVDogc2VydmljZQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL2N4Zi13cy1zZWN1cml0eS1vc2dpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL2N4Zi9IZWxsb1dvcmxkSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg1ZmQyNWYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL0hlbGxvV29ybGRJbXBsLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisvLyBTVEFSVCBTTklQUEVUOiBzZXJ2aWNlCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGY7CisKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKKworQFdlYlNlcnZpY2UoZW5kcG9pbnRJbnRlcmZhY2UgPSAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIikKK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGQgeworCisgICAgcHVibGljIFN0cmluZyBzYXlIaShTdHJpbmcgdGV4dCkgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB0ZXh0OworICAgIH0KK30KKy8vIEVORCBTTklQUEVUOiBzZXJ2aWNlCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL1NlcnZlclBhc3N3b3JkQ2FsbGJhY2suamF2YSBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9jeGYvU2VydmVyUGFzc3dvcmRDYWxsYmFjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MTUzMWMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvY3hmL1NlcnZlclBhc3N3b3JkQ2FsbGJhY2suamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNhbGxiYWNrOworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2FsbGJhY2tIYW5kbGVyOworaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suVW5zdXBwb3J0ZWRDYWxsYmFja0V4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLndzLnNlY3VyaXR5LldTUGFzc3dvcmRDYWxsYmFjazsKKworcHVibGljIGNsYXNzIFNlcnZlclBhc3N3b3JkQ2FsbGJhY2sgaW1wbGVtZW50cyBDYWxsYmFja0hhbmRsZXIgeworCisgICAgcHVibGljIHZvaWQgaGFuZGxlKENhbGxiYWNrW10gY2FsbGJhY2tzKSB0aHJvd3MgSU9FeGNlcHRpb24sIFVuc3VwcG9ydGVkQ2FsbGJhY2tFeGNlcHRpb24geworCisgICAgICAgIFdTUGFzc3dvcmRDYWxsYmFjayBwYyA9IChXU1Bhc3N3b3JkQ2FsbGJhY2spIGNhbGxiYWNrc1swXTsKKworICAgICAgICBpZiAocGMuZ2V0SWRlbnRpZmVyKCkuZXF1YWxzKCJqb2UiKSkgeworICAgICAgICAgICAgcGMuc2V0UGFzc3dvcmQoInBhc3N3b3JkIik7CisgICAgICAgIH0KKyAgICB9CisKK30KKworCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvY3hmLXdzLXNlY3VyaXR5LW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy9iZWFucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2ZlMzI2NQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9jeGYtd3Mtc2VjdXJpdHktb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nL2JlYW5zLnhtbApAQCAtMCwwICsxLDU1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8IS0tIFNUQVJUIFNOSVBQRVQ6IGJlYW5zIC0tPgorPGJlYW5zIHhtbG5zPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6amF4d3M9Imh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9qYXh3cyIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCisgICAgaHR0cDovL2N4Zi5hcGFjaGUub3JnL2pheHdzIGh0dHA6Ly9jeGYuYXBhY2hlLm9yZy9zY2hlbWFzL2pheHdzLnhzZCI+CisKKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL2N4Zi54bWwiIC8+CisgICAgPGltcG9ydCByZXNvdXJjZT0iY2xhc3NwYXRoOk1FVEEtSU5GL2N4Zi9jeGYtZXh0ZW5zaW9uLXNvYXAueG1sIiAvPgorICAgIDxpbXBvcnQgcmVzb3VyY2U9ImNsYXNzcGF0aDpNRVRBLUlORi9jeGYvY3hmLWV4dGVuc2lvbi1odHRwLnhtbCIgLz4KKyAgICA8aW1wb3J0IHJlc291cmNlPSJjbGFzc3BhdGg6TUVUQS1JTkYvY3hmL29zZ2kvY3hmLWV4dGVuc2lvbi1vc2dpLnhtbCIgLz4KKworICAgIDxiZWFuIGlkPSJteVBhc3N3b3JkQ2FsbGJhY2siIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLlNlcnZlclBhc3N3b3JkQ2FsbGJhY2siLz4KKworICAgIDxqYXh3czplbmRwb2ludCBpZD0iaGVsbG9Xb3JsZCIKKyAgICAgICAgaW1wbGVtZW50b3I9Im9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZEltcGwiCisgICAgICAgIGFkZHJlc3M9Ii9IZWxsb1dvcmxkU2VjdXJpdHkiPgorICAgICAgICA8amF4d3M6aW5JbnRlcmNlcHRvcnM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5jeGYud3Muc2VjdXJpdHkud3NzNGouV1NTNEpJbkludGVyY2VwdG9yIj4KKyAgICAgICAgICAgICAgICA8Y29uc3RydWN0b3ItYXJnPgorICAgICAgICAgICAgICAgICAgICA8bWFwPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0iYWN0aW9uIiB2YWx1ZT0iVXNlcm5hbWVUb2tlbiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudHJ5IGtleT0icGFzc3dvcmRUeXBlIiB2YWx1ZT0iUGFzc3dvcmRUZXh0Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW50cnkga2V5PSJwYXNzd29yZENhbGxiYWNrUmVmIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVmIGJlYW49Im15UGFzc3dvcmRDYWxsYmFjayIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKworICAgICAgICAgICAgICAgICAgICA8L21hcD4KKyAgICAgICAgICAgICAgICA8L2NvbnN0cnVjdG9yLWFyZz4KKyAgICAgICAgICAgIDwvYmVhbj4KKyAgICAgICAgPC9qYXh3czppbkludGVyY2VwdG9ycz4KKyAgICA8L2pheHdzOmVuZHBvaW50PgorCis8L2JlYW5zPgorPCEtLSBFTkQgU05JUFBFVDogYmVhbnMgLS0+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OGQyYjIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvcG9tLnhtbApAQCAtMCwwICsxLDQ2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICAKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmV4YW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHM8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBpVGVzdHM8L25hbWU+CisKKyAgICA8bW9kdWxlcz4KKyAgICAgICAgPG1vZHVsZT50ZXN0LWNvbW1vbnM8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtaHR0cC1vc2dpPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y3hmLXdzLXNlY3VyaXR5LW9zZ2k8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtam1zLW9zZ2k8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtbm1yLW9zZ2k8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtc29hcC1oYW5kbGVyLW9zZ2k8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtaGFuZGxlci1jZmc8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtbXRvbS1vc2dpPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+dGVzdHM8L21vZHVsZT4KKyAgICA8L21vZHVsZXM+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0LWNvbW1vbnMvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0LWNvbW1vbnMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZmNzE3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3QtY29tbW9ucy9wb20ueG1sCkBAIC0wLDAgKzEsMTAwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLnRlc3QtY29tbW9uczwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmJ1bmRsZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IGlUZXN0cyA6OiBDb21tb24gQ2xhc3NlczwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtZnJvbnRlbmQtamF4d3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXdzLW1ldGFkYXRhXzIuMF9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtY29kZWdlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtdGVzdC1zb3VyY2VzPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VSb290PiR7YmFzZWRpcn0vdGFyZ2V0L2dlbmVyYXRlZC9zcmMvbWFpbi9qYXZhPC9zb3VyY2VSb290PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsT3B0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxPcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbD4ke2Jhc2VkaXJ9L3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2hlbGxvX3dvcmxkLndzZGw8L3dzZGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3NkbE9wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxPcHRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzZGwyamF2YTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8QnVuZGxlLVN5bWJvbGljTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L0J1bmRsZS1TeW1ib2xpY05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8SW1wb3J0LVBhY2thZ2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXguandzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LndzZGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZheC54bWwubmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmF4LnhtbC53cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRBLUlORi5jeGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUQS1JTkYuY3hmLm9zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmJ1cy5zcHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS5jeGYuYnVzLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmNvbmZpZ3VyYXRpb24uc3ByaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUuY3hmLnRyYW5zcG9ydC5odHRwX29zZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZworICAgICAgICAgICAgICAgICAgICAgICAgPC9JbXBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxFeHBvcnQtUGFja2FnZT5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmPC9FeHBvcnQtUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxSZXF1aXJlLUJ1bmRsZT5vcmcuYXBhY2hlLmN4Zi5idW5kbGU8L1JlcXVpcmUtQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICA8L2luc3RydWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0LWNvbW1vbnMvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGQud3NkbCBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0LWNvbW1vbnMvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG9fd29ybGQud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y2NmJkCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3QtY29tbW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9oZWxsb193b3JsZC53c2RsCkBAIC0wLDAgKzEsNzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHdzZGw6ZGVmaW5pdGlvbnMgbmFtZT0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlIiAKKyAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIiAKKyAgICAgICAgICAgICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAorICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgICAgPHdzZGw6dHlwZXM+CisgICAgICAgIDx4c2Q6c2NoZW1hIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgCisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiIAorICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9jeGYuZXhhbXBsZXMuc2VydmljZW1peC5hcGFjaGUub3JnLyIgCisgICAgICAgICAgICAgICAgICAgIHhtbG5zOnRucz0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIiAKKyAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2F5SGkiIHR5cGU9InRuczpzYXlIaSIgLz4KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImFyZzAiIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzYXlIaVJlc3BvbnNlIiB0eXBlPSJ0bnM6c2F5SGlSZXNwb25zZSIgLz4KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0icmV0dXJuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+CisgICAgICAgIDwveHNkOnNjaGVtYT4KKyAgICA8L3dzZGw6dHlwZXM+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJzYXlIaVJlc3BvbnNlIj4KKyAgICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6c2F5SGlSZXNwb25zZSIgbmFtZT0icGFyYW1ldGVycyI+CisgICAgICAgIDwvd3NkbDpwYXJ0PgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0ic2F5SGkiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpzYXlIaSIgbmFtZT0icGFyYW1ldGVycyI+CisgICAgICAgIDwvd3NkbDpwYXJ0PgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkhlbGxvV29ybGQiPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0ic2F5SGkiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOnNheUhpIiBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOnNheUhpUmVzcG9uc2UiIG5hbWU9InNheUhpUmVzcG9uc2UiPgorICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KKyAgICAgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgICA8L3dzZGw6cG9ydFR5cGU+CisgICAgPHdzZGw6YmluZGluZyBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2VTb2FwQmluZGluZyIgdHlwZT0idG5zOkhlbGxvV29ybGQiPgorICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIiBzdHlsZT0iZG9jdW1lbnQiIC8+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBuYW1lPSJzYXlIaSI+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0ic2F5SGlSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgIDwvd3NkbDpiaW5kaW5nPgorICAgIDx3c2RsOnNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlIj4KKyAgICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6SGVsbG9Xb3JsZEltcGxTZXJ2aWNlU29hcEJpbmRpbmciIG5hbWU9IkhlbGxvV29ybGRJbXBsUG9ydCI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgxODEvY3hmL0hlbGxvV29ybGQiIC8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvdGVzdHMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWQ1ZDUyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3BvbS54bWwKQEAgLTAsMCArMSw0ODMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMudGVzdHM8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBpVGVzdHMgOjogSW50ZWdyYXRpb24gVGVzdHM8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vc2dpPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLm9zZ2kuY29tcGVuZGl1bTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5wbGF0Zm9ybS50ZXN0aW5nPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnBsYXRmb3JtLnRlc3Rpbmcuc3VwcG9ydDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLmZlbGl4LmZpbGVpbnN0YWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLm9zZ2kuY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUua2FyYWY8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLmthcmFmLm1hbmFnZW1lbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZnVzZXNvdXJjZS5jb21tb25tYW48L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLW1hbmFnZW1lbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3NnaTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5vc2dpLmNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamF4Yi1pbXBsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qYXN5cHQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpldHR5PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5uZWV0aGk8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnNhYWotaW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndvb2RzdG94LWNvcmUtYXNsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheDItYXBpPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy53c2RsNGo8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuc2NoZW1hPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+WG1sU2NoZW1hPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxyZXNvbHZlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY2dsaWI8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1idW5kbGU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMuanJhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qcmE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+eG1sLWFwaXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnhtbC1hcGlzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmpheGVuPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXhlbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5qYmk8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguamJpLnJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIubWFuYWdlbWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLm9zZ2k8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZG9jdW1lbnQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZG9jdW1lbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4Zi50cmFuc3BvcnQubm1yPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuZmVsaXgucHJlZnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcub3NnaS5jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5vc2dpLmNvbXBlbmRpdW08L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisKKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1vc2dpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLWpheHJzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy50ZXN0LWNvbW1vbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1odHRwLW9zZ2k8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi13cy1zZWN1cml0eS1vc2dpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtam1zLW9zZ2k8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1ubXItb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMuY3hmLW10b20tb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMuY3hmLXNvYXAtaGFuZGxlci1vc2dpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtaGFuZGxlci1jZmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtd3MtYWRkcmVzc2luZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ubXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc3RheC1hcGktMS4wPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNhYWotYXBpLTEuMzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXhiLWFwaS0ke2pheGIuYXBpLnZlcnNpb259PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpheHdzLWFwaS0ke2pheHdzLWFwaS52ZXJzaW9ufTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5hY3RpdmF0aW9uLWFwaS0xLjE8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tYW5ub3RhdGlvbl8xLjBfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmphdmF4Lm1haWw8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYWlsPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXNlcnZsZXRfMy4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tajJlZS1jb25uZWN0b3JfMS41X3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tajJlZS1tYW5hZ2VtZW50XzEuMV9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWp0YV8xLjFfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1wb29sPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS54YmVhbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnhiZWFuLXNwcmluZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLXJhPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvbnNvbGU8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtcG9vbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rYWhhZGI8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXNhYWpfMS4zX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LndlYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC13ZWItYXBpPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9wczRqLnBheC53ZWI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYXgtd2ViLXNwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vcHM0ai5wYXgud2ViPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGF4LXdlYi1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9wczRqLnBheC53ZWI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYXgtd2ViLWpldHR5PC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9wczRqLnBheC53ZWI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYXgtd2ViLWV4dGVuZGVyLXdoaXRlYm9hcmQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWNvbnRleHQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWFvcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctam1zPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy10eDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamJpLWFwaS0xLjA8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmJjZWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhlcmNlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGFsYW48L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhtbHNlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtY29kZWM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvZGVjPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWh0dHBjbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFiZGVyYTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5qZXR0aXNvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpldHRpc29uPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxiZWFuczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qc3IzMTEtYXBpLTEuMTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1sYW5nPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy52ZWxvY2l0eTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3JvPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qb3NxbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUud3Muc2VjdXJpdHk8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3M0ajwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3BlbnNhbWw8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmRlcGVuZHMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmdlbmVyYXRlLWRlcGVuZHMtZmlsZTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Z2VuZXJhdGUtZGVwZW5kcy1maWxlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxmb3JrTW9kZT5wZXJ0ZXN0PC9mb3JrTW9kZT4KKyAgICAgICAgICAgICAgICAgICAgPHN5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHRvIHdvcmsgYXJvdW5kIHRoZSB4bWwgcmVzb2x2ZXIgYnVnIC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnhtbC5jYXRhbG9nLmZpbGVzPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZSAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC9zeXN0ZW1Qcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICA8YXJnTGluZT4tRHhtbC5jYXRhbG9nLmZpbGVzPTwvYXJnTGluZT4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9DWEZOTVJJbnRlZ3JhdGlvblRlc3QuamF2YSBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9DWEZOTVJJbnRlZ3JhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjFkNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L2V4YW1wbGVzL0NYRk5NUkludGVncmF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5qYXIuTWFuaWZlc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOworCitpbXBvcnQgb3JnLmFwYWNoZS5jeGYuQnVzOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZDsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguamJpLmpheHAuU3RyaW5nU291cmNlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkNoYW5uZWw7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRW5kcG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuTk1SOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlBhdHRlcm47CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGkuU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5wbGF0Zm9ybS50ZXN0aW5nLnN1cHBvcnQuQWJzdHJhY3RJbnRlZ3JhdGlvblRlc3Q7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpLnRlc3QucGxhdGZvcm0uT3NnaVBsYXRmb3JtOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5Db25zdGFudHM7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLlNlcnZpY2VSZWZlcmVuY2U7CisKK3B1YmxpYyBjbGFzcyBDWEZOTVJJbnRlZ3JhdGlvblRlc3QgZXh0ZW5kcyBBYnN0cmFjdEludGVncmF0aW9uVGVzdCB7CisKKyAgICBwcml2YXRlIFByb3BlcnRpZXMgZGVwZW5kZW5jaWVzOworCisgICAgLyoqCisgICAgICogVGhlIG1hbmlmZXN0IHRvIHVzZSBmb3IgdGhlICJ2aXJ0dWFsIGJ1bmRsZSIgY3JlYXRlZAorICAgICAqIG91dCBvZiB0aGUgdGVzdCBjbGFzc2VzIGFuZCByZXNvdXJjZXMgaW4gdGhpcyBwcm9qZWN0CisgICAgICoKKyAgICAgKiBUaGlzIGlzIGFjdHVhbGx5IHRoZSBib2lsZXJwbGF0ZSBtYW5pZmVzdCB3aXRoIG9uZSBhZGRpdGlvbmFsCisgICAgICogaW1wb3J0LXBhY2thZ2UgYWRkZWQuIFdlIHNob3VsZCBwcm92aWRlIGEgc2ltcGxlciBjdXN0b21pemF0aW9uCisgICAgICogcG9pbnQgZm9yIHN1Y2ggdXNlIGNhc2VzIHRoYXQgZG9lc24ndCByZXF1aXJlIGR1cGxpY2F0aW9uCisgICAgICogb2YgdGhlIGVudGlyZSBtYW5pZmVzdC4uLgorICAgICAqLworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TWFuaWZlc3RMb2NhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICJjbGFzc3BhdGg6b3JnL2FwYWNoZS9zZXJ2aWNlbWl4L01BTklGRVNULk1GIjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHBhY2thZ2VkIE9TR2kgYnVuZGxlcyB0byBiZSBpbnN0YWxsZWQKKyAgICAgKiBmb3IgdGhpcyB0ZXN0LiBWYWx1ZXMgYXJlIFNwcmluZyByZXNvdXJjZSBwYXRocy4gVGhlIGJ1bmRsZXMKKyAgICAgKiB3ZSB3YW50IHRvIHVzZSBhcmUgcGFydCBvZiB0aGUgc2FtZSBtdWx0aS1wcm9qZWN0IG1hdmVuCisgICAgICogYnVpbGQgYXMgdGhpcyBwcm9qZWN0IGlzLiBIZW5jZSB3ZSB1c2UgdGhlIGxvY2FsTWF2ZW5BcnRpZmFjdAorICAgICAqIGhlbHBlciBtZXRob2QgdG8gZmluZCB0aGUgYnVuZGxlcyBwcm9kdWNlZCBieSB0aGUgcGFja2FnZQorICAgICAqIHBoYXNlIG9mIHRoZSBtYXZlbiBidWlsZCAodGhlc2UgdGVzdHMgd2lsbCBydW4gYWZ0ZXIgdGhlCisgICAgICogcGFja2FnaW5nIHBoYXNlLCBpbiB0aGUgaW50ZWdyYXRpb24tdGVzdCBwaGFzZSkuCisgICAgICoKKyAgICAgKiBKVW5pdCwgY29tbW9ucy1sb2dnaW5nLCBzcHJpbmctY29yZSBhbmQgdGhlIHNwcmluZyBPU0dpCisgICAgICogdGVzdCBidW5kbGUgYXJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgc28gZG8gbm90IG5lZWQKKyAgICAgKiB0byBiZSBzcGVjaWZpZWQgaGVyZS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0VGVzdEJ1bmRsZXNOYW1lcygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuZmVsaXgiLCAib3JnLmFwYWNoZS5mZWxpeC5wcmVmcyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmFjdGl2YXRpb24tYXBpLTEuMSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzIiwgImdlcm9uaW1vLWFubm90YXRpb25fMS4wX3NwZWMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcyIsICJnZXJvbmltby1zZXJ2bGV0XzMuMF9zcGVjIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MiLCAiZ2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcyIsICJnZXJvbmltby1qMmVlLWNvbm5lY3Rvcl8xLjVfc3BlYyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzIiwgImdlcm9uaW1vLWp0YV8xLjFfc3BlYyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpiaS1hcGktMS4wIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc3RheC1hcGktMS4wIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc2Fhai1hcGktMS4zIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4Yi1hcGktMi4yIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4d3MtYXBpLTIuMiIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hc20iKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY2dsaWIiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamF4Yi1pbXBsIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm5lZXRoaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zYWFqLWltcGwiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1wb29sIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5jb2RlaGF1cy53b29kc3RveCIsICJzdGF4Mi1hcGkiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmNvZGVoYXVzLndvb2RzdG94IiwgIndvb2RzdG94LWNvcmUtYXNsIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLndzZGw0aiIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLndzLmNvbW1vbnMuc2NoZW1hIiwgIlhtbFNjaGVtYSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxyZXNvbHZlciIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5iY2VsIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhlcmNlcyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54YWxhbiIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxzZWMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamV0dHkiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgiamF2YXgubWFpbCIsICJtYWlsIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29kZWMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYWJkZXJhIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5jb2RlaGF1cy5qZXR0aXNvbiIsICJqZXR0aXNvbiIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxiZWFucyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpzcjMxMS1hcGktMS4xIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItYXBpIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItc3BpIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItcnVudGltZSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcub3BzNGoucGF4LndlYiIsICJwYXgtd2ViLWpldHR5IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItZXh0ZW5kZXItd2hpdGVib2FyZCIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgiLCAic2VydmljZW1peC11dGlscyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuZnVzZXNvdXJjZS5jb21tb25tYW4iLCAiY29tbW9ucy1tYW5hZ2VtZW50IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUua2FyYWYiLCAib3JnLmFwYWNoZS5rYXJhZi5tYW5hZ2VtZW50IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuY3hmIiwgImN4Zi1idW5kbGUiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZiIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXIiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tciIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuY29yZSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIubWFuYWdlbWVudCIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIub3NnaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZG9jdW1lbnQiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmRvY3VtZW50IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLnRlc3QtY29tbW9ucyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtbm1yLW9zZ2kiKSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAKKyAgICAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Tk1ST3NnaSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisgICAgICAgIHdhaXRPbkNvbnRleHRDcmVhdGlvbigib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtbm1yLW9zZ2kiKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgICAgICBOTVIgbm1yID0gZ2V0T3NnaVNlcnZpY2UoTk1SLmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChubXIpOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIFNlcnZpY2VSZWZlcmVuY2UgcmVmID0gYnVuZGxlQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKEhlbGxvV29ybGQuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiU2VydmljZSBSZWZlcmVuY2UgaXMgbnVsbCIsIHJlZik7CisgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZCBoZWxsb1dvcmxkID0gbnVsbDsKKworICAgICAgICBoZWxsb1dvcmxkID0gKG9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuSGVsbG9Xb3JsZCkgYnVuZGxlQ29udGV4dC5nZXRTZXJ2aWNlKHJlZik7CisgICAgICAgIGFzc2VydE5vdE51bGwoIkNhbm5vdCBmaW5kIHRoZSBzZXJ2aWNlIiwgaGVsbG9Xb3JsZCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBCb25qb3VyIiwgaGVsbG9Xb3JsZC5zYXlIaSgiQm9uam91ciIpKTsKKyAKKyAgICAKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgTWFuaWZlc3QgZ2V0TWFuaWZlc3QoKSB7CisgICAgICAgIE1hbmlmZXN0IG1mID0gc3VwZXIuZ2V0TWFuaWZlc3QoKTsKKyAgICAgICAgU3RyaW5nIGltcG9ydFAgPSBtZi5nZXRNYWluQXR0cmlidXRlcygpLmdldFZhbHVlKENvbnN0YW50cy5JTVBPUlRfUEFDS0FHRSk7CisgICAgICAgIG1mLmdldE1haW5BdHRyaWJ1dGVzKCkucHV0VmFsdWUoQ29uc3RhbnRzLklNUE9SVF9QQUNLQUdFLAorICAgICAgICAgICAgaW1wb3J0UCArICIsTUVUQS1JTkYuY3hmLCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguamJpLmpheHAiKTsKKyAgICAgICAgU3RyaW5nIGV4cG9ydFAgPSBtZi5nZXRNYWluQXR0cmlidXRlcygpLmdldFZhbHVlKENvbnN0YW50cy5FWFBPUlRfUEFDS0FHRSk7CisgICAgICAgIG1mLmdldE1haW5BdHRyaWJ1dGVzKCkucHV0VmFsdWUoQ29uc3RhbnRzLkVYUE9SVF9QQUNLQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRQICsgIixvcmcuYXBhY2hlLmhhbmRsZXJzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy5hcGFjaGUuc3ByaW5nY2ZnLmhhbmRsZXJzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy5hcGFjaGUuaGFuZGxlcnMudHlwZXMsb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4ZiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYuc29hcGhhbmRsZXIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLnNwcmluZ2NmZ2hhbmRsZXIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLndzYWRkcmVzc2luZywiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAib3JnLmFwYWNoZS5jeGYsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLmN4Zi5idXMsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuIG1mOworICAgIH0KKworICAgCit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9pdGVzdHMvdGVzdHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvSW50ZWdyYXRpb25UZXN0LmphdmEgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvdGVzdHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvZXhhbXBsZXMvSW50ZWdyYXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzOWRjMwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9leGFtcGxlcy9JbnRlZ3JhdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuamFyLk1hbmlmZXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YXguYWN0aXZhdGlvbi5EYXRhSGFuZGxlcjsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwud3MuSG9sZGVyOworaW1wb3J0IG9yZy5hcGFjaGUuY3hmLkJ1czsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmpiaS5qYXhwLlN0cmluZ1NvdXJjZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5DaGFubmVsOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkVuZHBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLk5NUjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5QYXR0ZXJuOworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuYXBpLlN0YXR1czsKK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXgucGxhdGZvcm0udGVzdGluZy5zdXBwb3J0LkFic3RyYWN0SW50ZWdyYXRpb25UZXN0OworaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC51dGlsLkZpbGVVdGlsOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsub3NnaS50ZXN0LnBsYXRmb3JtLk9zZ2lQbGF0Zm9ybTsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5TZXJ2aWNlUmVmZXJlbmNlOworCitwdWJsaWMgY2xhc3MgSW50ZWdyYXRpb25UZXN0IGV4dGVuZHMgQWJzdHJhY3RJbnRlZ3JhdGlvblRlc3QgeworCisgICAgcHJpdmF0ZSBQcm9wZXJ0aWVzIGRlcGVuZGVuY2llczsKKworICAgIC8qKgorICAgICAqIFRoZSBtYW5pZmVzdCB0byB1c2UgZm9yIHRoZSAidmlydHVhbCBidW5kbGUiIGNyZWF0ZWQKKyAgICAgKiBvdXQgb2YgdGhlIHRlc3QgY2xhc3NlcyBhbmQgcmVzb3VyY2VzIGluIHRoaXMgcHJvamVjdAorICAgICAqCisgICAgICogVGhpcyBpcyBhY3R1YWxseSB0aGUgYm9pbGVycGxhdGUgbWFuaWZlc3Qgd2l0aCBvbmUgYWRkaXRpb25hbAorICAgICAqIGltcG9ydC1wYWNrYWdlIGFkZGVkLiBXZSBzaG91bGQgcHJvdmlkZSBhIHNpbXBsZXIgY3VzdG9taXphdGlvbgorICAgICAqIHBvaW50IGZvciBzdWNoIHVzZSBjYXNlcyB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBkdXBsaWNhdGlvbgorICAgICAqIG9mIHRoZSBlbnRpcmUgbWFuaWZlc3QuLi4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE1hbmlmZXN0TG9jYXRpb24oKSB7CisgICAgICAgIHJldHVybiAiY2xhc3NwYXRoOm9yZy9hcGFjaGUvc2VydmljZW1peC9NQU5JRkVTVC5NRiI7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIGxvY2F0aW9uIG9mIHRoZSBwYWNrYWdlZCBPU0dpIGJ1bmRsZXMgdG8gYmUgaW5zdGFsbGVkCisgICAgICogZm9yIHRoaXMgdGVzdC4gVmFsdWVzIGFyZSBTcHJpbmcgcmVzb3VyY2UgcGF0aHMuIFRoZSBidW5kbGVzCisgICAgICogd2Ugd2FudCB0byB1c2UgYXJlIHBhcnQgb2YgdGhlIHNhbWUgbXVsdGktcHJvamVjdCBtYXZlbgorICAgICAqIGJ1aWxkIGFzIHRoaXMgcHJvamVjdCBpcy4gSGVuY2Ugd2UgdXNlIHRoZSBsb2NhbE1hdmVuQXJ0aWZhY3QKKyAgICAgKiBoZWxwZXIgbWV0aG9kIHRvIGZpbmQgdGhlIGJ1bmRsZXMgcHJvZHVjZWQgYnkgdGhlIHBhY2thZ2UKKyAgICAgKiBwaGFzZSBvZiB0aGUgbWF2ZW4gYnVpbGQgKHRoZXNlIHRlc3RzIHdpbGwgcnVuIGFmdGVyIHRoZQorICAgICAqIHBhY2thZ2luZyBwaGFzZSwgaW4gdGhlIGludGVncmF0aW9uLXRlc3QgcGhhc2UpLgorICAgICAqCisgICAgICogSlVuaXQsIGNvbW1vbnMtbG9nZ2luZywgc3ByaW5nLWNvcmUgYW5kIHRoZSBzcHJpbmcgT1NHaQorICAgICAqIHRlc3QgYnVuZGxlIGFyZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIHNvIGRvIG5vdCBuZWVkCisgICAgICogdG8gYmUgc3BlY2lmaWVkIGhlcmUuCisgICAgICovCisgICAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldFRlc3RCdW5kbGVzTmFtZXMoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLmZlbGl4IiwgIm9yZy5hcGFjaGUuZmVsaXgucHJlZnMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5hY3RpdmF0aW9uLWFwaS0xLjEiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcyIsICJnZXJvbmltby1hbm5vdGF0aW9uXzEuMF9zcGVjIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MiLCAiZ2Vyb25pbW8tc2VydmxldF8zLjBfc3BlYyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzIiwgImdlcm9uaW1vLXdzLW1ldGFkYXRhXzIuMF9zcGVjIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MiLCAiZ2Vyb25pbW8tajJlZS1jb25uZWN0b3JfMS41X3NwZWMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5nZXJvbmltby5zcGVjcyIsICJnZXJvbmltby1qdGFfMS4xX3NwZWMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvL2ZvciBhY3RpdmVtcQorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWxhbmciKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamFzeXB0IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpvc3FsIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm9ybyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy52ZWxvY2l0eSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJjb21tb25zLWNvbGxlY3Rpb25zIiwgImNvbW1vbnMtY29sbGVjdGlvbnMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLnNwcmluZ2ZyYW1ld29yayIsICJzcHJpbmctam1zIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5zcHJpbmdmcmFtZXdvcmsiLCAic3ByaW5nLXR4IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MiLCAiZ2Vyb25pbW8tajJlZS1tYW5hZ2VtZW50XzEuMV9zcGVjIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3MiLCAiZ2Vyb25pbW8tam1zXzEuMV9zcGVjIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtcG9vbCIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnhiZWFuIiwgInhiZWFuLXNwcmluZyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLmFjdGl2ZW1xIiwgImFjdGl2ZW1xLWNvcmUiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5hY3RpdmVtcSIsICJhY3RpdmVtcS1yYSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLmFjdGl2ZW1xIiwgImFjdGl2ZW1xLWNvbnNvbGUiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5hY3RpdmVtcSIsICJhY3RpdmVtcS1wb29sIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuYWN0aXZlbXEiLCAia2FoYWRiIiksICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy9mb3Igd3Mtc2VjdXJpdHkKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3BlbnNhbWwiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS53cy5zZWN1cml0eSIsICJ3c3M0aiIpLAorIAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpiaS1hcGktMS4wIiksICAgICAgICAgICAgCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc3RheC1hcGktMS4wIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc2Fhai1hcGktMS4zIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4Yi1hcGktMi4yIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4d3MtYXBpLTIuMiIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hc20iKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY2dsaWIiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamF4Yi1pbXBsIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm5lZXRoaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zYWFqLWltcGwiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmNvZGVoYXVzLndvb2RzdG94IiwgInN0YXgyLWFwaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuY29kZWhhdXMud29vZHN0b3giLCAid29vZHN0b3gtY29yZS1hc2wiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMud3NkbDRqIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUud3MuY29tbW9ucy5zY2hlbWEiLCAiWG1sU2NoZW1hIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhtbHJlc29sdmVyIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmJjZWwiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGVyY2VzIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhhbGFuIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnhtbHNlYyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qZXR0eSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJqYXZheC5tYWlsIiwgIm1haWwiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1jb2RlYyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWh0dHBjbGllbnQiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYWJkZXJhIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5jb2RlaGF1cy5qZXR0aXNvbiIsICJqZXR0aXNvbiIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxiZWFucyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLmpzcjMxMS1hcGktMS4xIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItYXBpIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItc3BpIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItcnVudGltZSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcub3BzNGoucGF4LndlYiIsICJwYXgtd2ViLWpldHR5IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5vcHM0ai5wYXgud2ViIiwgInBheC13ZWItZXh0ZW5kZXItd2hpdGVib2FyZCIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgiLCAic2VydmljZW1peC11dGlscyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuZnVzZXNvdXJjZS5jb21tb25tYW4iLCAiY29tbW9ucy1tYW5hZ2VtZW50IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUua2FyYWYiLCAib3JnLmFwYWNoZS5rYXJhZi5tYW5hZ2VtZW50IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuY3hmIiwgImN4Zi1idW5kbGUiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmN4ZiIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguY3hmLnRyYW5zcG9ydC5ubXIiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tciIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIuY29yZSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIubWFuYWdlbWVudCIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIub3NnaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZG9jdW1lbnQiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmRvY3VtZW50IiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLnRlc3QtY29tbW9ucyIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtaHR0cC1vc2dpIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi13cy1zZWN1cml0eS1vc2dpIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyIsICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1qbXMtb3NnaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtc29hcC1oYW5kbGVyLW9zZ2kiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMuY3hmLW10b20tb3NnaSIpLAorICAgICAgICAgICAgZ2V0QnVuZGxlKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMiLCAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtaGFuZGxlci1jZmciKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzIiwgImN4Zi13cy1hZGRyZXNzaW5nIiksCisgICAgICAgICAgICBnZXRCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyIsICJjeGYtamF4cnMiKSwKKyAgICAgICAgICAgIGdldEJ1bmRsZSgib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzIiwgIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMuY3hmLW5tci1vc2dpIiksCisgICAgICAgIH07CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEpiaUNvbXBvbmVudCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisgICAgICAgIGluc3RhbGxCdW5kbGUoIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcyIsICJjeGYtb3NnaSIsIG51bGwsICJqYXIiKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RIdHRwT3NnaSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisgICAgICAgIHdhaXRPbkNvbnRleHRDcmVhdGlvbigib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtaHR0cC1vc2dpIik7CisgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKKworICAgICAgICBTdHJpbmcgZmlsdGVyID0gIigmKCIgKyAib2JqZWN0Y2xhc3M9IiArIEhlbGxvV29ybGQuY2xhc3MuZ2V0TmFtZSgpICsgIikoVEVTVC1CVU5ETEUtTkFNRT1jeGYtaHR0cC1vc2dpKSkiOworICAgICAgICBTZXJ2aWNlUmVmZXJlbmNlIHJlZiA9IGJ1bmRsZUNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZXMobnVsbCwgZmlsdGVyKVswXTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiU2VydmljZSBSZWZlcmVuY2UgaXMgbnVsbCIsIHJlZik7CisKKyAgICAgICAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkIGhlbGxvV29ybGQgPSBudWxsOworCisgICAgICAgIGhlbGxvV29ybGQgPSAob3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5IZWxsb1dvcmxkKSBidW5kbGVDb250ZXh0LmdldFNlcnZpY2UocmVmKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGZpbmQgdGhlIHNlcnZpY2UiLCBoZWxsb1dvcmxkKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIEJvbmpvdXIiLCBoZWxsb1dvcmxkLnNheUhpKCJCb25qb3VyIikpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Sm1zT3NnaSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisgICAgICAgIHdhaXRPbkNvbnRleHRDcmVhdGlvbigib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLml0ZXN0cy5jeGYtam1zLW9zZ2kiKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgICAgICBTdHJpbmcgZmlsdGVyID0gIigmKCIgKyAib2JqZWN0Y2xhc3M9IiArIEhlbGxvV29ybGQuY2xhc3MuZ2V0TmFtZSgpICsgIikoVEVTVC1CVU5ETEUtTkFNRT1jeGYtam1zLW9zZ2kpKSI7CisgICAgICAgIFNlcnZpY2VSZWZlcmVuY2UgcmVmID0gYnVuZGxlQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlcyhudWxsLCBmaWx0ZXIpWzBdOworICAgICAgICBhc3NlcnROb3ROdWxsKCJTZXJ2aWNlIFJlZmVyZW5jZSBpcyBudWxsIiwgcmVmKTsKKworICAgICAgICBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQgaGVsbG9Xb3JsZCA9IG51bGw7CisKKyAgICAgICAgaGVsbG9Xb3JsZCA9IChvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLkhlbGxvV29ybGQpIGJ1bmRsZUNvbnRleHQuZ2V0U2VydmljZShyZWYpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJDYW5ub3QgZmluZCB0aGUgc2VydmljZSIsIGhlbGxvV29ybGQpOworCisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gQm9uam91ciIsIGhlbGxvV29ybGQuc2F5SGkoIkJvbmpvdXIiKSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHRlc3ROTVJPc2dpKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKKyAgICAgICAgd2FpdE9uQ29udGV4dENyZWF0aW9uKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1ubXItb3NnaSIpOworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisgICAgICAgIE5NUiBubXIgPSBnZXRPc2dpU2VydmljZShOTVIuY2xhc3MpOworICAgICAgICBhc3NlcnROb3ROdWxsKG5tcik7CisgICAgICAgIAorICAgICAgICBDaGFubmVsIGNsaWVudCA9IG5tci5jcmVhdGVDaGFubmVsKCk7CisgICAgICAgIEV4Y2hhbmdlIGUgPSBjbGllbnQuY3JlYXRlRXhjaGFuZ2UoUGF0dGVybi5Jbk91dCk7CisgICAgICAgIGZvciAoRW5kcG9pbnQgZXAgOiBubXIuZ2V0RW5kcG9pbnRSZWdpc3RyeSgpLmdldFNlcnZpY2VzKCkpIHsKKyAgICAgICAgICAgIGUuc2V0VGFyZ2V0KG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkubG9va3VwKG5tci5nZXRFbmRwb2ludFJlZ2lzdHJ5KCkuZ2V0UHJvcGVydGllcyhlcCkpKTsKKyAgICAgICAgICAgIGUuZ2V0SW4oKS5zZXRCb2R5KG5ldyBTdHJpbmdTb3VyY2UoIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/Pjxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9XCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlL1wiPjxzb2FwOkJvZHk+PG5zMjpzYXlIaSB4bWxuczpuczI9XCJodHRwOi8vY3hmLmV4YW1wbGVzLnNlcnZpY2VtaXguYXBhY2hlLm9yZy9cIj48YXJnMD5Cb25qb3VyPC9hcmcwPjwvbnMyOnNheUhpPjwvc29hcDpCb2R5Pjwvc29hcDpFbnZlbG9wZT4iKSk7CisgICAgICAgICAgICBib29sZWFuIHJlcyA9IGNsaWVudC5zZW5kU3luYyhlKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUocmVzKTsKKyAgICAgICAgfQorICAgIAorICAgIH0KKworICAgIHByb3RlY3RlZCBNYW5pZmVzdCBnZXRNYW5pZmVzdCgpIHsKKyAgICAgICAgTWFuaWZlc3QgbWYgPSBzdXBlci5nZXRNYW5pZmVzdCgpOworICAgICAgICBTdHJpbmcgaW1wb3J0UCA9IG1mLmdldE1haW5BdHRyaWJ1dGVzKCkuZ2V0VmFsdWUoQ29uc3RhbnRzLklNUE9SVF9QQUNLQUdFKTsKKyAgICAgICAgbWYuZ2V0TWFpbkF0dHJpYnV0ZXMoKS5wdXRWYWx1ZShDb25zdGFudHMuSU1QT1JUX1BBQ0tBR0UsCisgICAgICAgICAgICBpbXBvcnRQICsgIixNRVRBLUlORi5jeGYsIG9yZy5hcGFjaGUuc2VydmljZW1peC5qYmkuamF4cCIpOworICAgICAgICBTdHJpbmcgZXhwb3J0UCA9IG1mLmdldE1haW5BdHRyaWJ1dGVzKCkuZ2V0VmFsdWUoQ29uc3RhbnRzLkVYUE9SVF9QQUNLQUdFKTsKKyAgICAgICAgbWYuZ2V0TWFpbkF0dHJpYnV0ZXMoKS5wdXRWYWx1ZShDb25zdGFudHMuRVhQT1JUX1BBQ0tBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydFAgKyAiLG9yZy5hcGFjaGUuaGFuZGxlcnMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAib3JnLmFwYWNoZS5zcHJpbmdjZmcuaGFuZGxlcnMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAib3JnLmFwYWNoZS5jeGYubWltZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJqYXZheC54bWwud3MsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiamF2YXguYWN0aXZhdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLmhhbmRsZXJzLnR5cGVzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5jeGYsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuY3hmLnNvYXBoYW5kbGVyLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi5zcHJpbmdjZmdoYW5kbGVyLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmN4Zi53c2FkZHJlc3NpbmcsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLnNlcnZpY2VtaXgudXRpbCwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIm9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAib3JnLmFwYWNoZS5jeGYsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLmN4Zi5idXMsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJvcmcuYXBhY2hlLmN4Zi5pbnRlcmNlcHRvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuIG1mOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTb2FwSGFuZGxlck9zZ2koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgICAgICB3YWl0T25Db250ZXh0Q3JlYXRpb24oIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMuY3hmLXNvYXAtaGFuZGxlci1vc2dpIik7CisgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKKworICAgICAgICBTZXJ2aWNlUmVmZXJlbmNlIHJlZiA9IGJ1bmRsZUNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZShvcmcuYXBhY2hlLmhhbmRsZXJzLkFkZE51bWJlcnMuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiU2VydmljZSBSZWZlcmVuY2UgaXMgbnVsbCIsIHJlZik7CisKKyAgICAgICAgb3JnLmFwYWNoZS5oYW5kbGVycy5BZGROdW1iZXJzIGFkZE51bWJlcnMgPSBudWxsOworCisgICAgICAgIGFkZE51bWJlcnMgPSAob3JnLmFwYWNoZS5oYW5kbGVycy5BZGROdW1iZXJzKSBidW5kbGVDb250ZXh0LmdldFNlcnZpY2UocmVmKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGZpbmQgdGhlIHNlcnZpY2UiLCBhZGROdW1iZXJzKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYWRkTnVtYmVycy5hZGROdW1iZXJzKDEsMSkpOworCisgICAgfQorCisgICAgIHB1YmxpYyB2b2lkIHRlc3RTcHJpbmdDb25maWdIYW5kbGVyT3NnaSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgICAgICAgd2FpdE9uQ29udGV4dENyZWF0aW9uKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi1oYW5kbGVyLWNmZyIpOworICAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworCisgICAgICAgICBTZXJ2aWNlUmVmZXJlbmNlIHJlZiA9IGJ1bmRsZUNvbnRleHQuZ2V0U2VydmljZVJlZmVyZW5jZShvcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycy5BZGROdW1iZXJzLmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgICBhc3NlcnROb3ROdWxsKCJTZXJ2aWNlIFJlZmVyZW5jZSBpcyBudWxsIiwgcmVmKTsKKworICAgICAgICAgb3JnLmFwYWNoZS5zcHJpbmdjZmcuaGFuZGxlcnMuQWRkTnVtYmVycyBhZGROdW1iZXJzID0gbnVsbDsKKworICAgICAgICAgYWRkTnVtYmVycyA9IChvcmcuYXBhY2hlLnNwcmluZ2NmZy5oYW5kbGVycy5BZGROdW1iZXJzKSBidW5kbGVDb250ZXh0LmdldFNlcnZpY2UocmVmKTsKKyAgICAgICAgIGFzc2VydE5vdE51bGwoIkNhbm5vdCBmaW5kIHRoZSBzZXJ2aWNlIiwgYWRkTnVtYmVycyk7CisKKyAgICAgICAgIGFzc2VydEVxdWFscygxMDE2LCBhZGROdW1iZXJzLmFkZE51bWJlcnMoMTAsIDE2KSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFdzQWRkcmVzc2luZ09zZ2koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKKyAgICAgICAgIHdhaXRPbkNvbnRleHRDcmVhdGlvbigiY3hmLXdzLWFkZHJlc3NpbmciKTsKKworICAgICAgICAgU2VydmljZVJlZmVyZW5jZSBidXNyZWYgPSBidW5kbGVDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2Uob3JnLmFwYWNoZS5jeGYuYnVzLkNYRkJ1c0ltcGwuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgIGFzc2VydE5vdE51bGwoIkJ1cyBSZWZlcmVuY2UgaXMgbnVsbCIsIGJ1c3JlZik7CisKKyAgICAgICAgIEJ1cyBidXMgPSAoQnVzKWJ1bmRsZUNvbnRleHQuZ2V0U2VydmljZShidXNyZWYpOworCisgICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gaW5wdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoaW5wdXQsIHRydWUpOworICAgICAgICAgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ0luSW50ZXJjZXB0b3IgaW4gPSBuZXcgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ0luSW50ZXJjZXB0b3Iod3JpdGVyKTsKKyAgICAgICAgIGJ1cy5nZXRJbkludGVyY2VwdG9ycygpLmFkZChpbik7CisKKyAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgICBQcmludFdyaXRlciBvdXR3cml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIob3V0cHV0LCB0cnVlKTsKKyAgICAgICAgIG9yZy5hcGFjaGUuY3hmLmludGVyY2VwdG9yLkxvZ2dpbmdPdXRJbnRlcmNlcHRvciBvdXQgPSBuZXcgb3JnLmFwYWNoZS5jeGYuaW50ZXJjZXB0b3IuTG9nZ2luZ091dEludGVyY2VwdG9yKG91dHdyaXRlcik7CisgICAgICAgICBidXMuZ2V0T3V0SW50ZXJjZXB0b3JzKCkuYWRkKG91dCk7CisKKyAgICAgICAgIFNlcnZpY2VSZWZlcmVuY2UgcmVmID0gYnVuZGxlQ29udGV4dC5nZXRTZXJ2aWNlUmVmZXJlbmNlKG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKyAgICAgICAgIGFzc2VydE5vdE51bGwoIlNlcnZpY2UgUmVmZXJlbmNlIGlzIG51bGwiLCByZWYpOworCisKKyAgICAgICAgIG9yZy5hcGFjaGUuaGVsbG9fd29ybGRfc29hcF9odHRwLkdyZWV0ZXIgZ3JlZXRlciA9IG51bGw7CisKKyAgICAgICAgIGdyZWV0ZXIgPSAob3JnLmFwYWNoZS5oZWxsb193b3JsZF9zb2FwX2h0dHAuR3JlZXRlcikgYnVuZGxlQ29udGV4dC5nZXRTZXJ2aWNlKHJlZik7CisgICAgICAgICBhc3NlcnROb3ROdWxsKCJDYW5ub3QgZmluZCB0aGUgc2VydmljZSIsIGdyZWV0ZXIpOworCisgICAgICAgICBhc3NlcnRFcXVhbHMoIkJvbmpvdXIiLCBncmVldGVyLnNheUhpKCkpOworCisgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRPdXQgPSAiPEFkZHJlc3M+aHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nL2Fub255bW91czwvQWRkcmVzcz4iOworICAgICAgICAgU3RyaW5nIGV4cGVjdGVkSW4gPSAiPFJlbGF0ZXNUbyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZ1wiPiI7CisKKyAgICAgICAgIGFzc2VydFRydWUob3V0cHV0LnRvU3RyaW5nKCkuaW5kZXhPZihleHBlY3RlZE91dCkgIT0gLTEpOworICAgICAgICAgYXNzZXJ0VHJ1ZShpbnB1dC50b1N0cmluZygpLmluZGV4T2YoZXhwZWN0ZWRJbikgIT0gLTEpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RKYXhSUygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisgICAgICAgIHdhaXRPbkNvbnRleHRDcmVhdGlvbigiY3hmLWpheHJzIik7CisKKyAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jeGYvY3JtL2N1c3RvbWVyc2VydmljZS9jdXN0b21lcnMvMTIzIik7CisgICAgICAgIElucHV0U3RyZWFtIGluID0gdXJsLm9wZW5TdHJlYW0oKTsKKworICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICBpbnQgYyA9IDA7CisgICAgICAgIHdoaWxlICgoYyA9IGluLnJlYWQoKSkgIT0gLTEpIHsKKyAgICAgICAgICAgIGJvcy53cml0ZShjKTsKKyAgICAgICAgfQorICAgICAgICBpbi5jbG9zZSgpOworICAgICAgICBib3MuY2xvc2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJvcy50b1N0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiIHN0YW5kYWxvbmU9XCJ5ZXNcIj8+PEN1c3RvbWVyPjxpZD4xMjM8L2lkPjxuYW1lPkpvaG48L25hbWU+PC9DdXN0b21lcj4iLAorICAgICAgICAgICAgICAgICAgICAgYm9zLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RXU1NlY3VyaXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKKyAgICAgICAgd2FpdE9uQ29udGV4dENyZWF0aW9uKCJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMuaXRlc3RzLmN4Zi13cy1zZWN1cml0eS1vc2dpIik7CisgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKKyAgICAgICAgVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2N4Zi9IZWxsb1dvcmxkU2VjdXJpdHkiKQorICAgICAgICAgICAgICAgIC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0aW9uLnNldERvSW5wdXQodHJ1ZSk7CisgICAgICAgIGNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CisgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIC8vIFBvc3QgdGhlIHJlcXVlc3QgZmlsZS4KKyAgICAgICAgSW5wdXRTdHJlYW0gZmlzID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oIm9yZy9hcGFjaGUvc2VydmljZW1peC9yZXF1ZXN0LnhtbCIpOworICAgICAgICBGaWxlVXRpbC5jb3B5SW5wdXRTdHJlYW0oZmlzLCBvcyk7CisgICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlLgorICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgICAgIEZpbGVVdGlsLmNvcHlJbnB1dFN0cmVhbShpcywgYmFvcyk7CisgICAgICAgIGFzc2VydFRydWUoYmFvcy50b1N0cmluZygpLmluZGV4T2YoIkhlbGxvIEpvaG4gRG9lIikgPj0gMCk7CisKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TXRvbU9zZ2koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOworICAgICAgICB3YWl0T25Db250ZXh0Q3JlYXRpb24oIm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5pdGVzdHMuY3hmLW10b20tb3NnaSIpOworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwMCk7CisKKyAgICAgICAgU2VydmljZVJlZmVyZW5jZSByZWYgPSBidW5kbGVDb250ZXh0LmdldFNlcnZpY2VSZWZlcmVuY2Uob3JnLmFwYWNoZS5jeGYubWltZS5UZXN0TXRvbS5jbGFzcy5nZXROYW1lKCkpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJTZXJ2aWNlIFJlZmVyZW5jZSBpcyBudWxsIiwgcmVmKTsKKworICAgICAgICBvcmcuYXBhY2hlLmN4Zi5taW1lLlRlc3RNdG9tIHRlc3RNdG9tID0gbnVsbDsKKworICAgICAgICB0ZXN0TXRvbSA9IChvcmcuYXBhY2hlLmN4Zi5taW1lLlRlc3RNdG9tKSBidW5kbGVDb250ZXh0LmdldFNlcnZpY2UocmVmKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGZpbmQgdGhlIHNlcnZpY2UiLCB0ZXN0TXRvbSk7CisgICAgICAgICAKKyAgICAgICAgVVJMIGZpbGVVUkwgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2UoIm1lLmJtcCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhcnRpbmcgTVRPTSB0ZXN0IHdpdGggRGF0YUhhbmRsZXI6Iik7CisgICAgICAgIEhvbGRlcjxTdHJpbmc+IG5hbWUgPSBuZXcgSG9sZGVyPFN0cmluZz4oIkJvYiIpOworICAgICAgICBIb2xkZXI8RGF0YUhhbmRsZXI+IGhhbmRsZXIgPSBuZXcgSG9sZGVyPERhdGFIYW5kbGVyPigpOworCisgICAgICAgIGhhbmRsZXIudmFsdWUgPSBuZXcgRGF0YUhhbmRsZXIoZmlsZVVSTCk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLVNlbmRpbmcgdGhlIG1lLmJtcCBpbWFnZSB0byBzZXJ2ZXIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLVNlbmRpbmcgYSBuYW1lIHZhbHVlIG9mICIgKyBuYW1lLnZhbHVlKTsKKworICAgICAgICB0ZXN0TXRvbS50ZXN0WG9wKG5hbWUsIGhhbmRsZXIpOworCisgICAgICAgIElucHV0U3RyZWFtIG10b21JbiA9IGhhbmRsZXIudmFsdWUuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBtdG9tSW4ucmVhZCgpOyBpICE9IC0xOyBpID0gbXRvbUluLnJlYWQoKSkgeworICAgICAgICAgICAgZmlsZVNpemUrKzsKKyAgICAgICAgfQorCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS1SZWNlaXZlZCBEYXRhSGFuZGxlciBiYWNrIGZyb20gc2VydmVyLCAiCisgICAgICAgICAgICArICJyZXR1cm5lZCBzaXplIGlzICIgKyBmaWxlU2l6ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS1SZXR1cm5lZCBzdHJpbmcgdmFsdWUgaXMgIiArIG5hbWUudmFsdWUpOworICAgICAgICBhc3NlcnRFcXVhbHMoZmlsZVNpemUsIDE2MzE2Nik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJhbiBNVE9NL0RhdGFIYW5kbGVyIGRlbW8iKTsKKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODBiNmUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9pdGVzdHMvdGVzdHMvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzNCBAQAorIw0KKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorIyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisjICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorIyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjDQorIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQorIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorIyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorIyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisjDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitsb2c0ai5yb290TG9nZ2VyPURFQlVHLCBzdGRvdXQNCisNCitsb2c0ai5sb2dnZXIub3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpPURFQlVHDQorbG9nNGoubG9nZ2VyLm9yZy5hcGFjaGUuY2FtZWw9REVCVUcNCitsb2c0ai5sb2dnZXIub3JnLmFwYWNoZS5zZXJ2aWNlbWl4PURFQlVHDQorDQorbG9nNGouYXBwZW5kZXIuc3Rkb3V0PW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyDQorbG9nNGouYXBwZW5kZXIuc3Rkb3V0LmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQNCitsb2c0ai5hcHBlbmRlci5zdGRvdXQubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVkICVwIFslY10gLSAlbSVuDQorDQorbG9nNGouYXBwZW5kZXIub3V0PW9yZy5hcGFjaGUubG9nNGouRmlsZUFwcGVuZGVyDQorbG9nNGouYXBwZW5kZXIub3V0LmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQNCitsb2c0ai5hcHBlbmRlci5vdXQubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVkIFslLTE1LjE1dF0gJS01cCAlLTMwLjMwY3sxfSAtICVtJW4NCitsb2c0ai5hcHBlbmRlci5vdXQuZmlsZT10YXJnZXQvc2VydmljZW1peC10ZXN0LmxvZw0KK2xvZzRqLmFwcGVuZGVyLm91dC5hcHBlbmQ9dHJ1ZQ0KKw0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvbWUuYm1wIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9tZS5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwYzUzNgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvbWUuYm1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L01BTklGRVNULk1GIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhOWE5NgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L01BTklGRVNULk1GCkBAIC0wLDAgKzEsMzIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorTGljZW5zZS0wMDogLiAKK0xpY2Vuc2UtMDE6IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorTGljZW5zZS0wMjogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCitMaWNlbnNlLTAzOiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitMaWNlbnNlLTA0OiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorTGljZW5zZS0wNTogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK0xpY2Vuc2UtMDY6IHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitMaWNlbnNlLTA3OiAuCitMaWNlbnNlLTA4OiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorTGljZW5zZS0wOTogLgorTGljZW5zZS0xMDogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorTGljZW5zZS0xMTogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK0xpY2Vuc2UtMTI6IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorTGljZW5zZS0xMzogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorTGljZW5zZS0xNDogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitMaWNlbnNlLTE1OiAuCitCdW5kbGUtTmFtZTogb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRlc3QKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUuc2VydmljZW1peC50ZXN0CitCdW5kbGUtVmVuZG9yOiBTcHJpbmcgRnJhbWV3b3JrCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2kudGVzdC5KVW5pdFRlc3RBY3RpdmF0b3IKK0ltcG9ydC1QYWNrYWdlOiBqdW5pdC5mcmFtZXdvcmssCisgb3JnLm9zZ2kuZnJhbWV3b3JrO3NwZWNpZmljYXRpb24tdmVyc2lvbj0iMS4zLjAiLAorIG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLAorIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZSwKKyBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvcmUuaW8sCisgb3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpLnRlc3QsCisgb3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpLnRlc3QucGxhdGZvcm0sCisgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5hcGksCisgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jb3JlLAorIG9yZy5hcGFjaGUuc2VydmljZW1peC5wbGF0Zm9ybS50ZXN0aW5nLnN1cHBvcnQsCisgb3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpLnV0aWwKZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3JlcXVlc3QueG1sIGIvdHJ1bmsvZXhhbXBsZXMvaXRlc3RzL3Rlc3RzL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvcmVxdWVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2YwMDA1MAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2l0ZXN0cy90ZXN0cy9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3JlcXVlc3QueG1sCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyI+CisgICAgPHNvYXA6SGVhZGVyPgorICAgICAgICA8d3NzZTpTZWN1cml0eSB4bWxuczp3c3NlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktc2VjZXh0LTEuMC54c2QiPgorICAgICAgICAgICAgPHdzc2U6VXNlcm5hbWVUb2tlbiA+CisgICAgICAgICAgICAgICAgPHdzc2U6VXNlcm5hbWU+am9lPC93c3NlOlVzZXJuYW1lPgorICAgICAgICAgICAgICAgIDx3c3NlOlBhc3N3b3JkIFR5cGU9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MtdXNlcm5hbWUtdG9rZW4tcHJvZmlsZS0xLjAjUGFzc3dvcmRUZXh0Ij5wYXNzd29yZDwvd3NzZTpQYXNzd29yZD4KKyAgICAgICAgICAgIDwvd3NzZTpVc2VybmFtZVRva2VuPgorICAgICAgICA8L3dzc2U6U2VjdXJpdHk+CisgICAgPC9zb2FwOkhlYWRlcj4KKyAgICA8c29hcDpCb2R5PgorICAgICAgICA8bnMyOnNheUhpIHhtbG5zOm5zMj0iaHR0cDovL2N4Zi5leGFtcGxlcy5zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvIj4KKyAgICAgICAgICAgIDxhcmcwPkpvaG4gRG9lPC9hcmcwPgorICAgICAgICA8L25zMjpzYXlIaT4KKyAgICA8L3NvYXA6Qm9keT4KKzwvc29hcDpFbnZlbG9wZT4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvUkVBRE1FLnR4dCBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDgyOTMxCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9SRUFETUUudHh0CkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworV2VsY29tZSB0byB0aGUgU2VydmljZW1peCBMb2FuIEJyb2tlciBleGFtcGxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBleGFtcGxlIGlzIGJhc2VkIG9uIHRoZSBFSVAgYm9vayAKKyhodHRwOi8vd3d3LmVudGVycHJpc2VpbnRlZ3JhdGlvbnBhdHRlcm5zLmNvbS9Db21wb3NlZE1lc3NhZ2luZ0V4YW1wbGUuaHRtbCkuCitJdCBsZXZlcmFnZXMgdGhlIEJQRUwgc2VydmljZSBlbmdpbmUsIEpNUyBiaW5kaW5nIGNvbXBvbmVudCBhbmQgc29tZSAKK2xpZ2h0d2VpZ2h0IGNvbXBvbmVudHMgcHJvdmlkZWQgYnkgU2VydmljZU1peC4KKworUHJlcmVxdWlzaXRlcyBmb3IgUnVubmluZyB0aGlzIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxLiBZb3UgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZToKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIuCisgICAtIEFwYWNoZSBNYXZlbiAyLjAuOSBvciBoaWdoZXIuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFJFQURNRSBpbiB0aGUgdG9wLWxldmVsIGV4YW1wbGVzIGRpcmVjdG9yeS4KKworMi4gU3RhcnQgU2VydmljZU1peCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKyAgIDxzZXJ2aWNlbWl4X2hvbWU+L2Jpbi9zZXJ2aWNlbWl4ICAgIChvbiBVTklYKQorICAgPHNlcnZpY2VtaXhfaG9tZT5cYmluXHNlcnZpY2VtaXggICAgKG9uIFdpbmRvd3MpCisKK0luc3RhbGxpbmcgT0RFCistLS0tLS0tLS0tLS0tLQorCitUaGlzIGV4YW1wbGUgZGVwZW5kcyBvbiB0aGUgQXBhY2hlIE9ERSBKQkkgc2VydmljZSBlbmdpbmUuIFRoaXMgY29tcG9uZW50CitoYXMgbm90IHlldCBiZWVuIHJlbGVhc2VkIHdpdGggc3VwcG9ydCBTZXJ2aWNlTWl4IDQgYnV0IGEgU05BUFNIT1QgaXMKK2F2YWlsYWJsZS4KKworSW5zdGFsbCBPREUgZnJvbSB0aGUgU2VydmljZU1peCBDb25zb2xlIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworICAgZmVhdHVyZXM6aW5zdGFsbCBvZGUKKworQnVpbGRpbmcgYW5kIERlcGxveWluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBleGFtcGxlIHVzZXMgdGhlIFNlcnZpY2VNaXggSkJJIE1hdmVuIHBsdWdpbiB0byBidWlsZCB0aGUgU1VzIGFuZCB0aGUgU0EuCitUbyBidWlsZCB0aGUgZXhhbXBsZSwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCAoZnJvbSB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMKK3RoaXMgUkVBRE1FKToKKworICBtdm4gaW5zdGFsbAorCitJZiBhbGwgb2YgdGhlIHJlcXVpcmVkIGJ1bmRsZXMgYXJlIGF2YWlsYWJsZSBpbiB5b3VyIGxvY2FsIE1hdmVuIHJlcG9zaXRvcnksIAordGhlIGV4YW1wbGUgd2lsbCBidWlsZCBxdWlja2x5LiBPdGhlcndpc2UgaXQgbWF5IHRha2Ugc29tZSB0aW1lIGZvciBNYXZlbgordG8gZG93bmxvYWQgZXZlcnl0aGluZyBpdCBuZWVkcy4KKworT25jZSBjb21wbGV0ZSwgeW91IHdpbGwgZmluZCB0aGUgU0EsIGNhbGxlZAorbG9hbi1icm9rZXItc2EtJHt2ZXJzaW9ufS56aXAsIGluIHRoZSBsb2FuLWJyb2tlci1zYS90YXJnZXQgZGlyZWN0b3J5CitvZiB0aGlzIGV4YW1wbGUuCisKK1lvdSBjYW4gZGVwbG95IHRoZSBTQSBpbiB0d28gd2F5czoKKworLSBVc2luZyBIb3QgRGVwbG95bWVudAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgCisgIENvcHkgdGhlIGxvYW4tYnJva2VyLXNhLSR7dmVyc2lvbn0uemlwIGZpbGUgdG8gdGhlCisgIDxzZXJ2aWNlbWl4X2hvbWU+L2RlcGxveSBkaXJlY3RvcnkuCisKKy0gVXNpbmcgdGhlIFNlcnZpY2VNaXggQ29uc29sZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVHlwZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgb3NnaTppbnN0YWxsIC1zIG12bjpvcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMubG9hbi1icm9rZXIvbG9hbi1icm9rZXItc2EvJHt2ZXJzaW9ufS96aXAKKworCitSdW5uaW5nIHRoZSBDbGllbnQKKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBleGFtcGxlIHByb3ZpZGVzIGEgc2ltcGxlIEpNUyBjbGllbnQuIFRvIHJ1biB0aGUgY2xpZW50OgorCisxLiBDaGFuZ2UgdG8gdGhlIDxzZXJ2aWNlbWl4X2hvbWU+L2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvY2xpZW50IGRpcmVjdG9yeS4KKworMi4gUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgbXZuIGNvbXBpbGUgZXhlYzpqYXZhCisKK0NoYW5naW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgeW91IGNoYW5nZSB0aGUgY29kZSBvciBjb25maWd1cmF0aW9uIGluIHRoZSBleGFtcGxlLCB1c2UgJ212biBpbnN0YWxsJyB0byByZWJ1aWxkIHRoZQorSkJJIFNBIHppcCwgYW5kIGRlcGxveSBpdCBhcyBkZXNjcmliZWQgYWJvdmUuCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2NsaWVudC9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9jbGllbnQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzlkZDIyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9jbGllbnQvcG9tLnhtbApAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXI8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmxvYW4tYnJva2VyPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmxvYW4tYnJva2VyLWptcy1jbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogTG9hbiBCcm9rZXIgQlBFTCA6OiBKTVMgQ2xpZW50PC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5sb2dpY2JsYXplLmxpbmdvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bGluZ288L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pbmN1YmF0b3ItYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZWlvLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+aW5jdWJhdG9yLWFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1yYTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pbmN1YmF0b3ItYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmV4ZWMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8bWFpbkNsYXNzPm9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLmxvYW5icm9rZXIuSk1TQ2xpZW50PC9tYWluQ2xhc3M+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPmZhbHNlPC9pbmNsdWRlUGx1Z2luRGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvbG9hbmJyb2tlci9KTVNDbGllbnQuamF2YSBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvbG9hbmJyb2tlci9KTVNDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDAwNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3NlcnZpY2VtaXgvc2FtcGxlcy9sb2FuYnJva2VyL0pNU0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLmxvYW5icm9rZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKKworaW1wb3J0IG9yZy5hcGFjaGUuYWN0aXZlbXEuQWN0aXZlTVFDb25uZWN0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmFjdGl2ZW1xLmNvbW1hbmQuQWN0aXZlTVFRdWV1ZTsKK2ltcG9ydCBvcmcubG9naWNibGF6ZS5saW5nby5qbXMuUmVxdWVzdG9yOworaW1wb3J0IG9yZy5sb2dpY2JsYXplLmxpbmdvLmptcy5KbXNQcm9kdWNlckNvbmZpZzsKK2ltcG9ydCBvcmcubG9naWNibGF6ZS5saW5nby5qbXMuaW1wbC5NdWx0aXBsZXhpbmdSZXF1ZXN0b3I7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKK2ltcG9ydCBqYXZheC5qbXMuQ29ubmVjdGlvbkZhY3Rvcnk7CitpbXBvcnQgamF2YXguam1zLkRlc3RpbmF0aW9uOworaW1wb3J0IGphdmF4Lmptcy5NZXNzYWdlOworaW1wb3J0IGphdmF4Lmptcy5UZXh0TWVzc2FnZTsKKworLyoqCisgKiBAdmVyc2lvbiAkUmV2aXNpb246IDY2NjEyMCAkCisgKi8KK3B1YmxpYyBjbGFzcyBKTVNDbGllbnQgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5OworICAgIHByaXZhdGUgc3RhdGljIENvdW50RG93bkxhdGNoIGxhdGNoOworICAgIHByaXZhdGUgc3RhdGljIFJlcXVlc3RvciByZXF1ZXN0b3I7CisKKyAgICAvKioKKyAgICAgKiBtYWluIC4uLgorICAgICAqIAorICAgICAqIEBwYXJhbSBhcmdzCisgICAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvIEpNUyBzZXJ2ZXIuIik7CisgICAgICAgIGZhY3RvcnkgPSBuZXcgQWN0aXZlTVFDb25uZWN0aW9uRmFjdG9yeSgidGNwOi8vbG9jYWxob3N0OjYxNjE2Iik7CisgICAgICAgIERlc3RpbmF0aW9uIGluUXVldWUgPSBuZXcgQWN0aXZlTVFRdWV1ZSgiZGVtby5vcmcuc2VydmljZW1peC5zb3VyY2UiKTsKKyAgICAgICAgRGVzdGluYXRpb24gb3V0UXVldWUgPSBuZXcgQWN0aXZlTVFRdWV1ZSgiZGVtby5vcmcuc2VydmljZW1peC5vdXRwdXQiICsgKGludCkoMTAwMCpNYXRoLnJhbmRvbSgpKSk7CisgICAgICAgIHJlcXVlc3RvciA9IE11bHRpcGxleGluZ1JlcXVlc3Rvci5uZXdJbnN0YW5jZShmYWN0b3J5LCBuZXcgSm1zUHJvZHVjZXJDb25maWcoKSwgaW5RdWV1ZSwgb3V0UXVldWUpOyAKKworICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgbmV3IEpNU0NsaWVudCgpLnJ1bigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IG5iID0gSW50ZWdlci5wYXJzZUludChhcmdzWzBdKTsKKyAgICAgICAgICAgIGludCB0aCA9IDMwOworICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIHRoID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKG5iKTsKKyAgICAgICAgICAgIEV4ZWN1dG9yU2VydmljZSB0aHJlYWRQb29sID0gRXhlY3V0b3JzLm5ld0ZpeGVkVGhyZWFkUG9vbCh0aCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0aHJlYWRQb29sLnN1Ym1pdChuZXcgSk1TQ2xpZW50KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGF0Y2guYXdhaXQoKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsb3NpbmcuIik7CisgICAgICAgIHJlcXVlc3Rvci5jbG9zZSgpOworICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgcmVxdWVzdC4iKTsKKyAgICAgICAgICAgIGRvdWJsZSByID0gTWF0aC5yYW5kb20oKTsKKworICAgICAgICAgICAgU3RyaW5nIHJlcXVlc3QgPQorICAgICAgICAgICAgICAgICI8Z2V0TG9hblF1b3RlUmVxdWVzdCB4bWxucz0ndXJuOmxvZ2ljYmxhemU6c29hOmxvYW5icm9rZXInPlxuIiArCisgICAgICAgICAgICAgICAgIiAgPHNzbj4xMDItMjQ1MzItNTMyNTQ8L3Nzbj5cbiIgKworICAgICAgICAgICAgICAgICIgIDxhbW91bnQ+IiArIHIgKiAxMDAwMDAgKyAiPC9hbW91bnQ+XG4iICsKKyAgICAgICAgICAgICAgICAiICA8ZHVyYXRpb24+IiArIChpbnQpIHIgKiA0OCArICI8L2R1cmF0aW9uPlxuIiArCisgICAgICAgICAgICAgICAgIiAgPHNjb3JlPiIgKyAoaW50KSByICogNDggKyAiPC9zY29yZT5cbiIgKworICAgICAgICAgICAgICAgICIgIDxsZW5ndGg+IiArIChpbnQpIHIgKiA0OCArICI8L2xlbmd0aD5cbiIgKworICAgICAgICAgICAgICAgICI8L2dldExvYW5RdW90ZVJlcXVlc3Q+IjsKKworICAgICAgICAgICAgVGV4dE1lc3NhZ2Ugb3V0ID0gcmVxdWVzdG9yLmdldFNlc3Npb24oKS5jcmVhdGVUZXh0TWVzc2FnZShyZXF1ZXN0KTsKKworICAgICAgICAgICAgVGV4dE1lc3NhZ2UgaW4gPSAoVGV4dE1lc3NhZ2UpIHJlcXVlc3Rvci5yZXF1ZXN0KG51bGwsIG91dCk7IAorICAgICAgICAgICAgaWYgKGluID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIHRpbWVkIG91dC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2Ugd2FzOiAiICsgaW4uZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAobGF0Y2ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxhdGNoLmNvdW50RG93bigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcyBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MGRmM2QKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpAQCAtMCwwICsxLDI0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisjICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyMgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsb2c0ai5yb290TG9nZ2VyPVdBUk4sIFNURE9VVAorCitsb2c0ai5hcHBlbmRlci5TVERPVVQ9b3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXIKK2xvZzRqLmFwcGVuZGVyLlNURE9VVC5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0Citsb2c0ai5hcHBlbmRlci5TVERPVVQubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVtJW4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItYmVhbi1zdS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1iZWFuLXN1L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczMmI2MAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItYmVhbi1zdS9wb20ueG1sCkBAIC0wLDAgKzEsNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5sb2FuLWJyb2tlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMubG9hbi1icm9rZXI8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXItYmVhbi1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBMb2FuIEJyb2tlciBCUEVMIDo6IEJlYW4gU1U8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtYmVhbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1iZWFuLXN1L3NyYy9tYWluL2phdmEvbG9hbmJyb2tlci9CYW5rLmphdmEgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWJlYW4tc3Uvc3JjL21haW4vamF2YS9sb2FuYnJva2VyL0JhbmsuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzRmYmY5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1iZWFuLXN1L3NyYy9tYWluL2phdmEvbG9hbmJyb2tlci9CYW5rLmphdmEKQEAgLTAsMCArMSw1NCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2UgbG9hbmJyb2tlcjsNCisNCitpbXBvcnQgamF2YXguYW5ub3RhdGlvbi5SZXNvdXJjZTsNCitpbXBvcnQgamF2YXguamJpLm1lc3NhZ2luZy5EZWxpdmVyeUNoYW5uZWw7DQoraW1wb3J0IGphdmF4LmpiaS5tZXNzYWdpbmcuRXhjaGFuZ2VTdGF0dXM7DQoraW1wb3J0IGphdmF4LmpiaS5tZXNzYWdpbmcuSW5PdXQ7DQoraW1wb3J0IGphdmF4LmpiaS5tZXNzYWdpbmcuTWVzc2FnZUV4Y2hhbmdlOw0KK2ltcG9ydCBqYXZheC5qYmkubWVzc2FnaW5nLk1lc3NhZ2luZ0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YXguamJpLm1lc3NhZ2luZy5Ob3JtYWxpemVkTWVzc2FnZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmpiaS5saXN0ZW5lci5NZXNzYWdlRXhjaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmpiaS5qYXhwLlN0cmluZ1NvdXJjZTsNCisNCitwdWJsaWMgY2xhc3MgQmFuayBpbXBsZW1lbnRzIE1lc3NhZ2VFeGNoYW5nZUxpc3RlbmVyIHsNCisgICAgDQorICAgIEBSZXNvdXJjZQ0KKyAgICBEZWxpdmVyeUNoYW5uZWwgY2hhbm5lbDsNCisgICAgDQorICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZUV4Y2hhbmdlKE1lc3NhZ2VFeGNoYW5nZSBleGNoYW5nZSkgdGhyb3dzIE1lc3NhZ2luZ0V4Y2VwdGlvbiB7DQorICAgICAgICBJbk91dCBpbk91dCA9IChJbk91dCkgZXhjaGFuZ2U7DQorICAgICAgICBpZiAoaW5PdXQuZ2V0U3RhdHVzKCkgPT0gRXhjaGFuZ2VTdGF0dXMuRE9ORSkgew0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0gZWxzZSBpZiAoaW5PdXQuZ2V0U3RhdHVzKCkgPT0gRXhjaGFuZ2VTdGF0dXMuRVJST1IpIHsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oaW5PdXQuZ2V0U2VydmljZSgpLmdldExvY2FsUGFydCgpICsgIiByZXF1ZXN0ZWQiKTsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgU3RyaW5nIG91dHB1dCA9ICI8Z2V0TG9hblF1b3RlUmVzcG9uc2UgeG1sbnM9XCJ1cm46bG9naWNibGF6ZTpzb2E6YmFua1wiPjxyYXRlPiIgKyAoTWF0aC5jZWlsKDEwMDAgKiBNYXRoLnJhbmRvbSgpKSAvIDEwMCkgKyAiPC9yYXRlPjwvZ2V0TG9hblF1b3RlUmVzcG9uc2U+IjsNCisgICAgICAgICAgICBOb3JtYWxpemVkTWVzc2FnZSBhbnN3ZXIgPSBpbk91dC5jcmVhdGVNZXNzYWdlKCk7DQorICAgICAgICAgICAgYW5zd2VyLnNldENvbnRlbnQobmV3IFN0cmluZ1NvdXJjZShvdXRwdXQpKTsNCisgICAgICAgICAgICBpbk91dC5zZXRPdXRNZXNzYWdlKGFuc3dlcik7DQorICAgICAgICAgICAgY2hhbm5lbC5zZW5kKGluT3V0KTsNCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorICAgICAgICAgICAgaW5PdXQuc2V0RXJyb3IoZSk7DQorICAgICAgICAgICAgY2hhbm5lbC5zZW5kKGluT3V0KTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWJlYW4tc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbCBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItYmVhbi1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMzlkMzQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWJlYW4tc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICANCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgIA0KKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKw0KKy0tPg0KKzxiZWFucyB4bWxuczpiZWFuPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2JlYW4vMS4wIiANCisgICAgICAgeG1sbnM6Yms9InVybjpsb2dpY2JsYXplOnNvYTpiYW5rIj4NCisNCisgIDxiZWFuOmVuZHBvaW50IHNlcnZpY2U9ImJrOkJhbmsxIiBlbmRwb2ludD0iYmFuayI+DQorICAgICAgPGJlYW46YmVhbj4NCisgICAgICAgICAgPGJlYW4gY2xhc3M9ImxvYW5icm9rZXIuQmFuayIgLz4NCisgICAgICA8L2JlYW46YmVhbj4NCisgIDwvYmVhbjplbmRwb2ludD4NCisNCisgIDxiZWFuOmVuZHBvaW50IHNlcnZpY2U9ImJrOkJhbmsyIiBlbmRwb2ludD0iYmFuayI+DQorICAgICAgPGJlYW46YmVhbj4NCisgICAgICAgICAgPGJlYW4gY2xhc3M9ImxvYW5icm9rZXIuQmFuayIgLz4NCisgICAgICA8L2JlYW46YmVhbj4NCisgIDwvYmVhbjplbmRwb2ludD4NCisNCisgIDxiZWFuOmVuZHBvaW50IHNlcnZpY2U9ImJrOkJhbmszIiBlbmRwb2ludD0iYmFuayI+DQorICAgICAgPGJlYW46YmVhbj4NCisgICAgICAgICAgPGJlYW4gY2xhc3M9ImxvYW5icm9rZXIuQmFuayIgLz4NCisgICAgICA8L2JlYW46YmVhbj4NCisgIDwvYmVhbjplbmRwb2ludD4NCisNCisgIDxiZWFuOmVuZHBvaW50IHNlcnZpY2U9ImJrOkJhbms0IiBlbmRwb2ludD0iYmFuayI+DQorICAgICAgPGJlYW46YmVhbj4NCisgICAgICAgICAgPGJlYW4gY2xhc3M9ImxvYW5icm9rZXIuQmFuayIgLz4NCisgICAgICA8L2JlYW46YmVhbj4NCisgIDwvYmVhbjplbmRwb2ludD4NCisNCisgIDxiZWFuOmVuZHBvaW50IHNlcnZpY2U9ImJrOkJhbms1IiBlbmRwb2ludD0iYmFuayI+DQorICAgICAgPGJlYW46YmVhbj4NCisgICAgICAgICAgPGJlYW4gY2xhc3M9ImxvYW5icm9rZXIuQmFuayIgLz4NCisgICAgICA8L2JlYW46YmVhbj4NCisgIDwvYmVhbjplbmRwb2ludD4NCisNCis8L2JlYW5zPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItZHJvb2xzLXN1L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWRyb29scy1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDBmYTYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWRyb29scy1zdS9wb20ueG1sCkBAIC0wLDAgKzEsOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5sb2FuLWJyb2tlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMubG9hbi1icm9rZXI8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXItZHJvb2xzLXN1PC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+amJpLXNlcnZpY2UtdW5pdDwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBTZXJ2aWNlTWl4IDo6IEZlYXR1cmVzIDo6IEV4YW1wbGVzIDo6IExvYW4gQnJva2VyIEJQRUwgOjogRHJvb2xzIFNVPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWRyb29sczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZHJvb2xzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZHJvb2xzLWNvbXBpbGVyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+anVuZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD54c3RyZWFtPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD54c3RyZWFtPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS50aG91Z2h0d29ya3MueHN0cmVhbTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+eHN0cmVhbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD54cHAzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD54cHAzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY29tbW9uczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1qY2ktamFuaW5vPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgPC9leGNsdXNpb25zPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1kcm9vbHMtc3Uvc3JjL21haW4vcmVzb3VyY2VzL2NyZWRpdC1hZ2VuY3kuZHJsIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1kcm9vbHMtc3Uvc3JjL21haW4vcmVzb3VyY2VzL2NyZWRpdC1hZ2VuY3kuZHJsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMmZhMDgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWRyb29scy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvY3JlZGl0LWFnZW5jeS5kcmwKQEAgLTAsMCArMSw1MiBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmRyb29scw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7DQoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7DQoraW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5kcm9vbHMubW9kZWwuRXhjaGFuZ2U7DQorDQorZ2xvYmFsIG9yZy5hcGFjaGUuc2VydmljZW1peC5kcm9vbHMubW9kZWwuSmJpSGVscGVyIGpiaTsNCisNCitydWxlIFVua293bk9wZXJhdGlvbg0KKyAgICB3aGVuDQorICAgICAgRXhjaGFuZ2UoIHN0YXR1cyA9PSBFeGNoYW5nZS5BQ1RJVkUsICRpbiA6IGluICE9bnVsbCwNCisgICAgICAgICBvcGVyYXRpb24gIT0gInt1cm46bG9naWNibGF6ZTpzb2E6Y3JlZGl0YWdlbmN5fWdldENyZWRpdEhpc3RvcnlMZW5ndGgiLA0KKyAgICAgICAgIG9wZXJhdGlvbiAhPSAie3Vybjpsb2dpY2JsYXplOnNvYTpjcmVkaXRhZ2VuY3l9Z2V0Q3JlZGl0U2NvcmUiLA0KKyAgICAgICAgIGV2YWwoamJpID09IG51bGwgfHwgIWpiaS5pc0V4Y2hhbmdlSGFuZGxlZCgpKSkNCisgICAgdGhlbg0KKyAgICAgICAgamJpLmZhdWx0KCI8VW5rbm93bk9wZXJhdGlvbiB4bWxucz0ndXJuOmxvZ2ljYmxhemU6c29hOmNyZWRpdGFnZW5jeScvPiIpOw0KK2VuZA0KKw0KK3J1bGUgQ3JlZGl0SGlzdG9yeQ0KKyAgICB3aGVuDQorICAgICAgRXhjaGFuZ2UoIHN0YXR1cyA9PSBFeGNoYW5nZS5BQ1RJVkUsICRpbiA6IGluICE9IG51bGwsDQorICAgICAgICAgb3BlcmF0aW9uID09ICJ7dXJuOmxvZ2ljYmxhemU6c29hOmNyZWRpdGFnZW5jeX1nZXRDcmVkaXRIaXN0b3J5TGVuZ3RoIiwNCisgICAgICAgICBldmFsKGpiaSA9PSBudWxsIHx8ICFqYmkuaXNFeGNoYW5nZUhhbmRsZWQoKSkpDQorICAgIHRoZW4NCisgICAgICAgIGpiaS5hbnN3ZXIoIjxnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVzcG9uc2UgeG1sbnM9J3Vybjpsb2dpY2JsYXplOnNvYTpjcmVkaXRhZ2VuY3knPjxsZW5ndGg+IiArIDEwMCArICI8L2xlbmd0aD48L2dldENyZWRpdEhpc3RvcnlMZW5ndGhSZXNwb25zZT4iKTsNCitlbmQNCisNCitydWxlIENyZWRpdFNjb3JlDQorICAgIHdoZW4NCisgICAgICBFeGNoYW5nZSggc3RhdHVzID09IEV4Y2hhbmdlLkFDVElWRSwgJGluIDogaW4gIT0gbnVsbCwNCisgICAgICAgICBvcGVyYXRpb24gPT0gInt1cm46bG9naWNibGF6ZTpzb2E6Y3JlZGl0YWdlbmN5fWdldENyZWRpdFNjb3JlIiwNCisgICAgICAgICBldmFsKGpiaSA9PSBudWxsIHx8ICFqYmkuaXNFeGNoYW5nZUhhbmRsZWQoKSkpDQorICAgIHRoZW4NCisgICAgICAgIGpiaS5hbnN3ZXIoIjxnZXRDcmVkaXRTY29yZVJlc3BvbnNlIHhtbG5zPSd1cm46bG9naWNibGF6ZTpzb2E6Y3JlZGl0YWdlbmN5Jz48c2NvcmU+IiArIDEwMDAgKyAiPC9zY29yZT48L2dldENyZWRpdFNjb3JlUmVzcG9uc2U+Iik7DQorZW5kDQorDQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1kcm9vbHMtc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbCBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItZHJvb2xzLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2YWRkYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItZHJvb2xzLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKw0KKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisNCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8YmVhbnMgeG1sbnM6ZHJvb2xzPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2Ryb29scy8xLjAiDQorICAgICAgIHhtbG5zOmNhPSJ1cm46bG9naWNibGF6ZTpzb2E6Y3JlZGl0YWdlbmN5Ij4NCisNCisgIDxkcm9vbHM6ZW5kcG9pbnQgc2VydmljZT0iY2E6Q3JlZGl0QWdlbmN5U2VydmljZSINCisgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ9ImFnZW5jeSINCisgICAgICAgICAgICAgICAgICAgcnVsZUJhc2VSZXNvdXJjZT0iY2xhc3NwYXRoOmNyZWRpdC1hZ2VuY3kuZHJsIg0KKyAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VDb250ZXh0PSIjbnNDb250ZXh0IiAvPg0KKw0KKw0KKyAgPGRyb29sczpuYW1lc3BhY2UtY29udGV4dCBpZD0ibnNDb250ZXh0Ij4NCisgICAgPGRyb29sczpuYW1lc3BhY2VzPg0KKyAgICAgIDxkcm9vbHM6bmFtZXNwYWNlIHByZWZpeD0iY2EiPnVybjpsb2dpY2JsYXplOnNvYTpjcmVkaXRhZ2VuY3k8L2Ryb29sczpuYW1lc3BhY2U+DQorICAgIDwvZHJvb2xzOm5hbWVzcGFjZXM+DQorICA8L2Ryb29sczpuYW1lc3BhY2UtY29udGV4dD4NCisNCis8L2JlYW5zPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItZHJvb2xzLXN1L3NyYy90ZXN0L2phdmEvbG9hbmJyb2tlci9DcmVkaXRBZ2VuY3lUZXN0LmphdmEgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWRyb29scy1zdS9zcmMvdGVzdC9qYXZhL2xvYW5icm9rZXIvQ3JlZGl0QWdlbmN5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGM5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWRyb29scy1zdS9zcmMvdGVzdC9qYXZhL2xvYW5icm9rZXIvQ3JlZGl0QWdlbmN5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNzggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGxvYW5icm9rZXI7DQorDQoraW1wb3J0IGphdmF4LmpiaS5tZXNzYWdpbmcuRXhjaGFuZ2VTdGF0dXM7DQoraW1wb3J0IGphdmF4LmpiaS5tZXNzYWdpbmcuSW5Pbmx5Ow0KK2ltcG9ydCBqYXZheC5qYmkubWVzc2FnaW5nLkluT3V0Ow0KK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOw0KKw0KK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2xpZW50LkRlZmF1bHRTZXJ2aWNlTWl4Q2xpZW50Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguY2xpZW50LlNlcnZpY2VNaXhDbGllbnQ7DQoraW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5kcm9vbHMuRHJvb2xzQ29tcG9uZW50Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguZHJvb2xzLkRyb29sc0VuZHBvaW50Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguamJpLmNvbnRhaW5lci5KQklDb250YWluZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5qYmkuamF4cC5Tb3VyY2VUcmFuc2Zvcm1lcjsNCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmpiaS5qYXhwLlN0cmluZ1NvdXJjZTsNCitpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRjay5SZWNlaXZlckNvbXBvbmVudDsNCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb3JlLmlvLkNsYXNzUGF0aFJlc291cmNlOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQorcHVibGljIGNsYXNzIENyZWRpdEFnZW5jeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorICAgIHByaXZhdGUgSkJJQ29udGFpbmVyIGpiaTsNCisgICAgcHJpdmF0ZSBEcm9vbHNDb21wb25lbnQgZHJvb2xzOw0KKyAgICBwcml2YXRlIFNlcnZpY2VNaXhDbGllbnQgY2xpZW50Ow0KKyAgICANCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIHN1cGVyLnNldFVwKCk7DQorICAgICAgICBqYmkgPSBuZXcgSkJJQ29udGFpbmVyKCk7DQorICAgICAgICBqYmkuc2V0RW1iZWRkZWQodHJ1ZSk7DQorICAgICAgICBqYmkuaW5pdCgpOw0KKyAgICAgICAgY2xpZW50ID0gbmV3IERlZmF1bHRTZXJ2aWNlTWl4Q2xpZW50KGpiaSk7DQorICAgIH0NCisgICAgDQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBqYmkuc2h1dERvd24oKTsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgdGVzdENyZWRpdEhpc3RvcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIGRyb29scyA9IG5ldyBEcm9vbHNDb21wb25lbnQoKTsNCisgICAgICAgIERyb29sc0VuZHBvaW50IGVuZHBvaW50ID0gbmV3IERyb29sc0VuZHBvaW50KGRyb29scy5nZXRTZXJ2aWNlVW5pdCgpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFFOYW1lKCJkcm9vbHMiKSwgImVuZHBvaW50Iik7DQorICAgICAgICBlbmRwb2ludC5zZXRSdWxlQmFzZVJlc291cmNlKG5ldyBDbGFzc1BhdGhSZXNvdXJjZSgiY3JlZGl0LWFnZW5jeS5kcmwiKSk7DQorICAgICAgICBkcm9vbHMuc2V0RW5kcG9pbnRzKG5ldyBEcm9vbHNFbmRwb2ludFtdIHtlbmRwb2ludCB9KTsNCisgICAgICAgIGpiaS5hY3RpdmF0ZUNvbXBvbmVudChkcm9vbHMsICJzZXJ2aWNlbWl4LWRyb29scyIpOw0KKyAgICAgICAgDQorICAgICAgICBqYmkuc3RhcnQoKTsNCisgICAgICAgIA0KKyAgICAgICAgSW5PdXQgbWUgPSBjbGllbnQuY3JlYXRlSW5PdXRFeGNoYW5nZSgpOw0KKyAgICAgICAgbWUuc2V0U2VydmljZShuZXcgUU5hbWUoImRyb29scyIpKTsNCisgICAgICAgIG1lLnNldE9wZXJhdGlvbihuZXcgUU5hbWUoInVybjpsb2dpY2JsYXplOnNvYTpjcmVkaXRhZ2VuY3kiLCAiZ2V0Q3JlZGl0SGlzdG9yeUxlbmd0aCIpKTsNCisgICAgICAgIG1lLmdldEluTWVzc2FnZSgpLnNldENvbnRlbnQobmV3IFN0cmluZ1NvdXJjZSgiPGdldENyZWRpdEhpc3RvcnlMZW5ndGhSZXF1ZXN0IHhtbG5zPSd1cm46bG9naWNibGF6ZTpzb2E6Y3JlZGl0YWdlbmN5Jz48c3NuPjEyMzQ1Njwvc3NuPjwvZ2V0Q3JlZGl0SGlzdG9yeUxlbmd0aFJlcXVlc3Q+IikpOw0KKyAgICAgICAgY2xpZW50LnNlbmRTeW5jKG1lKTsNCisgICAgICAgIEVsZW1lbnQgZSA9IG5ldyBTb3VyY2VUcmFuc2Zvcm1lcigpLnRvRE9NRWxlbWVudChtZS5nZXRPdXRNZXNzYWdlKCkpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVzcG9uc2UiLCBlLmdldExvY2FsTmFtZSgpKTsNCisgICAgICAgIGNsaWVudC5kb25lKG1lKTsNCisgICAgICAgIA0KKyAgICAgICAgVGhyZWFkLnNsZWVwKDUwKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWRyb29scy1zdS9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGotdGVzdHMucHJvcGVydGllcyBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItZHJvb2xzLXN1L3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai10ZXN0cy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YTQ4ODcKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWRyb29scy1zdS9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGotdGVzdHMucHJvcGVydGllcwpAQCAtMCwwICsxLDQxIEBACisjIA0KKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMgZGlzdHJpYnV0ZWQgIHVuZGVyIHRoZSAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyMgV0lUSE9VVCAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TICBPRiBBTlkgS0lORCwgZWl0aGVyICBleHByZXNzICBvcg0KKyMgaW1wbGllZC4NCisjICANCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMNCisjDQorDQorIw0KKyMgVGhlIGxvZ2dpbmcgcHJvcGVydGllcyB1c2VkIGR1cmluZyB0ZXN0cy4uDQorIw0KK2xvZzRqLnJvb3RMb2dnZXI9REVCVUcsIG91dA0KKw0KK2xvZzRqLmxvZ2dlci5vcmcuYXBhY2hlLmFjdGl2ZW1xPUlORk8NCitsb2c0ai5sb2dnZXIub3JnLmFwYWNoZS5hY3RpdmVtcS5zcHJpbmc9V0FSTg0KK2xvZzRqLmxvZ2dlci5vcmcuYXBhY2hlLmFjdGl2ZW1xLnN0b3JlLmpvdXJuYWw9SU5GTw0KK2xvZzRqLmxvZ2dlci5vcmcuYWN0aXZlaW8uam91cm5hbD1JTkZPDQorDQorIyBDT05TT0xFIGFwcGVuZGVyIG5vdCB1c2VkIGJ5IGRlZmF1bHQNCitsb2c0ai5hcHBlbmRlci5zdGRvdXQ9b3JnLmFwYWNoZS5sb2c0ai5Db25zb2xlQXBwZW5kZXINCitsb2c0ai5hcHBlbmRlci5zdGRvdXQubGF5b3V0PW9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dA0KK2xvZzRqLmFwcGVuZGVyLnN0ZG91dC5sYXlvdXQuQ29udmVyc2lvblBhdHRlcm49JWQgWyUtMTUuMTV0XSAlLTVwICUtMzAuMzBjezF9IC0gJW0lbg0KKw0KKyMgRmlsZSBhcHBlbmRlcg0KK2xvZzRqLmFwcGVuZGVyLm91dD1vcmcuYXBhY2hlLmxvZzRqLkZpbGVBcHBlbmRlcg0KK2xvZzRqLmFwcGVuZGVyLm91dC5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0DQorbG9nNGouYXBwZW5kZXIub3V0LmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZCBbJS0xNS4xNXRdICUtNXAgJS0zMC4zMGN7MX0gLSAlbSVuDQorbG9nNGouYXBwZW5kZXIub3V0LmZpbGU9dGFyZ2V0L3NlcnZpY2VtaXgtdGVzdC5sb2cNCitsb2c0ai5hcHBlbmRlci5vdXQuYXBwZW5kPXRydWUNCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWptcy1zdS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1qbXMtc3UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWU2NmVhCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1qbXMtc3UvcG9tLnhtbApAQCAtMCwwICsxLDg2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXI8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmxvYW4tYnJva2VyPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmxvYW4tYnJva2VyLWptcy1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBMb2FuIEJyb2tlciBCUEVMIDo6IEpNUyBTVTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1qbXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtcG9vbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxleGNsdXNpb25zPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXEucHJvdG9idWY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLXByb3RvYnVmPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmthaGFkYjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWxvZ2dpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbG9nZ2luZy1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1uZXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbmV0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWp0YV8xLjAuMUJfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJlYW5zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgPC9leGNsdXNpb25zPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLWptcy1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1qbXMtc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWVjOTdlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1qbXMtc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbApAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICANCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgIA0KKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKw0KKy0tPg0KKzxiZWFucyB4bWxuczpqbXM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvam1zLzEuMCINCisgICAgICAgeG1sbnM6bGI9InVybjpsb2dpY2JsYXplOnNvYTpsb2FuYnJva2VyIj4NCisNCisgIDxqbXM6ZW5kcG9pbnQgc2VydmljZT0ibGI6TG9hbkJyb2tlclNlcnZpY2UiDQorICAgICAgICAgICAgICAgIGVuZHBvaW50PSJicm9rZXIiDQorICAgICAgICAgICAgICAgIHRhcmdldFNlcnZpY2U9ImxiOkxvYW5Ccm9rZXJTZXJ2aWNlIg0KKyAgICAgICAgICAgICAgICBkZWZhdWx0T3BlcmF0aW9uPSJsYjpnZXRMb2FuUXVvdGUiIA0KKyAgICAgICAgICAgICAgICByb2xlPSJjb25zdW1lciINCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbkZhY3Rvcnk9IiNqbXNGYWN0b3J5Ig0KKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblN0eWxlPSJxdWV1ZSINCisgICAgICAgICAgICAgICAgam1zUHJvdmlkZXJEZXN0aW5hdGlvbk5hbWU9ImRlbW8ub3JnLnNlcnZpY2VtaXguc291cmNlIg0KKyAgICAgICAgICAgICAgICBkZWZhdWx0TWVwPSJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0IiAvPg0KKw0KKyAgPGJlYW4gaWQ9Imptc0ZhY3RvcnkiIGNsYXNzPSJvcmcuYXBhY2hlLmFjdGl2ZW1xLnBvb2wuUG9vbGVkQ29ubmVjdGlvbkZhY3RvcnkiPg0KKyAgICA8cHJvcGVydHkgbmFtZT0iY29ubmVjdGlvbkZhY3RvcnkiPg0KKyAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLmFjdGl2ZW1xLkFjdGl2ZU1RQ29ubmVjdGlvbkZhY3RvcnkiPg0KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJyb2tlclVSTCIgdmFsdWU9InRjcDovL2xvY2FsaG9zdDo2MTYxNiIgLz4NCisgICAgICA8L2JlYW4+DQorICAgIDwvcHJvcGVydHk+DQorICA8L2JlYW4+DQorDQorPC9iZWFucz4NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLW9kZS1zdS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1vZGUtc3UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjA0NGJlCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1vZGUtc3UvcG9tLnhtbApAQCAtMCwwICsxLDQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXI8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmxvYW4tYnJva2VyPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmxvYW4tYnJva2VyLW9kZS1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBMb2FuIEJyb2tlciBCUEVMIDo6IE9ERSBTVTwvbmFtZT4KKworICAgIDxwcm9wZXJ0aWVzPgorICAgICAgICA8Y29tcG9uZW50TmFtZT5PZGVCcGVsRW5naW5lPC9jb21wb25lbnROYW1lPgorICAgIDwvcHJvcGVydGllcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItb2RlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9iYW5rLndzZGwgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLW9kZS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvYmFuay53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNDIyYWIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLW9kZS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvYmFuay53c2RsCkBAIC0wLDAgKzEsNzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPCEtLSAkUmV2OiAzNTYwNTIgJCAkRGF0ZTogMjAwNS0xMi0xMSAxNDo0MToyMCAtMDgwMCAoZGltLiwgMTEgZOKImsKpYy4gMjAwNSkgJCAtLT4NCis8ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46bG9naWNibGF6ZTpzb2E6YmFuayINCisgICAgeG1sbnM6dG5zPSJ1cm46bG9naWNibGF6ZTpzb2E6YmFuayINCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KKyAgICB4bWxuczpwbG5rPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c2JwZWwvMi4wL3Bsbmt0eXBlIg0KKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCisNCisgICAgPHR5cGVzPg0KKyAgICAgICAgPHhzZDpzY2hlbWENCisgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpsb2dpY2JsYXplOnNvYTpiYW5rIg0KKyAgICAgICAgICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KKw0KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZ2V0TG9hblF1b3RlUmVxdWVzdCI+DQorICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3NuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFtb3VudCIgdHlwZT0ieHNkOmRvdWJsZSIgLz4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkdXJhdGlvbiIgdHlwZT0ieHNkOmludCIgLz4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzY29yZSIgdHlwZT0ieHNkOmludCIgLz4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsZW5ndGgiIHR5cGU9InhzZDppbnQiIC8+DQorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKw0KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZ2V0TG9hblF1b3RlUmVzcG9uc2UiPg0KKyAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJhdGUiIHR5cGU9InhzZDpkb3VibGUiIC8+DQorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKw0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJnZXRMb2FuUXVvdGVSZXF1ZXN0IiB0eXBlPSJ0bnM6Z2V0TG9hblF1b3RlUmVxdWVzdCIgLz4NCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZ2V0TG9hblF1b3RlUmVzcG9uc2UiIHR5cGU9InRuczpnZXRMb2FuUXVvdGVSZXNwb25zZSIgLz4NCisNCisgICAgICAgIDwveHNkOnNjaGVtYT4NCisgICAgPC90eXBlcz4NCisNCisgICAgPG1lc3NhZ2UgbmFtZT0iZ2V0TG9hblF1b3RlUmVxdWVzdCI+DQorICAgICAgICA8cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0bnM6Z2V0TG9hblF1b3RlUmVxdWVzdCIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJnZXRMb2FuUXVvdGVSZXNwb25zZSI+DQorICAgICAgICA8cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0bnM6Z2V0TG9hblF1b3RlUmVzcG9uc2UiIC8+DQorICAgIDwvbWVzc2FnZT4NCisNCisgICAgPHBvcnRUeXBlIG5hbWU9IkJhbmsiPg0KKyAgICAgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRMb2FuUXVvdGUiPg0KKyAgICAgICAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0TG9hblF1b3RlUmVxdWVzdCIgLz4NCisgICAgICAgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRMb2FuUXVvdGVSZXNwb25zZSIgLz4NCisgICAgICAgIDwvb3BlcmF0aW9uPg0KKyAgICA8L3BvcnRUeXBlPg0KKw0KKyAgICA8cGxuazpwYXJ0bmVyTGlua1R5cGUgbmFtZT0iQmFua1BMIj4NCisgICAgICAgIDxwbG5rOnJvbGUgbmFtZT0iQmFua1NlcnZpY2UiIHBvcnRUeXBlPSJ0bnM6QmFuayIgLz4NCisgICAgPC9wbG5rOnBhcnRuZXJMaW5rVHlwZT4NCisNCis8L2RlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItb2RlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9jcmVkaXRhZ2VuY3kud3NkbCBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItb2RlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9jcmVkaXRhZ2VuY3kud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmIzZWMyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1vZGUtc3Uvc3JjL21haW4vcmVzb3VyY2VzL2NyZWRpdGFnZW5jeS53c2RsCkBAIC0wLDAgKzEsMTIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICANCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgIA0KKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKw0KKy0tPg0KKzwhLS0gJFJldjogMzU2MDUyICQgJERhdGU6IDIwMDUtMTItMTEgMTQ6NDE6MjAgLTA4MDAgKGRpbS4sIDExIGTiiJrCqWMuIDIwMDUpICQgLS0+DQorPGRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0idXJuOmxvZ2ljYmxhemU6c29hOmNyZWRpdGFnZW5jeSINCisgICAgeG1sbnM6dG5zPSJ1cm46bG9naWNibGF6ZTpzb2E6Y3JlZGl0YWdlbmN5Ig0KKyAgICB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iDQorICAgIHhtbG5zOnBsbms9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzYnBlbC8yLjAvcGxua3R5cGUiDQorICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KKw0KKyAgICA8dHlwZXM+DQorICAgICAgICA8eHNkOnNjaGVtYQ0KKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOmxvZ2ljYmxhemU6c29hOmNyZWRpdGFnZW5jeSINCisgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCisNCisgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImdldENyZWRpdFNjb3JlUmVxdWVzdCI+DQorICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3NuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisNCisgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImdldENyZWRpdFNjb3JlUmVzcG9uc2UiPg0KKyAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNjb3JlIiB0eXBlPSJ4c2Q6aW50IiAvPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisNCisgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImdldENyZWRpdEhpc3RvcnlMZW5ndGhSZXF1ZXN0Ij4NCisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzc24iIHR5cGU9InhzZDpzdHJpbmciIC8+DQorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKw0KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZ2V0Q3JlZGl0SGlzdG9yeUxlbmd0aFJlc3BvbnNlIj4NCisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsZW5ndGgiIHR5cGU9InhzZDppbnQiIC8+DQorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKw0KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0idW5rbm93blNTTkZhdWx0Ij4NCisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzc24iIHR5cGU9InhzZDpzdHJpbmciIC8+DQorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKw0KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iaW52YWxpZFNTTkZhdWx0Ij4NCisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzc24iIHR5cGU9InhzZDpzdHJpbmciIC8+DQorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKw0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJnZXRDcmVkaXRTY29yZVJlcXVlc3QiIHR5cGU9InRuczpnZXRDcmVkaXRTY29yZVJlcXVlc3QiIC8+DQorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImdldENyZWRpdFNjb3JlUmVzcG9uc2UiIHR5cGU9InRuczpnZXRDcmVkaXRTY29yZVJlc3BvbnNlIiAvPg0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVxdWVzdCIgdHlwZT0idG5zOmdldENyZWRpdEhpc3RvcnlMZW5ndGhSZXF1ZXN0IiAvPg0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVzcG9uc2UiIHR5cGU9InRuczpnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVzcG9uc2UiIC8+DQorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVua25vd25TU05GYXVsdCIgdHlwZT0idG5zOnVua25vd25TU05GYXVsdCIgLz4NCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW52YWxpZFNTTkZhdWx0IiB0eXBlPSJ0bnM6aW52YWxpZFNTTkZhdWx0IiAvPg0KKw0KKyAgICAgICAgPC94c2Q6c2NoZW1hPg0KKyAgICA8L3R5cGVzPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJnZXRDcmVkaXRTY29yZVJlcXVlc3QiPg0KKyAgICAgICAgPHBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idG5zOmdldENyZWRpdFNjb3JlUmVxdWVzdCIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJnZXRDcmVkaXRTY29yZVJlc3BvbnNlIj4NCisgICAgICAgIDxwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InRuczpnZXRDcmVkaXRTY29yZVJlc3BvbnNlIiAvPg0KKyAgICA8L21lc3NhZ2U+DQorDQorICAgIDxtZXNzYWdlIG5hbWU9ImdldENyZWRpdEhpc3RvcnlMZW5ndGhSZXF1ZXN0Ij4NCisgICAgICAgIDxwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InRuczpnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVxdWVzdCIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVzcG9uc2UiPg0KKyAgICAgICAgPHBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idG5zOmdldENyZWRpdEhpc3RvcnlMZW5ndGhSZXNwb25zZSIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJ1bmtub3duU1NORmF1bHQiPg0KKyAgICAgICAgPHBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idG5zOnVua25vd25TU05GYXVsdCIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJpbnZhbGlkU1NORmF1bHQiPg0KKyAgICAgICAgPHBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idG5zOmludmFsaWRTU05GYXVsdCIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8cG9ydFR5cGUgbmFtZT0iQ3JlZGl0QWdlbmN5Ij4NCisgICAgICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0Q3JlZGl0U2NvcmUiPg0KKyAgICAgICAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0Q3JlZGl0U2NvcmVSZXF1ZXN0IiAvPg0KKyAgICAgICAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOmdldENyZWRpdFNjb3JlUmVzcG9uc2UiIC8+DQorICAgICAgICAgICAgPGZhdWx0IG5hbWU9IlVua25vd25TU04iIG1lc3NhZ2U9InRuczp1bmtub3duU1NORmF1bHQiIC8+DQorICAgICAgICAgICAgPGZhdWx0IG5hbWU9IkludmFsaWRTU04iIG1lc3NhZ2U9InRuczppbnZhbGlkU1NORmF1bHQiIC8+DQorICAgICAgICA8L29wZXJhdGlvbj4NCisgICAgICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0Q3JlZGl0SGlzdG9yeUxlbmd0aCI+DQorICAgICAgICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVxdWVzdCIgLz4NCisgICAgICAgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRDcmVkaXRIaXN0b3J5TGVuZ3RoUmVzcG9uc2UiIC8+DQorICAgICAgICAgICAgPGZhdWx0IG5hbWU9IlVua25vd25TU04iIG1lc3NhZ2U9InRuczp1bmtub3duU1NORmF1bHQiPg0KKyAgICAgICAgICAgIDwvZmF1bHQ+DQorICAgICAgICA8L29wZXJhdGlvbj4NCisgICAgPC9wb3J0VHlwZT4NCisNCisgICAgPHBsbms6cGFydG5lckxpbmtUeXBlIG5hbWU9IkNyZWRpdEFnZW5jeVBMIj4NCisgICAgICAgIDxwbG5rOnJvbGUgbmFtZT0iQ3JlZGl0QWdlbmN5U2VydmljZSIgcG9ydFR5cGU9InRuczpDcmVkaXRBZ2VuY3kiIC8+DQorICAgIDwvcGxuazpwYXJ0bmVyTGlua1R5cGU+DQorDQorPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLW9kZS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvZGVwbG95LnhtbCBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItb2RlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9kZXBsb3kueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzQ4YmMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLW9kZS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvZGVwbG95LnhtbApAQCAtMCwwICsxLDQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorDQorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKw0KKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKy0tPg0KKw0KKzxkZXBsb3kgeG1sbnM9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9vZGUvc2NoZW1hcy9kZC8yMDA3LzAzIg0KKyAgICAgICAgeG1sbnM6bGI9InVybjpsb2dpY2JsYXplOnNvYTpsb2FuYnJva2VyIg0KKyAgICAgICAgeG1sbnM6Y2E9InVybjpsb2dpY2JsYXplOnNvYTpjcmVkaXRhZ2VuY3kiDQorICAgICAgICB4bWxuczpiaz0idXJuOmxvZ2ljYmxhemU6c29hOmJhbmsiPg0KKw0KKyAgPHByb2Nlc3MgbmFtZT0ibGI6TG9hbkJyb2tlclNlcnZpY2UiPg0KKyAgICA8YWN0aXZlPnRydWU8L2FjdGl2ZT4NCisgICAgPHByb3ZpZGUgcGFydG5lckxpbms9IkxvYW5Ccm9rZXIiPg0KKyAgICAgIDxzZXJ2aWNlIG5hbWU9ImxiOkxvYW5Ccm9rZXJTZXJ2aWNlIiBwb3J0PSJicm9rZXIiIC8+DQorICAgIDwvcHJvdmlkZT4NCisgICAgPGludm9rZSBwYXJ0bmVyTGluaz0iQ3JlZGl0QWdlbmN5Ij4NCisgICAgICA8c2VydmljZSBuYW1lPSJjYTpDcmVkaXRBZ2VuY3lTZXJ2aWNlIiBwb3J0PSJhZ2VuY3kiIC8+DQorICAgIDwvaW52b2tlPg0KKyAgICA8aW52b2tlIHBhcnRuZXJMaW5rPSJCYW5rMSI+DQorICAgICAgPHNlcnZpY2UgbmFtZT0iYms6QmFuazEiIHBvcnQ9ImJhbmsiIC8+DQorICAgIDwvaW52b2tlPg0KKyAgICA8aW52b2tlIHBhcnRuZXJMaW5rPSJCYW5rMiI+DQorICAgICAgPHNlcnZpY2UgbmFtZT0iYms6QmFuazIiIHBvcnQ9ImJhbmsiIC8+DQorICAgIDwvaW52b2tlPg0KKyAgICA8aW52b2tlIHBhcnRuZXJMaW5rPSJCYW5rMyI+DQorICAgICAgPHNlcnZpY2UgbmFtZT0iYms6QmFuazMiIHBvcnQ9ImJhbmsiIC8+DQorICAgIDwvaW52b2tlPg0KKyAgICA8aW52b2tlIHBhcnRuZXJMaW5rPSJCYW5rNCI+DQorICAgICAgPHNlcnZpY2UgbmFtZT0iYms6QmFuazQiIHBvcnQ9ImJhbmsiIC8+DQorICAgIDwvaW52b2tlPg0KKyAgICA8aW52b2tlIHBhcnRuZXJMaW5rPSJCYW5rNSI+DQorICAgICAgPHNlcnZpY2UgbmFtZT0iYms6QmFuazUiIHBvcnQ9ImJhbmsiIC8+DQorICAgIDwvaW52b2tlPg0KKyAgPC9wcm9jZXNzPg0KKw0KKzwvZGVwbG95Pg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItb2RlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9sb2FuYnJva2VyLmJwZWwgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLW9kZS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9hbmJyb2tlci5icGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOGY0YjAKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLW9kZS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9hbmJyb2tlci5icGVsCkBAIC0wLDAgKzEsMzA1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICANCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgIA0KKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKw0KKy0tPg0KKzwhLS0gJFJldjogMzU2MDUyICQgJERhdGU6IDIwMDUtMTItMTEgMTQ6NDE6MjAgLTA4MDAgKGRpbS4sIDExIGTiiJrCqWMuIDIwMDUpICQgLS0+DQorPGJwZWw6cHJvY2VzcyBuYW1lPSJMb2FuQnJva2VyU2VydmljZSINCisgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46bG9naWNibGF6ZTpzb2E6bG9hbmJyb2tlciINCisgICAgc3VwcHJlc3NKb2luRmFpbHVyZT0ieWVzIg0KKyAgICBleGl0T25TdGFuZGFyZEZhdWx0PSJ5ZXMiDQorICAgIGV4cHJlc3Npb25MYW5ndWFnZT0idXJuOm9hc2lzOm5hbWVzOnRjOndzYnBlbDoyLjA6c3VibGFuZzp4cGF0aDIuMCINCisgICAgeG1sbnM6dG5zPSJ1cm46bG9naWNibGF6ZTpzb2E6bG9hbmJyb2tlciINCisgICAgeG1sbnM6Y2E9InVybjpsb2dpY2JsYXplOnNvYTpjcmVkaXRhZ2VuY3kiDQorICAgIHhtbG5zOmJrPSJ1cm46bG9naWNibGF6ZTpzb2E6YmFuayINCisgICAgeG1sbnM6c3ZjPSJ1cm46bG9naWNibGF6ZTpzb2E6c2VydmljZSINCisgICAgeG1sbnM6YnBlbD0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NicGVsLzIuMC9wcm9jZXNzL2V4ZWN1dGFibGUiPg0KKw0KKyAgICA8YnBlbDppbXBvcnQgaW1wb3J0VHlwZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIGxvY2F0aW9uPSJsb2FuYnJva2VyLndzZGwiIG5hbWVzcGFjZT0idXJuOmxvZ2ljYmxhemU6c29hOmxvYW5icm9rZXIiLz4NCisNCisgICAgPGJwZWw6cGFydG5lckxpbmtzPg0KKyAgICAgICAgPGJwZWw6cGFydG5lckxpbmsgbXlSb2xlPSJMb2FuQnJva2VyU2VydmljZSIgbmFtZT0iTG9hbkJyb2tlciIgcGFydG5lckxpbmtUeXBlPSJ0bnM6TG9hbkJyb2tlclBMIi8+DQorICAgICAgICA8YnBlbDpwYXJ0bmVyTGluayBwYXJ0bmVyUm9sZT0iQ3JlZGl0QWdlbmN5U2VydmljZSIgbmFtZT0iQ3JlZGl0QWdlbmN5IiBwYXJ0bmVyTGlua1R5cGU9ImNhOkNyZWRpdEFnZW5jeVBMIi8+DQorICAgICAgICA8YnBlbDpwYXJ0bmVyTGluayBwYXJ0bmVyUm9sZT0iQmFua1NlcnZpY2UiIG5hbWU9IkJhbmsxIiBwYXJ0bmVyTGlua1R5cGU9ImJrOkJhbmtQTCIvPg0KKyAgICAgICAgPGJwZWw6cGFydG5lckxpbmsgcGFydG5lclJvbGU9IkJhbmtTZXJ2aWNlIiBuYW1lPSJCYW5rMiIgcGFydG5lckxpbmtUeXBlPSJiazpCYW5rUEwiLz4NCisgICAgICAgIDxicGVsOnBhcnRuZXJMaW5rIHBhcnRuZXJSb2xlPSJCYW5rU2VydmljZSIgbmFtZT0iQmFuazMiIHBhcnRuZXJMaW5rVHlwZT0iYms6QmFua1BMIi8+DQorICAgICAgICA8YnBlbDpwYXJ0bmVyTGluayBwYXJ0bmVyUm9sZT0iQmFua1NlcnZpY2UiIG5hbWU9IkJhbms0IiBwYXJ0bmVyTGlua1R5cGU9ImJrOkJhbmtQTCIvPg0KKyAgICAgICAgPGJwZWw6cGFydG5lckxpbmsgcGFydG5lclJvbGU9IkJhbmtTZXJ2aWNlIiBuYW1lPSJCYW5rNSIgcGFydG5lckxpbmtUeXBlPSJiazpCYW5rUEwiLz4NCisgICAgPC9icGVsOnBhcnRuZXJMaW5rcz4NCisNCisgICAgPGJwZWw6dmFyaWFibGVzPg0KKyAgICAgICAgPGJwZWw6dmFyaWFibGUgbmFtZT0icmVxdWVzdCIgbWVzc2FnZVR5cGU9InRuczpnZXRMb2FuUXVvdGVSZXF1ZXN0IiAvPg0KKyAgICAgICAgPGJwZWw6dmFyaWFibGUgbmFtZT0icmVzcG9uc2UiIG1lc3NhZ2VUeXBlPSJ0bnM6Z2V0TG9hblF1b3RlUmVzcG9uc2UiIC8+DQorICAgICAgICA8YnBlbDp2YXJpYWJsZSBuYW1lPSJjYS1zY29yZS1yZXF1ZXN0IiBtZXNzYWdlVHlwZT0iY2E6Z2V0Q3JlZGl0U2NvcmVSZXF1ZXN0IiAvPg0KKyAgICAgICAgPGJwZWw6dmFyaWFibGUgbmFtZT0iY2Etc2NvcmUtcmVzcG9uc2UiIG1lc3NhZ2VUeXBlPSJjYTpnZXRDcmVkaXRTY29yZVJlc3BvbnNlIiAvPg0KKyAgICAgICAgPGJwZWw6dmFyaWFibGUgbmFtZT0iY2EtaGlzdG9yeS1yZXF1ZXN0IiBtZXNzYWdlVHlwZT0iY2E6Z2V0Q3JlZGl0SGlzdG9yeUxlbmd0aFJlcXVlc3QiIC8+DQorICAgICAgICA8YnBlbDp2YXJpYWJsZSBuYW1lPSJjYS1oaXN0b3J5LXJlc3BvbnNlIiBtZXNzYWdlVHlwZT0iY2E6Z2V0Q3JlZGl0SGlzdG9yeUxlbmd0aFJlc3BvbnNlIiAvPg0KKyAgICAgICAgPGJwZWw6dmFyaWFibGUgbmFtZT0iYmstbG9hbnF1b3RlLXJlcXVlc3QiIG1lc3NhZ2VUeXBlPSJiazpnZXRMb2FuUXVvdGVSZXF1ZXN0IiAvPg0KKyAgICAgICAgPGJwZWw6dmFyaWFibGUgbmFtZT0iYmstbG9hbnF1b3RlLXJlc3BvbnNlLTEiIG1lc3NhZ2VUeXBlPSJiazpnZXRMb2FuUXVvdGVSZXNwb25zZSIgLz4NCisgICAgICAgIDxicGVsOnZhcmlhYmxlIG5hbWU9ImJrLWxvYW5xdW90ZS1yZXNwb25zZS0yIiBtZXNzYWdlVHlwZT0iYms6Z2V0TG9hblF1b3RlUmVzcG9uc2UiIC8+DQorICAgICAgICA8YnBlbDp2YXJpYWJsZSBuYW1lPSJiay1sb2FucXVvdGUtcmVzcG9uc2UtMyIgbWVzc2FnZVR5cGU9ImJrOmdldExvYW5RdW90ZVJlc3BvbnNlIiAvPg0KKyAgICAgICAgPGJwZWw6dmFyaWFibGUgbmFtZT0iYmstbG9hbnF1b3RlLXJlc3BvbnNlLTQiIG1lc3NhZ2VUeXBlPSJiazpnZXRMb2FuUXVvdGVSZXNwb25zZSIgLz4NCisgICAgICAgIDxicGVsOnZhcmlhYmxlIG5hbWU9ImJrLWxvYW5xdW90ZS1yZXNwb25zZS01IiBtZXNzYWdlVHlwZT0iYms6Z2V0TG9hblF1b3RlUmVzcG9uc2UiIC8+DQorICAgICAgICA8YnBlbDp2YXJpYWJsZSBuYW1lPSJpbnZhbGlkU1NOIiBtZXNzYWdlVHlwZT0idG5zOmludmFsaWRTU05GYXVsdCIgLz4NCisgICAgICAgIDxicGVsOnZhcmlhYmxlIG5hbWU9InVua25vd25TU04iIG1lc3NhZ2VUeXBlPSJ0bnM6dW5rbm93blNTTkZhdWx0IiAvPg0KKyAgICA8L2JwZWw6dmFyaWFibGVzPg0KKyAgICANCisgICAgPGJwZWw6ZmF1bHRIYW5kbGVycz4NCisgICAgICAgIDxicGVsOmNhdGNoIGZhdWx0TmFtZT0iY2E6SW52YWxpZFNTTiI+DQorICAgICAgICAgICAgPGJwZWw6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgIDxicGVsOmFzc2lnbj4NCisgICAgICAgICAgICAgICAgICAgIDxicGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6bGl0ZXJhbD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0bnM6aW52YWxpZFNTTkZhdWx0Pjx0bnM6c3NuLz48L3RuczppbnZhbGlkU1NORmF1bHQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpsaXRlcmFsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOnRvPiRpbnZhbGlkU1NOLnBheWxvYWQ8L2JwZWw6dG8+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgICAgIDxicGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6ZnJvbT4kcmVxdWVzdC5wYXlsb2FkL3Ruczpzc248L2JwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDp0bz4kaW52YWxpZFNTTi5wYXlsb2FkL3Ruczpzc248L2JwZWw6dG8+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgPC9icGVsOmFzc2lnbj4NCisgICAgICAgICAgICAgICAgPGJwZWw6cmVwbHkgbmFtZT0icmVzcG9uc2UiIHBhcnRuZXJMaW5rPSJMb2FuQnJva2VyIg0KKyAgICAgICAgICAgICAgICAgICAgcG9ydFR5cGU9InRuczpMb2FuQnJva2VyIiBvcGVyYXRpb249ImdldExvYW5RdW90ZSINCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPSJpbnZhbGlkU1NOIiBmYXVsdE5hbWU9InRuczpJbnZhbGlkU1NOIiA+DQorICAgICAgICAgICAgICAgIDwvYnBlbDpyZXBseT4NCisgICAgICAgICAgICA8L2JwZWw6c2VxdWVuY2U+DQorICAgICAgICA8L2JwZWw6Y2F0Y2g+DQorICAgICAgICA8YnBlbDpjYXRjaCBmYXVsdE5hbWU9ImNhOlVua293blNTTiI+DQorICAgICAgICAgICAgPGJwZWw6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgIDxicGVsOmFzc2lnbj4NCisgICAgICAgICAgICAgICAgICAgIDxicGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6bGl0ZXJhbD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0bnM6dW5rbm93blNTTkZhdWx0Pjx0bnM6c3NuLz48L3Ruczp1bmtub3duU1NORmF1bHQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpsaXRlcmFsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOnRvPiRpbnZhbGlkU1NOLnBheWxvYWQ8L2JwZWw6dG8+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgICAgIDxicGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6ZnJvbT4kcmVxdWVzdC5wYXlsb2FkL3Ruczpzc248L2JwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDp0bz4kdW5rbm93blNTTi5wYXlsb2FkL3Ruczpzc248L2JwZWw6dG8+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgPC9icGVsOmFzc2lnbj4NCisgICAgICAgICAgICAgICAgPGJwZWw6cmVwbHkgbmFtZT0icmVzcG9uc2UiIHBhcnRuZXJMaW5rPSJMb2FuQnJva2VyIg0KKyAgICAgICAgICAgICAgICAgICAgcG9ydFR5cGU9InRuczpMb2FuQnJva2VyIiBvcGVyYXRpb249ImdldExvYW5RdW90ZSINCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPSJ1bmtub3duU1NOIiBmYXVsdE5hbWU9InRuczpVbmtub3duU1NOIiA+DQorICAgICAgICAgICAgICAgIDwvYnBlbDpyZXBseT4NCisgICAgICAgICAgICA8L2JwZWw6c2VxdWVuY2U+DQorICAgICAgICA8L2JwZWw6Y2F0Y2g+DQorICAgIDwvYnBlbDpmYXVsdEhhbmRsZXJzPg0KKw0KKyAgICA8YnBlbDpzZXF1ZW5jZT4NCisgICAgICAgIDxicGVsOnJlY2VpdmUgbmFtZT0icmVxdWVzdCIgcGFydG5lckxpbms9IkxvYW5Ccm9rZXIiDQorICAgICAgICAgICAgcG9ydFR5cGU9InRuczpMb2FuQnJva2VyIiBvcGVyYXRpb249ImdldExvYW5RdW90ZSIgdmFyaWFibGU9InJlcXVlc3QiDQorICAgICAgICAgICAgY3JlYXRlSW5zdGFuY2U9InllcyI+DQorICAgICAgICA8L2JwZWw6cmVjZWl2ZT4NCisNCisgICAgICAgICAgICANCisgICAgICAgIDxicGVsOmZsb3c+DQorICAgICAgICANCisgICAgICAgICAgICA8YnBlbDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgPGJwZWw6YXNzaWduPg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpsaXRlcmFsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhOmdldENyZWRpdEhpc3RvcnlMZW5ndGhSZXF1ZXN0PjxjYTpzc24vPjwvY2E6Z2V0Q3JlZGl0SGlzdG9yeUxlbmd0aFJlcXVlc3Q+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpsaXRlcmFsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOnRvPiRjYS1oaXN0b3J5LXJlcXVlc3QucGF5bG9hZDwvYnBlbDp0bz4NCisgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPiRyZXF1ZXN0LnBheWxvYWQvdG5zOnNzbjwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOnRvPiRjYS1oaXN0b3J5LXJlcXVlc3QucGF5bG9hZC9jYTpzc248L2JwZWw6dG8+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgPC9icGVsOmFzc2lnbj4NCisgICAgICAgIA0KKyAgICAgICAgICAgICAgICA8YnBlbDppbnZva2UgbmFtZT0ic2VydmljZSIgcGFydG5lckxpbms9IkNyZWRpdEFnZW5jeSINCisgICAgICAgICAgICAgICAgICAgIHBvcnRUeXBlPSJjYTpDcmVkaXRBZ2VuY3kiIG9wZXJhdGlvbj0iZ2V0Q3JlZGl0SGlzdG9yeUxlbmd0aCINCisgICAgICAgICAgICAgICAgICAgIGlucHV0VmFyaWFibGU9ImNhLWhpc3RvcnktcmVxdWVzdCINCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFZhcmlhYmxlPSJjYS1oaXN0b3J5LXJlc3BvbnNlIiAvPg0KKyAgICAgICAgICAgIDwvYnBlbDpzZXF1ZW5jZT4NCisgICAgICAgICAgICANCisgICAgICAgICAgICA8YnBlbDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgPGJwZWw6YXNzaWduPg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpsaXRlcmFsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhOmdldENyZWRpdFNjb3JlUmVxdWVzdD48Y2E6c3NuLz48L2NhOmdldENyZWRpdFNjb3JlUmVxdWVzdD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmxpdGVyYWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmZyb20+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6dG8+JGNhLXNjb3JlLXJlcXVlc3QucGF5bG9hZDwvYnBlbDp0bz4NCisgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPiRyZXF1ZXN0LnBheWxvYWQvdG5zOnNzbjwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOnRvPiRjYS1zY29yZS1yZXF1ZXN0LnBheWxvYWQvY2E6c3NuPC9icGVsOnRvPg0KKyAgICAgICAgICAgICAgICAgICAgPC9icGVsOmNvcHk+DQorICAgICAgICAgICAgICAgIDwvYnBlbDphc3NpZ24+DQorICAgICAgICANCisgICAgICAgICAgICAgICAgPGJwZWw6aW52b2tlIG5hbWU9InNlcnZpY2UiIHBhcnRuZXJMaW5rPSJDcmVkaXRBZ2VuY3kiDQorICAgICAgICAgICAgICAgICAgICBwb3J0VHlwZT0iY2E6Q3JlZGl0QWdlbmN5IiBvcGVyYXRpb249ImdldENyZWRpdFNjb3JlIg0KKyAgICAgICAgICAgICAgICAgICAgaW5wdXRWYXJpYWJsZT0iY2Etc2NvcmUtcmVxdWVzdCINCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFZhcmlhYmxlPSJjYS1zY29yZS1yZXNwb25zZSIgLz4NCisgICAgICAgICAgICA8L2JwZWw6c2VxdWVuY2U+DQorICAgICAgICA8L2JwZWw6Zmxvdz4NCisNCisgICAgICAgIDxicGVsOmFzc2lnbj4NCisgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6bGl0ZXJhbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Yms6Z2V0TG9hblF1b3RlUmVxdWVzdD48Yms6c3NuLz48Yms6YW1vdW50Lz48Yms6ZHVyYXRpb24vPjxiazpzY29yZS8+PGJrOmxlbmd0aC8+PC9iazpnZXRMb2FuUXVvdGVSZXF1ZXN0Pg0KKyAgICAgICAgICAgICAgICAgICAgPC9icGVsOmxpdGVyYWw+DQorICAgICAgICAgICAgICAgIDwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICA8YnBlbDp0bz4kYmstbG9hbnF1b3RlLXJlcXVlc3QucGF5bG9hZDwvYnBlbDp0bz4NCisgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPiRyZXF1ZXN0LnBheWxvYWQvdG5zOnNzbjwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICA8YnBlbDp0bz4kYmstbG9hbnF1b3RlLXJlcXVlc3QucGF5bG9hZC9iazpzc248L2JwZWw6dG8+DQorICAgICAgICAgICAgPC9icGVsOmNvcHk+DQorICAgICAgICAgICAgPGJwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgPGJwZWw6ZnJvbT4kcmVxdWVzdC5wYXlsb2FkL3RuczphbW91bnQ8L2JwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgPGJwZWw6dG8+JGJrLWxvYW5xdW90ZS1yZXF1ZXN0LnBheWxvYWQvYms6YW1vdW50PC9icGVsOnRvPg0KKyAgICAgICAgICAgIDwvYnBlbDpjb3B5Pg0KKyAgICAgICAgICAgIDxicGVsOmNvcHk+DQorICAgICAgICAgICAgICAgIDxicGVsOmZyb20+JHJlcXVlc3QucGF5bG9hZC90bnM6ZHVyYXRpb248L2JwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgPGJwZWw6dG8+JGJrLWxvYW5xdW90ZS1yZXF1ZXN0LnBheWxvYWQvYms6ZHVyYXRpb248L2JwZWw6dG8+DQorICAgICAgICAgICAgPC9icGVsOmNvcHk+DQorICAgICAgICAgICAgPGJwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgPGJwZWw6ZnJvbT4kY2Etc2NvcmUtcmVzcG9uc2UucGF5bG9hZC9jYTpzY29yZTwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICA8YnBlbDp0bz4kYmstbG9hbnF1b3RlLXJlcXVlc3QucGF5bG9hZC9iazpzY29yZTwvYnBlbDp0bz4NCisgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPiRjYS1oaXN0b3J5LXJlc3BvbnNlLnBheWxvYWQvY2E6bGVuZ3RoPC9icGVsOmZyb20+DQorICAgICAgICAgICAgICAgIDxicGVsOnRvPiRiay1sb2FucXVvdGUtcmVxdWVzdC5wYXlsb2FkL2JrOmxlbmd0aDwvYnBlbDp0bz4NCisgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6bGl0ZXJhbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8dG5zOmdldExvYW5RdW90ZVJlc3BvbnNlPjx0bnM6cmF0ZS8+PC90bnM6Z2V0TG9hblF1b3RlUmVzcG9uc2U+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6bGl0ZXJhbD4NCisgICAgICAgICAgICAgICAgPC9icGVsOmZyb20+DQorICAgICAgICAgICAgICAgIDxicGVsOnRvPiRyZXNwb25zZS5wYXlsb2FkPC9icGVsOnRvPg0KKyAgICAgICAgICAgIDwvYnBlbDpjb3B5Pg0KKyAgICAgICAgPC9icGVsOmFzc2lnbj4NCisNCisgICAgICAgIDxicGVsOmlmPg0KKyAgICAgICAgICAgIDxicGVsOmNvbmRpdGlvbj4NCisgICAgICAgICAgICAgICAgJGJrLWxvYW5xdW90ZS1yZXF1ZXN0LnBheWxvYWQvYms6YW1vdW50ID49IDc1MDAwLjAgYW5kDQorICAgICAgICAgICAgICAgICRiay1sb2FucXVvdGUtcmVxdWVzdC5wYXlsb2FkL2JrOnNjb3JlID49IDYwMCBhbmQNCisgICAgICAgICAgICAgICAgJGJrLWxvYW5xdW90ZS1yZXF1ZXN0LnBheWxvYWQvYms6bGVuZ3RoID49IDgNCisgICAgICAgICAgICA8L2JwZWw6Y29uZGl0aW9uPg0KKyAgICAgICAgICAgIDxicGVsOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICA8YnBlbDpmbG93Pg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6aW52b2tlIG5hbWU9ImJhbmsxIiBwYXJ0bmVyTGluaz0iQmFuazEiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRUeXBlPSJiazpCYW5rIiBvcGVyYXRpb249ImdldExvYW5RdW90ZSIgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFyaWFibGU9ImJrLWxvYW5xdW90ZS1yZXF1ZXN0Ig0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYXJpYWJsZT0iYmstbG9hbnF1b3RlLXJlc3BvbnNlLTEiIC8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6aW52b2tlIG5hbWU9ImJhbmsyIiBwYXJ0bmVyTGluaz0iQmFuazIiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRUeXBlPSJiazpCYW5rIiBvcGVyYXRpb249ImdldExvYW5RdW90ZSIgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFyaWFibGU9ImJrLWxvYW5xdW90ZS1yZXF1ZXN0Ig0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYXJpYWJsZT0iYmstbG9hbnF1b3RlLXJlc3BvbnNlLTIiIC8+DQorICAgICAgICAgICAgICAgIDwvYnBlbDpmbG93Pg0KKyAgICAgICAgICAgICAgICA8YnBlbDppZj4NCisgICAgICAgICAgICAgICAgICAgIDxicGVsOmNvbmRpdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICAkYmstbG9hbnF1b3RlLXJlc3BvbnNlLTEucGF5bG9hZC9iazpyYXRlID4gJGJrLWxvYW5xdW90ZS1yZXNwb25zZS0yLnBheWxvYWQvYms6cmF0ZQ0KKyAgICAgICAgICAgICAgICAgICAgPC9icGVsOmNvbmRpdGlvbj4NCisgICAgICAgICAgICAgICAgICAgIDxicGVsOmFzc2lnbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPiRiay1sb2FucXVvdGUtcmVzcG9uc2UtMi5wYXlsb2FkL2JrOnJhdGU8L2JwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6dG8+JHJlc3BvbnNlLnBheWxvYWQvdG5zOnJhdGU8L2JwZWw6dG8+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6YXNzaWduPg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6ZWxzZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDphc3NpZ24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPiRiay1sb2FucXVvdGUtcmVzcG9uc2UtMS5wYXlsb2FkL2JrOnJhdGU8L2JwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOnRvPiRyZXNwb25zZS5wYXlsb2FkL3RuczpyYXRlPC9icGVsOnRvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JwZWw6Y29weT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2JwZWw6YXNzaWduPg0KKyAgICAgICAgICAgICAgICAgICAgPC9icGVsOmVsc2U+DQorICAgICAgICAgICAgICAgIDwvYnBlbDppZj4NCisgICAgICAgICAgICA8L2JwZWw6c2VxdWVuY2U+DQorICAgICAgICANCisgICAgICAgICAgICA8YnBlbDplbHNlaWY+DQorICAgICAgICAgICAgICAgIDxicGVsOmNvbmRpdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICRiay1sb2FucXVvdGUtcmVxdWVzdC5wYXlsb2FkL2JrOmFtb3VudCA+PSAxMDAwMC4wIGFuZA0KKyAgICAgICAgICAgICAgICAgICAgJGJrLWxvYW5xdW90ZS1yZXF1ZXN0LnBheWxvYWQvYms6YW1vdW50ICZsdDsgNzUwMDAuMCBhbmQNCisgICAgICAgICAgICAgICAgICAgICRiay1sb2FucXVvdGUtcmVxdWVzdC5wYXlsb2FkL2JrOnNjb3JlID49IDQwMCBhbmQNCisgICAgICAgICAgICAgICAgICAgICRiay1sb2FucXVvdGUtcmVxdWVzdC5wYXlsb2FkL2JrOmxlbmd0aCA+PSAzDQorICAgICAgICAgICAgICAgIDwvYnBlbDpjb25kaXRpb24+DQorICAgICAgICAgICAgICAgIDxicGVsOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6Zmxvdz4gICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDppbnZva2UgbmFtZT0iYmFuazMiIHBhcnRuZXJMaW5rPSJCYW5rMyINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRUeXBlPSJiazpCYW5rIiBvcGVyYXRpb249ImdldExvYW5RdW90ZSIgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhcmlhYmxlPSJiay1sb2FucXVvdGUtcmVxdWVzdCINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFZhcmlhYmxlPSJiay1sb2FucXVvdGUtcmVzcG9uc2UtMyIgLz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDppbnZva2UgbmFtZT0iYmFuazQiIHBhcnRuZXJMaW5rPSJCYW5rNCINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRUeXBlPSJiazpCYW5rIiBvcGVyYXRpb249ImdldExvYW5RdW90ZSIgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhcmlhYmxlPSJiay1sb2FucXVvdGUtcmVxdWVzdCINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFZhcmlhYmxlPSJiay1sb2FucXVvdGUtcmVzcG9uc2UtNCIgLz4NCisgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpmbG93Pg0KKyAgICAgICAgICAgICAgICAgICAgPGJwZWw6aWY+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6Y29uZGl0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYmstbG9hbnF1b3RlLXJlc3BvbnNlLTMucGF5bG9hZC9iazpyYXRlID4gJGJrLWxvYW5xdW90ZS1yZXNwb25zZS00LnBheWxvYWQvYms6cmF0ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDpjb25kaXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6YXNzaWduPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6ZnJvbT4kYmstbG9hbnF1b3RlLXJlc3BvbnNlLTQucGF5bG9hZC9iazpyYXRlPC9icGVsOmZyb20+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDp0bz4kcmVzcG9uc2UucGF5bG9hZC90bnM6cmF0ZTwvYnBlbDp0bz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmFzc2lnbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDplbHNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDphc3NpZ24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOmZyb20+JGJrLWxvYW5xdW90ZS1yZXNwb25zZS0zLnBheWxvYWQvYms6cmF0ZTwvYnBlbDpmcm9tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicGVsOnRvPiRyZXNwb25zZS5wYXlsb2FkL3RuczpyYXRlPC9icGVsOnRvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnBlbDphc3NpZ24+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmVsc2U+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6aWY+DQorICAgICAgICAgICAgICAgIDwvYnBlbDpzZXF1ZW5jZT4NCisgICAgICAgICAgICA8L2JwZWw6ZWxzZWlmPg0KKyAgICAgICAgDQorICAgICAgICAgICAgPGJwZWw6ZWxzZT4NCisgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgPGJwZWw6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICA8YnBlbDppbnZva2UgbmFtZT0iYmFuazUiIHBhcnRuZXJMaW5rPSJCYW5rNSINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydFR5cGU9ImJrOkJhbmsiIG9wZXJhdGlvbj0iZ2V0TG9hblF1b3RlIiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYXJpYWJsZT0iYmstbG9hbnF1b3RlLXJlcXVlc3QiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFZhcmlhYmxlPSJiay1sb2FucXVvdGUtcmVzcG9uc2UtNSIgLz4NCisgICAgICAgICAgICAgICAgICAgIDxicGVsOmFzc2lnbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpjb3B5Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnBlbDpmcm9tPiRiay1sb2FucXVvdGUtcmVzcG9uc2UtNS5wYXlsb2FkL2JrOnJhdGU8L2JwZWw6ZnJvbT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJwZWw6dG8+JHJlc3BvbnNlLnBheWxvYWQvdG5zOnJhdGU8L2JwZWw6dG8+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9icGVsOmNvcHk+DQorICAgICAgICAgICAgICAgICAgICA8L2JwZWw6YXNzaWduPg0KKyAgICAgICAgICAgICAgICA8L2JwZWw6c2VxdWVuY2U+DQorICAgIA0KKyAgICAgICAgICAgIDwvYnBlbDplbHNlPg0KKyAgICANCisgICAgICAgIDwvYnBlbDppZj4NCisgICAgICAgIA0KKyAgICAgICAgPGJwZWw6cmVwbHkgbmFtZT0icmVzcG9uc2UiIHBhcnRuZXJMaW5rPSJMb2FuQnJva2VyIg0KKyAgICAgICAgICAgIHBvcnRUeXBlPSJ0bnM6TG9hbkJyb2tlciIgb3BlcmF0aW9uPSJnZXRMb2FuUXVvdGUiDQorICAgICAgICAgICAgdmFyaWFibGU9InJlc3BvbnNlIiAvPg0KKw0KKyAgICA8L2JwZWw6c2VxdWVuY2U+DQorDQorPC9icGVsOnByb2Nlc3M+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1vZGUtc3Uvc3JjL21haW4vcmVzb3VyY2VzL2xvYW5icm9rZXIud3NkbCBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItb2RlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9sb2FuYnJva2VyLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNDI3MgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvbG9hbi1icm9rZXItb2RlLXN1L3NyYy9tYWluL3Jlc291cmNlcy9sb2FuYnJva2VyLndzZGwKQEAgLTAsMCArMSwxMDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPCEtLSAkUmV2OiAzNTYwNTIgJCAkRGF0ZTogMjAwNS0xMi0xMSAxNDo0MToyMCAtMDgwMCAoZGltLiwgMTEgZOKImsKpYy4gMjAwNSkgJCAtLT4NCis8ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46bG9naWNibGF6ZTpzb2E6bG9hbmJyb2tlciINCisgICAgeG1sbnM6dG5zPSJ1cm46bG9naWNibGF6ZTpzb2E6bG9hbmJyb2tlciINCisgICAgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KKyAgICB4bWxuczpwbG5rPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c2JwZWwvMi4wL3Bsbmt0eXBlIg0KKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KKyAgICB4bWxuczpicHdzPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDAzLzAzL2J1c2luZXNzLXByb2Nlc3MvIj4NCisNCisgICAgPGltcG9ydCBuYW1lc3BhY2U9InVybjpsb2dpY2JsYXplOnNvYTpjcmVkaXRhZ2VuY3kiDQorICAgICAgICBsb2NhdGlvbj0iY3JlZGl0YWdlbmN5LndzZGwiIC8+DQorDQorICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJ1cm46bG9naWNibGF6ZTpzb2E6YmFuayINCisgICAgICAgIGxvY2F0aW9uPSJiYW5rLndzZGwiIC8+DQorDQorICAgIDwhLS0gdHlwZSBkZWZzIC0tPg0KKyAgICA8dHlwZXM+DQorICAgICAgICA8eHNkOnNjaGVtYQ0KKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOmxvZ2ljYmxhemU6c29hOmxvYW5icm9rZXIiDQorICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQorDQorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJnZXRMb2FuUXVvdGVSZXF1ZXN0Ij4NCisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzc24iIHR5cGU9InhzZDpzdHJpbmciIC8+DQorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYW1vdW50IiB0eXBlPSJ4c2Q6ZG91YmxlIiAvPg0KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImR1cmF0aW9uIiB0eXBlPSJ4c2Q6aW50IiAvPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisNCisgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImdldExvYW5RdW90ZVJlc3BvbnNlIj4NCisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyYXRlIiB0eXBlPSJ4c2Q6ZG91YmxlIiAvPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisNCisgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InVua25vd25TU05GYXVsdCI+DQorICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3NuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisNCisgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImludmFsaWRTU05GYXVsdCI+DQorICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3NuIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPg0KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4NCisNCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZ2V0TG9hblF1b3RlUmVxdWVzdCIgdHlwZT0idG5zOmdldExvYW5RdW90ZVJlcXVlc3QiIC8+DQorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImdldExvYW5RdW90ZVJlc3BvbnNlIiB0eXBlPSJ0bnM6Z2V0TG9hblF1b3RlUmVzcG9uc2UiIC8+DQorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVua25vd25TU05GYXVsdCIgdHlwZT0idG5zOnVua25vd25TU05GYXVsdCIgLz4NCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW52YWxpZFNTTkZhdWx0IiB0eXBlPSJ0bnM6aW52YWxpZFNTTkZhdWx0IiAvPg0KKw0KKyAgICAgICAgPC94c2Q6c2NoZW1hPg0KKyAgICA8L3R5cGVzPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJnZXRMb2FuUXVvdGVSZXF1ZXN0Ij4NCisgICAgICAgIDxwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InRuczpnZXRMb2FuUXVvdGVSZXF1ZXN0IiAvPg0KKyAgICA8L21lc3NhZ2U+DQorDQorICAgIDxtZXNzYWdlIG5hbWU9ImdldExvYW5RdW90ZVJlc3BvbnNlIj4NCisgICAgICAgIDxwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InRuczpnZXRMb2FuUXVvdGVSZXNwb25zZSIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJ1bmtub3duU1NORmF1bHQiPg0KKyAgICAgICAgPHBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idG5zOnVua25vd25TU05GYXVsdCIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8bWVzc2FnZSBuYW1lPSJpbnZhbGlkU1NORmF1bHQiPg0KKyAgICAgICAgPHBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idG5zOmludmFsaWRTU05GYXVsdCIgLz4NCisgICAgPC9tZXNzYWdlPg0KKw0KKyAgICA8cG9ydFR5cGUgbmFtZT0iTG9hbkJyb2tlciI+DQorICAgICAgICA8b3BlcmF0aW9uIG5hbWU9ImdldExvYW5RdW90ZSI+DQorICAgICAgICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpnZXRMb2FuUXVvdGVSZXF1ZXN0IiAvPg0KKyAgICAgICAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOmdldExvYW5RdW90ZVJlc3BvbnNlIiAvPg0KKyAgICAgICAgICAgIDxmYXVsdCBuYW1lPSJVbmtub3duU1NOIiBtZXNzYWdlPSJ0bnM6dW5rbm93blNTTkZhdWx0IiAvPg0KKyAgICAgICAgICAgIDxmYXVsdCBuYW1lPSJJbnZhbGlkU1NOIiBtZXNzYWdlPSJ0bnM6aW52YWxpZFNTTkZhdWx0IiAvPg0KKyAgICAgICAgPC9vcGVyYXRpb24+DQorICAgIDwvcG9ydFR5cGU+DQorDQorICAgIDxwbG5rOnBhcnRuZXJMaW5rVHlwZSBuYW1lPSJMb2FuQnJva2VyUEwiPg0KKyAgICAgICAgPHBsbms6cm9sZSBuYW1lPSJMb2FuQnJva2VyU2VydmljZSIgcG9ydFR5cGU9InRuczpMb2FuQnJva2VyIiAvPg0KKyAgICA8L3Bsbms6cGFydG5lckxpbmtUeXBlPg0KKw0KKzwvZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1zYS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9sb2FuLWJyb2tlci1zYS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYjcyYWYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL2xvYW4tYnJva2VyLXNhL3BvbS54bWwKQEAgLTAsMCArMSw2OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmxvYW4tYnJva2VyPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5sb2FuLWJyb2tlcjwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5sb2FuLWJyb2tlci1zYTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLWFzc2VtYmx5PC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogTG9hbiBCcm9rZXIgQlBFTCA6OiBTQTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmxvYW4tYnJva2VyPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXItb2RlLXN1PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLmxvYW4tYnJva2VyPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXItYmVhbi1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5sb2FuLWJyb2tlcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvYW4tYnJva2VyLWRyb29scy1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy5sb2FuLWJyb2tlcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvYW4tYnJva2VyLWptcy1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy9sb2FuLWJyb2tlci1icGVsL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y5Y2RhMwotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvcG9tLnhtbApAQCAtMCwwICsxLDY3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgICA8IS0tCisKKyAgICAgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgICAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAgICAtLT4KKworICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+bG9hbi1icm9rZXI8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogTG9hbiBCcm9rZXIgQlBFTDwvbmFtZT4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorCisgICAgPG1vZHVsZXM+CisgICAgICAgIDxtb2R1bGU+bG9hbi1icm9rZXItYmVhbi1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmxvYW4tYnJva2VyLWRyb29scy1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmxvYW4tYnJva2VyLW9kZS1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmxvYW4tYnJva2VyLWptcy1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmxvYW4tYnJva2VyLXNhPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2xpZW50PC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8aW5oZXJpdGVkPmZhbHNlPC9pbmhlcml0ZWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+c3JjPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wYWNrYWdlPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zaW5nbGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc2NyaXB0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcj5zcmMvbWFpbi9hc3NlbWJseS9zcmMueG1sPC9kZXNjcmlwdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvc3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbCBiL3RydW5rL2V4YW1wbGVzL2xvYW4tYnJva2VyLWJwZWwvc3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzk5NjcwCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvbG9hbi1icm9rZXItYnBlbC9zcmMvbWFpbi9hc3NlbWJseS9zcmMueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPGFzc2VtYmx5Pg0KKyAgPGlkPnNyYzwvaWQ+DQorICA8Zm9ybWF0cz4NCisgICAgPGZvcm1hdD50YXIuZ3o8L2Zvcm1hdD4NCisgICAgPGZvcm1hdD56aXA8L2Zvcm1hdD4NCisgIDwvZm9ybWF0cz4NCisgIDxmaWxlU2V0cz4NCisgICAgPGZpbGVTZXQ+DQorICAgICAgPGluY2x1ZGVzPg0KKyAgICAgICAgPGluY2x1ZGU+UkVBRE1FKjwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPkxJQ0VOU0UqPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+Tk9USUNFKjwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPnBvbS54bWw8L2luY2x1ZGU+DQorICAgIDxpbmNsdWRlPmJ1aWxkLnhtbDwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPnNyYy8qKi8qPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+Ki9wb20ueG1sPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+Ki9zcmMvKiovKjwvaW5jbHVkZT4NCisgICAgICA8L2luY2x1ZGVzPg0KKyAgICA8L2ZpbGVTZXQ+DQorICA8L2ZpbGVTZXRzPg0KKzwvYXNzZW1ibHk+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwYTQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL3BvbS54bWwKQEAgLTAsMCArMSw1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmZlYXR1cmVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5mZWF0dXJlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlczwvbmFtZT4KKworICAgIDxtb2R1bGVzPgorICAgICAgICA8bW9kdWxlPmJyaWRnZTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmJyaWRnZS1jYW1lbDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmNhbWVsPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2FtZWwtYmx1ZXByaW50PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2FtZWwtbm1yLWJsdWVwcmludDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi13c2RsLWZpcnN0PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+d3NkbC1maXJzdDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmxvYW4tYnJva2VyLWJwZWw8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jYW1lbC1ubXI8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jYW1lbC1vc2dpPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y3hmLWNhbWVsLW5tcjwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi1ubXI8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtb3NnaTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi1qYXhyczwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmN4Zi13cy1hZGRyZXNzaW5nPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y3hmLXdzZGwtZmlyc3Qtb3NnaS1wYWNrYWdlPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y3hmLXdzLXNlY3VyaXR5LW9zZ2k8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGYtd3Mtcm08L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5pdGVzdHM8L21vZHVsZT4KKyAgICA8L21vZHVsZXM+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL3NpbXBsZS9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvc2ltcGxlL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhOTJjMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL3NpbXBsZS9SRUFETUUudHh0CkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK1NpbXBsZSBDb25maWd1cmF0aW9uIE9ubHkgRXhhbXBsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1B1cnBvc2UKKy0tLS0tLS0KK0FkZCBuZXcgZW5kcG9pbnRzIHVzaW5nIFhNTCBjb25maWd1cmF0aW9uIGZpbGVzIG9ubHkuCisKKworRXhwbGFuYXRpb24KKy0tLS0tLS0tLS0tCitUaGVyZSBhcmUgdHdvIHBhcnRzIHRvIHRoaXMgZXhhbXBsZTogUXVhcnR6IGFuZCBHcm9vdnkuIEluIGJvdGggY2FzZXMsCit0aGUgSkJJIGVuZHBvaW50cyBhcmUgc3BlY2lmaWVkIGluIFNwcmluZyBYTUwgZmlsZXMuIFdoZW4gdGhlIFhNTCBmaWxlcyAKK2FyZSBkZXBsb3llZCB0byBTZXJ2aWNlTWl4IHRoZSBlbmRwb2ludHMgYXJlIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZAoraW4gdGhlIE5NUi4gIAorCisxLiBRdWFydHoKK1RoZSBxdWFydHoueG1sIGZpbGUsIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3IgYXMgdGhpcyBSRUFETUUsCitzaG93cyB5b3UgaG93IHRvIGRlcGxveSBhIENhbWVsIHJvdXRlIHRvZ2V0aGVyIHdpdGggYSBKQkkgZW5kcG9pbnQKK2luIHRoZSBzYW1lIFhNTCBmaWxlLiBJdCBjb250YWlucyBjb25maWd1cmF0aW9uIGZvciB1c2luZyB0aGUKK1F1YXJ0eiBqb2Igc2NoZWR1bGluZyBzeXN0ZW0gdG8gc2VuZCBtZXNzYWdlcyBwZXJpb2RpY2FsbHkgdG8KK2EgSkJJIGVuZHBvaW50IGNhbGxlZCAnZW5kcG9pbnQnLiBUaGVzZSBtZXNzYWdlcyBhcmUgcm91dGVkLAordXNpbmcgQ2FtZWwsIHRvIHRoZSAndGVzdCcgbG9nZ2VyLgorCisyLiBHcm9vdnk6CitUaGUgZ3Jvb3Z5LnhtbCBmaWxlLCBhbHNvIGxvY2F0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMKK1JFQURNRSwgZGVtb25zdHJhdGVzIGhvdyB0byBlbWJlZCBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gaW4gYQorY29uZmlndXJhdGlvbiBmaWxlLCB1c2luZyBhIHNjcmlwdGluZyBsYW5ndWFnZS4gSW4gdGhpcyBjYXNlLCB3ZQordXNlIGdyb292eS4gSXQgdXNlcyBxdWFydHogdG8gc2VuZCBhIG1lc3NhZ2UgZXZlcnkgc2Vjb25kIHRvIHRoZQorc2VydmljZSAncmVjZWl2ZXInLiBUaGlzIHNlcnZpY2UgaXMgZGVmaW5lZCBhcyBhIHNjcmlwdGluZyBlbmRwb2ludCwgCit3cml0dGVuIGluIEdyb292eSwgdXNpbmcgdGhlIFNlcnZpY2VNaXggc2NyaXB0aW5nIHNlcnZpY2UgZW5naW5lLgorVGhlIEdyb292eSBzY3JpcHQgaXMgc3RvcmVkIGluIFNlcnZpY2VNaXgncyBkb2N1bWVudCByZXBvc2l0b3J5CithbmQgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCB3aGVuZXZlciBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgYnkgdGhlCisncmVjZWl2ZXInIHNlcnZpY2UuCisKKworUHJlcmVxdWlzaXRlcyBmb3IgUnVubmluZyB0aGUgRXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMS4gWW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGluc3RhbGxlZCBvbiB5b3VyIG1hY2hpbmU6CisKKyAgIC0gSkRLIDEuNSBvciBoaWdoZXIKKyAgICAgIAorICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBSRUFETUUgaW4gdGhlIHRvcC1sZXZlbCBleGFtcGxlcworICBkaXJlY3RvcnkuCisKKzIuIFN0YXJ0IFNlcnZpY2VNaXggYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgPHNlcnZpY2VtaXhfaG9tZT4vYmluL3NlcnZpY2VtaXggICAgICAgICAgKG9uIFVOSVgpCisgIDxzZXJ2aWNlbWl4X2hvbWU+XGJpblxzZXJ2aWNlbWl4ICAgICAgICAgIChvbiBXaW5kb3dzKQorCisKK1J1bm5pbmcgdGhlIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIHJ1biB0aGUgZXhhbXBsZSwgY29weSBlaXRoZXIgb2YgdGhlIFhNTCBmaWxlcywgcXVhcnR6LnhtbCBvcgorZ3Jvb3Z5LnhtbCwgZnJvbSB0aGUgZXhhbXBsZXMvc2ltcGxlIGRpcmVjdG9yeSB0byB0aGUKKzxzZXJ2aWNlbWl4X2hvbWU+L2RlcGxveSBkaXJlY3RvcnkuCisKK1doZW4gdGhlIHF1YXJ0ei54bWwgZmlsZSBpcyBjb3BpZWQgdG8gdGhlIGRlcGxveSBkaXJlY3RvcnksIGl0IHNlbmRzCittZXNzYWdlcyB0byB0aGUgbG9nLiBZb3UgY2FuIHZpZXcgdGhlIGxvZyBlbnRyaWVzIGJ5IHR5cGluZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBTZXJ2aWNlTWl4IGNvbnNvbGU6CisKKyAgbG9nOmRpc3BsYXkKKworWW91IHNob3VsZCBzZWUgYW4gZW50cnkgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorCisgIDE0OjE1OjUxLDIwMiB8IElORk8gIHwgeC1jYW1lbC10aHJlYWQtNCB8IHRlc3QgICAgICAgICAgICAgICAgIAorICB8IHJnLmFwYWNoZS5jYW1lbC5wcm9jZXNzb3IuTG9nZ2VyICAgODggfCBFeGNoYW5nZQorICBbQm9keVR5cGU6amF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlLCAKKyAgQm9keTo8dGltZXI+PG5hbWU+e2h0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvZXhhbXBsZXMvY2FtZWx9CisgIHNlcnZpY2U6ZW5kcG9pbnQ8L25hbWU+PGdyb3VwPkRFRkFVTFQ8L2dyb3VwPjxmdWxsbmFtZT5ERUZBVUxULgorICB7aHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9leGFtcGxlcy9jYW1lbH1zZXJ2aWNlOmVuZHBvaW50CisgIDwvZnVsbG5hbWU+PGRlc2NyaXB0aW9uLz48ZmlyZVRpbWU+TW9uIE1hciAyMyAxNDoxNTo1MSBDU1QgMjAwOQorICA8L2ZpcmVUaW1lPjwvdGltZXI+XQorCitXaGVuIHRoZSBncm9vdnkueG1sIGZpbGUgaXMgY29waWVkIHRvIHRoZSBkZXBsb3kgZGlyZWN0b3J5LCB5b3Ugc2hvdWxkIAorc2VlIHRoZSBvdXRwdXQgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZToKKworICBTdGFydGluZyBKU1ItMjIzIGdyb292eSBwcm9jZXNzb3IKKyAgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmpiaS5ydW50aW1lLmltcGwuSW5Pbmx5SW1wbEA0MWEzMzBlNAorICBIZWxsbywgSSBnb3QgYW4gaW5wdXQgbWVzc2FnZSA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIKKyAgc3RhbmRhbG9uZT0ibm8iPz48dGltZXI+PG5hbWU+e2h0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvZXhhbXBsZXMKKyAgL2dyb292eX0gc2VydmljZTplbmRwb2ludDwvbmFtZT48Z3JvdXA+REVGQVVMVDwvZ3JvdXA+PGZ1bGxuYW1lPgorICBERUZBVUxULntodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2V4YW1wbGVzL2dyb292eX1zZXJ2aWNlOgorICBlbmRwb2ludDwvZnVsbG5hbWU+PGRlc2NyaXB0aW9uLz48ZmlyZVRpbWU+RnJpIEF1ZyAwOCAxMzo1MDoxNiAKKyAgQ0VTVCAyMDA4PC9maXJlVGltZT48L3RpbWVyPgorCisKK1JlbW92aW5nIHRoZSBFeGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gcmVtb3ZlIHRoZSBleGFtcGxlLCByZW1vdmUgdGhlIFhNTCBmaWxlIGZyb20gdGhlCitkZXBsb3kgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvc2ltcGxlL2dyb292eS54bWwgYi90cnVuay9leGFtcGxlcy9zaW1wbGUvZ3Jvb3Z5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTBlYTYyCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvc2ltcGxlL2dyb292eS54bWwKQEAgLTAsMCArMSw2OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp1dGlsPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3V0aWwiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpxdWFydHo9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvcXVhcnR6LzEuMCIKKyAgICAgICB4bWxuczpzY3JpcHRpbmc9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2NyaXB0aW5nLzEuMCIKKyAgICAgICB4bWxuczpjYW1lbD0iaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvY2FtZWwvc2NoZW1hL3NwcmluZyIKKyAgICAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgICAgeG1sbnM6Yj0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9leGFtcGxlcy9ncm9vdnkiCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCisgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3V0aWwgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvdXRpbC9zcHJpbmctdXRpbC54c2QKKyAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaSAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpL3NwcmluZy1vc2dpLnhzZAorICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpLWNvbXBlbmRpdW0gICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2ktY29tcGVuZGl1bS9zcHJpbmctb3NnaS1jb21wZW5kaXVtLnhzZAorICAgICAgICAgaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9xdWFydHovMS4wICAgICBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3F1YXJ0ei8xLjAvc2VydmljZW1peC1xdWFydHoueHNkCisgICAgICAgICBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NjcmlwdGluZy8xLjAgIGh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2NyaXB0aW5nLzEuMC9zZXJ2aWNlbWl4LXNjcmlwdGluZy54c2QKKyAgICAgICAgIGh0dHA6Ly9hY3RpdmVtcS5hcGFjaGUub3JnL2NhbWVsL3NjaGVtYS9zcHJpbmcgIGh0dHA6Ly9hY3RpdmVtcS5hcGFjaGUub3JnL2NhbWVsL3NjaGVtYS9zcHJpbmcvY2FtZWwtc3ByaW5nLnhzZAorICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kvc3ByaW5nLW9zZ2kueHNkIj4KKworICAgIDxxdWFydHo6ZW5kcG9pbnQgc2VydmljZT0iYjpzZXJ2aWNlIiBlbmRwb2ludD0iZW5kcG9pbnQiIHRhcmdldFNlcnZpY2U9ImI6cmVjZWl2ZXIiPgorICAgICAgIDxxdWFydHo6dHJpZ2dlcj4KKyAgICAgICAgICA8cXVhcnR6OnNpbXBsZSBuYW1lPSJncm9vdnktdHJpZ2dlciIgcmVwZWF0Q291bnQ9IjUwMCIgcmVwZWF0SW50ZXJ2YWw9IjEwMDAiIHN0YXJ0RGVsYXk9IjIwMDAiIC8+CisgICAgICAgPC9xdWFydHo6dHJpZ2dlcj4KKyAgICA8L3F1YXJ0ejplbmRwb2ludD4KKworICAgIDxzY3JpcHRpbmc6ZW5kcG9pbnQgc2VydmljZT0iYjpyZWNlaXZlciIgZW5kcG9pbnQ9ImVuZHBvaW50IiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdD0iZG9jdW1lbnQtbmFtZTpteXNjcmlwdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVPdXRwdXQ9InRydWUiCisgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZT0iZ3Jvb3Z5IiAvPgorCQorICAgIDxiZWFuIGlkPSJteXNjcmlwdCIgY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5kb2N1bWVudC5mYWN0b3J5LkRvY3VtZW50RmFjdG9yeSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0icmVwb3NpdG9yeSIgcmVmPSJyZXBvc2l0b3J5IiAvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRvY3VtZW50Ij4KKyAgICAgICAgPHZhbHVlPgorICAgICAgICAgICBpbXBvcnQgamF2YXguamJpLm1lc3NhZ2luZy5NZXNzYWdlRXhjaGFuZ2U7CisgICAgICAgICAgIGltcG9ydCBqYXZheC5qYmkubWVzc2FnaW5nLk5vcm1hbGl6ZWRNZXNzYWdlOworICAgICAgICAgICBpbXBvcnQgb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmpiaS5qYXhwLlN0cmluZ1NvdXJjZTsKKyAgICAgICAgICAgaW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5qYmkuamF4cC5Tb3VyY2VUcmFuc2Zvcm1lcjsKKworICAgICAgICAgICBwcmludGxuICJTdGFydGluZyBKU1ItMjIzIGdyb292eSBwcm9jZXNzb3IiOworCisgICAgICAgICAgIHByaW50bG4gZXhjaGFuZ2U7ICAgICAgIAorICAgICAgICAgICBkZWYgaW5wdXRNZXNzYWdlID0gbmV3IFNvdXJjZVRyYW5zZm9ybWVyKCkudG9TdHJpbmcoaW5NZXNzYWdlLmdldENvbnRlbnQoKSk7CisgICAgICAgICAgIHByaW50bG4gIkhlbGxvLCBJIGdvdCBhbiBpbnB1dCBtZXNzYWdlICIgKyBpbnB1dE1lc3NhZ2U7CisgICAgICAgIDwvdmFsdWU+CisgICAgICA8L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKworICAgIDxvc2dpOnJlZmVyZW5jZSBpZD0icmVwb3NpdG9yeSIgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguZG9jdW1lbnQuRG9jdW1lbnRSZXBvc2l0b3J5IiAvPgorCisgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5jb21tb24ub3NnaS5FbmRwb2ludEV4cG9ydGVyIiAvPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvc2ltcGxlL3F1YXJ0ei54bWwgYi90cnVuay9leGFtcGxlcy9zaW1wbGUvcXVhcnR6LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQwZDUwCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvc2ltcGxlL3F1YXJ0ei54bWwKQEAgLTAsMCArMSw1NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp1dGlsPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3V0aWwiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpxdWFydHo9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvcXVhcnR6LzEuMCIKKyAgICAgICB4bWxuczpjYW1lbD0iaHR0cDovL2NhbWVsLmFwYWNoZS5vcmcvc2NoZW1hL3NwcmluZyIKKyAgICAgICB4bWxuczpvc2dpPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kiCisgICAgICAgeG1sbnM6Yj0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9leGFtcGxlcy9jYW1lbCIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgorICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucworICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCisgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3V0aWwKKyAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvdXRpbC9zcHJpbmctdXRpbC54c2QKKyAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaQorICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpL3NwcmluZy1vc2dpLnhzZAorICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpLWNvbXBlbmRpdW0KKyAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS1jb21wZW5kaXVtL3NwcmluZy1vc2dpLWNvbXBlbmRpdW0ueHNkCisgICAgICAgICBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3F1YXJ0ei8xLjAKKyAgICAgICAgIGh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvcXVhcnR6LzEuMC9zZXJ2aWNlbWl4LXF1YXJ0ei54c2QKKyAgICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcKKyAgICAgICAgIGh0dHA6Ly9jYW1lbC5hcGFjaGUub3JnL3NjaGVtYS9zcHJpbmcvY2FtZWwtc3ByaW5nLnhzZAorICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpCisgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kvc3ByaW5nLW9zZ2kueHNkIj4KKworCTxjYW1lbDpjYW1lbENvbnRleHQ+CisJICAgIDxjYW1lbDpyb3V0ZT4KKwkgICAgICAgIDxjYW1lbDpmcm9tIHVyaT0iamJpOmVuZHBvaW50Omh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvZXhhbXBsZXMvY2FtZWwvcmVjZWl2ZXIvZW5kcG9pbnQiIC8+CisJICAgICAgICA8Y2FtZWw6dG8gdXJpPSJsb2c6dGVzdCIgLz4KKyAgICAgICAgPC9jYW1lbDpyb3V0ZT4KKwk8L2NhbWVsOmNhbWVsQ29udGV4dD4KKwkKKwk8cXVhcnR6OmVuZHBvaW50IHNlcnZpY2U9ImI6c2VydmljZSIgZW5kcG9pbnQ9ImVuZHBvaW50IiB0YXJnZXRTZXJ2aWNlPSJiOnJlY2VpdmVyIj4KKyAgICAgICAgPHF1YXJ0ejp0cmlnZ2VyPgorICAgICAgICAgICAgPHF1YXJ0ejpzaW1wbGUgcmVwZWF0Q291bnQ9IjUwMCIgcmVwZWF0SW50ZXJ2YWw9IjEwMDAiIHN0YXJ0RGVsYXk9IjIwMDAiIC8+CisgICAgICAgIDwvcXVhcnR6OnRyaWdnZXI+CisJPC9xdWFydHo6ZW5kcG9pbnQ+CisJCisgICAgPGJlYW4gY2xhc3M9Im9yZy5hcGFjaGUuc2VydmljZW1peC5jb21tb24ub3NnaS5FbmRwb2ludEV4cG9ydGVyIiAvPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvc2ltcGxlL3dzbi54bWwgYi90cnVuay9leGFtcGxlcy9zaW1wbGUvd3NuLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTA4ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvc2ltcGxlL3dzbi54bWwKQEAgLTAsMCArMSw4NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKKyAgICAgICB4bWxuczp1dGlsPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3V0aWwiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpodHRwPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2h0dHAvMS4wIgorICAgICAgIHhtbG5zOmN0eD0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9jb250ZXh0IgorICAgICAgIHhtbG5zOm9zZ2k9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaSIKKyAgICAgICB4bWxuczpvc2dpeD0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpLWNvbXBlbmRpdW0iCisgICAgICAgeG1sbnM6d3NuPSJodHRwOi8vc2VydmljZW1peC5vcmcvd3Nub3RpZmljYXRpb24iCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKKyAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgICAgICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCisgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2NvbnRleHQgICAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvY29udGV4dC9zcHJpbmctY29udGV4dC54c2QKKyAgICAgICAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvdXRpbCAgICAgICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS91dGlsL3NwcmluZy11dGlsLnhzZAorICAgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9vc2dpICAgICAgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2kvc3ByaW5nLW9zZ2kueHNkCisgICAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL29zZ2ktY29tcGVuZGl1bSAgIGh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvb3NnaS1jb21wZW5kaXVtL3NwcmluZy1vc2dpLWNvbXBlbmRpdW0ueHNkCisgICAgICAgICBodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2h0dHAvMS4wICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvaHR0cC8xLjAvc2VydmljZW1peC1odHRwLnhzZCI+CisKKyAgICA8IS0tIERlZmluZSBhIHNvYXAgY29uc3VtZXIgdGFyZ2V0aW5nIHRoZSB3cy1ub3RpZmljYXRpb24gTm90aWZpY2F0aW9uQnJva2VyIGVuZHBvaW50LgorICAgICAgICAgVGhlIHRhcmdldFNlcnZpY2UgYW5kIHRhcmdldEVuZHBvaW50IGF0dHJpYnV0ZXMgYXJlIG5vdCBzcGVjaWZpZWQgYmVjYXVzZSAKKyAgICAgICAgIHRoZSB0YXJnZXQgZW5kcG9pbnQgaGFzIHRoZSBzYW1lIHNlcnZpY2UgLyBlbmRwb2ludCBuYW1lIGFzIHRoaXMgZW5kcG9pbnQuCisgICAgICAtLT4KKyAgICA8aHR0cDpzb2FwLWNvbnN1bWVyIHNlcnZpY2U9IndzbjpOb3RpZmljYXRpb25Ccm9rZXIiIGVuZHBvaW50PSJCcm9rZXIiCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblVSST0iJHtiYXNlVXJsfS9Ccm9rZXIvIgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVXc2RsPSJ0cnVlIj4KKyAgICAgICAgPCEtLSBFbmFibGUgV1MtQWRkcmVzc2luZyBvbiB0aGlzIGVuZHBvaW50IC0tPgorICAgICAgICA8aHR0cDpwb2xpY2llcz4KKyAgICAgICAgICAgIDxiZWFuIGNsYXNzPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc29hcC53cy5hZGRyZXNzaW5nLldzQWRkcmVzc2luZ1BvbGljeSIgLz4KKyAgICAgICAgPC9odHRwOnBvbGljaWVzPgorICAgIDwvaHR0cDpzb2FwLWNvbnN1bWVyPgorCisgICAgPCEtLSBEZWZpbmUgYSBzb2FwIGNvbnN1bWVyIHRhcmdldGluZyB0aGUgd3Mtbm90aWZpY2F0aW9uIENyZWF0ZVB1bGxQb2ludCBlbmRwb2ludC4KKyAgICAgICAgIFRoZSB0YXJnZXRTZXJ2aWNlIGFuZCB0YXJnZXRFbmRwb2ludCBhdHRyaWJ1dGVzIGFyZSBub3Qgc3BlY2lmaWVkIGJlY2F1c2UgCisgICAgICAgICB0aGUgdGFyZ2V0IGVuZHBvaW50IGhhcyB0aGUgc2FtZSBzZXJ2aWNlIC8gZW5kcG9pbnQgbmFtZSBhcyB0aGlzIGVuZHBvaW50LgorICAgICAgLS0+CisgICAgPGh0dHA6c29hcC1jb25zdW1lciBzZXJ2aWNlPSJ3c246Q3JlYXRlUHVsbFBvaW50IiBlbmRwb2ludD0iQnJva2VyIgorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25VUkk9IiR7YmFzZVVybH0vQ3JlYXRlUHVsbFBvaW50LyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlV3NkbD0idHJ1ZSI+CisgICAgICAgIDwhLS0gRW5hYmxlIFdTLUFkZHJlc3Npbmcgb24gdGhpcyBlbmRwb2ludCAtLT4KKyAgICAgICAgPGh0dHA6cG9saWNpZXM+CisgICAgICAgICAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNvYXAud3MuYWRkcmVzc2luZy5Xc0FkZHJlc3NpbmdQb2xpY3kiIC8+CisgICAgICAgIDwvaHR0cDpwb2xpY2llcz4KKyAgICA8L2h0dHA6c29hcC1jb25zdW1lcj4KKworICAgIDwhLS0gRXhwb3J0IHRoaXMgc2VydmljZSBhc3NlbWJseSB0byB0aGUgT1NHaSByZWdpc3RyeSAtLT4KKyAgICA8YmVhbiBjbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmNvbW1vbi5vc2dpLkVuZHBvaW50RXhwb3J0ZXIiIC8+CisgICAgCisgICAgPCEtLSBUaGUgdGFyZ2V0IGVuZHBvaW50cyBmb3IgdGhpcyBTZXJ2aWNlIEFzc2VtYmx5IGFyZSBkZWZpbmVkIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgU0EuCisgICAgICAgICBUbyBtYWtlIHN1cmUgdGhlIFNBIGlzIG5vdCBjcmVhdGUgYmVmb3JlIHRob3NlIGVuZHBvaW50cyBhcmUgYXZhaWxhYmxlLCB3ZSBhZGQKKyAgICAgICAgIHR3byBkZXBlbmRlbmNpZXMgYXQgc3ByaW5nLWRtIGxldmVsIG9uIHRoZSByZXF1aXJlZCBlbmRwb2ludHMuCisgICAgICAtLT4KKyAgICA8b3NnaTpyZWZlcmVuY2UgaWQ9Im5vdGlmaWNhdGlvbkJyb2tlckVuZHBvaW50IiAKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FbmRwb2ludCIgCisgICAgICAgICAgICAgICAgICAgIGZpbHRlcj0iKCZhbXA7KGpiaS5pbnRlcm5hbD10cnVlKShTRVJWSUNFX05BTUU9e2h0dHA6Ly9zZXJ2aWNlbWl4Lm9yZy93c25vdGlmaWNhdGlvbn1Ob3RpZmljYXRpb25Ccm9rZXIpKSIgLz4KKyAgICA8b3NnaTpyZWZlcmVuY2UgaWQ9ImNyZWF0ZVB1bGxwb2ludEVuZHBvaW50IiAKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaS5FbmRwb2ludCIgCisgICAgICAgICAgICAgICAgICAgIGZpbHRlcj0iKCZhbXA7KGpiaS5pbnRlcm5hbD10cnVlKShTRVJWSUNFX05BTUU9e2h0dHA6Ly9zZXJ2aWNlbWl4Lm9yZy93c25vdGlmaWNhdGlvbn1DcmVhdGVQdWxsUG9pbnQpKSIgLz4KKworICAgIDwhLS0gRXhwb3NlIHNvbWUgcHJvcGVydGllcyB1c2luZyB0aGUgT1NHaSBDb25maWd1cmF0aW9uIEFkbWluIHNlcnZpY2UuCisgICAgICAgICBUaGUgdmFsdWVzIHNwZWNpZmllZCBoZXJlIGlzIHRoZSBkZWZhdWx0IHZhbHVlIHdoaWNoIGNhbiBiZSBvdmVycmlkZW4KKyAgICAgICAgIGJ5IGZlZWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gYWRtaW4gc2VydmljZSB3aXRoIHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgIFRoaXMgY2FuIGJlIGRvbmUgYnkgY3JlYXRpbmcgYSBmaWxlIG5hbWVkIGV0Yy9vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXMud3NuLmNmZworICAgICAgICAgY29udGFpbmluZyB0aGUgcHJvcGVydHkgYmVsb3cuIC0tPgorICAgIDxvc2dpeDpjbS1wcm9wZXJ0aWVzIGlkPSJ3c25Qcm9wcyIgcGVyc2lzdGVudC1pZD0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLndzbiI+CisgICAgICAgIDxwcm9wIGtleT0iYmFzZVVybCI+aHR0cDovLzAuMC4wLjA6ODE5Mi93c248L3Byb3A+CisgICAgPC9vc2dpeDpjbS1wcm9wZXJ0aWVzPgorICAgIDxjdHg6cHJvcGVydHktcGxhY2Vob2xkZXIgcHJvcGVydGllcy1yZWY9IndzblByb3BzIiAvPgorCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd2ViL05PVElDRSBiL3RydW5rL2V4YW1wbGVzL3dlYi9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2OTUwMQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL3dlYi9OT1RJQ0UKQEAgLTAsMCArMSwyMSBAQAorQXBhY2hlIEZlbGl4IEthcmFmDQorQ29weXJpZ2h0IDIwMDkgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQorDQorDQorSS4gSW5jbHVkZWQgU29mdHdhcmUNCisNCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0DQorVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4NCitMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgMi4wLg0KKw0KKw0KK0lJLiBVc2VkIFNvZnR3YXJlDQorDQorVGhpcyBwcm9kdWN0IHVzZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0DQorVGhlIE9TR2kgQWxsaWFuY2UgKGh0dHA6Ly93d3cub3NnaS5vcmcvKS4NCitDb3B5cmlnaHQgKGMpIE9TR2kgQWxsaWFuY2UgKDIwMDAsIDIwMDkpLg0KK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSAyLjAuDQorDQorDQorSUlJLiBMaWNlbnNlIFN1bW1hcnkNCistIEFwYWNoZSBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL3dlYi9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvd2ViL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxMGYzOAotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL3dlYi9SRUFETUUudHh0CkBAIC0wLDAgKzEsMTA4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorDQorRU1CRURESU5HIEtBUkFGIElOIEEgV0VCIEFQUExJQ0FUSU9ODQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorUHVycG9zZQ0KKy0tLS0tLS0NCitFbWJlZCBLYXJhZiBpbiBhIHdlYiBhcHBsaWNhdGlvbi4NCisNCisNCitQcmVyZXF1aXNpdGVzIGZvciBSdW5uaW5nIHRoZSBFeGFtcGxlDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK1lvdSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lOg0KKw0KKyAgLSBKREsgMS41IG9yIGhpZ2hlcg0KKw0KKyAgLSBNYXZlbiAyLjAuOSBvciBoaWdoZXINCisNCisNCitCdWlsZGluZyBhbmQgRGVwbG95aW5nDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK1lvdSBjYW4gYnVpbGQgYW5kIGRlcGxveSB0aGlzIGV4YW1wbGUgaW4gdHdvIHdheXM6DQorDQorLSBBLiBVc2luZyBKZXR0eTogUXVpY2sgYW5kIEVhc3kNCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIGV4YW1wbGUgdXAgYW5kDQorICBydW5uaW5nIHF1aWNrbHkuDQorICAgDQorLSBCLiBVc2luZyBZb3VyIEZhdm9yaXRlIFdlYiBDb250YWluZXINCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzZWUgS2FyYWYgcnVubmluZw0KKyAgYXMgYSB3ZWIgYXBwbGljYXRpb24gaW5zaWRlIHlvdXIgZmF2b3JpdGUgd2ViIGNvbnRhaW5lci4NCisNCisNCitBLiBVc2luZyBKZXR0eTogUXVpY2sgYW5kIEVhc3kNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitUbyBidWlsZCB0aGUgZXhhbXBsZSBhbmQgZGVwbG95IHRvIEpldHR5LCBjb21wbGV0ZSB0aGUNCitmb2xsb3dpbmcgc3RlcHM6DQorDQorMS4gSW4gYSBjb21tYW5kIHByb21wdC9zaGVsbCwgY2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkNCisgICB0aGF0IGNvbnRhaW5zIHRoaXMgUkVBRE1FLnR4dCBmaWxlLg0KKw0KKzIuIEVudGVyIHRoZSBmb2xsb3dpbmcgTWF2ZW4gY29tbWFuZDoNCisNCisgICAgIG12biBwYWNrYWdlIGpldHR5OnJ1bg0KKw0KK1RoaXMgTWF2ZW4gY29tbWFuZCBidWlsZHMgdGhlIGV4YW1wbGUgd2ViIGFwcGxpY2F0aW9uLCBzdGFydHMNCitKZXR0eSBhbmQgZGVwbG95cyB0aGUgd2ViIGFwcGxpY2F0aW9uIHRvIEpldHR5LiBPbmNlIGNvbXBsZXRlLA0KK3lvdSBzaG91bGQgc2VlIHRoZSBmb2xsb3dpbmcgcHJpbnRlZCB0byB0aGUgY29uc29sZToNCisNCitbSU5GT10gU3RhcnRlZCBKZXR0eSBTZXJ2ZXINCitbSU5GT10gU3RhcnRpbmcgc2Nhbm5lciBhdCBpbnRlcnZhbCBvZiAxMCBzZWNvbmRzLg0KKw0KK1J1bm5pbmcgYSBDbGllbnQNCistLS0tLS0tLS0tLS0tLS0tDQorVG8gdGVzdCB0aGUgZXhhbXBsZSwgeW91IGNhbiB1c2UgdGhlIEFwYWNoZSBGZWxpeCBLYXJhZiBjbGllbnQNCit0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgYW5kIGlzc3VlIGEgS2FyYWYgY29tbWFuZC4gRm9yIGV4YW1wbGUsDQordHJ5IGV4ZWN1dGluZyB0aGUgImZlYXR1cmVzOmxpc3QiIGNvbW1hbmQgYXMgZm9sbG93czoNCisNCisxLiBJbiBhIGNvbW1hbmQgcHJvbXB0L3NoZWxsLCBjaGFuZ2UgdG8geW91ciBwcm9kdWN0DQorICAgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4NCisNCisyLiBSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOg0KKw0KKyAgICBqYXZhIC1qYXIgbGliL2thcmFmLWNsaWVudC5qYXIgZmVhdHVyZXM6bGlzdA0KKw0KK0luIHRoaXMgY2FzZSwgeW91IHNob3VsZCBzZWUgb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoNCisNCitbdW5pbnN0YWxsZWRdIFsyLjUuNi5TRUMwMSAgICAgICAgICBdIHNwcmluZyAgICAga2FyYWYtJHt2ZXJzaW9ufQ0KK1t1bmluc3RhbGxlZF0gWzEuMi4wICAgICAgICAgICAgICAgIF0gc3ByaW5nLWRtICBrYXJhZi0ke3ZlcnNpb259DQorW3VuaW5zdGFsbGVkXSBbMS4xLjAuMS1mdXNlLVNOQVBTSE9UXSB3cmFwcGVyICAgIGthcmFmLSR7dmVyc2lvbn0NCitbdW5pbnN0YWxsZWRdIFsxLjEuMC4xLWZ1c2UtU05BUFNIT1RdIG9iciAgICAgICAga2FyYWYtJHt2ZXJzaW9ufQ0KK1t1bmluc3RhbGxlZF0gWzEuMS4wLjEtZnVzZS1TTkFQU0hPVF0gaHR0cCAgICAgICBrYXJhZi0ke3ZlcnNpb259DQorW3VuaW5zdGFsbGVkXSBbMS4xLjAuMS1mdXNlLVNOQVBTSE9UXSB3ZWJjb25zb2xlIGthcmFmLSR7dmVyc2lvbn0NCitbaW5zdGFsbGVkICBdIFsxLjEuMC4xLWZ1c2UtU05BUFNIT1RdIHNzaCAgICAgICAga2FyYWYtJHt2ZXJzaW9ufQ0KK1tpbnN0YWxsZWQgIF0gWzEuMS4wLjEtZnVzZS1TTkFQU0hPVF0gbWFuYWdlbWVudCBrYXJhZi0ke3ZlcnNpb259DQorDQorDQorQi4gVXNpbmcgWW91ciBGYXZvcml0ZSBXZWIgQ29udGFpbmVyDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorWW91IGNhbiBkZXBsb3kgdGhlIHdlYiBhcHBsaWNhdGlvbiB0byB5b3VyIGZhdm9yaXRlIHdlYg0KK2NvbnRhaW5lciwgYnkgY29tcGxldGluZyB0aGUgZm9sbG93aW5nIHN0ZXBzOg0KKw0KKzEuIEluIGEgY29tbWFuZCBwcm9tcHQvc2hlbGwsIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5DQorICAgdGhhdCBjb250YWlucyB0aGlzIFJFQURNRS50eHQgZmlsZS4NCisgICANCisyLiBFbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6DQorDQorICAgICBtdm4gcGFja2FnZQ0KKyAgICAgDQorTWF2ZW4gYnVpbGRzIHRoZSB3ZWIgYXBwbGljYXRpb24sIHdlYi0ke3ZlcnNpb259LndhciwgYW5kIA0KK3NhdmVzIGl0IGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5IG9mIHRoaXMgZXhhbXBsZS4gRGVwbG95IHRoaXMNCitXQVIgZmlsZSB0byB5b3VyIGZhdm9yaXRlIHdlYiBjb250YWluZXIuIE9uY2UgdGhlIGFwcGxpY2F0aW9uDQoraXMgcnVubmluZywgeW91IGNhbiB0ZXN0IGl0IHVzaW5nIHRoZSBBcGFjaGUgRmVsaXggS2FyYWYgY2xpZW50DQorYXMgZGVzY3JpYmVkIGluIHRoZSAiUnVubmluZyBhIENsaWVudCIgc2VjdGlvbiBhYm92ZS4NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy93ZWIvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL3dlYi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MTc5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93ZWIvcG9tLnhtbApAQCAtMCwwICsxLDE2MyBAQAorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+DQorDQorPCEtLQ0KKw0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisNCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorDQorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICANCisgICAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+ZXhhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCisgICAgPC9wYXJlbnQ+DQorDQorICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+DQorICA8YXJ0aWZhY3RJZD53ZWI8L2FydGlmYWN0SWQ+DQorICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPg0KKyAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXg0IDo6IERlbW9zIDo6IHdlYjwvbmFtZT4NCisgIA0KKyAgPHByb3BlcnRpZXM+DQorICAgIDxqZXR0eS5wb3J0PjgwODA8L2pldHR5LnBvcnQ+DQorICAgIDxhcHBlbmRlZFJlc291cmNlc0RpcmVjdG9yeT4ke2Jhc2VkaXJ9Ly4uLy4uL2V0Yy9hcHBlbmRlZC1yZXNvdXJjZXM8L2FwcGVuZGVkUmVzb3VyY2VzRGlyZWN0b3J5Pg0KKyAgPC9wcm9wZXJ0aWVzPg0KKw0KKw0KKyAgPGRlcGVuZGVuY2llcz4NCisgICAgPGRlcGVuZGVuY3k+DQorICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5rYXJhZjwvZ3JvdXBJZD4NCisgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLmthcmFmLm1haW48L2FydGlmYWN0SWQ+DQorICAgIDwvZGVwZW5kZW5jeT4NCisgICAgPGRlcGVuZGVuY3k+DQorICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5rYXJhZi5qYWFzPC9ncm91cElkPg0KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUua2FyYWYuamFhcy5ib290PC9hcnRpZmFjdElkPg0KKyAgICA8L2RlcGVuZGVuY3k+DQorICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQorICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tc2VydmxldF8yLjVfc3BlYzwvYXJ0aWZhY3RJZD4NCisgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICA8L2RlcGVuZGVuY3k+DQorICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4NCisgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUtc2VydmljZW1peDwvYXJ0aWZhY3RJZD4NCisgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICA8dHlwZT56aXA8L3R5cGU+DQorICAgIDwvZGVwZW5kZW5jeT4NCisgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgPGJ1aWxkPg0KKyAgICA8cGx1Z2lucz4NCisgICAgICA8cGx1Z2luPg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDxzb3VyY2U+MS41PC9zb3VyY2U+DQorICAgICAgICAgIDx0YXJnZXQ+MS41PC90YXJnZXQ+DQorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgPC9wbHVnaW4+DQorICAgICAgPHBsdWdpbj4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXdhci1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPHdhclNvdXJjZURpcmVjdG9yeT5zcmMvbWFpbi93ZWJhcHAvPC93YXJTb3VyY2VEaXJlY3Rvcnk+DQorICAgICAgICAgIDx3ZWJSZXNvdXJjZXM+DQorICAgICAgICAgICAgPHJlc291cmNlPg0KKyAgICAgICAgICAgICAgPGRpcmVjdG9yeT50YXJnZXQvc214NDwvZGlyZWN0b3J5Pg0KKyAgICAgICAgICAgIDwvcmVzb3VyY2U+DQorICAgICAgICAgIDwvd2ViUmVzb3VyY2VzPg0KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgIDwvcGx1Z2luPg0KKyAgICAgIDxwbHVnaW4+DQorICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjYuMS4yNlJDMDwvdmVyc2lvbj4NCisgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8Y29ubmVjdG9ycz4NCisgICAgICAgICAgICA8Y29ubmVjdG9yIGltcGxlbWVudGF0aW9uPSJvcmcubW9ydGJheS5qZXR0eS5uaW8uU2VsZWN0Q2hhbm5lbENvbm5lY3RvciI+DQorICAgICAgICAgICAgICA8cG9ydD4ke2pldHR5LnBvcnR9PC9wb3J0Pg0KKyAgICAgICAgICAgICAgPG1heElkbGVUaW1lPjYwMDAwPC9tYXhJZGxlVGltZT4NCisgICAgICAgICAgICA8L2Nvbm5lY3Rvcj4NCisgICAgICAgICAgPC9jb25uZWN0b3JzPg0KKyAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4NCisgICAgICAgICAgICA8IS0tIGVuYWJsZSBlYXN5IGNvbm5lY3Rpb24gdG8gSkNvbnNvbGUgLS0+DQorICAgICAgICAgICAgPHN5c3RlbVByb3BlcnR5Pg0KKyAgICAgICAgICAgICAgPG5hbWU+Y29tLnN1bi5tYW5hZ2VtZW50LmpteHJlbW90ZTwvbmFtZT4NCisgICAgICAgICAgICAgIDx2YWx1ZSAvPg0KKyAgICAgICAgICAgIDwvc3lzdGVtUHJvcGVydHk+DQorICAgICAgICAgIDwvc3lzdGVtUHJvcGVydGllcz4NCisgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MTA8L3NjYW5JbnRlcnZhbFNlY29uZHM+DQorICAgICAgICAgIDx3ZWJBcHBTb3VyY2VEaXJlY3Rvcnk+JHtiYXNlZGlyfS90YXJnZXQvJHthcnRpZmFjdElkfS0ke3ZlcnNpb259PC93ZWJBcHBTb3VyY2VEaXJlY3Rvcnk+DQorICAgICAgICAgIDx3ZWJBcHA+JHtiYXNlZGlyfS90YXJnZXQvJHthcnRpZmFjdElkfS0ke3ZlcnNpb259Lndhcjwvd2ViQXBwPg0KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgIDwvcGx1Z2luPg0KKyAgICAgIDxwbHVnaW4+DQorICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgIDx2ZXJzaW9uPjIuMDwvdmVyc2lvbj4NCisgICAgICAgICAgPGV4ZWN1dGlvbnM+DQorICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgIDxpZD51bnBhY2stdW5peDwvaWQ+DQorICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+DQorICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbXM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUtc2VydmljZW1peDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4gICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPGdyb3VwSWQ+b3JnLmFwYWNoZS5rYXJhZjwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUta2FyYWY8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4xLjA8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGU+emlwPC90eXBlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvdmVyV3JpdGU+dHJ1ZTwvb3ZlcldyaXRlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vc214NC9XRUItSU5GPC9vdXRwdXREaXJlY3Rvcnk+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPioqL2xpYi8qLCoqLyoudHh0LCoqL2Jpbi8qLCoqL2RlbW9zLyoqLCoqL2xpYiwqKi9iaW4sKiovZGVtb3M8L2V4Y2x1ZGVzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtcz4NCisgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICA8L3BsdWdpbj4NCisgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFudHJ1bi1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICA8aWQ+Y29weS1zZXJ2aWNlbWl4PC9pZD4NCisgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy1yZXNvdXJjZXM8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgIDx0YXNrcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxtb3ZlIHRvZGlyPSIke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9zbXg0L1dFQi1JTkYvc2VydmljZW1peCI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9zbXg0L1dFQi1JTkYvYXBhY2hlLXNlcnZpY2VtaXgtJHtwb20udmVyc2lvbn0iIC8+IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICA8ZmlsZXNldCBkaXI9IiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3NteDQvV0VCLUlORi9hcGFjaGUta2FyYWYtMi4xLjAiIC8+IC0tPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tb3ZlPg0KKyAgICAgICAgICAgICAgICAgICAgICA8L3Rhc2tzPg0KKyAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KKyAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQorICAgICAgPC9wbHVnaW4+DQorICAgIDwvcGx1Z2lucz4NCisgIDwvYnVpbGQ+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL3dlYi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC93ZWIvV2ViQXBwTGlzdGVuZXIuamF2YSBiL3RydW5rL2V4YW1wbGVzL3dlYi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC93ZWIvV2ViQXBwTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDlmMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvd2ViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3dlYi9XZWJBcHBMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUuc2VydmljZW1peC53ZWI7DQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCisNCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dEV2ZW50Ow0KK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0TGlzdGVuZXI7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUua2FyYWYubWFpbi5NYWluOw0KK2ltcG9ydCBvcmcuYXBhY2hlLmthcmFmLm1haW4uQm9vdHN0cmFwOw0KKw0KK3B1YmxpYyBjbGFzcyBXZWJBcHBMaXN0ZW5lciBpbXBsZW1lbnRzIFNlcnZsZXRDb250ZXh0TGlzdGVuZXIgew0KKyAgICANCisgICAgcHJpdmF0ZSBNYWluIG1haW47DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBjb250ZXh0SW5pdGlhbGl6ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJjb250ZXh0SW5pdGlhbGl6ZWQiKTsNCisgICAgICAgICAgICBTdHJpbmcgcm9vdCA9IG5ldyBGaWxlKHNjZS5nZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlYWxQYXRoKCIvIikgKyAiL1dFQi1JTkYvc2VydmljZW1peCIpLmdldEFic29sdXRlUGF0aCgpOw0KKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUm9vdDogIiArIHJvb3QpOw0KKyAgICAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgia2FyYWYuaG9tZSIsIHJvb3QpOw0KKyAgICAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgia2FyYWYuYmFzZSIsIHJvb3QpOw0KKyAgICAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgia2FyYWYuc3RhcnRMb2NhbENvbnNvbGUiLCAiZmFsc2UiKTsNCisgICAgICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoImthcmFmLnN0YXJ0UmVtb3RlU2hlbGwiLCAidHJ1ZSIpOw0KKyAgICAgICAgICAgIG1haW4gPSBuZXcgTWFpbihuZXcgU3RyaW5nWzBdKTsgLy9Cb290c3RyYXAubWFpbihuZXcgU3RyaW5nWzBdKTsNCisgICAgICAgICAgICBtYWluLmxhdW5jaCgpOw0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICBtYWluID0gbnVsbDsNCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIGNvbnRleHREZXN0cm95ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJjb250ZXh0RGVzdHJveWVkIik7DQorICAgICAgICAgICAgaWYgKG1haW4gIT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICBtYWluLmRlc3Ryb3koZmFsc2UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy93ZWIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3RydW5rL2V4YW1wbGVzL3dlYi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTdkZmMKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93ZWIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgIAorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzx3ZWItYXBwIHZlcnNpb249IjIuNCIKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CisKKyAgPGRlc2NyaXB0aW9uPlNlcnZpY2VNaXggRW1iZWRkZWQgRXhhbXBsZTwvZGVzY3JpcHRpb24+CisgIDxkaXNwbGF5LW5hbWU+U2VydmljZU1peCBFbWJlZGRlZCBFeGFtcGxlPC9kaXNwbGF5LW5hbWU+CisKKyAgPGxpc3RlbmVyPgorICAgIDxsaXN0ZW5lci1jbGFzcz5vcmcuYXBhY2hlLnNlcnZpY2VtaXgud2ViLldlYkFwcExpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KKyAgPC9saXN0ZW5lcj4KKworICA8d2VsY29tZS1maWxlLWxpc3Q+CisgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KKyAgPC93ZWxjb21lLWZpbGUtbGlzdD4KKyAgICAgICAgCis8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy93ZWIvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcCBiL3RydW5rL2V4YW1wbGVzL3dlYi9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MjIxN2IKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93ZWIvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcApAQCAtMCwwICsxLDM0IEBACis8JS0tCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLSU+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkFwYWNoZSBLYXJhZjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGgyPldlbGNvbWUhPC9oMj4KKworPHA+CitXZWxjb21lIHRvIEFwYWNoZSBLYXJhZiB3ZWIgYXBwbGljYXRpb24gZGVtbworPC9wPgorCis8cD4KK1lvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEthcmFmIG9uIHRoZSA8YSBocmVmPSJodHRwOi8va2FyYWYuYXBhY2hlLm9yZy8iPkFwYWNoZSBLYXJhZiBTaXRlPC9hPgorPC9wPgorPC9ib2R5PgorPC9odG1sPgorICAgIApkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC9SRUFETUUudHh0IGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjE4YzYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L1JFQURNRS50eHQKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitXZWxjb21lIHRvIFNlcnZpY2VNaXggV1NETCBkZXNpZ24gZmlyc3QgZXhhbXBsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBleGFtcGxlIHNob3dzIGhvdyB0byBleHBvc2UgYSBzZXJ2aWNlLCBiZWdpbm5pbmcgZnJvbSB0aGUKK1dTREwsIGFuZCBleHBvc2luZyBpdCBvdmVyIEhUVFAuCisKK0ZpcnN0IHN0YXJ0IGEgU2VydmljZU1peCBzZXJ2ZXIgKGlmIG5vdCBhbHJlYWR5IHN0YXJ0ZWQpIGJ5IHJ1bm5pbmcKKyAgYmluL3NlcnZpY2VtaXgKK2luIHRoZSByb290IGRpciBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKworVG8gYnVpbGQgdGhpcyBzYW1wbGUsIGxhdW5jaCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorICBtdm4gaW5zdGFsbAorCitZb3UgY2FuIGRlcGxveSB0aGUgZXhhbXBsZSBvbiBTZXJ2aWNlTWl4IDQgaW4gdHdvIGRpZmZlcmVudCB3YXlzOgorLSB1c2luZyBob3RkZXBsb3k6IAorICAgY29weSB0aGUgd3NkbC1maXJzdC1zYS90YXJnZXQvd3NkbC1maXJzdC1zYS0ke3ZlcnNpb259LnppcCB0byA8c2VydmljZW1peF9ob21lPi9kZXBsb3kKKy0gdXNpbmcgdGhlIFNlcnZpY2VNaXggY29uc29sZToKKyAgIG9zZ2kvaW5zdGFsbCAtcyBtdm46b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLndzZGwtZmlyc3Qvd3NkbC1maXJzdC1zYS8ke3ZlcnNpb259L3ppcAorCitZb3UgY2FuIGJyb3dzZSB0aGUgV1NETCBhdAorICBodHRwOi8vbG9jYWxob3N0OjgxOTIvUGVyc29uU2VydmljZS9tYWluLndzZGwKKyAgCitZb3UgY2FuIGFsc28gb3BlbiB0aGUgY2xpZW50Lmh0bWwgcGFnZSBpbiBhIGJyb3dzZXIKK3RvIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2aWNlLgorCmRpZmYgLS1naXQgYS90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L2NsaWVudC5odG1sIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC9jbGllbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTJiMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC9jbGllbnQuaHRtbApAQCAtMCwwICsxLDEzNSBAQAorPCEtLQ0KKyAgICANCisgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgIA0KKyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPCEtLSAkUmV2OiAzNTYwNTIgJCAkRGF0ZTogMjAwNS0xMi0xMSAxNDo0MToyMCAtMDgwMCAoZGltLiwgMTEgZHapYy4gMjAwNSkgJCAtLT4NCis8aHRtbD4NCis8aGVhZD4NCis8dGl0bGU+U2VydmljZU1peCBXU0RMLUZpcnN0IEV4YW1wbGU8L3RpdGxlPg0KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCit2YXIgdXJsVG9PcGVuID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODE5Mi9QZXJzb25TZXJ2aWNlLyI7IC8vZGVmYXVsdCBVUkwgdG8gb3Blbg0KKw0KK2Z1bmN0aW9uIGdldEhUVFBPYmplY3QoKSB7DQorICB2YXIgeG1saHR0cCA9IGZhbHNlOw0KKw0KKyAgLyogQ29tcGlsYXRpb24gY29uZGl0aW9ubmVsbGUgZCdJRSAqLw0KKyAgLypAY2Nfb24NCisgIEBpZiAoQF9qc2NyaXB0X3ZlcnNpb24gPj0gNSkNCisgICAgIHRyeSB7DQorICAgICAgICB4bWxodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7DQorICAgICB9IGNhdGNoIChlKSB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOw0KKyAgICAgICAgfSBjYXRjaCAoRSkgew0KKyAgICAgICAgICAgeG1saHR0cCA9IGZhbHNlOw0KKyAgICAgICAgfQ0KKyAgICAgfQ0KKyAgQGVsc2UNCisgICAgIHhtbGh0dHAgPSBmYWxzZTsNCisgIEBlbmQgQCovDQorDQorICAvKiBvbiBlc3NhaWUgZGUgY3LpZXIgbCdvYmpldCBzaSBjZSBuJ2VzdCBwYXMgZOlq4CBmYWl0ICovDQorICBpZiAoIXhtbGh0dHAgJiYgdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICd1bmRlZmluZWQnKSB7DQorICAgICB0cnkgew0KKyAgICAgICAgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOw0KKyAgICAgfSBjYXRjaCAoZSkgew0KKyAgICAgICAgeG1saHR0cCA9IGZhbHNlOw0KKyAgICAgfQ0KKyAgfQ0KKw0KKyAgaWYgKHhtbGh0dHApIHsNCisgICAgIC8qIG9uIGTpZmluaXQgY2UgcXVpIGRvaXQgc2UgcGFzc2VyIHF1YW5kIGxhIHBhZ2Ugculwb25kcmEgKi8NCisgICAgIHhtbGh0dHAub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCkgew0KKyAgICAgICAgaWYgKHhtbGh0dHAucmVhZHlTdGF0ZSA9PSA0KSB7IC8qIDQgOiDpdGF0ICJjb21wbGV0ZSIgKi8NCisgICAgICAgICAgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOw0KKyAgICAgICAgICAgdmFyIHJlc3BvbnNlU3RhdHVzID0gIiI7DQorICAgICAgICAgICB0cnkgew0KKyAgICAgICAgICAgICByZXNwb25zZVN0YXR1cyA9IHhtbGh0dHAuc3RhdHVzICsgIiI7DQorICAgICAgICAgICB9IGNhdGNoIChlKSB7DQorICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0gIkVSUk9SIFdISUxFIFJFVFJJRVZJTkcgU1RBVFVTOyBNQVlCRSBVTkFCTEUgVE8gQ09OTkVDVC4iOw0KKyAgICAgICAgICAgfQ0KKyAgICAgICAgICAgcmVzcG9uc2UudmFsdWUgPSAiU1RBVFVTOiAiICsgcmVzcG9uc2VTdGF0dXMgKyAiXG4iICsgeG1saHR0cC5yZXNwb25zZVRleHQ7DQorICAgICAgICB9DQorICAgICB9DQorICB9DQorICByZXR1cm4geG1saHR0cDsNCit9DQorDQorZnVuY3Rpb24gc2VuZCgpIHsNCisgIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlICE9IHVybFRvT3BlbikgJiYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSAhPSAiIikpIHsNCisgICAgLy91c2UgdXNlciBlbnRyeSBvbmx5IGlmIGl0IGF0IGxlYXN0IGNhbiBiZSBva2F5DQorICAgIHVybFRvT3BlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZTsNCisgIH0gIA0KKyAgdmFyIHhtbGh0dHAgPSBnZXRIVFRQT2JqZWN0KCk7DQorICBpZiAoIXhtbGh0dHApIHsNCisgICAgYWxlcnQoJ2NvdW5kIG5vdCBjcmVhdGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0Jyk7DQorICAgIHJldHVybjsNCisgIH0NCisgIHZhciByZXF1ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlcXVlc3QiKTsNCisgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOw0KKyAgdHJ5IHsNCisgICAgbmV0c2NhcGUuc2VjdXJpdHkuUHJpdmlsZWdlTWFuYWdlci5lbmFibGVQcml2aWxlZ2UoIlVuaXZlcnNhbEJyb3dzZXJSZWFkIFVuaXZlcnNhbEJyb3dzZXJXcml0ZSIpOw0KKyAgfSBjYXRjaCAoZSkgew0KKyAgfQ0KKyAgdHJ5IHsNCisgICAgeG1saHR0cC5vcGVuKCJQT1NUIiwgdXJsVG9PcGVuLCB0cnVlKTsNCisgIH0gY2F0Y2ggKGUpIHsNCisgICAgYWxlcnQoJ2Vycm9yIG9wZW5pbmcnKTsNCisgIH0NCisgIHhtbGh0dHAuc2VuZChyZXF1ZXN0LnZhbHVlKTsNCit9DQorDQorPC9zY3JpcHQ+DQorPC9oZWFkPg0KKw0KKzxib2R5Pg0KKw0KKzxoMT5TZXJ2aWNlTWl4IFdTREwtRmlyc3QgRXhhbXBsZTwvaDE+DQorDQorPHA+V2VsY29tZSB0byB0aGUgV1NETC1GaXJzdCBleGFtcGxlIGZvciBTZXJ2aWNlTWl4PC9wPg0KKw0KKzxwPlBlcmZvcm0gYSBQT1NUIGludG8gdGhlIEhUVFAgYmluZGluZy4gVGhpcyByZXF1aXJlcyBKYXZhU2NyaXB0LjwvcD4gDQorPHA+VGFyZ2V0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNTAiIGlkPSJ1cmxUb09wZW4iIHZhbHVlPSIiPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWUgPSB1cmxUb09wZW47PC9zY3JpcHQ+LjwvcD4NCisgIA0KKzx0YWJsZT4NCisgIDx0cj4NCisgICAgPHRkPg0KKyAgPHRleHRhcmVhIGlkPSJyZXF1ZXN0IiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4IiBvbktleVVwPSJzZW5kKCk7Ij48P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlbnY6RW52ZWxvcGUgeG1sbnM6ZW52PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyINCisgICAgICAgICAgICAgIHhtbG5zOnRucz0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QvdHlwZXMiPg0KKyAgPGVudjpCb2R5Pg0KKyAgICA8dG5zOkdldFBlcnNvbj4NCisgICAgICA8dG5zOnBlcnNvbklkPndvcmxkPC90bnM6cGVyc29uSWQ+DQorICAgIDwvdG5zOkdldFBlcnNvbj4NCisgIDwvZW52OkJvZHk+DQorPC9lbnY6RW52ZWxvcGU+DQorDQorICA8L3RleHRhcmVhPg0KKyAgICA8L3RkPg0KKyAgICA8dGQ+DQorICA8dGV4dGFyZWEgaWQ9InJlc3BvbnNlIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4Ij4NCisgIDwvdGV4dGFyZWE+DQorICAgIDwvdGQ+DQorICA8L3RyPg0KKyAgPHRyPg0KKyAgICA8dGQgY29sc3Bhbj0yPg0KKyAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlNlbmQiIG9uQ2xpY2s9InNlbmQoKTsiLz4NCisgICAgPC90ZD4NCisgIDwvdHI+DQorPC90YWJsZT4NCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL3dzZGwtZmlyc3QvcG9tLnhtbCBiL3RydW5rL2V4YW1wbGVzL3dzZGwtZmlyc3QvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzBlOTczCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC9wb20ueG1sCkBAIC0wLDAgKzEsNzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5leGFtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4zLjA8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+d3NkbC1maXJzdDwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBXU0RMIEZpcnN0PC9uYW1lPgorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisKKyAgICA8bW9kdWxlcz4KKyAgICAgICAgPG1vZHVsZT53c2RsLWZpcnN0LWpzcjE4MS1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPndzZGwtZmlyc3QtaHR0cC1zdTwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPndzZGwtZmlyc3Qtc2E8L21vZHVsZT4KKyAgICA8L21vZHVsZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYXNzZW1ibHktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxpbmhlcml0ZWQ+ZmFsc2U8L2luaGVyaXRlZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5zcmM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNpbmdsZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVzY3JpcHRvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXNjcmlwdG9yPnNyYy9tYWluL2Fzc2VtYmx5L3NyYy54bWw8L2Rlc2NyaXB0b3I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXNjcmlwdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpiaS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKyAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL3dzZGwtZmlyc3Qvc3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbCBiL3RydW5rL2V4YW1wbGVzL3dzZGwtZmlyc3Qvc3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjU3YzZkCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC9zcmMvbWFpbi9hc3NlbWJseS9zcmMueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKw0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisNCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorDQorICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorDQorLS0+DQorPGFzc2VtYmx5Pg0KKyAgPGlkPnNyYzwvaWQ+DQorICA8Zm9ybWF0cz4NCisgICAgPGZvcm1hdD50YXIuZ3o8L2Zvcm1hdD4NCisgICAgPGZvcm1hdD56aXA8L2Zvcm1hdD4NCisgIDwvZm9ybWF0cz4NCisgIDxmaWxlU2V0cz4NCisgICAgPGZpbGVTZXQ+DQorICAgICAgPGluY2x1ZGVzPg0KKyAgICAgICAgPGluY2x1ZGU+UkVBRE1FKjwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPkxJQ0VOU0UqPC9pbmNsdWRlPg0KKyAgICAgICAgPGluY2x1ZGU+Tk9USUNFKjwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPnBvbS54bWw8L2luY2x1ZGU+DQorICAgICAgICA8aW5jbHVkZT4qLmh0bWw8L2luY2x1ZGU+DQorICAgICAgICA8aW5jbHVkZT5zcmMvKiovKjwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPiovcG9tLnhtbDwvaW5jbHVkZT4NCisgICAgICAgIDxpbmNsdWRlPiovc3JjLyoqLyo8L2luY2x1ZGU+DQorICAgICAgPC9pbmNsdWRlcz4NCisgICAgPC9maWxlU2V0Pg0KKyAgPC9maWxlU2V0cz4NCis8L2Fzc2VtYmx5Pg0KZGlmZiAtLWdpdCBhL3RydW5rL2V4YW1wbGVzL3dzZGwtZmlyc3Qvd3NkbC1maXJzdC1odHRwLXN1L3BvbS54bWwgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L3dzZGwtZmlyc3QtaHR0cC1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MmEyZjYKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L3dzZGwtZmlyc3QtaHR0cC1zdS9wb20ueG1sCkBAIC0wLDAgKzEsNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICAgIDwhLS0KKworICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD53c2RsLWZpcnN0PC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8L3BhcmVudD4KKworICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy53c2RsLWZpcnN0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPndzZGwtZmlyc3QtaHR0cC1zdTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLXVuaXQ8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlcyA6OiBFeGFtcGxlcyA6OiBXU0RMIEZpcnN0IDo6IEhUVFAgU1U8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtaHR0cDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWh0dHAtc3Uvc3JjL21haW4vcmVzb3VyY2VzL3hiZWFuLnhtbCBiL3RydW5rL2V4YW1wbGVzL3dzZGwtZmlyc3Qvd3NkbC1maXJzdC1odHRwLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyYzYyYQotLS0gL2Rldi9udWxsCisrKyBiL3RydW5rL2V4YW1wbGVzL3dzZGwtZmlyc3Qvd3NkbC1maXJzdC1odHRwLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKQEAgLTAsMCArMSwzMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorDQorICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKw0KKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisNCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8YmVhbnMgeG1sbnM6aHR0cD0iaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9odHRwLzEuMCINCisgICAgICAgeG1sbnM6cGVyc29uPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL3NhbXBsZXMvd3NkbC1maXJzdCI+DQorDQorICA8aHR0cDplbmRwb2ludCBzZXJ2aWNlPSJwZXJzb246UGVyc29uU2VydmljZSINCisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSJzb2FwIg0KKyAgICAgICAgICAgICAgICAgdGFyZ2V0U2VydmljZT0icGVyc29uOlBlcnNvblNlcnZpY2UiDQorICAgICAgICAgICAgICAgICByb2xlPSJjb25zdW1lciIgDQorICAgICAgICAgICAgICAgICBsb2NhdGlvblVSST0iaHR0cDovLzAuMC4wLjA6ODE5Mi9QZXJzb25TZXJ2aWNlLyINCisgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9pbi1vdXQiDQorICAgICAgICAgICAgICAgICBzb2FwPSJ0cnVlIiAvPg0KKw0KKzwvYmVhbnM+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9wb20ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTk5MTgKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L3dzZGwtZmlyc3QtanNyMTgxLXN1L3BvbS54bWwKQEAgLTAsMCArMSw3OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPndzZGwtZmlyc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLndzZGwtZmlyc3Q8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+d3NkbC1maXJzdC1qc3IxODEtc3U8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5qYmktc2VydmljZS11bml0PC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogV1NETCBGaXJzdCA6OiBKU1IxODEgU1U8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtanNyMTgxPC9hcnRpZmFjdElkPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+MS41PC9zb3VyY2U+CisgICAgICAgICAgICAgICAgICAgIDx0YXJnZXQ+MS41PC90YXJnZXQ+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnhmaXJlLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsPiR7YmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzL3BlcnNvbi53c2RsPC93c2RsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3NkbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb2ZpbGU+b3JnLmNvZGVoYXVzLnhmaXJlLmdlbi5qc3IxODEuSnNyMTgxUHJvZmlsZTwvcHJvZmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0L2pheHdzPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+d3NnZW48L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amJpLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QvUGVyc29uSW1wbC5qYXZhIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvc2VydmljZW1peC9zYW1wbGVzL3dzZGxfZmlyc3QvUGVyc29uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjZiNmUKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L3dzZGwtZmlyc3QtanNyMTgxLXN1L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9zZXJ2aWNlbWl4L3NhbXBsZXMvd3NkbF9maXJzdC9QZXJzb25JbXBsLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisgKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdDsNCisNCitpbXBvcnQgamF2YXguandzLldlYlNlcnZpY2U7DQoraW1wb3J0IGphdmF4LnhtbC53cy5Ib2xkZXI7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QudHlwZXMuR2V0UGVyc29uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0LnR5cGVzLkdldFBlcnNvblJlc3BvbnNlOw0KKw0KK0BXZWJTZXJ2aWNlKHNlcnZpY2VOYW1lID0gIlBlcnNvblNlcnZpY2UiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL3NlcnZpY2VtaXguYXBhY2hlLm9yZy9zYW1wbGVzL3dzZGwtZmlyc3QiLCBlbmRwb2ludEludGVyZmFjZSA9ICJvcmcuYXBhY2hlLnNlcnZpY2VtaXguc2FtcGxlcy53c2RsX2ZpcnN0LlBlcnNvbiIpDQorcHVibGljIGNsYXNzIFBlcnNvbkltcGwgaW1wbGVtZW50cyBQZXJzb24gew0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIGdldFBlcnNvbihTdHJpbmcgcGVyc29uSWQsIEhvbGRlcjxTdHJpbmc+IHNzbiwgSG9sZGVyPFN0cmluZz4gbmFtZSkNCisgICAgICAgIHRocm93cyBVbmtub3duUGVyc29uRmF1bHQNCisgICAgew0KKyAgICAgICAgaWYgKHBlcnNvbklkID09IG51bGwgfHwgcGVyc29uSWQubGVuZ3RoKCkgPT0gMCkgew0KKyAgICAgICAgICAgIG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QudHlwZXMuVW5rbm93blBlcnNvbkZhdWx0IGZhdWx0ID0gbmV3IG9yZy5hcGFjaGUuc2VydmljZW1peC5zYW1wbGVzLndzZGxfZmlyc3QudHlwZXMuVW5rbm93blBlcnNvbkZhdWx0KCk7DQorICAgICAgICAgICAgZmF1bHQuc2V0UGVyc29uSWQocGVyc29uSWQpOw0KKyAgICAgICAgICAgIHRocm93IG5ldyBVbmtub3duUGVyc29uRmF1bHQobnVsbCwgZmF1bHQpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbmFtZS52YWx1ZSA9ICJHdWlsbGF1bWUiOw0KKyAgICAgICAgc3NuLnZhbHVlID0gIjAwMC0wMDAtMDAwMCI7DQorICAgICAgICByZXR1cm4gcGVyc29uSWQ7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvcGVyc29uLndzZGwgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L3dzZGwtZmlyc3QtanNyMTgxLXN1L3NyYy9tYWluL3Jlc291cmNlcy9wZXJzb24ud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhmMzNjCi0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMvcGVyc29uLndzZGwKQEAgLTAsMCArMSw5OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgIA0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgDQorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICANCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8IS0tICRSZXY6IDM1NjA1MiAkICREYXRlOiAyMDA1LTEyLTExIDE0OjQxOjIwIC0wODAwIChkaW0uLCAxMSBk4oiawqljLiAyMDA1KSAkIC0tPg0KKzx3c2RsOmRlZmluaXRpb25zIG5hbWU9IndzZGwtZmlyc3QiDQorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KKyAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIg0KKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIg0KKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczp0bnM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0Ig0KKyAgICB4bWxuczp0eXBlbnM9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIg0KKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0Ij4NCisNCisgICAgPHdzZGw6dHlwZXM+DQorICAgICAgICA8eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2aWNlbWl4LmFwYWNoZS5vcmcvc2FtcGxlcy93c2RsLWZpcnN0L3R5cGVzIg0KKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPg0KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJHZXRQZXJzb24iPg0KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4NCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iR2V0UGVyc29uUmVzcG9uc2UiPg0KKyAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4NCisgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNzbiIgdHlwZT0ieHNkOnN0cmluZyIvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+DQorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4NCisgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+DQorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4NCisgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVW5rbm93blBlcnNvbkZhdWx0Ij4NCisgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+DQorICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwZXJzb25JZCIgdHlwZT0ieHNkOnN0cmluZyIvPg0KKyAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+DQorICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPg0KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+DQorICAgICAgICA8L3hzZDpzY2hlbWE+DQorICA8L3dzZGw6dHlwZXM+DQorICAgIA0KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IkdldFBlcnNvblJlcXVlc3QiPg0KKyAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJwYXlsb2FkIiBlbGVtZW50PSJ0eXBlbnM6R2V0UGVyc29uIi8+DQorICAgIDwvd3NkbDptZXNzYWdlPg0KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IkdldFBlcnNvblJlc3BvbnNlIj4NCisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0icGF5bG9hZCIgZWxlbWVudD0idHlwZW5zOkdldFBlcnNvblJlc3BvbnNlIi8+DQorICAgIDwvd3NkbDptZXNzYWdlPg0KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IlVua25vd25QZXJzb25GYXVsdCI+DQorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBheWxvYWQiIGVsZW1lbnQ9InR5cGVuczpVbmtub3duUGVyc29uRmF1bHQiLz4NCisgICAgPC93c2RsOm1lc3NhZ2U+DQorDQorICAgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IlBlcnNvbiI+DQorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iR2V0UGVyc29uIj4NCisgICAgICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6R2V0UGVyc29uUmVxdWVzdCIvPg0KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6R2V0UGVyc29uUmVzcG9uc2UiLz4NCisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJVbmtub3duUGVyc29uIiBtZXNzYWdlPSJ0bnM6VW5rbm93blBlcnNvbkZhdWx0Ii8+DQorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPg0KKyAgICA8L3dzZGw6cG9ydFR5cGU+DQorICAgIA0KKyAgICA8d3NkbDpiaW5kaW5nIG5hbWU9IlBlcnNvblNPQVBCaW5kaW5nIiB0eXBlPSJ0bnM6UGVyc29uIj4NCisgICAgICAgIDxzb2FwOmJpbmRpbmcgc3R5bGU9ImRvY3VtZW50IiB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4NCisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJHZXRQZXJzb24iPg0KKyAgICAgICAgICAgIDx3c2RsOmlucHV0Pg0KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+DQorICAgICAgICAgICAgPHdzZGw6b3V0cHV0Pg0KKyAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIgLz4NCisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0Pg0KKyAgICAgICAgICAgIDx3c2RsOmZhdWx0IG5hbWU9IlVua25vd25QZXJzb24iPg0KKyAgICAgICAgICAgICAgICA8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9IlVua25vd25QZXJzb24iIC8+DQorICAgICAgICAgICAgPC93c2RsOmZhdWx0Pg0KKyAgICAgICA8L3dzZGw6b3BlcmF0aW9uPg0KKyAgIDwvd3NkbDpiaW5kaW5nPg0KKw0KKyAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IlBlcnNvblNlcnZpY2UiPg0KKyAgICAgICAgPHdzZGw6cG9ydCBiaW5kaW5nPSJ0bnM6UGVyc29uU09BUEJpbmRpbmciIG5hbWU9InNvYXAiPg0KKyAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MTkyL1BlcnNvblNlcnZpY2UvIiAvPg0KKyAgICAgICA8L3dzZGw6cG9ydD4NCisgICA8L3dzZGw6c2VydmljZT4NCisNCis8L3dzZGw6ZGVmaW5pdGlvbnM+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LWpzcjE4MS1zdS9zcmMvbWFpbi9yZXNvdXJjZXMveGJlYW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NGFjYzAKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L3dzZGwtZmlyc3QtanNyMTgxLXN1L3NyYy9tYWluL3Jlc291cmNlcy94YmVhbi54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgIA0KKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgDQorICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICANCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisNCistLT4NCis8YmVhbnMgeG1sbnM6anNyMTgxPSJodHRwOi8vc2VydmljZW1peC5hcGFjaGUub3JnL2pzcjE4MS8xLjAiPg0KKw0KKyAgICA8anNyMTgxOmVuZHBvaW50IHBvam9DbGFzcz0ib3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNhbXBsZXMud3NkbF9maXJzdC5QZXJzb25JbXBsIiAvPg0KKw0KKzwvYmVhbnM+DQpkaWZmIC0tZ2l0IGEvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LXNhL3BvbS54bWwgYi90cnVuay9leGFtcGxlcy93c2RsLWZpcnN0L3dzZGwtZmlyc3Qtc2EvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzc3MmI5Ci0tLSAvZGV2L251bGwKKysrIGIvdHJ1bmsvZXhhbXBsZXMvd3NkbC1maXJzdC93c2RsLWZpcnN0LXNhL3BvbS54bWwKQEAgLTAsMCArMSw1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorCisgICAgICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICAgICAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICAgICAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICAgICAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgICAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgICAgICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAgLS0+CisKKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZXhhbXBsZXM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPndzZGwtZmlyc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjQuMy4wPC92ZXJzaW9uPgorICAgIDwvcGFyZW50PgorCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLndzZGwtZmlyc3Q8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+d3NkbC1maXJzdC1zYTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPmpiaS1zZXJ2aWNlLWFzc2VtYmx5PC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFNlcnZpY2VNaXggOjogRmVhdHVyZXMgOjogRXhhbXBsZXMgOjogV1NETCBGaXJzdCA6OiBTQTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmV4YW1wbGVzLndzZGwtZmlyc3Q8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c2RsLWZpcnN0LWpzcjE4MS1zdTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5leGFtcGxlcy53c2RsLWZpcnN0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3NkbC1maXJzdC1odHRwLXN1PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgudG9vbGluZzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3RydW5rL3BvbS54bWwgYi90cnVuay9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YmE5MmIKLS0tIC9kZXYvbnVsbAorKysgYi90cnVuay9wb20ueG1sCkBAIC0wLDAgKzEsMTY5MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgICAgPCEtLQorICAgIAorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAgICAgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAgICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAgICAgICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICAgIC0tPgorCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXBvbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9zZXJ2aWNlbWl4LXBvbS9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgICAgIDx2ZXJzaW9uPjU8L3ZlcnNpb24+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguZmVhdHVyZXM8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+ZmVhdHVyZXM8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8dmVyc2lvbj40LjMuMDwvdmVyc2lvbj4KKyAgICA8bmFtZT5BcGFjaGUgU2VydmljZU1peCA6OiBGZWF0dXJlczwvbmFtZT4KKyAgICA8aW5jZXB0aW9uWWVhcj4yMDA1PC9pbmNlcHRpb25ZZWFyPgorCisgICAgPG1vZHVsZXM+CisgICAgICAgIDxtb2R1bGU+ZGVwczwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmJyYW5kaW5nPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y2FtZWw8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5jeGY8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5leGFtcGxlczwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmFzc2VtYmx5PC9tb2R1bGU+CisgICAgPC9tb2R1bGVzPgorCisgICAgPHNjbT4KKyAgICAgICAgPGNvbm5lY3Rpb24+c2NtOnN2bjpodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3NlcnZpY2VtaXgvc214NC9mZWF0dXJlcy90YWdzL2ZlYXR1cmVzLTQuMy4wPC9jb25uZWN0aW9uPgorICAgICAgICA8ZGV2ZWxvcGVyQ29ubmVjdGlvbj5zY206c3ZuOmh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3NlcnZpY2VtaXgvc214NC9mZWF0dXJlcy90YWdzL2ZlYXR1cmVzLTQuMy4wPC9kZXZlbG9wZXJDb25uZWN0aW9uPgorICAgICAgICA8dXJsPmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy92aWV3dmMvc2VydmljZW1peC9zbXg0L2ZlYXR1cmVzL3RhZ3MvZmVhdHVyZXMtNC4zLjA8L3VybD4KKyAgICA8L3NjbT4KKyAgICAKKyAgICA8aXNzdWVNYW5hZ2VtZW50PgorICAgICAgICA8c3lzdGVtPmppcmE8L3N5c3RlbT4KKyAgICAgICAgPHVybD5odHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvU01YNDwvdXJsPgorICAgIDwvaXNzdWVNYW5hZ2VtZW50PgorCisgICAgPHByZXJlcXVpc2l0ZXM+CisgICAgICAgIDxtYXZlbj4yLjIuMTwvbWF2ZW4+CisgICAgPC9wcmVyZXF1aXNpdGVzPgorCisgICAgPHJlcG9zaXRvcmllcz4KKyAgICAgICAgPCEtLSBKYXZhLm5ldCBNYXZlbiBSZXBvc2l0b3J5LCByZXF1aXJlZCBieSBqYXZheC5tYWlsIC0tPgorICAgICAgICA8cmVwb3NpdG9yeT4KKyAgICAgICAgICAgIDxpZD5qYXZhLm5ldDwvaWQ+CisgICAgICAgICAgICA8bmFtZT5KYXZhLm5ldCBNYXZlbjIgUmVwb3NpdG9yeTwvbmFtZT4KKyAgICAgICAgICAgIDx1cmw+aHR0cDovL2Rvd25sb2FkLmphdmEubmV0L21hdmVuLzI8L3VybD4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlZD50cnVlPC9lbmFibGVkPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgICAgIDxzbmFwc2hvdHM+CisgICAgICAgICAgICAgICAgPGVuYWJsZWQ+ZmFsc2U8L2VuYWJsZWQ+CisgICAgICAgICAgICA8L3NuYXBzaG90cz4KKyAgICAgICAgPC9yZXBvc2l0b3J5PgorICAgICAgICA8IS0tIEpCb3NzIE1hdmVuIFJlcG9zaXRvcnksIHJlcXVpcmVkIGJ5IERyb29scyAtLT4KKyAgICAgICAgPHJlcG9zaXRvcnk+CisgICAgICAgICAgICA8aWQ+amJvc3M8L2lkPgorICAgICAgICAgICAgPG5hbWU+SkJvc3MgTWF2ZW4yIFJlcG9zaXRvcnk8L25hbWU+CisgICAgICAgICAgICA8dXJsPmh0dHA6Ly9yZXBvc2l0b3J5Lmpib3NzLmNvbS9uZXh1cy9jb250ZW50L2dyb3Vwcy9wdWJsaWMvPC91cmw+CisgICAgICAgICAgICA8cmVsZWFzZXM+CisgICAgICAgICAgICAgICAgPGVuYWJsZWQ+dHJ1ZTwvZW5hYmxlZD4KKyAgICAgICAgICAgIDwvcmVsZWFzZXM+CisgICAgICAgICAgICA8c25hcHNob3RzPgorICAgICAgICAgICAgICAgIDxlbmFibGVkPmZhbHNlPC9lbmFibGVkPgorICAgICAgICAgICAgPC9zbmFwc2hvdHM+CisgICAgICAgIDwvcmVwb3NpdG9yeT4KKyAgICAgICAgPCEtLSBTY3JpcHRlbmdpbmVzIEdvb2dsZSBNYXZlbiBSZXBvc2l0b3J5LCByZXF1aXJlZCBieSBzY3JpcHRlbmdpbmVzIC0tPgorICAgICAgICA8cmVwb3NpdG9yeT4KKyAgICAgICAgICAgIDxpZD5zY3JpcHRlbmdpbmVzPC9pZD4KKyAgICAgICAgICAgIDxuYW1lPlNjcmlwdGVuZ2luZXMgR29vZ2xlIENvZGUgTWF2ZW4gUmVwb3NpdG9yeTwvbmFtZT4KKyAgICAgICAgICAgIDx1cmw+aHR0cDovL3NjcmlwdGVuZ2luZXMuZ29vZ2xlY29kZS5jb20vc3ZuL20yLXJlcG88L3VybD4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlZD50cnVlPC9lbmFibGVkPgorICAgICAgICAgICAgPC9yZWxlYXNlcz4KKyAgICAgICAgICAgIDxzbmFwc2hvdHM+CisgICAgICAgICAgICAgICAgPGVuYWJsZWQ+ZmFsc2U8L2VuYWJsZWQ+CisgICAgICAgICAgICA8L3NuYXBzaG90cz4KKyAgICAgICAgPC9yZXBvc2l0b3J5PgorICAgICAgICA8IS0tIFNlcnZpY2VNaXggTWF2ZW4gMiByZXBvc2l0b3J5OiBqc21wcCAyLjAgaXMgbm90IGluIGNlbnRyYWwgcmVwbyAtLT4KKyAgICAgICAgPHJlcG9zaXRvcnk+CisgICAgICAgICAgICA8aWQ+c2VydmljZW1peC5tMi1yZXBvPC9pZD4KKyAgICAgICAgICAgIDxuYW1lPlNlcnZpY2VNaXggTWF2ZW4gMiByZXBvc2l0b3J5PC9uYW1lPgorICAgICAgICAgICAgPHVybD5odHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3NlcnZpY2VtaXgvbTItcmVwbzwvdXJsPgorICAgICAgICAgICAgPHJlbGVhc2VzPgorICAgICAgICAgICAgICAgIDxlbmFibGVkPnRydWU8L2VuYWJsZWQ+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICAgICAgPHNuYXBzaG90cz4KKyAgICAgICAgICAgICAgICA8ZW5hYmxlZD5mYWxzZTwvZW5hYmxlZD4KKyAgICAgICAgICAgIDwvc25hcHNob3RzPgorICAgICAgICA8L3JlcG9zaXRvcnk+CisgICAgPC9yZXBvc2l0b3JpZXM+CisKKyAgICA8cHJvcGVydGllcz4KKyAgICAgICAgPHNvbmFyLnNraXBwZWRNb2R1bGVzPmV4YW1wbGVzPC9zb25hci5za2lwcGVkTW9kdWxlcz4KKworICAgICAgICA8IS0tIE9TR2kgKEthcmFmLCBGZWxpeCwgQXJpZXMpIC0tPgorICAgICAgICA8YXJpZXMuYmx1ZXByaW50LnZlcnNpb24+MC4yLWluY3ViYXRpbmc8L2FyaWVzLmJsdWVwcmludC52ZXJzaW9uPgorICAgICAgICA8YXJpZXMuanBhLnZlcnNpb24+MC4yLWluY3ViYXRpbmc8L2FyaWVzLmpwYS52ZXJzaW9uPgorICAgICAgICA8YXJpZXMudXRpbC52ZXJzaW9uPjAuMi1pbmN1YmF0aW5nPC9hcmllcy51dGlsLnZlcnNpb24+CisgICAgICAgIDxhcmllcy50cmFuc2FjdGlvbi52ZXJzaW9uPjAuMi1pbmN1YmF0aW5nPC9hcmllcy50cmFuc2FjdGlvbi52ZXJzaW9uPgorICAgICAgICA8ZmVsaXguZmlsZWluc3RhbGwudmVyc2lvbj4zLjAuMjwvZmVsaXguZmlsZWluc3RhbGwudmVyc2lvbj4KKyAgICAgICAgPGZlbGl4LnByZWZzLnZlcnNpb24+MS4wLjQ8L2ZlbGl4LnByZWZzLnZlcnNpb24+CisgICAgICAgIDxrYXJhZi52ZXJzaW9uPjIuMS4zPC9rYXJhZi52ZXJzaW9uPgorICAgICAgICA8b3NnaS5jb21wZW5kaXVtLnZlcnNpb24+NC4yLjA8L29zZ2kuY29tcGVuZGl1bS52ZXJzaW9uPgorICAgICAgICA8b3NnaS5jb3JlLnZlcnNpb24+NC4yLjA8L29zZ2kuY29yZS52ZXJzaW9uPgorCisgICAgICAgIDwhLS0gQWN0aXZlTVEgLS0+CisgICAgICAgIDxhY3RpdmVtcS52ZXJzaW9uPjUuNC4yPC9hY3RpdmVtcS52ZXJzaW9uPgorCisgICAgICAgIDwhLS0gQ2FtZWwgLS0+CisgICAgICAgIDxjYW1lbC52ZXJzaW9uPjIuNi4wPC9jYW1lbC52ZXJzaW9uPgorCisgICAgICAgIDwhLS0gQ1hGIC0tPgorICAgICAgICA8Y3hmLnhqYy11dGlscy52ZXJzaW9uPjIuMy4yPC9jeGYueGpjLXV0aWxzLnZlcnNpb24+CisgICAgICAgIDxjeGYudmVyc2lvbj4yLjMuMjwvY3hmLnZlcnNpb24+CisKKyAgICAgICAgPCEtLSBHZXJvbmltbyAtLT4KKyAgICAgICAgPGdlcm9uaW1vLWFubm90YXRpb24udmVyc2lvbj4xLjEuMTwvZ2Vyb25pbW8tYW5ub3RhdGlvbi52ZXJzaW9uPgorICAgICAgICA8Z2Vyb25pbW8tY29ubmVjdG9yLnZlcnNpb24+Mi4xLjM8L2dlcm9uaW1vLWNvbm5lY3Rvci52ZXJzaW9uPgorICAgICAgICA8Z2Vyb25pbW8tZWwudmVyc2lvbj4xLjAuMTwvZ2Vyb25pbW8tZWwudmVyc2lvbj4KKyAgICAgICAgPGdlcm9uaW1vLWoyZWUtY29ubmVjdG9yLnZlcnNpb24+Mi4wLjA8L2dlcm9uaW1vLWoyZWUtY29ubmVjdG9yLnZlcnNpb24+CisgICAgICAgIDxnZXJvbmltby1qMmVlLW1hbmFnZW1lbnQudmVyc2lvbj4xLjAuMTwvZ2Vyb25pbW8tajJlZS1tYW5hZ2VtZW50LnZlcnNpb24+CisgICAgICAgIDxnZXJvbmltby1qYXh3cy52ZXJzaW9uPjEuMDwvZ2Vyb25pbW8tamF4d3MudmVyc2lvbj4KKyAgICAgICAgPGdlcm9uaW1vLWptcy52ZXJzaW9uPjEuMS4xPC9nZXJvbmltby1qbXMudmVyc2lvbj4KKyAgICAgICAgPGdlcm9uaW1vLWpwYS52ZXJzaW9uPjEuMTwvZ2Vyb25pbW8tanBhLnZlcnNpb24+CisgICAgICAgIDxnZXJvbmltby1qc3AudmVyc2lvbj4xLjAuMTwvZ2Vyb25pbW8tanNwLnZlcnNpb24+CisgICAgICAgIDxnZXJvbmltby1qdGEudmVyc2lvbj4xLjEuMTwvZ2Vyb25pbW8tanRhLnZlcnNpb24+CisgICAgICAgIDxnZXJvbmltby1zYWFqLnZlcnNpb24+MS4wLjA8L2dlcm9uaW1vLXNhYWoudmVyc2lvbj4KKyAgICAgICAgPGdlcm9uaW1vLXNlcnZsZXQudmVyc2lvbj4xLjA8L2dlcm9uaW1vLXNlcnZsZXQudmVyc2lvbj4KKyAgICAgICAgPGdlcm9uaW1vLXdzLW1ldGFkYXRhLnZlcnNpb24+MS4xLjI8L2dlcm9uaW1vLXdzLW1ldGFkYXRhLnZlcnNpb24+CisgICAgICAgIDxnZXJvbmltby10cmFuc2FjdGlvbi52ZXJzaW9uPjIuMS4zPC9nZXJvbmltby10cmFuc2FjdGlvbi52ZXJzaW9uPgorCisgICAgICAgIDwhLS0gU2VydmljZU1peCBCdW5kbGVzIC0tPgorICAgICAgICA8YWJkZXJhLmJ1bmRsZS52ZXJzaW9uPjAuNC4wLWluY3ViYXRpbmdfNDwvYWJkZXJhLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8YW50LmJ1bmRsZS52ZXJzaW9uPjEuNy4wXzQ8L2FudC5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGFudGxyMi5idW5kbGUudmVyc2lvbj4yLjcuN18zPC9hbnRscjIuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxhbnRsci5idW5kbGUudmVyc2lvbj4zLjAuMV80PC9hbnRsci5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGFudGxyLXJ1bnRpbWUuYnVuZGxlLnZlcnNpb24+My4wLjFfMjwvYW50bHItcnVudGltZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGFvcGFsbGlhbmNlLmJ1bmRsZS52ZXJzaW9uPjEuMF80PC9hb3BhbGxpYW5jZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGFzbS5idW5kbGUudmVyc2lvbj4yLjIuM180PC9hc20uYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxiY2VsLmJ1bmRsZS52ZXJzaW9uPjUuMl8zPC9iY2VsLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8Y2dsaWIuYnVuZGxlLnZlcnNpb24+Mi4xXzNfNjwvY2dsaWIuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxjYXN0b3IuYnVuZGxlLnZlcnNpb24+MS4zLjFfMTwvY2FzdG9yLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8Y29tZXRkLWphdmEtc2VydmVyLmJ1bmRsZS52ZXJzaW9uPjEuMC4xXzI8L2NvbWV0ZC1qYXZhLXNlcnZlci5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGNvbW1vbnMtYmVhbnV0aWxzLmJ1bmRsZS52ZXJzaW9uPjEuOC4yXzE8L2NvbW1vbnMtYmVhbnV0aWxzLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1jb2RlYy5idW5kbGUudmVyc2lvbj4xLjQ8L2NvbW1vbnMtY29kZWMuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLWNvbGxlY3Rpb25zLmJ1bmRsZS52ZXJzaW9uPjMuMi4xXzE8L2NvbW1vbnMtY29sbGVjdGlvbnMuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLWNzdi5idW5kbGUudmVyc2lvbj4xLjAtcjcwNjg5OV80PC9jb21tb25zLWNzdi5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGNvbW1vbnMtaHR0cGNsaWVudC5idW5kbGUudmVyc2lvbj4zLjFfNTwvY29tbW9ucy1odHRwY2xpZW50LmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1pby5idW5kbGUudmVyc2lvbj4xLjRfMTwvY29tbW9ucy1pby5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGNvbW1vbnMtbGFuZy5idW5kbGUudmVyc2lvbj4yLjRfNDwvY29tbW9ucy1sYW5nLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1uZXQuYnVuZGxlLnZlcnNpb24+Mi4yPC9jb21tb25zLW5ldC5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGNvbW1vbnMtcG9vbC5idW5kbGUudmVyc2lvbj4xLjUuNF8yPC9jb21tb25zLXBvb2wuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLXZmcy5idW5kbGUudmVyc2lvbj4xLjBfNTwvY29tbW9ucy12ZnMuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxkb200ai5idW5kbGUudmVyc2lvbj4xLjYuMV8zPC9kb200ai5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGRvemVyLmJ1bmRsZS52ZXJzaW9uPjUuMy4wXzE8L2RvemVyLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8ZHJvb2xzLmJ1bmRsZS52ZXJzaW9uPjUuMS4xXzE8L2Ryb29scy5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGVoY2FjaGUuYnVuZGxlLnZlcnNpb24+Mi4zLjBfMTwvZWhjYWNoZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGZhc3RpbmZvc2V0LmJ1bmRsZS52ZXJzaW9uPjEuMi43XzM8L2Zhc3RpbmZvc2V0LmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8ZmxhdHBhY2suYnVuZGxlLnZlcnNpb24+My4xLjFfNDwvZmxhdHBhY2suYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxmcmVlbWFya2VyLmJ1bmRsZS52ZXJzaW9uPjIuMy4xNV80PC9mcmVlbWFya2VyLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8aGFwaS5idW5kbGUudmVyc2lvbj4wLjUuMV80PC9oYXBpLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8Z3Jvb3Z5LmJ1bmRsZS52ZXJzaW9uPjEuNS42XzQ8L2dyb292eS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGd1aWNleWZydWl0LmJ1bmRsZS52ZXJzaW9uPjIuMF8xPC9ndWljZXlmcnVpdC5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGhpYmVybmF0ZS12YWxpZGF0b3IuYnVuZGxlLnZlcnNpb24+NC4xLjAuRmluYWxfMTwvaGliZXJuYXRlLXZhbGlkYXRvci5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGliYXRpcy1zcWxtYXAuYnVuZGxlLnZlcnNpb24+Mi4zLjQuNzI2XzM8L2liYXRpcy1zcWxtYXAuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxpcmNsaWIuYnVuZGxlLnZlcnNpb24+MS4xMF8zPC9pcmNsaWIuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxpc29yZWxheC5idW5kbGUudmVyc2lvbj4yMDA1MDkxM18zPC9pc29yZWxheC5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGphaW4tc2lwLXJpLmJ1bmRsZS52ZXJzaW9uPjEuMi4xNTRfMTwvamFpbi1zaXAtcmkuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxqYXN5cHQuYnVuZGxlLnZlcnNpb24+MS42XzE8L2phc3lwdC5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpheGIuYXBpLnZlcnNpb24+Mi4yPC9qYXhiLmFwaS52ZXJzaW9uPgorICAgICAgICA8amF4Yi1pbXBsLmJ1bmRsZS52ZXJzaW9uPjIuMi4xLjFfMTwvamF4Yi1pbXBsLmJ1bmRsZS52ZXJzaW9uPiAKKyAgICAgICAgPGpheGVuLmJ1bmRsZS52ZXJzaW9uPjEuMS4xXzE8L2pheGVuLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8amNyLWFwaS5idW5kbGUudmVyc2lvbj4xLjBfMzwvamNyLWFwaS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpkdC1jb3JlLmJ1bmRsZS52ZXJzaW9uPjMuMi4zXzQ8L2pkdC1jb3JlLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8amRvbS5idW5kbGUudmVyc2lvbj4xLjFfMzwvamRvbS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpldHR5LmJ1bmRsZS52ZXJzaW9uPjYuMS4yNV8xPC9qZXR0eS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpldHR5LWNvbWV0ZC5idW5kbGUudmVyc2lvbj42LjEuMjJfMTwvamV0dHktY29tZXRkLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8amV4Y2VsYXBpLmJ1bmRsZS52ZXJzaW9uPjIuNC4yXzM8L2pleGNlbGFwaS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGppbmcuYnVuZGxlLnZlcnNpb24+MjAwMzA2MTlfMzwvamluZy5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpydWJ5LmJ1bmRsZS52ZXJzaW9uPjEuMS4yXzM8L2pydWJ5LmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8am9kYS10aW1lLmJ1bmRsZS52ZXJzaW9uPjEuNS4yXzM8L2pvZGEtdGltZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpvc3FsLmJ1bmRsZS52ZXJzaW9uPjEuNV80PC9qb3NxbC5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpzY2guYnVuZGxlLnZlcnNpb24+MC4xLjQ0XzE8L2pzY2guYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxqc2VuZG5zY2EtY29yZS5idW5kbGUudmVyc2lvbj4xLjMuMV8yPC9qc2VuZG5zY2EtY29yZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPGpzbXBwLmJ1bmRsZS52ZXJzaW9uPjIuMS4wXzI8L2pzbXBwLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8anVlbC5idW5kbGUudmVyc2lvbj4yLjEuMF8zPC9qdWVsLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8anVuaXQuYnVuZGxlLnZlcnNpb24+NC43XzI8L2p1bml0LmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8bHVjZW5lLmJ1bmRsZS52ZXJzaW9uPjMuMC4xXzI8L2x1Y2VuZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPG1pbmEuYnVuZGxlLnZlcnNpb24+MS4xLjdfNDwvbWluYS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPG12ZWwuYnVuZGxlLnZlcnNpb24+Mi4wLjhfNDwvbXZlbC5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPG5lZXRoaS5idW5kbGUudmVyc2lvbj4yLjAuNF8zPC9uZWV0aGkuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxvZ25sLmJ1bmRsZS52ZXJzaW9uPjIuNy4zXzQ8L29nbmwuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxvcGVuanBhLmJ1bmRsZS52ZXJzaW9uPjEuMi4xXzM8L29wZW5qcGEuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxvcGVuc2FtbC5idW5kbGUudmVyc2lvbj4xLjFfNTwvb3BlbnNhbWwuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxvc2NhY2hlLmJ1bmRsZS52ZXJzaW9uPjIuNF80PC9vc2NhY2hlLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8b3Njb3JlLmJ1bmRsZS52ZXJzaW9uPjIuMi40XzQ8L29zY29yZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPG9zd29ya2Zsb3cuYnVuZGxlLnZlcnNpb24+Mi43LjBfNDwvb3N3b3JrZmxvdy5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPG9yby5idW5kbGUudmVyc2lvbj4yLjAuOF80PC9vcm8uYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxwcm9wZXJ0eXNldC5idW5kbGUudmVyc2lvbj4xLjNfNDwvcHJvcGVydHlzZXQuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxwcm90b2J1Zi1qYXZhLmJ1bmRsZS52ZXJzaW9uPjIuMy4wXzE8L3Byb3RvYnVmLWphdmEuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxxcGlkLmJ1bmRsZS52ZXJzaW9uPjAuNS4wXzM8L3FwaWQuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxxdWFydHouYnVuZGxlLnZlcnNpb24+MS44LjNfMjwvcXVhcnR6LmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8cmVnZXhwLmJ1bmRsZS52ZXJzaW9uPjEuM18xPC9yZWdleHAuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxyaGluby5idW5kbGUudmVyc2lvbj4xLjdSMV8zPC9yaGluby5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHJvbWUuYnVuZGxlLnZlcnNpb24+MS4wXzE8L3JvbWUuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxzYWFqLWltcGwuYnVuZGxlLnZlcnNpb24+MS4zLjJfMjwvc2Fhai1pbXBsLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8c2F4b24uYnVuZGxlLnZlcnNpb24+OS4xLjAuOF8xPC9zYXhvbi5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHNjYWxhLWxpYnJhcnkuYnVuZGxlLnZlcnNpb24+Mi44LjBfMTwvc2NhbGEtbGlicmFyeS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHNlcnAuYnVuZGxlLnZlcnNpb24+MS4xMy4xXzM8L3NlcnAuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDxzaGlyby5idW5kbGUudmVyc2lvbj4xLjEuMF8xPC9zaGlyby5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHNtYWNrLmJ1bmRsZS52ZXJzaW9uPjMuMS4wXzI8L3NtYWNrLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8c25tcDRqLmJ1bmRsZS52ZXJzaW9uPjEuOC4xXzQ8L3NubXA0ai5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHN0cmluZ3RlbXBsYXRlLmJ1bmRsZS52ZXJzaW9uPjMuMl80PC9zdHJpbmd0ZW1wbGF0ZS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHRhZ3NvdXAuYnVuZGxlLnZlcnNpb24+MS4yXzQ8L3RhZ3NvdXAuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDx2ZWxvY2l0eS5idW5kbGUudmVyc2lvbj4xLjYuMl80PC92ZWxvY2l0eS5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHdlcmtlbi14cGF0aC5idW5kbGUudmVyc2lvbj4wLjkuNF80PC93ZXJrZW4teHBhdGguYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDx3c2RsNGouYnVuZGxlLnZlcnNpb24+MS42LjJfMzwvd3NkbDRqLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8eGFsYW4uYnVuZGxlLnZlcnNpb24+Mi43LjFfMzwveGFsYW4uYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDx4ZXJjZXMuYnVuZGxlLnZlcnNpb24+Mi45LjFfNDwveGVyY2VzLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8eG1sYmVhbnMuYnVuZGxlLnZlcnNpb24+Mi41LjBfMTwveG1sYmVhbnMuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDx4bWxyZXNvbHZlci5idW5kbGUudmVyc2lvbj4xLjJfMzwveG1scmVzb2x2ZXIuYnVuZGxlLnZlcnNpb24+CisgICAgICAgIDx4bWxzZWMuYnVuZGxlLnZlcnNpb24+MS40LjNfMzwveG1sc2VjLmJ1bmRsZS52ZXJzaW9uPgorICAgICAgICA8eHBwMy5idW5kbGUudmVyc2lvbj4xLjEuNGNfNDwveHBwMy5idW5kbGUudmVyc2lvbj4KKyAgICAgICAgPHhzdHJlYW0uYnVuZGxlLnZlcnNpb24+MS4zXzQ8L3hzdHJlYW0uYnVuZGxlLnZlcnNpb24+CisKKyAgICAgICAgPCEtLSBTZXJ2aWNlTWl4IENvbXBvbmVudHMgYW5kIFJlc291cmNlcyAtLT4KKyAgICAgICAgPHNteDMudmVyc2lvbj4zLjMuMTwvc214My52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC11dGlscy52ZXJzaW9uPjEuNC4wPC9zZXJ2aWNlbWl4LXV0aWxzLnZlcnNpb24+CisgICAgICAgIDxzZXJ2aWNlbWl4LmxlZ2FsLnZlcnNpb24+MS4wPC9zZXJ2aWNlbWl4LmxlZ2FsLnZlcnNpb24+CisgICAgICAgIDxzZXJ2aWNlbWl4Lm5tci52ZXJzaW9uPjEuNC4wPC9zZXJ2aWNlbWl4Lm5tci52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC5zcGVjcy52ZXJzaW9uPjEuNy4wPC9zZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb24+CisKKyAgICAgICAgPHNlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9uPjIwMTEuMDE8L3NlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1iZWFuLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtYmVhbi52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1jYW1lbC52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LWNhbWVsLnZlcnNpb24+CisgICAgICAgIDxzZXJ2aWNlbWl4LWN4Zi1iYy52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LWN4Zi1iYy52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1jeGYtc2UudmVyc2lvbj4ke3NlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9ufTwvc2VydmljZW1peC1jeGYtc2UudmVyc2lvbj4KKyAgICAgICAgPHNlcnZpY2VtaXgtZHJvb2xzLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtZHJvb2xzLnZlcnNpb24+CisgICAgICAgIDxzZXJ2aWNlbWl4LWVpcC52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LWVpcC52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1leGVjLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtZXhlYy52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1maWxlLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtZmlsZS52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1mdHAudmVyc2lvbj4ke3NlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9ufTwvc2VydmljZW1peC1mdHAudmVyc2lvbj4KKyAgICAgICAgPHNlcnZpY2VtaXgtaHR0cC52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LWh0dHAudmVyc2lvbj4KKyAgICAgICAgPHNlcnZpY2VtaXgtam1zLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtam1zLnZlcnNpb24+CisgICAgICAgIDxzZXJ2aWNlbWl4LWpzcjE4MS52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LWpzcjE4MS52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1tYWlsLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtbWFpbC52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1vc3dvcmtmbG93LnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtb3N3b3JrZmxvdy52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1xdWFydHoudmVyc2lvbj4ke3NlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9ufTwvc2VydmljZW1peC1xdWFydHoudmVyc2lvbj4KKyAgICAgICAgPHNlcnZpY2VtaXgtc2F4b24udmVyc2lvbj4ke3NlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9ufTwvc2VydmljZW1peC1zYXhvbi52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1zY3JpcHQudmVyc2lvbj4ke3NlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9ufTwvc2VydmljZW1peC1zY3JpcHQudmVyc2lvbj4KKyAgICAgICAgPHNlcnZpY2VtaXgtc2NyaXB0aW5nLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtc2NyaXB0aW5nLnZlcnNpb24+CisgICAgICAgIDxzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1zbXBwLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtc21wcC52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC1zbm1wLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtc25tcC52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC10cnVlemlwLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtdHJ1ZXppcC52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC12YWxpZGF0aW9uLnZlcnNpb24+JHtzZXJ2aWNlbWl4LmNvbXBvbmVudHMudmVyc2lvbn08L3NlcnZpY2VtaXgtdmFsaWRhdGlvbi52ZXJzaW9uPgorICAgICAgICA8c2VydmljZW1peC12ZnMudmVyc2lvbj4ke3NlcnZpY2VtaXguY29tcG9uZW50cy52ZXJzaW9ufTwvc2VydmljZW1peC12ZnMudmVyc2lvbj4KKyAgICAgICAgPHNlcnZpY2VtaXgtd3NuMjAwNS52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LXdzbjIwMDUudmVyc2lvbj4KKyAgICAgICAgPHNlcnZpY2VtaXgteG1wcC52ZXJzaW9uPiR7c2VydmljZW1peC5jb21wb25lbnRzLnZlcnNpb259PC9zZXJ2aWNlbWl4LXhtcHAudmVyc2lvbj4KKworICAgICAgICA8IS0tIFBBWCAtLT4KKyAgICAgICAgPHBheC51cmwudmVyc2lvbj4xLjIuMTwvcGF4LnVybC52ZXJzaW9uPgorICAgICAgICA8cGF4LndlYi52ZXJzaW9uPjAuNy40PC9wYXgud2ViLnZlcnNpb24+CisKKyAgICAgICAgPCEtLSBTcHJpbmcgLS0+CisgICAgICAgIDxzcHJpbmcudmVyc2lvbj4zLjAuNS5SRUxFQVNFPC9zcHJpbmcudmVyc2lvbj4KKyAgICAgICAgPHNwcmluZy5vc2dpLnZlcnNpb24+MS4yLjA8L3NwcmluZy5vc2dpLnZlcnNpb24+CisKKyAgICAgICAgPCEtLSBPREUgLS0+CisgICAgICAgIDxvZGUudmVyc2lvbj4xLjMuNTwvb2RlLnZlcnNpb24+CisKKyAgICAgICAgPCEtLSBNYXZlbiBQbHVnaW5zIC0tPgorICAgICAgICA8ZGVwZW5kcy1tYXZlbi1wbHVnaW4udmVyc2lvbj4xLjI8L2RlcGVuZHMtbWF2ZW4tcGx1Z2luLnZlcnNpb24+CisgICAgICAgIDxqYmktbWF2ZW4tcGx1Z2luLnZlcnNpb24+NC40PC9qYmktbWF2ZW4tcGx1Z2luLnZlcnNpb24+CisgICAgICAgIDxtYXZlbi1hbnRydW4tcGx1Z2luLnZlcnNpb24+MS4yPC9tYXZlbi1hbnRydW4tcGx1Z2luLnZlcnNpb24+CisgICAgICAgIDxtYXZlbi1hc3NlbWJseS1wbHVnaW4udmVyc2lvbj4yLjItYmV0YS00PC9tYXZlbi1hc3NlbWJseS1wbHVnaW4udmVyc2lvbj4KKyAgICAgICAgPG1hdmVuLWJ1bmRsZS1wbHVnaW4udmVyc2lvbj4yLjEuMDwvbWF2ZW4tYnVuZGxlLXBsdWdpbi52ZXJzaW9uPgorCisgICAgICAgIDwhLS0gT3RoZXIgRGVwZW5kZW5jaWVzIC0tPgorICAgICAgICA8YXhpb20udmVyc2lvbj4xLjIuODwvYXhpb20udmVyc2lvbj4KKyAgICAgICAgPGJvdW5jeWNhc3RsZS52ZXJzaW9uPjE0MDwvYm91bmN5Y2FzdGxlLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLWRiY3AudmVyc2lvbj4xLjM8L2NvbW1vbnMtZGJjcC52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1leGVjLnZlcnNpb24+MS4wLjE8L2NvbW1vbnMtZXhlYy52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1qZXhsLnZlcnNpb24+Mi4wLjE8L2NvbW1vbnMtamV4bC52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1qeHBhdGgudmVyc2lvbj4xLjM8L2NvbW1vbnMtanhwYXRoLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLWxvZ2dpbmcudmVyc2lvbj4xLjEuMTwvY29tbW9ucy1sb2dnaW5nLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLW1hbmFnZW1lbnQudmVyc2lvbj4xLjA8L2NvbW1vbnMtbWFuYWdlbWVudC52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1uZXQudmVyc2lvbj4ke2NvbW1vbnMtbmV0LmJ1bmRsZS52ZXJzaW9ufTwvY29tbW9ucy1uZXQudmVyc2lvbj4KKyAgICAgICAgPGRlcmJ5LnZlcnNpb24+MTAuNS4zLjBfMTwvZGVyYnkudmVyc2lvbj4KKyAgICAgICAgPGRyb29scy52ZXJzaW9uPjUuMS4xPC9kcm9vbHMudmVyc2lvbj4KKyAgICAgICAgPGVhc3ltb2NrLnZlcnNpb24+Mi40PC9lYXN5bW9jay52ZXJzaW9uPgorICAgICAgICA8Z3Jvb3Z5LnZlcnNpb24+MS43LjU8L2dyb292eS52ZXJzaW9uPgorICAgICAgICA8aGF3dGJ1Zi52ZXJzaW9uPjEuMjwvaGF3dGJ1Zi52ZXJzaW9uPgorICAgICAgICA8aGF3dGRiLnZlcnNpb24+MS41PC9oYXd0ZGIudmVyc2lvbj4KKyAgICAgICAgPGh0dHBjb21wb25lbnRzLnZlcnNpb24+NC4wLjE8L2h0dHBjb21wb25lbnRzLnZlcnNpb24+CisgICAgICAgIDxqYWNrcmFiYml0LnZlcnNpb24+MS41LjM8L2phY2tyYWJiaXQudmVyc2lvbj4KKyAgICAgICAgPGphY2tzb24udmVyc2lvbj4xLjYuMDwvamFja3Nvbi52ZXJzaW9uPgorICAgICAgICA8amF4cC1yaS52ZXJzaW9uPjEuNC40PC9qYXhwLXJpLnZlcnNpb24+CisgICAgICAgIDxqYXh3cy1hcGkudmVyc2lvbj4yLjI8L2pheHdzLWFwaS52ZXJzaW9uPgorICAgICAgICA8amF4cnMuYXBpLnZlcnNpb24+MS4xPC9qYXhycy5hcGkudmVyc2lvbj4KKyAgICAgICAgPGphdmFzc2lzdC52ZXJzaW9uPjMuOS4wLkdBPC9qYXZhc3Npc3QudmVyc2lvbj4KKyAgICAgICAgPGphdmF4Lm1haWwudmVyc2lvbj4xLjQuMzwvamF2YXgubWFpbC52ZXJzaW9uPgorICAgICAgICA8amV0dHkudmVyc2lvbj43LjIuMi52MjAxMDEyMDU8L2pldHR5LnZlcnNpb24+CisgICAgICAgIDxqZXR0aXNvbi52ZXJzaW9uPjEuMjwvamV0dGlzb24udmVyc2lvbj4KKyAgICAgICAgPGp1bml0LnZlcnNpb24+NC43PC9qdW5pdC52ZXJzaW9uPgorICAgICAgICA8bG9nNGoudmVyc2lvbj4xLjIuMTY8L2xvZzRqLnZlcnNpb24+CisgICAgICAgIDxsaW5nby52ZXJzaW9uPjEuMzwvbGluZ28udmVyc2lvbj4KKyAgICAgICAgPG5ldHR5LnZlcnNpb24+My4yLjMuRmluYWxfMTwvbmV0dHkudmVyc2lvbj4KKyAgICAgICAgPG9wZW5qcGEudmVyc2lvbj4yLjAuMDwvb3BlbmpwYS52ZXJzaW9uPgorICAgICAgICA8b3BlbnNhbWwudmVyc2lvbj4xLjE8L29wZW5zYW1sLnZlcnNpb24+CisgICAgICAgIDxyZXN0bGV0LnZlcnNpb24+MS4xLjEwPC9yZXN0bGV0LnZlcnNpb24+CisgICAgICAgIDxzY3JpcHRlbmdpbmVzLnZlcnNpb24+MS4xPC9zY3JpcHRlbmdpbmVzLnZlcnNpb24+CisgICAgICAgIDx0cmFucWwudmVyc2lvbj4xLjY8L3RyYW5xbC52ZXJzaW9uPgorICAgICAgICA8d29vZHN0b3gudmVyc2lvbj40LjAuODwvd29vZHN0b3gudmVyc2lvbj4KKyAgICAgICAgPHdvb2RzdG94LnN0YXgyLWFwaS52ZXJzaW9uPjMuMC4yPC93b29kc3RveC5zdGF4Mi1hcGkudmVyc2lvbj4KKyAgICAgICAgPHdzczRqLnZlcnNpb24+MS41Ljk8L3dzczRqLnZlcnNpb24+CisgICAgICAgIDx4YmVhbi52ZXJzaW9uPjMuNzwveGJlYW4udmVyc2lvbj4KKyAgICAgICAgPHhmaXJlLnZlcnNpb24+MS4wLjE8L3hmaXJlLnZlcnNpb24+CisgICAgICAgIDx4bWxzY2hlbWEudmVyc2lvbj4xLjQuNzwveG1sc2NoZW1hLnZlcnNpb24+CisgICAgPC9wcm9wZXJ0aWVzPgorCisgICAgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PgorICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgCisgICAgICAgICAgIDwhLS0gS2FyYWYgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5rYXJhZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFwYWNoZS1rYXJhZjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7a2FyYWYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICA8dHlwZT50YXIuZ3o8L3R5cGU+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmthcmFmPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLWthcmFmPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtrYXJhZi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgIDx0eXBlPnppcDwvdHlwZT4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUua2FyYWY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUta2FyYWY8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2thcmFmLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgPHR5cGU+eG1sPC90eXBlPgorICAgICAgICAgICAgICAgPGNsYXNzaWZpZXI+ZmVhdHVyZXM8L2NsYXNzaWZpZXI+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmthcmFmLmRlcGxveWVyPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5rYXJhZi5kZXBsb3llci53YXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2thcmFmLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5rYXJhZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUua2FyYWYubWFuYWdlbWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7a2FyYWYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmthcmFmPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5rYXJhZi5tYWluPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtrYXJhZi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUua2FyYWYuamFhczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUua2FyYWYuamFhcy5ib290PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtrYXJhZi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAKKyAgICAgICAgICAgPCEtLSBPU0dpIGFuZCBGZWxpeCAtLT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5mZWxpeC5maWxlaW5zdGFsbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7ZmVsaXguZmlsZWluc3RhbGwudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmZlbGl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5mZWxpeC5wcmVmczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7ZmVsaXgucHJlZnMudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3NnaTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5vc2dpLmNvbXBlbmRpdW08L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke29zZ2kuY29tcGVuZGl1bS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5vc2dpPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLm9zZ2kuY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7b3NnaS5jb3JlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgCisgICAgICAgICAgIDwhLS0gU2VydmljZU1peCBOTVIgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmRvY3VtZW50PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmRvY3VtZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5qYmk8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguamJpLnJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgubm1yLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFwYWNoZS1zZXJ2aWNlbWl4LW5tcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx0eXBlPnRhci5nejwvdHlwZT4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC5ubXIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLXNlcnZpY2VtaXgtbm1yPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHR5cGU+emlwPC90eXBlPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUtc2VydmljZW1peC1ubXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgubm1yLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgPHR5cGU+eG1sPC90eXBlPgorICAgICAgICAgICAgICAgICAgPGNsYXNzaWZpZXI+ZmVhdHVyZXM8L2NsYXNzaWZpZXI+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLmFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC5ubXIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXI8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yLm1hbmFnZW1lbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgubm1yLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5ubXIub3NnaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC5ubXIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgubm1yPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4Lm5tci5zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgubm1yLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnBsYXRmb3JtLnRlc3Rpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXgucGxhdGZvcm0udGVzdGluZy5zdXBwb3J0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4Lm5tci52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAKKyAgICAgICAgICAgPCEtLSBTZXJ2aWNlTWl4IFNwZWNzIC0tPgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5hY3RpdmF0aW9uLWFwaS0xLjE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamF4Yi1hcGktJHtqYXhiLmFwaS52ZXJzaW9ufTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5zcGVjcy5qYXh3cy1hcGktJHtqYXh3cy1hcGkudmVyc2lvbn08L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuamJpLWFwaS0xLjA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuanNyMzExLWFwaS0xLjA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3MuanNyMzExLWFwaS0xLjE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXguc3BlY3MudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguc3BlY3Muc2Fhai1hcGktMS4zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnNjcmlwdGluZy1hcGktMS4wPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LnNwZWNzLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnNwZWNzLnN0YXgtYXBpLTEuMDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC5zcGVjcy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAKKyAgICAgICAgICAgPCEtLSBTZXJ2aWNlTWl4IENvbXBvbmVudHMgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1iZWFuPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LWJlYW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWNhbWVsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LWNhbWVsLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1jb21tb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1jeGYtYmM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtY3hmLWJjLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1jeGYtc2U8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtY3hmLXNlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1kcm9vbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtZHJvb2xzLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1laXA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtZWlwLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1leGVjPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LWV4ZWMudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LWZpbGU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtZmlsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtZnRwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LWZ0cC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtaHR0cDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC1odHRwLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1qbXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtam1zLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1qc3IxODE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtanNyMTgxLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1tYWlsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LW1haWwudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LW9zd29ya2Zsb3c8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtb3N3b3JrZmxvdy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtcXVhcnR6PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LXF1YXJ0ei52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtc2F4b248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtc2F4b24udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXNjcmlwdGluZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC1zY3JpcHRpbmcudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXNtcHA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtc21wcC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtc25tcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC1zbm1wLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC1zb2FwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LXNoYXJlZC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtc29hcDI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtc2hhcmVkLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZW1peC12YWxpZGF0aW9uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LXZhbGlkYXRpb24udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXZmczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2VydmljZW1peC12ZnMudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlbWl4LXdzbjIwMDU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtd3NuMjAwNS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAKKyAgICAgICAgICAgPCEtLSBTZXJ2aWNlTWl4IENvcmUsIFV0aWxzIC0tPgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c214My52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VtaXgtdXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NlcnZpY2VtaXgtdXRpbHMudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgCisgICAgICAgICAgIDwhLS0gQWN0aXZlTVEgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWJsdWVwcmludDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YWN0aXZlbXEudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29uc29sZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YWN0aXZlbXEudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YWN0aXZlbXEudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEta2FyYWY8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2FjdGl2ZW1xLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWthcmFmPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHthY3RpdmVtcS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgIDx0eXBlPnhtbDwvdHlwZT4KKyAgICAgICAgICAgICAgIDxjbGFzc2lmaWVyPmZlYXR1cmVzPC9jbGFzc2lmaWVyPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLXBvb2w8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2FjdGl2ZW1xLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLXJhPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHthY3RpdmVtcS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5rYWhhZGI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2FjdGl2ZW1xLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIAorICAgICAgICAgICA8IS0tIEFyaWVzIC0tPgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYXJpZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLmFyaWVzLnV0aWw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2FyaWVzLnV0aWwudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFyaWVzLnRyYW5zYWN0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5hcmllcy50cmFuc2FjdGlvbi5tYW5hZ2VyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHthcmllcy50cmFuc2FjdGlvbi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAKKyAgICAgICAgICAgPCEtLSBDYW1lbCAtLT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNhbWVsPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWwtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y2FtZWwudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNhbWVsPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2FtZWwtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y2FtZWwudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICA8dHlwZT50ZXN0LWphcjwvdHlwZT4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY2FtZWw8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC1jeGY8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NhbWVsLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLWh0dHA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NhbWVsLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLWpldHR5PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjYW1lbC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY2FtZWw8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jYW1lbC1zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NhbWVsLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jYW1lbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNhbWVsLXRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NhbWVsLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIAorICAgICAgICAgICA8IS0tIENYRiAtLT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1idW5kbGU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2N4Zi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLWNvbW1vbi11dGlsaXRpZXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2N4Zi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LWZyb250ZW5kLWpheHdzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjeGYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC10cmFuc3BvcnRzLWh0dHA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2N4Zi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXRlc3R1dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y3hmLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtcnQtYmluZGluZ3MtamJpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjeGYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC10cmFuc3BvcnRzLWh0dHAtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2N4Zi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LXRyYW5zcG9ydHMtamJpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjeGYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC13cy1hZGRyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjeGYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmN4ZjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1ydC13cy1wb2xpY3k8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2N4Zi52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3hmPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y3hmLXJ0LXdzLXJtPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjeGYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgCisgICAgICAgICAgIDwhLS0gR2Vyb25pbW8gLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWFubm90YXRpb25fMS4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dlcm9uaW1vLWFubm90YXRpb24udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tajJlZS1jb25uZWN0b3JfMS41X3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dlcm9uaW1vLWoyZWUtY29ubmVjdG9yLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWoyZWUtbWFuYWdlbWVudF8xLjFfc3BlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Z2Vyb25pbW8tajJlZS1tYW5hZ2VtZW50LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWpheHdzXzIuMl9zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtnZXJvbmltby1qYXh3cy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dlcm9uaW1vLWptcy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qcGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dlcm9uaW1vLWpwYS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qdGFfMS4xX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dlcm9uaW1vLWp0YS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1zYWFqXzEuM19zcGVjPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtnZXJvbmltby1zYWFqLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXNlcnZsZXRfMy4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dlcm9uaW1vLXNlcnZsZXQudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8td3MtbWV0YWRhdGFfMi4wX3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dlcm9uaW1vLXdzLW1ldGFkYXRhLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgICAgPCEtLSBPREUgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5vZGU8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vZGUtamJpLWthcmFmPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtvZGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICA8dHlwZT54bWw8L3R5cGU+CisgICAgICAgICAgICAgICA8Y2xhc3NpZmllcj5mZWF0dXJlczwvY2xhc3NpZmllcj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUub2RlPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2RlLWpiaS1rYXJhZjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7b2RlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIAorICAgICAgICAgICA8IS0tIFBBWCBVUkwgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9wczRqLnBheC51cmw8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYXgtdXJsLXdhcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cGF4LnVybC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAKKyAgICAgICAgICAgPCEtLSBQQVggV2ViIC0tPgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5vcHM0ai5wYXgud2ViPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+cGF4LXdlYi1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BheC53ZWIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LndlYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC13ZWItZXh0ZW5kZXItd2FyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwYXgud2ViLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9wczRqLnBheC53ZWI8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYXgtd2ViLWV4dGVuZGVyLXdoaXRlYm9hcmQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BheC53ZWIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LndlYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC13ZWItamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BheC53ZWIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LndlYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC13ZWItanNwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwYXgud2ViLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm9wczRqLnBheC53ZWI8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wYXgtd2ViLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BheC53ZWIudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3BzNGoucGF4LndlYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnBheC13ZWItc3BpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwYXgud2ViLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIAorICAgICAgICAgICA8IS0tIFNwcmluZyAtLT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWFzbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3ByaW5nLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1hb3A8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NwcmluZy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYmVhbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NwcmluZy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctY29udGV4dDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3ByaW5nLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1jb250ZXh0LXN1cHBvcnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NwcmluZy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3ByaW5nLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1leHByZXNzaW9uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzcHJpbmcudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWptczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3ByaW5nLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy10ZXN0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzcHJpbmcudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLXR4PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzcHJpbmcudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgCisgICAgICAgICAgIDwhLS0gU3ByaW5nIE9TR2kgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5vc2dpPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLW9zZ2ktY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3ByaW5nLm9zZ2kudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2k8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctb3NnaS1leHRlbmRlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3ByaW5nLm9zZ2kudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLm9zZ2k8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctb3NnaS1pbzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3ByaW5nLm9zZ2kudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAKKyAgICAgICAgICAgPCEtLSBTZXJ2aWNlTWl4IEJ1bmRsZXMgLS0+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5hYmRlcmE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2FiZGVyYS5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YW50LmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50bHI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2FudGxyLmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYW50bHItcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YW50bHItcnVudGltZS5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFvcGFsbGlhbmNlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHthb3BhbGxpYW5jZS5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmFzbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXNtLmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuYmNlbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YmNlbC5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNnbGliPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjZ2xpYi5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtYmVhbnV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLWJlYW51dGlscy5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNvZGVjPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2RlYzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29tbW9ucy1jb2RlYy5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtY29sbGVjdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMtY29sbGVjdGlvbnMuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLWxhbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMtbGFuZy5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmNvbW1vbnMtaHR0cGNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29tbW9ucy1odHRwY2xpZW50LmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbmV0PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1uZXQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMtbmV0LmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuY29tbW9ucy1wb29sPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLXBvb2wuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5jb21tb25zLXZmczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29tbW9ucy12ZnMuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5kcm9vbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2Ryb29scy5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmZhc3RpbmZvc2V0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtmYXN0aW5mb3NldC5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmdyb292eTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Z3Jvb3Z5LmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuamFzeXB0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtqYXN5cHQuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qYXhiLWltcGw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2pheGItaW1wbC5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLmpkb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2pkb20uYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qZHQtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7amR0LWNvcmUuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qZXR0eTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7amV0dHkuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qb3NxbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7am9zcWwuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qcnVieTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7anJ1YnkuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5qc21wcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7anNtcHAuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5tdmVsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHttdmVsLmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMubmVldGhpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtuZWV0aGkuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcGVuc2FtbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7b3BlbnNhbWwuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5vcm88L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke29yby5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLm9zY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7b3Njb3JlLmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMub3N3b3JrZmxvdzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7b3N3b3JrZmxvdy5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnByb3BlcnR5c2V0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9wZXJ0eXNldC5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnF1YXJ0ejwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cXVhcnR6LmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5yaGlubzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3JoaW5vLmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMuc2Fhai1pbXBsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzYWFqLWltcGwuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zYXhvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c2F4b24uYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy5zbm1wNGo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NubXA0ai5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLnZlbG9jaXR5PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHt2ZWxvY2l0eS5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzLndzZGw0ajwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7d3NkbDRqLmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGFsYW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3hhbGFuLmJ1bmRsZS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5idW5kbGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXMueGVyY2VzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHt4ZXJjZXMuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxiZWFuczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7eG1sYmVhbnMuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxyZXNvbHZlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7eG1scmVzb2x2ZXIuYnVuZGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LmJ1bmRsZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcmcuYXBhY2hlLnNlcnZpY2VtaXguYnVuZGxlcy54bWxzZWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3htbHNlYy5idW5kbGUudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgCisgICAgICAgICAgIDwhLS0gT3RoZXIgRGVwZW5kZW5jaWVzIC0tPgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPmJvdW5jeWNhc3RsZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmJjcHJvdi1qZGsxNDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Ym91bmN5Y2FzdGxlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5jb2RlLnNjcmlwdGVuZ2luZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zY3JpcHRlbmdpbmVzLWphdmFzY3JpcHQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NjcmlwdGVuZ2luZXMudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuc2NyaXB0ZW5naW5lczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNjcmlwdGVuZ2luZXMtanJ1Ynk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NjcmlwdGVuZ2luZXMudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuc2NyaXB0ZW5naW5lczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNjcmlwdGVuZ2luZXMtZ3Jvb3Z5PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzY3JpcHRlbmdpbmVzLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnN1bi54bWwucGFyc2VyczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheHAtcmk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2pheHAtcmkudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWxvZ2dpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxvZ2dpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMtbG9nZ2luZy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4Lm1haWw8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYWlsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtqYXZheC5tYWlsLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLndzPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4d3MtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtqYXh3cy1hcGkudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtqdW5pdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPmxvZzRqPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9nNGo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2xvZzRqLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jb21tb25zPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1qZXhsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLWpleGwudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuc2NoZW1hPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+WG1sU2NoZW1hPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHt4bWxzY2hlbWEudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuYXhpb208L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5heGlvbS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2F4aW9tLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS53cy5jb21tb25zLmF4aW9tPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXhpb20taW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXhpb20udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLnNlY3VyaXR5PC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3NzNGo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3dzczRqLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS54YmVhbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnhiZWFuLWJsdWVwcmludDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7eGJlYW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnhiZWFuPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+eGJlYW4tY2xhc3Nsb2FkZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3hiZWFuLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS54YmVhbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnhiZWFuLXNwcmluZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7eGJlYW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMuamV0dGlzb248L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qZXR0aXNvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7amV0dGlzb24udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53b29kc3RveC1jb3JlLWFzbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7d29vZHN0b3gudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4Mi1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3dvb2RzdG94LnN0YXgyLWFwaS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5kcm9vbHM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5kcm9vbHMtY29tcGlsZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2Ryb29scy52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lYXN5bW9jazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmVhc3ltb2NrY2xhc3NleHRlbnNpb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2Vhc3ltb2NrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmZ1c2Vzb3VyY2UuY29tbW9ubWFuPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1tYW5hZ2VtZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLW1hbmFnZW1lbnQudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubG9naWNibGF6ZS5saW5nbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmxpbmdvPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgPHZlcnNpb24+JHtsaW5nby52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDxncm91cElkPnhmaXJlPC9ncm91cElkPgorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3BlbnNhbWw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3hmaXJlLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgPC9kZXBlbmRlbmN5TWFuYWdlbWVudD4KKworICAgIDxidWlsZD4KKyAgICAgICAgPGRlZmF1bHRHb2FsPmluc3RhbGw8L2RlZmF1bHRHb2FsPgorCisgICAgICAgIDxwbHVnaW5NYW5hZ2VtZW50PgorICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN4Zi1jb2RlZ2VuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjeGYudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1yZWxlYXNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJlcGFyYXRpb25Hb2Fscz5jbGVhbiBpbnN0YWxsPC9wcmVwYXJhdGlvbkdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPmRlcGxveTwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPi1QcmVsZWFzZSxkZXBsb3k8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhdXRvVmVyc2lvblN1Ym1vZHVsZXM+dHJ1ZTwvYXV0b1ZlcnNpb25TdWJtb2R1bGVzPgorICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zZXJ2aWNlbWl4LnRvb2xpbmc8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmRlcGVuZHMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2RlcGVuZHMtbWF2ZW4tcGx1Z2luLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC50b29saW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYmktbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2piaS1tYXZlbi1wbHVnaW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5mZWxpeDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHttYXZlbi1idW5kbGUtcGx1Z2luLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+MS41PC9zb3VyY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuNTwvdGFyZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG1heG1lbT4yNTZNPC9tYXhtZW0+CisgICAgICAgICAgICAgICAgICAgICAgICA8Zm9yaz4ke2NvbXBpbGVyLmZvcmt9PC9mb3JrPgorICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1pZGVhLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkb3dubG9hZFNvdXJjZXM+dHJ1ZTwvZG93bmxvYWRTb3VyY2VzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRvd25sb2FkSmF2YWRvY3M+dHJ1ZTwvZG93bmxvYWRKYXZhZG9jcz4KKyAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjMuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFzc2VtYmx5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHttYXZlbi1hc3NlbWJseS1wbHVnaW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke21hdmVuLWFudHJ1bi1wbHVnaW4udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5hbnQtY29udHJpYjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hbnQtY29udHJpYjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjBiMzwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmFudDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hbnQtb3B0aW9uYWw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS41LjMtMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvYmVydHVyYS1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5idWlsZC1oZWxwZXItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjU8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgPC9wbHVnaW5NYW5hZ2VtZW50PgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmNvcHktbGVnYWw8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Y29weTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc2VydmljZW1peC5sZWdhbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmxlZ2FsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzZXJ2aWNlbWl4LmxlZ2FsLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGU+eG1sPC90eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT50YXJnZXQvbGVnYWwvPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaXBWZXJzaW9uPnRydWU8L3N0cmlwVmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXJlbW90ZS1yZXNvdXJjZXMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5wcm9jZXNzPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXNvdXJjZUJ1bmRsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXNvdXJjZUJ1bmRsZT5vcmcuYXBhY2hlOmFwYWNoZS1qYXItcmVzb3VyY2UtYnVuZGxlOjEuNDwvcmVzb3VyY2VCdW5kbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXNvdXJjZUJ1bmRsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1cHBsZW1lbnRhbE1vZGVscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1cHBsZW1lbnRhbE1vZGVsPnRhcmdldC9sZWdhbC9sZWdhbC54bWw8L3N1cHBsZW1lbnRhbE1vZGVsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VwcGxlbWVudGFsTW9kZWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkTGljZW5zZT50cnVlPC9hZGRMaWNlbnNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkQXJ0aWZhY3Q+dHJ1ZTwvYWRkQXJ0aWZhY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0TmFtZT5BcGFjaGUgU2VydmljZU1peDwvcHJvamVjdE5hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKyAgICA8cmVwb3J0aW5nPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMzwvdmVyc2lvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tanhyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjA8L3ZlcnNpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvcmVwb3J0aW5nPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5mYXN0aW5zdGFsbDwvaWQ+CisgICAgICAgICAgICA8cHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICA8bWF2ZW4udGVzdC5za2lwPnRydWU8L21hdmVuLnRlc3Quc2tpcD4KKyAgICAgICAgICAgIDwvcHJvcGVydGllcz4KKyAgICAgICAgPC9wcm9maWxlPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5yYXQ8L2lkPgorICAgICAgICAgICAgPGJ1aWxkPgorICAgICAgICAgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5yYXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUtcmF0LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjAuNjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52ZXJpZnk8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jaGVjazwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRGaWxlPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9LyR7cHJvamVjdC5idWlsZC5maW5hbE5hbWV9LnJhdDwvcmVwb3J0RmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZVN1YlByb2plY3RzPmZhbHNlPC9leGNsdWRlU3ViUHJvamVjdHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvKiovKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJREVBIGZpbGVzIC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLmltbDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi5pcHI8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouaXdzPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVjbGlwc2UgZmlsZXMgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9lY2xpcHNlLWNsYXNzZXMvKiovKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovZGVwZW5kZW5jeS1yZWR1Y2VkLXBvbS54bWw8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmFzc2VtYmx5L3NyYy9tYWluL2Rpc3RyaWJ1dGlvbi90ZXh0L2xpY2Vuc2VzLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5jeGYvY3hmLXRyYW5zcG9ydC1ubXIvc3JjL21haW4vYnVpbGQtcmVzb3VyY2VzL3dzZGwuKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgICAgICAgICA8L2J1aWxkPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgICAgIAorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5yZWxlYXNlPC9pZD4KKyAgICAgICAgICAgIDxidWlsZD4KKyAgICAgICAgICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSBXZSB3YW50IHRvIGRlcGxveSB0aGUgYXJ0aWZhY3QgdG8gYSBzdGFnaW5nIGxvY2F0aW9uIGZvciBwZXJ1c2FsIC0tPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGluaGVyaXRlZD50cnVlPC9pbmhlcml0ZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBsb3ktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4zPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwZGF0ZVJlbGVhc2VJbmZvPnRydWU8L3VwZGF0ZVJlbGVhc2VJbmZvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSBXZSB3YW50IHRvIHNpZ24gdGhlIGFydGlmYWN0LCB0aGUgUE9NLCBhbmQgYWxsIGF0dGFjaGVkIGFydGlmYWN0cyAtLT4KKyAgICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWdwZy1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjAtYWxwaGEtNDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNpZ248L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgICAgIDwvYnVpbGQ+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICAgICAgCisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPnNldHVwLmVjbGlwc2U8L2lkPgorICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5hc3NlbWJseTwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICAgICAgPHByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgPGVjbGlwc2Uud29ya3NwYWNlLmRpcj4ke2Jhc2VkaXJ9Ly4uL3dvcmtzcGFjZTwvZWNsaXBzZS53b3Jrc3BhY2UuZGlyPgorICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICAgICAgPGJ1aWxkPgorICAgICAgICAgICAgICAgIDxkZWZhdWx0R29hbD5lY2xpcHNlOmVjbGlwc2U8L2RlZmF1bHRHb2FsPgorICAgICAgICAgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZWNsaXBzZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5oZXJpdGVkPmZhbHNlPC9pbmhlcml0ZWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+c2V0dXAuZWNsaXBzZS53b3Jrc3BhY2U8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy10ZXN0LXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hZGQtbWF2ZW4tcmVwbzwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d29ya3NwYWNlPiR7ZWNsaXBzZS53b3Jrc3BhY2UuZGlyfTwvd29ya3NwYWNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgICAgIDwvYnVpbGQ+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICAgICAgCisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmRlcGxveTwvaWQ+CisgICAgICAgICAgICA8YnVpbGQ+CisgICAgICAgICAgICAgICAgPGRlZmF1bHRHb2FsPmRlcGxveTwvZGVmYXVsdEdvYWw+CisgICAgICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLjQ8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+YXR0YWNoLXNvdXJjZXM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5qYXI8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+YXR0YWNoLWphdmFkb2NzPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+amFyPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgICAgICAgICA8L2J1aWxkPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgICAgIAorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5pYm1qZGs8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8bmFtZT5qYXZhLnZlbmRvcjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPHZhbHVlPklCTSBDb3Jwb3JhdGlvbjwvdmFsdWU+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxidWlsZD4KKyAgICAgICAgICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgICAgICAgICAgPCEtLSBOZWVkIHRvIGFkZCBhIHhlcmNlcyBkZXBlbmRlbmN5IHRvIGN4Zi1jb2RlZ2VuLXBsdWdpbiB3aGVuIHVzaW5nIAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlibSBqZGsgdG8gd29yayBhcm91bmQgZXJyb3I6IG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuRFZGYWN0b3J5RXhjZXB0aW9uOiAKKyAgICAgICAgICAgICAgICAgICAgICAgIERURCBmYWN0b3J5IGNsYXNzIG9yZy5hcGFjaGUueGVyY2VzLmltcGwuZHYuZHRkLkRURERWRmFjdG9yeUltcGwgZG9lcyBub3QgCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQgZnJvbSBEVEREVkZhY3RvcnkuIENhbiByZW1vdmUgdGhpcyB3aGVuIHdlIHVwZ3JhZGUgdG8gYSBjeGYudmVyc2lvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGluY2x1ZGVzIHRoaXMgaW4gdGhlIGN4Zi1jb2RlZ2VuLXBsdWdpbiBwb20uIC0tPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jeGY8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jeGYtY29kZWdlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD54ZXJjZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnhlcmNlc0ltcGw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgICAgICAgICA8L2J1aWxkPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKworPC9wcm9qZWN0Pgo=