ZGlmZiAtLWdpdCBhL3N5c21sMTQvZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL3N5c21sMTQvZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBkMmM5MzE4Li4xZWNlN2Q1IDEwMDY0NAotLS0gYS9zeXNtbDE0L2ZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvc3lzbWwxNC9mZWF0dXJlcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDExICsyLDExIEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmUiCiAgICAgICBsYWJlbD0iUGFweXJ1cyBTeXNNTDEuMSB0byBTeXNNTDEuNCBJbnRlcm9wZXJhYmlsaXR5IEZlYXR1cmUiCi0gICAgICB2ZXJzaW9uPSIwLjExLjAucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iMC4xMi4wLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IkVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdCI+CiAKICAgIDxjb3B5cmlnaHQgdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+Ci0gICAgICBDb3B5cmlnaHQgKGMpIDIwMTcgQ0VBIExJU1QgYW5kIG90aGVycworICAgICAgQ29weXJpZ2h0IChjKSAyMDE3LCAyMDE5IENFQSBMSVNUIGFuZCBvdGhlcnMKIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZQogdjEuMApAQCAtMTcsMjYgKzE3LDYgQEAKICAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgogICAgICAgJWxpY2Vuc2UKICAgIDwvbGljZW5zZT4KLSAgIAotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLSAgIAotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5kaWFncmFtLmZlYXR1cmUiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8aW5jbHVkZXMKLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnByb3BlcnRpZXMuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxleHBsb3Jlci5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPGluY2x1ZGVzCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5mZWF0dXJlIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KICAgICAgICAgIAogICAgPGluY2x1ZGVzCiAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUiCkBAIC01NSw2ICszNSwyNyBAQAogICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgogICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisgICAgICAgICAKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCQkgCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKyAgICAgICAgIAorICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgogCiAgICA8cGx1Z2luCiAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwiCmRpZmYgLS1naXQgYS9zeXNtbDE0L2ZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmUvcG9tLnhtbCBiL3N5c21sMTQvZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZS9wb20ueG1sCmluZGV4IGFhZjVjMWEuLjdiZDZkNzcgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZS9wb20ueG1sCisrKyBiL3N5c21sMTQvZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZS9wb20ueG1sCkBAIC0xLDE1ICsxLDE2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKIAl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KIAk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0JCisKIAk8cGFyZW50PgotCSAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+Ci0JICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmVzPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjExLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KIAk8L3BhcmVudD4KLQkKKwogCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmU8L2FydGlmYWN0SWQ+CiAJPHBhY2thZ2luZz5lY2xpcHNlLWZlYXR1cmU8L3BhY2thZ2luZz4KLQkKKwogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL3N5c21sMTQvZmVhdHVyZXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCA5OTQ2MmY2Li5jMDA1ODRiIDEwMDY0NAotLS0gYS9zeXNtbDE0L2ZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvc3lzbWwxNC9mZWF0dXJlcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDExICsyLDExIEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLmZlYXR1cmUiCiAgICAgICBsYWJlbD0iUGFweXJ1cyBTeXNNTDEuMSB0byBTeXNNTDEuNCBJbnRlcm9wZXJhYmlsaXR5IFRlc3RzIEZlYXR1cmUiCi0gICAgICB2ZXJzaW9uPSIwLjExLjAucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iMC4xMi4wLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IkVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdCI+CiAKICAgIDxjb3B5cmlnaHQgdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+Ci0gICAgICBDb3B5cmlnaHQgKGMpIDIwMTcgQ0VBIExJU1QgYW5kIG90aGVycworICAgICAgQ29weXJpZ2h0IChjKSAyMDE3LCAyMDE5IENFQSBMSVNUIGFuZCBvdGhlcnMKIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZQogdjEuMApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9mZWF0dXJlcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy5mZWF0dXJlL3BvbS54bWwgYi9zeXNtbDE0L2ZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLmZlYXR1cmUvcG9tLnhtbAppbmRleCBlYTgxNTczLi5hMjc5M2ViIDEwMDY0NAotLS0gYS9zeXNtbDE0L2ZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLmZlYXR1cmUvcG9tLnhtbAorKysgYi9zeXNtbDE0L2ZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLmZlYXR1cmUvcG9tLnhtbApAQCAtMSwxNiArMSwxNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CiAJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCQorCiAJPHBhcmVudD4KLQkgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgotCSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5mZWF0dXJlczwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmVzPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAJPC9wYXJlbnQ+Ci0JCi0JPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnRlc3RzPC9ncm91cElkPgorCiAJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMuZmVhdHVyZTwvYXJ0aWZhY3RJZD4KIAk8cGFja2FnaW5nPmVjbGlwc2UtZmVhdHVyZTwvcGFja2FnaW5nPgotCQorCiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9mZWF0dXJlcy9wb20ueG1sIGIvc3lzbWwxNC9mZWF0dXJlcy9wb20ueG1sCmluZGV4IDk3NTdiN2QuLjk0M2MwYzUgMTAwNzU1Ci0tLSBhL3N5c21sMTQvZmVhdHVyZXMvcG9tLnhtbAorKysgYi9zeXNtbDE0L2ZlYXR1cmVzL3BvbS54bWwKQEAgLTEsMzIgKzEsMjkgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKIAl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KIAk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKIAk8cGFyZW50PgogCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+CiAJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnJvb3Q8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjAuMTEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwkJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgogCTwvcGFyZW50PgogCiAJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZXM8L2FydGlmYWN0SWQ+CiAJPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KIAorCTxtb2R1bGVzPgorCQk8bW9kdWxlPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmU8L21vZHVsZT4KKwk8L21vZHVsZXM+CisKIAk8cHJvZmlsZXM+CiAJCTxwcm9maWxlPgotCQkJPGlkPm1haW48L2lkPgorCQkJPGlkPnN5c21sMTR0ZXN0czwvaWQ+CiAJCQk8bW9kdWxlcz4KLQkJCQk8bW9kdWxlPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmU8L21vZHVsZT4KLQkJCTwvbW9kdWxlcz4KLQkJPC9wcm9maWxlPgotCi0JCTxwcm9maWxlPgotCQkJPGlkPnRlc3RzPC9pZD4KLQkJCTxtb2R1bGVzPgotCQkJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZTwvbW9kdWxlPgogCQkJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMuZmVhdHVyZTwvbW9kdWxlPgogCQkJPC9tb2R1bGVzPgogCQk8L3Byb2ZpbGU+CiAJPC9wcm9maWxlcz4KLQkKKwogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5ibGFja2JveGVzL01FVEEtSU5GL01BTklGRVNULk1GIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYjRlMzQ1Ni4uNGUwN2YwNyAxMDA2NDQKLS0tIGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMC4xMS4wLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDAuMTIuMC5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXMuQWN0aXZhdG9yCiBCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjEwOS4wLDQuMC4wKSIsCkBAIC0xMiw3ICsxMiw3IEBACiAgb3JnLmVjbGlwc2UubTJtLnF2dC5vbWw7YnVuZGxlLXZlcnNpb249IlszLjcuMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLnVtbDIudW1sO2J1bmRsZS12ZXJzaW9uPSJbNS4zLjAsNi4wLjApIiwKICBvcmcuZWNsaXBzZS5nbWYucnVudGltZS5ub3RhdGlvbjtidW5kbGUtdmVyc2lvbj0iWzEuOC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5uYXR0YWJsZS5tb2RlbDtidW5kbGUtdmVyc2lvbj0iWzMuMC4wLDUuMC4wKSIsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5uYXR0YWJsZS5tb2RlbDtidW5kbGUtdmVyc2lvbj0iWzQuMS4wLDUuMC4wKSIsCiAgb3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5nbWZkaWFnLnRvb2xpbmcucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMC4wLDQuMC4wKSIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXMvcG9tLnhtbCBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5ibGFja2JveGVzL3BvbS54bWwKaW5kZXggMGE4Y2YyMS4uODljMWI5NCAxMDA2NDQKLS0tIGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXMvcG9tLnhtbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuYmxhY2tib3hlcy9wb20ueG1sCkBAIC0xLDExICsxLDEyIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKIAl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KIAk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAJPHBhcmVudD4KIAkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucGx1Z2luczwvYXJ0aWZhY3RJZD4KIAkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgotCQk8dmVyc2lvbj4wLjExLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KIAk8L3BhcmVudD4KIAk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5ibGFja2JveGVzPC9hcnRpZmFjdElkPgogCTxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZG9jL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGY2MjA0OGMuLjg3N2U2ZDkgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmRvYy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiBQYXB5cnVzIFN5c01MIE1pZ3JhdGlvbiBEb2N1bWVudGF0aW9uCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5kb2M7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMC4xMS4wLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDAuMTIuMC5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdAogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5oZWxwO2J1bmRsZS12ZXJzaW9uPSJbMy43LjAsNC4wLjApIiwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5kb2MvcG9tLnhtbCBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5kb2MvcG9tLnhtbAppbmRleCBlNzI0YjBmLi4zNjY5YTBhIDEwMDY0NAotLS0gYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZG9jL3BvbS54bWwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmRvYy9wb20ueG1sCkBAIC0xLDEwICsxLDEyIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3Q+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CiAJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCTxwYXJlbnQ+CiAJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnBsdWdpbnM8L2FydGlmYWN0SWQ+CiAJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KLQkJPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAJPC9wYXJlbnQ+CiAJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZG9jPC9hcnRpZmFjdElkPgogCTxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBmZjc5NjBhLi5hYWU4NDFlIDEwMDY0NAotLS0gYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbDtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAwLjExLjAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMC4xMi4wLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuQWN0aXZhdG9yCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjEwOS4wLDQuMC4wKSIsCkBAIC0xMCw3ICsxMCw3IEBACiAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjEyLjAsNC4wLjApIiwKICBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmNvcmUubG9nO2J1bmRsZS12ZXJzaW9uPSIxLjIuMCIsCiAgb3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5lbWY7YnVuZGxlLXZlcnNpb249IlszLjAuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEudmlld3BvaW50cy5wb2xpY3k7YnVuZGxlLXZlcnNpb249IlsyLjAuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEudmlld3BvaW50cy5wb2xpY3k7YnVuZGxlLXZlcnNpb249IlszLjAuMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCiAgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwudG9vbHMudXRpbHM7YnVuZGxlLXZlcnNpb249IlszLjAuMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLm0ybS5xdnQub21sO2J1bmRsZS12ZXJzaW9uPSJbMy43LjAsNC4wLjApIiwKQEAgLTE5LDcgKzE5LDcgQEAKICBvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy43LjAsNC4wLjApIiwKICBvcmcuZWNsaXBzZS51bWwyLnVtbDtidW5kbGUtdmVyc2lvbj0iWzUuMi4wLDYuMC4wKSIsCiAgb3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUubm90YXRpb247YnVuZGxlLXZlcnNpb249IlsxLjguMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNDtidW5kbGUtdmVyc2lvbj0iWzAuMTAuMSwyLjAuMCkiLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNDtidW5kbGUtdmVyc2lvbj0iWzAuMTIuMCwyLjAuMCkiLAogIG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC9wb20ueG1sIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL3BvbS54bWwKaW5kZXggM2I1MzU5Ni4uYjgxMjBmNCAxMDA2NDQKLS0tIGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL3BvbS54bWwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL3BvbS54bWwKQEAgLTEsMTEgKzEsMTIgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAk8cGFyZW50PgogCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5wbHVnaW5zPC9hcnRpZmFjdElkPgogCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+Ci0JCTx2ZXJzaW9uPjAuMTEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwkJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgogCTwvcGFyZW50PgogCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sPC9hcnRpZmFjdElkPgogCTxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pbnRlcm9wZXJhYmlsaXR5L3N5c21sMTQvc3lzbWwvdHJhbnNmb3JtYXRpb25zL1N5c01MSW1wb3J0VHJhbnNmb3JtYXRpb24uamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pbnRlcm9wZXJhYmlsaXR5L3N5c21sMTQvc3lzbWwvdHJhbnNmb3JtYXRpb25zL1N5c01MSW1wb3J0VHJhbnNmb3JtYXRpb24uamF2YQppbmRleCBjMWVjZTlkLi42Zjg5NGJkIDEwMDY0NAotLS0gYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW50ZXJvcGVyYWJpbGl0eS9zeXNtbDE0L3N5c21sL3RyYW5zZm9ybWF0aW9ucy9TeXNNTEltcG9ydFRyYW5zZm9ybWF0aW9uLmphdmEKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2ludGVyb3BlcmFiaWxpdHkvc3lzbWwxNC9zeXNtbC90cmFuc2Zvcm1hdGlvbnMvU3lzTUxJbXBvcnRUcmFuc2Zvcm1hdGlvbi5qYXZhCkBAIC02MSw3ICs2MSw3IEBACiAJLyoqCiAJICogVGhlIG5vdGF0aW9uIGZpbGUgZXh0ZW5zaW9uLgogCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT1RBVElPTl9GSUxFX0VYVEVOU0lPTiA9ICJub3RhdGlvbiI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9UQVRJT05fRklMRV9FWFRFTlNJT04gPSAibm90YXRpb24iOwogCiAJLyoqCiAJICogVGhlIG1vZGVsIGV4dGVudCBmb3IgdGhlIHByaW1pdGl2ZXMgdHlwZXMuCkBAIC0zNjcsNyArMzY3LDcgQEAKIAlwcm90ZWN0ZWQgVVJJIGdldFNlbWFudGljVHJhbnNmb3JtYXRpb25VUkkoKSB7CiAJCXJldHVybiBnZXRUcmFuc2Zvcm1hdGlvblVSSSgiU3lzTUxTZW1hbnRpYyIsIEFjdGl2YXRvci5QTFVHSU5fSUQpOwogCX0KLQorCQogCS8qKgogCSAqIHtAaW5oZXJpdERvY30KIAkgKiAKQEAgLTM4Niw5ICszODYsOSBAQAogCUBPdmVycmlkZQogCXByb3RlY3RlZCBDb2xsZWN0aW9uPFVSST4gZ2V0QWxsVHJhbnNmb3JtYXRpb25VUklzKCkgewogCQlmaW5hbCBDb2xsZWN0aW9uPFVSST4gYWxsVHJhbnNmb3JtYXRpb25zID0gbmV3IEFycmF5TGlzdDxVUkk+KCk7Ci0JCWZpbmFsIFVSSSBzZW1hbnRpY1RyYW5zZm9ybWF0aW9uVVJJID0gZ2V0U2VtYW50aWNUcmFuc2Zvcm1hdGlvblVSSSgpOwotCQlpZiAobnVsbCAhPSBzZW1hbnRpY1RyYW5zZm9ybWF0aW9uVVJJKSB7Ci0JCQlhbGxUcmFuc2Zvcm1hdGlvbnMuYWRkKHNlbWFudGljVHJhbnNmb3JtYXRpb25VUkkpOworCQlmaW5hbCBVUkkgc2VtYW50aWNUcmFuc2Zvcm1hdGlvbnNVUkkgPSBnZXRTZW1hbnRpY1RyYW5zZm9ybWF0aW9uVVJJKCk7CisJCWlmIChudWxsICE9IHNlbWFudGljVHJhbnNmb3JtYXRpb25zVVJJKSB7CisJCQlhbGxUcmFuc2Zvcm1hdGlvbnMuYWRkKHNlbWFudGljVHJhbnNmb3JtYXRpb25zVVJJKTsKIAkJfQogCQlmaW5hbCBDb2xsZWN0aW9uPFVSST4gZGlhZ3JhbVRyYW5zZm9ybWF0aW9uVVJJID0gZ2V0RGlhZ3JhbVRyYW5zZm9ybWF0aW9uVVJJcygpOwogCQlpZiAobnVsbCAhPSBkaWFncmFtVHJhbnNmb3JtYXRpb25VUkkpIHsKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pbnRlcm9wZXJhYmlsaXR5L3N5c21sMTQvc3lzbWwveG1pL2hlbHBlci9QcmVzZXJ2ZVhNSUlESGVscGVyLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvaW50ZXJvcGVyYWJpbGl0eS9zeXNtbDE0L3N5c21sL3htaS9oZWxwZXIvUHJlc2VydmVYTUlJREhlbHBlci5qYXZhCmluZGV4IDA0NTJiNjIuLmU3YjgxMzcgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9pbnRlcm9wZXJhYmlsaXR5L3N5c21sMTQvc3lzbWwveG1pL2hlbHBlci9QcmVzZXJ2ZVhNSUlESGVscGVyLmphdmEKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL2ludGVyb3BlcmFiaWxpdHkvc3lzbWwxNC9zeXNtbC94bWkvaGVscGVyL1ByZXNlcnZlWE1JSURIZWxwZXIuamF2YQpAQCAtMTAyLDggKzEwMiw2IEBACiAJCQkJfSBlbHNlIGlmIChVTUxYTUlJREhlbHBlci5pc1N0ZXJlb3R5cGVkRWxlbWVudENyZWF0ZWQoY3VycmVudCkpIHsKIAkJCQkJVU1MWE1JSURIZWxwZXIuY2FsY3VsYXRlQ3JlYXRlU3RlcmVvdHlwZWRFbGVtZW50KHJlcywgY3VycmVudCk7CiAKLQkJCQl9IGVsc2UgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBmb3VuZCBhbiBpZCBmb3IgIiArIGN1cnJlbnQudG9TdHJpbmcoKSk7IC8vJE5PTi1OTFMtMSQKIAkJCQl9CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC90cmFuc2Zvcm0vU3lzTUxBbGxvY2F0aW9uVGFibGUucXZ0byBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC90cmFuc2Zvcm0vU3lzTUxBbGxvY2F0aW9uVGFibGUucXZ0bwppbmRleCBhYzRlZGRhLi41MjhiOTY1IDEwMDY0NAotLS0gYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwvdHJhbnNmb3JtL1N5c01MQWxsb2NhdGlvblRhYmxlLnF2dG8KKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL3RyYW5zZm9ybS9TeXNNTEFsbG9jYXRpb25UYWJsZS5xdnRvCkBAIC02MSw2ICs2MSw4IEBACiAJCQlheGlzUHJvdmlkZXIuYXhpcyArPSBleGlzdGluZ0F4aXMtPm1hcCBmcm9tU3lzTUwxMUF4aXNUb0F4aXMoKTsKIAkJfTsKIAl9OworCQorCXByb3RvdHlwZSA6PSBudWxsOwogfQogCiBtYXBwaW5nIG5hdHRhYmxlOjpuYXR0YWJsZWF4aXM6OklBeGlzOjpmcm9tU3lzTUwxMUF4aXNUb0F4aXMoKSA6IG5hdHRhYmxlOjpuYXR0YWJsZWF4aXM6OklBeGlzIHsKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC90cmFuc2Zvcm0vU3lzTUxSZXF1aXJlbWVudFRhYmxlLnF2dG8gYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwvdHJhbnNmb3JtL1N5c01MUmVxdWlyZW1lbnRUYWJsZS5xdnRvCmluZGV4IDcwMmNjZWMuLjgwMjlmZmEgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC90cmFuc2Zvcm0vU3lzTUxSZXF1aXJlbWVudFRhYmxlLnF2dG8KKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sL3RyYW5zZm9ybS9TeXNNTFJlcXVpcmVtZW50VGFibGUucXZ0bwpAQCAtNjEsNiArNjEsOCBAQAogCQkJYXhpc1Byb3ZpZGVyLmF4aXMgKz0gZXhpc3RpbmdBeGlzLT5tYXAgZnJvbVN5c01MMTFBeGlzVG9BeGlzKCk7CiAJCX07CiAJfTsKKwkKKwlwcm90b3R5cGUgOj0gbnVsbDsKIH0KIAogbWFwcGluZyBuYXR0YWJsZTo6bmF0dGFibGVheGlzOjpJQXhpczo6ZnJvbVN5c01MMTFBeGlzVG9BeGlzKCkgOiBuYXR0YWJsZTo6bmF0dGFibGVheGlzOjpJQXhpcyB7CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwvdHJhbnNmb3JtL1N5c01MU2VtYW50aWMucXZ0byBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC90cmFuc2Zvcm0vU3lzTUxTZW1hbnRpYy5xdnRvCmluZGV4IGFmM2FhNjkuLmExODVjMDAgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC90cmFuc2Zvcm0vU3lzTUxTZW1hbnRpYy5xdnRvCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC90cmFuc2Zvcm0vU3lzTUxTZW1hbnRpYy5xdnRvCkBAIC0yNSw3ICsyNSw3IEBACiB0cmFuc2Zvcm1hdGlvbiBTeXNNTFNlbWFudGljKGluIGluUzE0UHJvZmlsZSA6IFN5c01MMTQsIGluIHByaW1pdGl2ZVR5cGVzIDogVU1MUHJpbWl0aXZlc1R5cGVzLCBpbiBzeXNNTFN0YW5kYXJkTGlicmFyeSA6IFN5c01MMTQsIGluIHVtbFByb2ZpbGVTdGFuZGFyZCA6IFVNTFByb2ZpbGVTdGFuZGFyZCwgaW5vdXQgaW5PdXRNb2RlbCA6IFVNTCk7CiAKIC8vIERlY2xhcmUgbmVlZGVkIGNvbnN0YW50cwotcHJvcGVydHkgc3lzTUwxMVVTUkk6U3RyaW5nID0gJ2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTCc7Citwcm9wZXJ0eSBzeXNNTDExVVJJOlN0cmluZyA9ICdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwnOwogcHJvcGVydHkgc3RhbmRhcmRQcm9maWxlTmFtZTpTdHJpbmcgPSAiU3RhbmRhcmRQcm9maWxlIjsKIHByb3BlcnR5IGxpYnJhcmllc05hbWU6U3RyaW5nID0gIkxpYnJhcmllcyI7CiBwcm9wZXJ0eSB1bml0TmFtZTpTdHJpbmcgPSAiVW5pdCI7CkBAIC02NDEsNiArNjQxLDYgQEAKIAogCiAvLyBVdGlsaXR5IHRvIHJlbW92ZSBhbGwgU3lzTUwgMS4xIFByb2ZpbGVzIAotbWFwcGluZyBQcm9maWxlQXBwbGljYXRpb246OnJlbW92ZVN5c01MMTFQcm9maWxlKG1vZGVsOlVNTDo6TW9kZWwpIHdoZW4geyBzZWxmLmFwcGxpZWRQcm9maWxlLlVSSS5zdGFydHNXaXRoKHN5c01MMTFVU1JJKTt9eworbWFwcGluZyBQcm9maWxlQXBwbGljYXRpb246OnJlbW92ZVN5c01MMTFQcm9maWxlKG1vZGVsOlVNTDo6TW9kZWwpIHdoZW4geyBzZWxmLmFwcGxpZWRQcm9maWxlLlVSSS5zdGFydHNXaXRoKHN5c01MMTFVUkkpO317CiAJbW9kZWwudW5hcHBseVByb2ZpbGUoc2VsZi5hcHBsaWVkUHJvZmlsZSk7CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvLmNsYXNzcGF0aCBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhN2JkYgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjgiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvLnByb2plY3QgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTY0ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvLnByb2plY3QKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZzwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2Uub29tcGgudmVyc2lvbi5WZXJzaW9uTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWE2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwyOTEgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25fdHlwZV9tZW1iZXJzX29uX2NvbHVtbnM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9hbm5vdGF0aW9uPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9lbnVtX2NvbnN0YW50PTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZXhwbGljaXRfY29uc3RydWN0b3JfY2FsbD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fcXVhbGlmaWVkX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXNzaWdubWVudD0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9iaW5hcnlfZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29tcGFjdF9pZj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfY29uZGl0aW9uYWxfZXhwcmVzc2lvbj04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZW51bV9jb25zdGFudHM9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfZXhwcmVzc2lvbnNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX21ldGhvZF9kZWNsYXJhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tdWx0aXBsZV9maWVsZHM9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3BhcmFtZXRlcnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9yZXNvdXJjZXNfaW5fdHJ5PTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zZWxlY3Rvcl9pbl9tZXRob2RfaW52b2NhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJjbGFzc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fZW51bV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Rocm93c19jbGF1c2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Rocm93c19jbGF1c2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl91bmlvbl90eXBlX2luX211bHRpY2F0Y2g9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9pbXBvcnRzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19hZnRlcl9wYWNrYWdlPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmllbGQ9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maXJzdF9jbGFzc19ib2R5X2RlY2xhcmF0aW9uPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfaW1wb3J0cz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21lbWJlcl90eXBlPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWV0aG9kPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbmV3X2NodW5rPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfcGFja2FnZT0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl9pbXBvcnRfZ3JvdXBzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX3R5cGVfZGVjbGFyYXRpb25zPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Jsb2NrX2luX2Nhc2U9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9jb25zdGFudD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2xhbWJkYV9ib2R5PWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX21ldGhvZF9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9zd2l0Y2g9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2phdmFkb2NfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9wYXJhbWV0ZXJfZGVzY3JpcHRpb249dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3Jvb3RfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3Jvb3RfdGFncz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubGluZV9sZW5ndGg9MjYwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfYmxvY2tfYm91bmRhcmllcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfamF2YWRvY19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LnByZXNlcnZlX3doaXRlX3NwYWNlX2JldHdlZW5fY29kZV9hbmRfbGluZV9jb21tZW50cz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5kaXNhYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9mZgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmVuYWJsaW5nX3RhZz1AZm9ybWF0dGVyXDpvbgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfbGluZV9jb21tZW50X3N0YXJ0aW5nX29uX2ZpcnN0X2NvbHVtbj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2ZpZWxkPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2xvY2FsX3ZhcmlhYmxlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21ldGhvZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYWNrYWdlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhcmFtZXRlcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fdHlwZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfbGFiZWw9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfdHlwZV9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZWxzZV9pbl9pZl9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fubm90YXRpb25fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9sYW1iZGFfYXJyb3c9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3RyeT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX3RyeV9yZXNvdXJjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2xhbWJkYV9hcnJvdz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fdHJ5PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fdGhyb3c9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fZm9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9icmFja2V0c19pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFja2V0c19pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fbGluZXNfaW5fY29tbWVudHM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX3dyYXBwZWRfbGluZXM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2Vsc2Vfc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZW1wdHlfYXJyYXlfaW5pdGlhbGl6ZXJfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2ltcGxlX2lmX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF90aGVuX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5saW5lU3BsaXQ9MjYwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2Jsb2NrX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9saW5lX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT01CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXRhYgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX29uX29mZl90YWdzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX29yX29wZXJhdG9yX211bHRpY2F0Y2g9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfb3V0ZXJfZXhwcmVzc2lvbnNfd2hlbl9uZXN0ZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MjgxZAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw2OCBAQAorY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitjbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfbWV0aG9kcz1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19ubHNfdGFncz1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zX2ludGVyZmFjZV9tZXRob2RzPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmNvbnZlcnRfZnVuY3Rpb25hbF9pbnRlcmZhY2VzPWZhbHNlCitjbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9ZmFsc2UKK2NsZWFudXAuY29ycmVjdF9pbmRlbnRhdGlvbj1mYWxzZQorY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9ZmFsc2UKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlX2NoYW5nZXNfb25seT1mYWxzZQorY2xlYW51cC5pbnNlcnRfaW5mZXJyZWRfdHlwZV9hcmd1bWVudHM9ZmFsc2UKK2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD1mYWxzZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV90eXBlX2Fic3RyYWN0X2lmX21pc3NpbmdfbWV0aG9kPWZhbHNlCitjbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfcmVkdW5kYW50X3R5cGVfYXJndW1lbnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK2NsZWFudXAudXNlX2Fub255bW91c19jbGFzc19jcmVhdGlvbj1mYWxzZQorY2xlYW51cC51c2VfYmxvY2tzPXRydWUKK2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitjbGVhbnVwLnVzZV9sYW1iZGE9dHJ1ZQorY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90eXBlX2FyZ3VtZW50cz1mYWxzZQorY2xlYW51cF9wcm9maWxlPV9QYXB5cnVzCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2Zvcm1hdHRlcl9wcm9maWxlPV9QYXB5cnVzCitmb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMgorb3JnLmVjbGlwc2UuamR0LnVpLmlnbm9yZWxvd2VyY2FzZW5hbWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC51aS5pbXBvcnRvcmRlcj1qYXZhO2phdmF4O29yZztjb207CitvcmcuZWNsaXBzZS5qZHQudWkuamF2YWRvYz10cnVlCitvcmcuZWNsaXBzZS5qZHQudWkub25kZW1hbmR0aHJlc2hvbGQ9OTkKK29yZy5lY2xpcHNlLmpkdC51aS5zdGF0aWNvbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/Pjx0ZW1wbGF0ZXM+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iZ2V0dGVyY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgZ2V0dGVyIG1ldGhvZCIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5nZXR0ZXJjb21tZW50IiBuYW1lXD0iZ2V0dGVyY29tbWVudCI+LyoqXG4gKiBAcmV0dXJuIHRoZSAke2JhcmVfZmllbGRfbmFtZX1cbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ic2V0dGVyY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3Igc2V0dGVyIG1ldGhvZCIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5zZXR0ZXJjb21tZW50IiBuYW1lXD0ic2V0dGVyY29tbWVudCI+LyoqXG4gKiBAcGFyYW0gJHtwYXJhbX0gdGhlICR7YmFyZV9maWVsZF9uYW1lfSB0byBzZXRcbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJmYWxzZSIgY29udGV4dFw9ImNvbnN0cnVjdG9yY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgY3JlYXRlZCBjb25zdHJ1Y3RvcnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuY29uc3RydWN0b3Jjb21tZW50IiBuYW1lXD0iY29uc3RydWN0b3Jjb21tZW50Ij4vKipcbiAqIENvbnN0cnVjdG9yLlxuICpcbiAqICR7dGFnc31cbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJmYWxzZSIgY29udGV4dFw9ImZpbGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBjcmVhdGVkIEphdmEgZmlsZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZmlsZWNvbW1lbnQiIG5hbWVcPSJmaWxlY29tbWVudCI+LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBDb3B5cmlnaHQgKGMpICR7eWVhcn0gQ0VBIExJU1QgYW5kIG90aGVycy5cbiAqIFxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuICogaHR0cFw6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG4gKlxuICogQ29udHJpYnV0b3JzXDpcbiAqICAgQ0VBIExJU1QgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbiAqICAgXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9InR5cGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBjcmVhdGVkIHR5cGVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLnR5cGVjb21tZW50IiBuYW1lXD0idHlwZWNvbW1lbnQiPi8qKlxuICogQGF1dGhvciAke3VzZXJ9XG4gKlxuICogJHt0YWdzfVxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJmaWVsZGNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGZpZWxkcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5maWVsZGNvbW1lbnQiIG5hbWVcPSJmaWVsZGNvbW1lbnQiPi8qKlxuICogXG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9Im1ldGhvZGNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIG5vbi1vdmVycmlkaW5nIG1ldGhvZHMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMubWV0aG9kY29tbWVudCIgbmFtZVw9Im1ldGhvZGNvbW1lbnQiPi8qKlxuICogJHt0YWdzfVxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9ImZhbHNlIiBjb250ZXh0XD0ib3ZlcnJpZGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBvdmVycmlkaW5nIG1ldGhvZHMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMub3ZlcnJpZGVjb21tZW50IiBuYW1lXD0ib3ZlcnJpZGVjb21tZW50Ij4vKipcbiAqICR7c2VlX3RvX292ZXJyaWRkZW59XG4gKlxuICogJHt0YWdzfVxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9ImZhbHNlIiBjb250ZXh0XD0iZGVsZWdhdGVjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBkZWxlZ2F0ZSBtZXRob2RzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmRlbGVnYXRlY29tbWVudCIgbmFtZVw9ImRlbGVnYXRlY29tbWVudCI+LyoqXG4gKiAke3NlZV90b190YXJnZXR9XG4gKlxuICogJHt0YWdzfVxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJuZXd0eXBlX2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJOZXdseSBjcmVhdGVkIGZpbGVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLm5ld3R5cGUiIG5hbWVcPSJuZXd0eXBlIj4ke2ZpbGVjb21tZW50fVxuJHtwYWNrYWdlX2RlY2xhcmF0aW9ufVxuXG4ke3R5cGVjb21tZW50fVxuJHt0eXBlX2RlY2xhcmF0aW9ufTwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iY2xhc3Nib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBjbGFzcyB0eXBlIGJvZGllcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5jbGFzc2JvZHkiIG5hbWVcPSJjbGFzc2JvZHkiPlxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJpbnRlcmZhY2Vib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBpbnRlcmZhY2UgdHlwZSBib2RpZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuaW50ZXJmYWNlYm9keSIgbmFtZVw9ImludGVyZmFjZWJvZHkiPlxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJlbnVtYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgZW51bSB0eXBlIGJvZGllcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5lbnVtYm9keSIgbmFtZVw9ImVudW1ib2R5Ij5cbjwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iYW5ub3RhdGlvbmJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gbmV3IGFubm90YXRpb24gdHlwZSBib2RpZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuYW5ub3RhdGlvbmJvZHkiIG5hbWVcPSJhbm5vdGF0aW9uYm9keSI+XG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImNhdGNoYmxvY2tfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gbmV3IGNhdGNoIGJsb2NrcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5jYXRjaGJsb2NrIiBuYW1lXD0iY2F0Y2hibG9jayI+Ly8gJHt0b2RvfSBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9ja1xuJHtleGNlcHRpb25fdmFyfS5wcmludFN0YWNrVHJhY2UoKTs8L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9Im1ldGhvZGJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gY3JlYXRlZCBtZXRob2Qgc3R1YnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMubWV0aG9kYm9keSIgbmFtZVw9Im1ldGhvZGJvZHkiPi8vICR7dG9kb30gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWJcbiR7Ym9keV9zdGF0ZW1lbnR9PC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJjb25zdHJ1Y3RvcmJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gY3JlYXRlZCBjb25zdHJ1Y3RvciBzdHVicyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5jb25zdHJ1Y3RvcmJvZHkiIG5hbWVcPSJjb25zdHJ1Y3RvcmJvZHkiPiR7Ym9keV9zdGF0ZW1lbnR9XG4vLyAke3RvZG99IEF1dG8tZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHN0dWI8L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImdldHRlcmJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gY3JlYXRlZCBnZXR0ZXJzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmdldHRlcmJvZHkiIG5hbWVcPSJnZXR0ZXJib2R5Ij5yZXR1cm4gJHtmaWVsZH07PC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJzZXR0ZXJib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIGNyZWF0ZWQgc2V0dGVycyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5zZXR0ZXJib2R5IiBuYW1lXD0ic2V0dGVyYm9keSI+JHtmaWVsZH0gXD0gJHtwYXJhbX07PC90ZW1wbGF0ZT48L3RlbXBsYXRlcz4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmYjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCkBAIC0wLDAgKzEsOTggQEAKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRF9XSVRIT1VUX0RFRkFVTFRfVkFMVUU9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BUElfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9SRUVYUE9SVEVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFPUVycm9yCitBUElfVVNFX1NDQU5fRklFTERfU0VWRVJJVFk9RXJyb3IKK0FQSV9VU0VfU0NBTl9NRVRIT0RfU0VWRVJJVFk9RXJyb3IKK0FQSV9VU0VfU0NBTl9UWVBFX1NFVkVSSVRZPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fQUJTVFJBQ1RfVE9fQUJTVFJBQ1Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DT05TVFJVQ1RPUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfU1VQRVJDTEFTUz1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFSQVJHU19UT19BUlJBWT1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9FTlVNX0NPTlNUQU5UPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0FEREVEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0ZJTkFMX1RPX05PTl9GSU5BTF9TVEFUSUNfQ09OU1RBTlQ9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1NUQVRJQ19UT19OT05fU1RBVElDPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQUxVRT1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9BUkdVTUVOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVkFMVUU9RXJyb3IKK0lMTEVHQUxfRVhURU5EPVdhcm5pbmcKK0lMTEVHQUxfSU1QTEVNRU5UPVdhcm5pbmcKK0lMTEVHQUxfSU5TVEFOVElBVEU9V2FybmluZworSUxMRUdBTF9PVkVSUklERT1XYXJuaW5nCitJTExFR0FMX1JFRkVSRU5DRT1XYXJuaW5nCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX0ZJRUxEPUlnbm9yZQorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0Q9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1NVUEVSX0lOVEVSRkFDRV9XSVRIX01FVEhPRFM9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0lOVkFMSURfQU5OT1RBVElPTj1JZ25vcmUKK0lOVkFMSURfSkFWQURPQ19UQUc9SWdub3JlCitJTlZBTElEX1JFRkVSRU5DRV9JTl9TWVNURU1fTElCUkFSSUVTPUlnbm9yZQorTEVBS19FWFRFTkQ9V2FybmluZworTEVBS19GSUVMRF9ERUNMPVdhcm5pbmcKK0xFQUtfSU1QTEVNRU5UPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1BBUkFNPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1JFVFVSTl9UWVBFPVdhcm5pbmcKK01FVEhPRF9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BTk5PVEFUSU9OX0RFRkFVTFRfVkFMVUU9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUlTU0lOR19FRV9ERVNDUklQVElPTlM9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVU5VU0VEX1BST0JMRU1fRklMVEVSUz1XYXJuaW5nCithdXRvbWF0aWNhbGx5X3JlbW92ZWRfdW51c2VkX3Byb2JsZW1fZmlsdGVycz1FbmFibGVkCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbj1FcnJvcgoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21ham9yX3dpdGhvdXRfYnJlYWtpbmdfY2hhbmdlPURpc2FibGVkCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uX2luY2x1ZGVfbWlub3Jfd2l0aG91dF9hcGlfY2hhbmdlPURpc2FibGVkCitpbnZhbGlkX3NpbmNlX3RhZ192ZXJzaW9uPUVycm9yCittYWxmb3JtZWRfc2luY2VfdGFnPUVycm9yCittaXNzaW5nX3NpbmNlX3RhZz1XYXJuaW5nCityZXBvcnRfYXBpX2JyZWFrYWdlX3doZW5fbWFqb3JfdmVyc2lvbl9pbmNyZW1lbnRlZD1EaXNhYmxlZAorcmVwb3J0X3Jlc29sdXRpb25fZXJyb3JzX2FwaV9jb21wb25lbnQ9V2FybmluZwpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWMzZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDtidW5kbGUtdmVyc2lvbj0iMC4xMi4wIiwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLm5hdHRhYmxlLmNvbW1vbjtidW5kbGUtdmVyc2lvbj0iNS4wLjAiCitCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1WZXJzaW9uOiAwLjEyLjAucXVhbGlmaWVyCitCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnLkFjdGl2YXRvcgorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL09TR0ktSU5GL2wxMG4vYnVuZGxlLnByb3BlcnRpZXMgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODUwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMyBAQAorI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZworQnVuZGxlLVZlbmRvciA9IEVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdAorQnVuZGxlLU5hbWUgPSBTeXNNTCBBbGxvY2F0aW9uIFRhYmxlIENvbmZpZ3VyYXRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9hYm91dC5odG1sIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvYWJvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OThiMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvYWJvdXQuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgorICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIvPgorPHRpdGxlPkFib3V0PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgorIAorPHA+TWF5IDEyLCAyMDA4PC9wPgkKKzxoMz5MaWNlbnNlPC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgCitpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCitFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIAorYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgCitiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCZxdW90O1JlZGlzdHJpYnV0b3ImcXVvdDspIGFuZCBkaWZmZXJlbnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5CithcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuICBDaGVjayB0aGUgUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgCitwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKK2luZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50CithbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmc8L2E+LjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NGFiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTEgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHJlc291cmNlcy8sXAorICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCisgICAgICAgICAgICAgICBPU0dJLUlORi8KK3NyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2ljb25zL29sZC90YWJsZV9TeXNNTF9BbGxvY2F0aW9uLmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2ljb25zL29sZC90YWJsZV9TeXNNTF9BbGxvY2F0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDllMjJjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvaWNvbnMvb2xkL3RhYmxlX1N5c01MX0FsbG9jYXRpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2ljb25zL29sZC90YWJsZV9TeXNNTF9BbGxvY2F0aW9uLnBuZyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2ljb25zL29sZC90YWJsZV9TeXNNTF9BbGxvY2F0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFlYTAwCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvaWNvbnMvb2xkL3RhYmxlX1N5c01MX0FsbG9jYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2ljb25zL3RhYmxlX1N5c01MX0FsbG9jYXRpb24ucG5nIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvaWNvbnMvdGFibGVfU3lzTUxfQWxsb2NhdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxYTkzMwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2ljb25zL3RhYmxlX1N5c01MX0FsbG9jYXRpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL3BsdWdpbi54bWwgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZmNiYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8cGx1Z2luPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEubmF0dGFibGUuY29uZmlndXJhdGlvbiI+CisgICAgICA8Y29uZmlndXJhdGlvbgorICAgICAgICAgICAgZmlsZT0icmVzb3VyY2VzL2FsbG9jYXRpb24ubmF0dGFibGVjb25maWd1cmF0aW9uIgorICAgICAgICAgICAgdHlwZT0iUGFweXJ1c1N5c01MQWxsb2NhdGlvblRhYmxlIj4KKyAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL3BvbS54bWwgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjZmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9wb20ueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCTxwYXJlbnQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnBsdWdpbnM8L2FydGlmYWN0SWQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWc8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL3Jlc291cmNlcy9hbGxvY2F0aW9uLm5hdHRhYmxlY29uZmlndXJhdGlvbiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL3Jlc291cmNlcy9hbGxvY2F0aW9uLm5hdHRhYmxlY29uZmlndXJhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM4MTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvcmVzb3VyY2VzL2FsbG9jYXRpb24ubmF0dGFibGVjb25maWd1cmF0aW9uCkBAIC0wLDAgKzEsNDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bmF0dGFibGVjb25maWd1cmF0aW9uOlRhYmxlQ29uZmlndXJhdGlvbiB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiB4bWxuczpuYXR0YWJsZWF4aXM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXMiIHhtbG5zOm5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uIiB4bWxuczpuYXR0YWJsZWF4aXNwcm92aWRlcj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpc3Byb3ZpZGVyIiB4bWxuczpuYXR0YWJsZWNvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC9uYXR0YWJsZWNvbmZpZ3VyYXRpb24iIHhtbG5zOm5hdHRhYmxlbGFiZWxwcm92aWRlcj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlY29udGVudHByb3ZpZGVyIiB4bWxuczpuYXR0YWJsZXN0eWxlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVzdHlsZSIgeG1pOmlkPSJfSkM0cElEYTdFZW1IZTk1MnJsaEJDUSIgZGVzY3JpcHRpb249IlRoaXMgdGFibGUgaXMgdXNlZCB0byBkaXNwbGF5IFN5c01MIEFsbG9jYXRpb24iIG5hbWU9IkFsbG9jYXRpb25UYWJsZSIgdHlwZT0iUGFweXJ1c1N5c01MQWxsb2NhdGlvblRhYmxlIiBpY29uUGF0aD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL2ljb25zL3RhYmxlX1N5c01MX0FsbG9jYXRpb24ucG5nIiBjZWxsRWRpdG9yRGVjbGFyYXRpb249IkNPTFVNTiIgZGVmYXVsdFJvd0F4aXNQcm92aWRlcj0iX0pDNmVWRGE3RWVtSGU5NTJybGhCQ1EiIGRlZmF1bHRDb2x1bW5BeGlzUHJvdmlkZXI9Il9KQzUzUlRhN0VlbUhlOTUycmxoQkNRIj4KKyAgPHN0eWxlcyB4bWk6dHlwZT0ibmF0dGFibGVzdHlsZTpTdHJpbmdMaXN0VmFsdWVTdHlsZSIgeG1pOmlkPSJfSkM0cElUYTdFZW1IZTk1MnJsaEJDUSIgbmFtZT0iZHJhZ1JlZ2lvbnMiPgorICAgIDxzdHJpbmdMaXN0VmFsdWU+Uk9XX0hFQURFUjwvc3RyaW5nTGlzdFZhbHVlPgorICA8L3N0eWxlcz4KKyAgPHJvd0hlYWRlckF4aXNDb25maWd1cmF0aW9uIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOlRhYmxlSGVhZGVyQXhpc0NvbmZpZ3VyYXRpb24iIHhtaTppZD0iX0pDNHBJemE3RWVtSGU5NTJybGhCQ1EiIGluZGV4U3R5bGU9Ik5VTUVSSUMiIGRpc3BsYXlMYWJlbD0idHJ1ZSIgZGlzcGxheUZpbHRlcj0iZmFsc2UiIGRpc3BsYXlJbmRleD0idHJ1ZSI+CisgICAgPG93bmVkTGFiZWxDb25maWd1cmF0aW9ucyB4bWk6dHlwZT0ibmF0dGFibGVsYWJlbHByb3ZpZGVyOk9iamVjdExhYmVsUHJvdmlkZXJDb25maWd1cmF0aW9uIiB4bWk6aWQ9Il9KQzRwSkRhN0VlbUhlOTUycmxoQkNRIiBkaXNwbGF5SWNvbj0idHJ1ZSIgZGlzcGxheUxhYmVsPSJ0cnVlIi8+CisgICAgPG93bmVkTGFiZWxDb25maWd1cmF0aW9ucyB4bWk6dHlwZT0ibmF0dGFibGVsYWJlbHByb3ZpZGVyOk9wZXJhdGlvbkxhYmVsUHJvdmlkZXJDb25maWd1cmF0aW9uIiB4bWk6aWQ9Il9KQzVRTURhN0VlbUhlOTUycmxoQkNRIiBkaXNwbGF5SWNvbj0idHJ1ZSIgZGlzcGxheUxhYmVsPSJ0cnVlIiBkaXNwbGF5VHlwZT0iZmFsc2UiIGRpc3BsYXlNdWx0aXBsaWNpdHk9ImZhbHNlIiBkaXNwbGF5TmFtZT0idHJ1ZSIvPgorICAgIDxvd25lZEF4aXNDb25maWd1cmF0aW9ucyB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpFU3RydWN0dXJhbEZlYXR1cmVWYWx1ZUZpbGxpbmdDb25maWd1cmF0aW9uIiB4bWk6aWQ9Il9KQzVRTVRhN0VlbUhlOTUycmxoQkNRIj4KKyAgICAgIDxsaXN0ZW5GZWF0dXJlIHhtaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvNS4wLjAvVU1MIy8vTmFtZXNwYWNlL293bmVkTWVtYmVyIi8+CisgICAgPC9vd25lZEF4aXNDb25maWd1cmF0aW9ucz4KKyAgICA8b3duZWRBeGlzQ29uZmlndXJhdGlvbnMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246UGFzdGVFT2JqZWN0Q29uZmlndXJhdGlvbiIgeG1pOmlkPSJfSkM1UU1qYTdFZW1IZTk1MnJsaEJDUSIgZGV0YWNoZWRNb2RlPSJ0cnVlIiBwYXN0ZWRFbGVtZW50SWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuQWxsb2NhdGUiPgorICAgICAgPHBvc3RBY3Rpb25zPmFwcGx5U3RlcmVvdHlwZTovU3lzTUw6OkFsbG9jYXRpb25zOjpBbGxvY2F0ZTwvcG9zdEFjdGlvbnM+CisgICAgICA8cGFzdGVFbGVtZW50Q29udGFpbmVtZW50RmVhdHVyZSB4bWk6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCMvL1BhY2thZ2UvcGFja2FnZWRFbGVtZW50Ii8+CisgICAgICA8YXhpc0lkZW50aWZpZXIgeG1pOnR5cGU9Im5hdHRhYmxlYXhpczpFU3RydWN0dXJhbEZlYXR1cmVBeGlzIiB4bWk6aWQ9Il9PZ3lkUVhtb0VlV1ZaSUdHMVhiaUZ3IiBtYW5hZ2VyPSJfSkM1M1FqYTdFZW1IZTk1MnJsaEJDUSI+CisgICAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvNS4wLjAvVU1MIy8vTmFtZWRFbGVtZW50L25hbWUiLz4KKyAgICAgIDwvYXhpc0lkZW50aWZpZXI+CisgICAgPC9vd25lZEF4aXNDb25maWd1cmF0aW9ucz4KKyAgICA8YXhpc01hbmFnZXJzIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIHhtaTppZD0iX0pDNVFNemE3RWVtSGU5NTJybGhCQ1EiIGF4aXNNYW5hZ2VySWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGUuYXhpcy5tYW5hZ2VyIiBsYWJlbFByb3ZpZGVyQ29udGV4dD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5uYXR0YWJsZS5oZWFkZXIubGFiZWxwcm92aWRlciIgaGVhZGVyTGFiZWxDb25maWd1cmF0aW9uPSJfSkM0cEpEYTdFZW1IZTk1MnJsaEJDUSIgc3BlY2lmaWNBeGlzQ29uZmlndXJhdGlvbnM9Il9KQzVRTVRhN0VlbUhlOTUycmxoQkNRIi8+CisgIDwvcm93SGVhZGVyQXhpc0NvbmZpZ3VyYXRpb24+CisgIDxjb2x1bW5IZWFkZXJBeGlzQ29uZmlndXJhdGlvbiB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpUYWJsZUhlYWRlckF4aXNDb25maWd1cmF0aW9uIiB4bWk6aWQ9Il9KQzVRTkRhN0VlbUhlOTUycmxoQkNRIiBkaXNwbGF5TGFiZWw9InRydWUiIGRpc3BsYXlGaWx0ZXI9ImZhbHNlIiBkaXNwbGF5SW5kZXg9InRydWUiPgorICAgIDxvd25lZExhYmVsQ29uZmlndXJhdGlvbnMgeG1pOnR5cGU9Im5hdHRhYmxlbGFiZWxwcm92aWRlcjpGZWF0dXJlTGFiZWxQcm92aWRlckNvbmZpZ3VyYXRpb24iIHhtaTppZD0iX0pDNTNRRGE3RWVtSGU5NTJybGhCQ1EiIGRpc3BsYXlJY29uPSJ0cnVlIiBkaXNwbGF5TGFiZWw9InRydWUiIGRpc3BsYXlJc0Rlcml2ZWQ9InRydWUiIGRpc3BsYXlUeXBlPSJ0cnVlIiBkaXNwbGF5TXVsdGlwbGljaXR5PSJ0cnVlIiBkaXNwbGF5TmFtZT0idHJ1ZSIvPgorICAgIDxvd25lZExhYmVsQ29uZmlndXJhdGlvbnMgeG1pOnR5cGU9Im5hdHRhYmxlbGFiZWxwcm92aWRlcjpPcGVyYXRpb25MYWJlbFByb3ZpZGVyQ29uZmlndXJhdGlvbiIgeG1pOmlkPSJfSkM1M1FUYTdFZW1IZTk1MnJsaEJDUSIgZGlzcGxheUljb249InRydWUiIGRpc3BsYXlMYWJlbD0idHJ1ZSIgZGlzcGxheVR5cGU9InRydWUiIGRpc3BsYXlNdWx0aXBsaWNpdHk9InRydWUiIGRpc3BsYXlOYW1lPSJ0cnVlIi8+CisgICAgPGF4aXNNYW5hZ2VycyB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpBeGlzTWFuYWdlclJlcHJlc2VudGF0aW9uIiB4bWk6aWQ9Il9KQzUzUWphN0VlbUhlOTUycmxoQkNRIiBheGlzTWFuYWdlcklkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5uYXR0YWJsZS5mZWF0dXJlLmF4aXMubWFuYWdlciIgbGFiZWxQcm92aWRlckNvbnRleHQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEubmF0dGFibGUuaGVhZGVyLmZlYXR1cmUubGFiZWxwcm92aWRlciIgaGVhZGVyTGFiZWxDb25maWd1cmF0aW9uPSJfSkM1M1FEYTdFZW1IZTk1MnJsaEJDUSIvPgorICAgIDxheGlzTWFuYWdlcnMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246QXhpc01hbmFnZXJSZXByZXNlbnRhdGlvbiIgeG1pOmlkPSJfSkM1M1F6YTdFZW1IZTk1MnJsaEJDUSIgYXhpc01hbmFnZXJJZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubmF0dGFibGUuc3RlcmVvdHlwZS5wcm9wZXJ0eS5heGlzLm1hbmFnZXIiIGxhYmVsUHJvdmlkZXJDb250ZXh0PSJvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLm5hdHRhYmxlLmhlYWRlci5mZWF0dXJlLmxhYmVscHJvdmlkZXIiIGhlYWRlckxhYmVsQ29uZmlndXJhdGlvbj0iX0pDNTNRRGE3RWVtSGU5NTJybGhCQ1EiLz4KKyAgICA8YXhpc01hbmFnZXJzIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIHhtaTppZD0iX0pDNTNSRGE3RWVtSGU5NTJybGhCQ1EiIGF4aXNNYW5hZ2VySWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm5hdHRhYmxlLm9wZXJhdGlvbi5heGlzLm1hbmFnZXIiIGxhYmVsUHJvdmlkZXJDb250ZXh0PSJvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLm5hdHRhYmxlLmhlYWRlci5vcGVyYXRpb24ubGFiZWxwcm92aWRlciIgaGVhZGVyTGFiZWxDb25maWd1cmF0aW9uPSJfSkM1M1FUYTdFZW1IZTk1MnJsaEJDUSIvPgorICA8L2NvbHVtbkhlYWRlckF4aXNDb25maWd1cmF0aW9uPgorICA8Y29sdW1uQXhpc1Byb3ZpZGVycyB4bWk6dHlwZT0ibmF0dGFibGVheGlzcHJvdmlkZXI6U2xhdmVPYmplY3RBeGlzUHJvdmlkZXIiIHhtaTppZD0iX0pDNTNSVGE3RWVtSGU5NTJybGhCQ1EiIGRlc2NyaXB0aW9uPSJUaGlzIHByb3ZpZGVyIHByb3ZpZGVzIHRoZSBkZWZhdWx0IGNvbHVtbnMgZm9yIHRoZSBTeXNNTCBBbGxvY2F0aW9uIFRhYmxlIiBuYW1lPSJTeXNNTEFsbG9jYXRpb25GZWF0dXJlUHJvdmlkZXIiPgorICAgIDxheGlzIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXM6RVN0cnVjdHVyYWxGZWF0dXJlQXhpcyIgeG1pOmlkPSJfSkM2ZVVEYTdFZW1IZTk1MnJsaEJDUSIgbWFuYWdlcj0iX0pDNTNRamE3RWVtSGU5NTJybGhCQ1EiPgorICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi81LjAuMC9VTUwjLy9OYW1lZEVsZW1lbnQvbmFtZSIvPgorICAgIDwvYXhpcz4KKyAgICA8YXhpcyB4bWk6dHlwZT0ibmF0dGFibGVheGlzOkVTdHJ1Y3R1cmFsRmVhdHVyZUF4aXMiIHhtaTppZD0iX0pDNmVVVGE3RWVtSGU5NTJybGhCQ1EiIG1hbmFnZXI9Il9KQzUzUWphN0VlbUhlOTUycmxoQkNRIj4KKyAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvNS4wLjAvVU1MIy8vRGVwZW5kZW5jeS9jbGllbnQiLz4KKyAgICA8L2F4aXM+CisgICAgPGF4aXMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpczpFU3RydWN0dXJhbEZlYXR1cmVBeGlzIiB4bWk6aWQ9Il9KQzZlVWphN0VlbUhlOTUycmxoQkNRIiBtYW5hZ2VyPSJfSkM1M1FqYTdFZW1IZTk1MnJsaEJDUSI+CisgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCMvL0RlcGVuZGVuY3kvc3VwcGxpZXIiLz4KKyAgICA8L2F4aXM+CisgICAgPGF4aXMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpczpFU3RydWN0dXJhbEZlYXR1cmVBeGlzIiB4bWk6aWQ9Il9KQzZlVXphN0VlbUhlOTUycmxoQkNRIiBtYW5hZ2VyPSJfSkM1M1FqYTdFZW1IZTk1MnJsaEJDUSI+CisgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCMvL0VsZW1lbnQvb3duZXIiLz4KKyAgICA8L2F4aXM+CisgIDwvY29sdW1uQXhpc1Byb3ZpZGVycz4KKyAgPHJvd0F4aXNQcm92aWRlcnMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc3Byb3ZpZGVyOk1hc3Rlck9iamVjdEF4aXNQcm92aWRlciIgeG1pOmlkPSJfSkM2ZVZEYTdFZW1IZTk1MnJsaEJDUSIgZGVzY3JpcHRpb249IlRoaXMgcm93IHByb3ZpZGVycyBhbGxvd3MgdG8gZGlzcGxheSBhbGwgQWxsb2NhdGlvbiBpbiBhIFRhYmxlIiBuYW1lPSJTeXNNTEFsbG9jYXRpb25Qcm92aWRlciIgZGlzY29ubmVjdFNsYXZlPSJ0cnVlIi8+Cis8L25hdHRhYmxlY29uZmlndXJhdGlvbjpUYWJsZUNvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9uYXR0YWJsZS9hbGxvY2F0aW9uL2NvbmZpZy9BY3RpdmF0b3IuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL25hdHRhYmxlL2FsbG9jYXRpb24vY29uZmlnL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2I3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZy9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9uYXR0YWJsZS9hbGxvY2F0aW9uL2NvbmZpZy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgVmluY2VudCBMb3JlbnpvIChDRUEgTElTVCkgdmluY2VudC5sb3JlbnpvQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEuY29yZS5sb2cuTG9nSGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvLyBUaGUgcGx1Zy1pbiBJRAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmFsbG9jYXRpb24uY29uZmlnIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwlwdWJsaWMgc3RhdGljIExvZ0hlbHBlciBsb2c7CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwkJbG9nID0gbmV3IExvZ0hlbHBlcih0aGlzKTsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnLy5jbGFzc3BhdGggYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2E3YmRiCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjgiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnLy5wcm9qZWN0IGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGRkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvLnByb2plY3QKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWc8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLm9vbXBoLnZlcnNpb24uVmVyc2lvbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWE2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjkxIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuOAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYW5ub3RhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tZXRob2RfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbXVsdGlwbGVfZmllbGRzPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcmVzb3VyY2VzX2luX3RyeT04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc2VsZWN0b3JfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdW5pb25fdHlwZV9pbl9tdWx0aWNhdGNoPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfaW1wb3J0cz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfcGFja2FnZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpZWxkPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmlyc3RfY2xhc3NfYm9keV9kZWNsYXJhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZW1iZXJfdHlwZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX3BhY2thZ2U9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5faW1wb3J0X2dyb3Vwcz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9sYW1iZGFfYm9keT1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzX2luX2Jsb2NrX2NvbW1lbnQ9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzX2luX2phdmFkb2NfY29tbWVudD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2Jsb2NrX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9saW5lX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTI2MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubmV3X2xpbmVzX2F0X2Jsb2NrX2JvdW5kYXJpZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubmV3X2xpbmVzX2F0X2phdmFkb2NfYm91bmRhcmllcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5wcmVzZXJ2ZV93aGl0ZV9zcGFjZV9iZXR3ZWVuX2NvZGVfYW5kX2xpbmVfY29tbWVudHM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21wYWN0X2Vsc2VfaWY9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbj0yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj0yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZGlzYWJsaW5nX3RhZz1AZm9ybWF0dGVyXDpvZmYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5lbmFibGluZ190YWc9QGZvcm1hdHRlclw6b24KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfZ3VhcmRpYW5fY2xhdXNlX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2xpbmVfY29tbWVudF9zdGFydGluZ19vbl9maXJzdF9jb2x1bW49dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2Fubm90YXRpb25fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2NvbnN0YW50X2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX3R5cGVfaGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYnJlYWtzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9lbXB0eV9saW5lcz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zdGF0ZW1lbnRzX2NvbXBhcmVfdG9fYmxvY2s9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zdGF0ZW1lbnRzX2NvbXBhcmVfdG9fYm9keT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19jYXNlcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N3aXRjaHN0YXRlbWVudHNfY29tcGFyZV90b19zd2l0Y2g9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRhdGlvbi5zaXplPTQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9maWVsZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9sb2NhbF92YXJpYWJsZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9tZXRob2Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFja2FnZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYXJhbWV0ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3R5cGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2xhYmVsPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX3R5cGVfYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2F0X2VuZF9vZl9maWxlX2lmX21pc3Npbmc9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2F0Y2hfaW5fdHJ5X3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Vsc2VfaW5faWZfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2ZpbmFsbHlfaW5fdHJ5X3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV93aGlsZV9pbl9kb19zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm5vdGF0aW9uX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fY29uc3RhbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2VudW1fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X21ldGhvZF9ib2R5PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Nhc2U9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2xhYmVsZWRfc3RhdGVtZW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Fubm90YXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5jcmVtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luaXRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2xvY2FsX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9lbGxpcHNpcz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfbGFtYmRhX2Fycm93PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fdHJ5PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9sYW1iZGFfYXJyb3c9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3RyeT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fdHJ5X3Jlc291cmNlcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX2xpbmVzX2luX2NvbW1lbnRzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuam9pbl93cmFwcGVkX2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTI2MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9ibG9ja19jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5uZXZlcl9pbmRlbnRfbGluZV9jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfYmxhbmtfbGluZXNfYXRfYmVnaW5uaW5nX29mX21ldGhvZF9ib2R5PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfZW1wdHlfbGluZXNfdG9fcHJlc2VydmU9NQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnB1dF9lbXB0eV9zdGF0ZW1lbnRfb25fbmV3X2xpbmU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj10YWIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV9vbl9vZmZfdGFncz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV90YWJzX29ubHlfZm9yX2xlYWRpbmdfaW5kZW50YXRpb25zPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX2JlZm9yZV9vcl9vcGVyYXRvcl9tdWx0aWNhdGNoPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX291dGVyX2V4cHJlc3Npb25zX3doZW5fbmVzdGVkPXRydWUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MjgxZAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsNjggQEAKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX21ldGhvZHM9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9uc19pbnRlcmZhY2VfbWV0aG9kcz10cnVlCitjbGVhbnVwLmFkZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X2Z1bmN0aW9uYWxfaW50ZXJmYWNlcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPWZhbHNlCitjbGVhbnVwLmNvcnJlY3RfaW5kZW50YXRpb249ZmFsc2UKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlPWZhbHNlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZV9jaGFuZ2VzX29ubHk9ZmFsc2UKK2NsZWFudXAuaW5zZXJ0X2luZmVycmVkX3R5cGVfYXJndW1lbnRzPWZhbHNlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9ZmFsc2UKK2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfdHlwZV9hYnN0cmFjdF9pZl9taXNzaW5nX21ldGhvZD1mYWxzZQorY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD1mYWxzZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3JlZHVuZGFudF90eXBlX2FyZ3VtZW50cz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfaW1wb3J0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9hbm9ueW1vdXNfY2xhc3NfY3JlYXRpb249ZmFsc2UKK2NsZWFudXAudXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLnVzZV9ibG9ja3Nfb25seV9mb3JfcmV0dXJuX2FuZF90aHJvdz1mYWxzZQorY2xlYW51cC51c2VfbGFtYmRhPXRydWUKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdHlwZV9hcmd1bWVudHM9ZmFsc2UKK2NsZWFudXBfcHJvZmlsZT1fUGFweXJ1cworY2xlYW51cF9zZXR0aW5nc192ZXJzaW9uPTIKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitmb3JtYXR0ZXJfcHJvZmlsZT1fUGFweXJ1cworZm9ybWF0dGVyX3NldHRpbmdzX3ZlcnNpb249MTIKK29yZy5lY2xpcHNlLmpkdC51aS5pZ25vcmVsb3dlcmNhc2VuYW1lcz10cnVlCitvcmcuZWNsaXBzZS5qZHQudWkuaW1wb3J0b3JkZXI9amF2YTtqYXZheDtvcmc7Y29tOworb3JnLmVjbGlwc2UuamR0LnVpLmphdmFkb2M9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLm9uZGVtYW5kdGhyZXNob2xkPTk5CitvcmcuZWNsaXBzZS5qZHQudWkuc3RhdGljb25kZW1hbmR0aHJlc2hvbGQ9OTkKK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04IiBzdGFuZGFsb25lXD0ibm8iPz48dGVtcGxhdGVzPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImdldHRlcmNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGdldHRlciBtZXRob2QiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZ2V0dGVyY29tbWVudCIgbmFtZVw9ImdldHRlcmNvbW1lbnQiPi8qKlxuICogQHJldHVybiB0aGUgJHtiYXJlX2ZpZWxkX25hbWV9XG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9InNldHRlcmNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIHNldHRlciBtZXRob2QiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuc2V0dGVyY29tbWVudCIgbmFtZVw9InNldHRlcmNvbW1lbnQiPi8qKlxuICogQHBhcmFtICR7cGFyYW19IHRoZSAke2JhcmVfZmllbGRfbmFtZX0gdG8gc2V0XG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0iZmFsc2UiIGNvbnRleHRcPSJjb25zdHJ1Y3RvcmNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGNyZWF0ZWQgY29uc3RydWN0b3JzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmNvbnN0cnVjdG9yY29tbWVudCIgbmFtZVw9ImNvbnN0cnVjdG9yY29tbWVudCI+LyoqXG4gKiBDb25zdHJ1Y3Rvci5cbiAqXG4gKiAke3RhZ3N9XG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0iZmFsc2UiIGNvbnRleHRcPSJmaWxlY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgY3JlYXRlZCBKYXZhIGZpbGVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmZpbGVjb21tZW50IiBuYW1lXD0iZmlsZWNvbW1lbnQiPi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IChjKSAke3llYXJ9IENFQSBMSVNUIGFuZCBvdGhlcnMuXG4gKiBcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcbiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcbiAqIGh0dHBcOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuICpcbiAqIENvbnRyaWJ1dG9yc1w6XG4gKiAgIENFQSBMSVNUIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4gKiAgIFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJ0eXBlY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgY3JlYXRlZCB0eXBlcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy50eXBlY29tbWVudCIgbmFtZVw9InR5cGVjb21tZW50Ij4vKipcbiAqIEBhdXRob3IgJHt1c2VyfVxuICpcbiAqICR7dGFnc31cbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iZmllbGRjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBmaWVsZHMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZmllbGRjb21tZW50IiBuYW1lXD0iZmllbGRjb21tZW50Ij4vKipcbiAqIFxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJtZXRob2Rjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBub24tb3ZlcnJpZGluZyBtZXRob2RzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLm1ldGhvZGNvbW1lbnQiIG5hbWVcPSJtZXRob2Rjb21tZW50Ij4vKipcbiAqICR7dGFnc31cbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJmYWxzZSIgY29udGV4dFw9Im92ZXJyaWRlY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3Igb3ZlcnJpZGluZyBtZXRob2RzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLm92ZXJyaWRlY29tbWVudCIgbmFtZVw9Im92ZXJyaWRlY29tbWVudCI+LyoqXG4gKiAke3NlZV90b19vdmVycmlkZGVufVxuICpcbiAqICR7dGFnc31cbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJmYWxzZSIgY29udGV4dFw9ImRlbGVnYXRlY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgZGVsZWdhdGUgbWV0aG9kcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5kZWxlZ2F0ZWNvbW1lbnQiIG5hbWVcPSJkZWxlZ2F0ZWNvbW1lbnQiPi8qKlxuICogJHtzZWVfdG9fdGFyZ2V0fVxuICpcbiAqICR7dGFnc31cbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ibmV3dHlwZV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iTmV3bHkgY3JlYXRlZCBmaWxlcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5uZXd0eXBlIiBuYW1lXD0ibmV3dHlwZSI+JHtmaWxlY29tbWVudH1cbiR7cGFja2FnZV9kZWNsYXJhdGlvbn1cblxuJHt0eXBlY29tbWVudH1cbiR7dHlwZV9kZWNsYXJhdGlvbn08L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImNsYXNzYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgY2xhc3MgdHlwZSBib2RpZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuY2xhc3Nib2R5IiBuYW1lXD0iY2xhc3Nib2R5Ij5cbjwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iaW50ZXJmYWNlYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgaW50ZXJmYWNlIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmludGVyZmFjZWJvZHkiIG5hbWVcPSJpbnRlcmZhY2Vib2R5Ij5cbjwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iZW51bWJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gbmV3IGVudW0gdHlwZSBib2RpZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZW51bWJvZHkiIG5hbWVcPSJlbnVtYm9keSI+XG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImFubm90YXRpb25ib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBhbm5vdGF0aW9uIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmFubm90YXRpb25ib2R5IiBuYW1lXD0iYW5ub3RhdGlvbmJvZHkiPlxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJjYXRjaGJsb2NrX2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBjYXRjaCBibG9ja3MiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuY2F0Y2hibG9jayIgbmFtZVw9ImNhdGNoYmxvY2siPi8vICR7dG9kb30gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2tcbiR7ZXhjZXB0aW9uX3Zhcn0ucHJpbnRTdGFja1RyYWNlKCk7PC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJtZXRob2Rib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIGNyZWF0ZWQgbWV0aG9kIHN0dWJzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLm1ldGhvZGJvZHkiIG5hbWVcPSJtZXRob2Rib2R5Ij4vLyAke3RvZG99IEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViXG4ke2JvZHlfc3RhdGVtZW50fTwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iY29uc3RydWN0b3Jib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIGNyZWF0ZWQgY29uc3RydWN0b3Igc3R1YnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuY29uc3RydWN0b3Jib2R5IiBuYW1lXD0iY29uc3RydWN0b3Jib2R5Ij4ke2JvZHlfc3RhdGVtZW50fVxuLy8gJHt0b2RvfSBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJnZXR0ZXJib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIGNyZWF0ZWQgZ2V0dGVycyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5nZXR0ZXJib2R5IiBuYW1lXD0iZ2V0dGVyYm9keSI+cmV0dXJuICR7ZmllbGR9OzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ic2V0dGVyYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBjcmVhdGVkIHNldHRlcnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuc2V0dGVyYm9keSIgbmFtZVw9InNldHRlcmJvZHkiPiR7ZmllbGR9IFw9ICR7cGFyYW19OzwvdGVtcGxhdGU+PC90ZW1wbGF0ZXM+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmYjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcwpAQCAtMCwwICsxLDk4IEBACitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0RfV0lUSE9VVF9ERUZBVUxUX1ZBTFVFPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfQVBJX1RZUEU9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfUkVFWFBPUlRFRF9BUElfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9SRUVYUE9SVEVEX1RZUEU9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRT1FcnJvcgorQVBJX1VTRV9TQ0FOX0ZJRUxEX1NFVkVSSVRZPUVycm9yCitBUElfVVNFX1NDQU5fTUVUSE9EX1NFVkVSSVRZPUVycm9yCitBUElfVVNFX1NDQU5fVFlQRV9TRVZFUklUWT1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fRklOQUxfVE9fRklOQUw9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfQ09OU1RSVUNUT1I9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1NVUEVSQ0xBU1M9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfRU5VTV9DT05TVEFOVD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9BRERFRF9WQUxVRT1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9GSU5BTF9UT19OT05fRklOQUxfU1RBVElDX0NPTlNUQU5UPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fRklOQUxfVE9fRklOQUw9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9TVEFUSUNfVE9fU1RBVElDPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRT1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFMVUU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfQVJHVU1FTlQ9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1ZBTFVFPUVycm9yCitJTExFR0FMX0VYVEVORD1XYXJuaW5nCitJTExFR0FMX0lNUExFTUVOVD1XYXJuaW5nCitJTExFR0FMX0lOU1RBTlRJQVRFPVdhcm5pbmcKK0lMTEVHQUxfT1ZFUlJJREU9V2FybmluZworSUxMRUdBTF9SRUZFUkVOQ0U9V2FybmluZworSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9GSUVMRD1JZ25vcmUKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9TVVBFUl9JTlRFUkZBQ0VfV0lUSF9NRVRIT0RTPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlZBTElEX0FOTk9UQVRJT049SWdub3JlCitJTlZBTElEX0pBVkFET0NfVEFHPUlnbm9yZQorSU5WQUxJRF9SRUZFUkVOQ0VfSU5fU1lTVEVNX0xJQlJBUklFUz1JZ25vcmUKK0xFQUtfRVhURU5EPVdhcm5pbmcKK0xFQUtfRklFTERfREVDTD1XYXJuaW5nCitMRUFLX0lNUExFTUVOVD1XYXJuaW5nCitMRUFLX01FVEhPRF9QQVJBTT1XYXJuaW5nCitMRUFLX01FVEhPRF9SRVRVUk5fVFlQRT1XYXJuaW5nCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9TVEFUSUNfVE9fU1RBVElDPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfQU5OT1RBVElPTl9ERUZBVUxUX1ZBTFVFPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK01JU1NJTkdfRUVfREVTQ1JJUFRJT05TPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQURERURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1VOVVNFRF9QUk9CTEVNX0ZJTFRFUlM9V2FybmluZworYXV0b21hdGljYWxseV9yZW1vdmVkX3VudXNlZF9wcm9ibGVtX2ZpbHRlcnM9RW5hYmxlZAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb249RXJyb3IKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9tYWpvcl93aXRob3V0X2JyZWFraW5nX2NoYW5nZT1EaXNhYmxlZAoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21pbm9yX3dpdGhvdXRfYXBpX2NoYW5nZT1EaXNhYmxlZAoraW52YWxpZF9zaW5jZV90YWdfdmVyc2lvbj1FcnJvcgorbWFsZm9ybWVkX3NpbmNlX3RhZz1FcnJvcgorbWlzc2luZ19zaW5jZV90YWc9V2FybmluZworcmVwb3J0X2FwaV9icmVha2FnZV93aGVuX21ham9yX3ZlcnNpb25faW5jcmVtZW50ZWQ9RGlzYWJsZWQKK3JlcG9ydF9yZXNvbHV0aW9uX2Vycm9yc19hcGlfY29tcG9uZW50PVdhcm5pbmcKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNkMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTMgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEubmF0dGFibGUuY29tbW9uO2J1bmRsZS12ZXJzaW9uPSI1LjAuMCIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZworQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitCdW5kbGUtVmVyc2lvbjogMC4xMi4wLnF1YWxpZmllcgorQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcuQWN0aXZhdG9yCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtRGVzY3JpcHRpb246ICVwbHVnaW5EZXNjcmlwdGlvbgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWc7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZwpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL09TR0ktSU5GL2wxMG4vYnVuZGxlLnByb3BlcnRpZXMgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzUzMmFiCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL09TR0ktSU5GL2wxMG4vYnVuZGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzIEBACisjUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZworQnVuZGxlLVZlbmRvciA9IEVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdAorQnVuZGxlLU5hbWUgPSBOYXR0YWJsZSBSZXF1aXJlbWVudCBDb25maWd1cmF0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL2Fib3V0Lmh0bWwgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvYWJvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OThiMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL2Fib3V0Lmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiLz4KKzx0aXRsZT5BYm91dDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KKyAKKzxwPk1heSAxMiwgMjAwODwvcD4JCis8aDM+TGljZW5zZTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIAoraW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSAKK2F0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIAorYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQorYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIAorcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCitpbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudAorYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvYnVpbGQucHJvcGVydGllcyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzNiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEwIEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBPU0dJLUlORi8sXAorICAgICAgICAgICAgICAgY29uZmlncy8sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKK3NyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9jb25maWdzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9jb25maWdzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjA5OTQyCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL2NvbmZpZ3MvcmVxdWlyZW1lbnQubmF0dGFibGVjb25maWd1cmF0aW9uCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bmF0dGFibGVjb25maWd1cmF0aW9uOlRhYmxlQ29uZmlndXJhdGlvbiB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiB4bWxuczpuYXR0YWJsZWF4aXM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXMiIHhtbG5zOm5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uIiB4bWxuczpuYXR0YWJsZWF4aXNwcm92aWRlcj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpc3Byb3ZpZGVyIiB4bWxuczpuYXR0YWJsZWNvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC9uYXR0YWJsZWNvbmZpZ3VyYXRpb24iIHhtbG5zOm5hdHRhYmxlbGFiZWxwcm92aWRlcj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlY29udGVudHByb3ZpZGVyIiB4bWxuczpuYXR0YWJsZXN0eWxlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVzdHlsZSIgeG1pOmlkPSJfSjYwV3NEYTdFZW1IZTk1MnJsaEJDUSIgZGVzY3JpcHRpb249IkEgc3luY2hyb25pemVkIHRhYmxlIGZvciBTeXNNTCBSZXF1aXJlbWVudHMiIG5hbWU9IlJlcXVpcmVtZW50VGFibGUiIHR5cGU9IlBhcHlydXNTeXNNTFJlcXVpcmVtZW50VGFibGUiIGljb25QYXRoPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL2ljb25zL3RhYmxlX1N5c01MX1JlcXVpcmVtZW50LnBuZyIgY2VsbEVkaXRvckRlY2xhcmF0aW9uPSJDT0xVTU4iIGRlZmF1bHRSb3dBeGlzUHJvdmlkZXI9Il9KNjFrMWphN0VlbUhlOTUycmxoQkNRIiBkZWZhdWx0Q29sdW1uQXhpc1Byb3ZpZGVyPSJfSjYxazBqYTdFZW1IZTk1MnJsaEJDUSI+CisgIDxzdHlsZXMgeG1pOnR5cGU9Im5hdHRhYmxlc3R5bGU6U3RyaW5nTGlzdFZhbHVlU3R5bGUiIHhtaTppZD0iX0o2MFdzVGE3RWVtSGU5NTJybGhCQ1EiIG5hbWU9ImRyYWdSZWdpb25zIj4KKyAgICA8c3RyaW5nTGlzdFZhbHVlPlJPV19IRUFERVI8L3N0cmluZ0xpc3RWYWx1ZT4KKyAgPC9zdHlsZXM+CisgIDxyb3dIZWFkZXJBeGlzQ29uZmlndXJhdGlvbiB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpUYWJsZUhlYWRlckF4aXNDb25maWd1cmF0aW9uIiB4bWk6aWQ9Il9KNjBXc3phN0VlbUhlOTUycmxoQkNRIiBpbmRleFN0eWxlPSJOVU1FUklDIiBkaXNwbGF5TGFiZWw9InRydWUiIGRpc3BsYXlGaWx0ZXI9ImZhbHNlIiBkaXNwbGF5SW5kZXg9InRydWUiPgorICAgIDxvd25lZExhYmVsQ29uZmlndXJhdGlvbnMgeG1pOnR5cGU9Im5hdHRhYmxlbGFiZWxwcm92aWRlcjpPYmplY3RMYWJlbFByb3ZpZGVyQ29uZmlndXJhdGlvbiIgeG1pOmlkPSJfSjYwV3REYTdFZW1IZTk1MnJsaEJDUSIgZGlzcGxheUljb249InRydWUiIGRpc3BsYXlMYWJlbD0idHJ1ZSIvPgorICAgIDxvd25lZExhYmVsQ29uZmlndXJhdGlvbnMgeG1pOnR5cGU9Im5hdHRhYmxlbGFiZWxwcm92aWRlcjpPcGVyYXRpb25MYWJlbFByb3ZpZGVyQ29uZmlndXJhdGlvbiIgeG1pOmlkPSJfSjYwOXdEYTdFZW1IZTk1MnJsaEJDUSIgZGlzcGxheUljb249InRydWUiIGRpc3BsYXlMYWJlbD0idHJ1ZSIgZGlzcGxheVR5cGU9ImZhbHNlIiBkaXNwbGF5TXVsdGlwbGljaXR5PSJmYWxzZSIgZGlzcGxheU5hbWU9InRydWUiLz4KKyAgICA8b3duZWRBeGlzQ29uZmlndXJhdGlvbnMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246RVN0cnVjdHVyYWxGZWF0dXJlVmFsdWVGaWxsaW5nQ29uZmlndXJhdGlvbiIgeG1pOmlkPSJfSjYwOXdUYTdFZW1IZTk1MnJsaEJDUSI+CisgICAgICA8bGlzdGVuRmVhdHVyZSB4bWk6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCMvL05hbWVzcGFjZS9vd25lZE1lbWJlciIvPgorICAgIDwvb3duZWRBeGlzQ29uZmlndXJhdGlvbnM+CisgICAgPG93bmVkQXhpc0NvbmZpZ3VyYXRpb25zIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOlBhc3RlRU9iamVjdENvbmZpZ3VyYXRpb24iIHhtaTppZD0iX0o2MDl3amE3RWVtSGU5NTJybGhCQ1EiIGRldGFjaGVkTW9kZT0idHJ1ZSIgcGFzdGVkRWxlbWVudElkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlJlcXVpcmVtZW50Ij4KKyAgICAgIDxwb3N0QWN0aW9ucz5hcHBseVN0ZXJlb3R5cGU6L1N5c01MOjpSZXF1aXJlbWVudHM6OlJlcXVpcmVtZW50PC9wb3N0QWN0aW9ucz4KKyAgICAgIDxwYXN0ZUVsZW1lbnRDb250YWluZW1lbnRGZWF0dXJlIHhtaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvNS4wLjAvVU1MIy8vUGFja2FnZS9wYWNrYWdlZEVsZW1lbnQiLz4KKyAgICAgIDxheGlzSWRlbnRpZmllciB4bWk6dHlwZT0ibmF0dGFibGVheGlzOkVTdHJ1Y3R1cmFsRmVhdHVyZUF4aXMiIHhtaTppZD0iX09neWRRWG1vRWVXVlpJR0cxWGJpRnciIG1hbmFnZXI9Il9KNjA5eHphN0VlbUhlOTUycmxoQkNRIj4KKyAgICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi81LjAuMC9VTUwjLy9OYW1lZEVsZW1lbnQvbmFtZSIvPgorICAgICAgPC9heGlzSWRlbnRpZmllcj4KKyAgICA8L293bmVkQXhpc0NvbmZpZ3VyYXRpb25zPgorICAgIDxheGlzTWFuYWdlcnMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246QXhpc01hbmFnZXJSZXByZXNlbnRhdGlvbiIgeG1pOmlkPSJfSjYwOXd6YTdFZW1IZTk1MnJsaEJDUSIgYXhpc01hbmFnZXJJZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5heGlzLm1hbmFnZXIiIGxhYmVsUHJvdmlkZXJDb250ZXh0PSJvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLm5hdHRhYmxlLmhlYWRlci5sYWJlbHByb3ZpZGVyIiBoZWFkZXJMYWJlbENvbmZpZ3VyYXRpb249Il9KNjBXdERhN0VlbUhlOTUycmxoQkNRIiBzcGVjaWZpY0F4aXNDb25maWd1cmF0aW9ucz0iX0o2MDl3VGE3RWVtSGU5NTJybGhCQ1EiLz4KKyAgPC9yb3dIZWFkZXJBeGlzQ29uZmlndXJhdGlvbj4KKyAgPGNvbHVtbkhlYWRlckF4aXNDb25maWd1cmF0aW9uIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOlRhYmxlSGVhZGVyQXhpc0NvbmZpZ3VyYXRpb24iIHhtaTppZD0iX0o2MDl4RGE3RWVtSGU5NTJybGhCQ1EiIGRpc3BsYXlMYWJlbD0idHJ1ZSIgZGlzcGxheUZpbHRlcj0iZmFsc2UiIGRpc3BsYXlJbmRleD0idHJ1ZSI+CisgICAgPG93bmVkTGFiZWxDb25maWd1cmF0aW9ucyB4bWk6dHlwZT0ibmF0dGFibGVsYWJlbHByb3ZpZGVyOkZlYXR1cmVMYWJlbFByb3ZpZGVyQ29uZmlndXJhdGlvbiIgeG1pOmlkPSJfSjYwOXhUYTdFZW1IZTk1MnJsaEJDUSIgZGlzcGxheUljb249InRydWUiIGRpc3BsYXlMYWJlbD0idHJ1ZSIgZGlzcGxheUlzRGVyaXZlZD0idHJ1ZSIgZGlzcGxheVR5cGU9InRydWUiIGRpc3BsYXlNdWx0aXBsaWNpdHk9InRydWUiIGRpc3BsYXlOYW1lPSJ0cnVlIi8+CisgICAgPG93bmVkTGFiZWxDb25maWd1cmF0aW9ucyB4bWk6dHlwZT0ibmF0dGFibGVsYWJlbHByb3ZpZGVyOk9wZXJhdGlvbkxhYmVsUHJvdmlkZXJDb25maWd1cmF0aW9uIiB4bWk6aWQ9Il9KNjA5eGphN0VlbUhlOTUycmxoQkNRIiBkaXNwbGF5SWNvbj0idHJ1ZSIgZGlzcGxheUxhYmVsPSJ0cnVlIiBkaXNwbGF5VHlwZT0idHJ1ZSIgZGlzcGxheU11bHRpcGxpY2l0eT0idHJ1ZSIgZGlzcGxheU5hbWU9InRydWUiLz4KKyAgICA8YXhpc01hbmFnZXJzIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIHhtaTppZD0iX0o2MDl4emE3RWVtSGU5NTJybGhCQ1EiIGF4aXNNYW5hZ2VySWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm5hdHRhYmxlLmZlYXR1cmUuYXhpcy5tYW5hZ2VyIiBsYWJlbFByb3ZpZGVyQ29udGV4dD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5uYXR0YWJsZS5oZWFkZXIuZmVhdHVyZS5sYWJlbHByb3ZpZGVyIiBoZWFkZXJMYWJlbENvbmZpZ3VyYXRpb249Il9KNjA5eFRhN0VlbUhlOTUycmxoQkNRIi8+CisgICAgPGF4aXNNYW5hZ2VycyB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpBeGlzTWFuYWdlclJlcHJlc2VudGF0aW9uIiB4bWk6aWQ9Il9KNjFrMERhN0VlbUhlOTUycmxoQkNRIiBheGlzTWFuYWdlcklkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5uYXR0YWJsZS5zdGVyZW90eXBlLnByb3BlcnR5LmF4aXMubWFuYWdlciIgbGFiZWxQcm92aWRlckNvbnRleHQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEubmF0dGFibGUuaGVhZGVyLmZlYXR1cmUubGFiZWxwcm92aWRlciIgaGVhZGVyTGFiZWxDb25maWd1cmF0aW9uPSJfSjYwOXhUYTdFZW1IZTk1MnJsaEJDUSIvPgorICAgIDxheGlzTWFuYWdlcnMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246QXhpc01hbmFnZXJSZXByZXNlbnRhdGlvbiIgeG1pOmlkPSJfSjYxazBUYTdFZW1IZTk1MnJsaEJDUSIgYXhpc01hbmFnZXJJZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubmF0dGFibGUub3BlcmF0aW9uLmF4aXMubWFuYWdlciIgbGFiZWxQcm92aWRlckNvbnRleHQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEubmF0dGFibGUuaGVhZGVyLm9wZXJhdGlvbi5sYWJlbHByb3ZpZGVyIiBoZWFkZXJMYWJlbENvbmZpZ3VyYXRpb249Il9KNjA5eGphN0VlbUhlOTUycmxoQkNRIi8+CisgIDwvY29sdW1uSGVhZGVyQXhpc0NvbmZpZ3VyYXRpb24+CisgIDxjb2x1bW5BeGlzUHJvdmlkZXJzIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNwcm92aWRlcjpTbGF2ZU9iamVjdEF4aXNQcm92aWRlciIgeG1pOmlkPSJfSjYxazBqYTdFZW1IZTk1MnJsaEJDUSIgZGVzY3JpcHRpb249IlByb3ZpZGVzIHRoZSBjb2x1bW5zIG9mIHRoZSB0YWJsZXMgd2l0aCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiIgbmFtZT0iUmVxdWlyZW1lbnRzIEZlYXR1cmUgQ29sdW1ucyBQcm92aWRlciI+CisgICAgPGF4aXMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpczpGZWF0dXJlSWRBeGlzIiB4bWk6aWQ9Il9KNjFrMHphN0VlbUhlOTUycmxoQkNRIiBtYW5hZ2VyPSJfSjYxazBEYTdFZW1IZTk1MnJsaEJDUSIgZWxlbWVudD0icHJvcGVydHlfb2Zfc3RlcmVvdHlwZTovU3lzTUw6OlJlcXVpcmVtZW50czo6UmVxdWlyZW1lbnQ6OmlkIi8+CisgICAgPGF4aXMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpczpFU3RydWN0dXJhbEZlYXR1cmVBeGlzIiB4bWk6aWQ9Il9KNjFrMURhN0VlbUhlOTUycmxoQkNRIiBtYW5hZ2VyPSJfSjYwOXh6YTdFZW1IZTk1MnJsaEJDUSI+CisgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCMvL05hbWVkRWxlbWVudC9uYW1lIi8+CisgICAgPC9heGlzPgorICAgIDxheGlzIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXM6RmVhdHVyZUlkQXhpcyIgeG1pOmlkPSJfSjYxazFUYTdFZW1IZTk1MnJsaEJDUSIgbWFuYWdlcj0iX0o2MWswRGE3RWVtSGU5NTJybGhCQ1EiIGVsZW1lbnQ9InByb3BlcnR5X29mX3N0ZXJlb3R5cGU6L1N5c01MOjpSZXF1aXJlbWVudHM6OlJlcXVpcmVtZW50Ojp0ZXh0Ii8+CisgIDwvY29sdW1uQXhpc1Byb3ZpZGVycz4KKyAgPHJvd0F4aXNQcm92aWRlcnMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc3Byb3ZpZGVyOk1hc3Rlck9iamVjdEF4aXNQcm92aWRlciIgeG1pOmlkPSJfSjYxazFqYTdFZW1IZTk1MnJsaEJDUSIgZGVzY3JpcHRpb249IlByb3ZpZGVzIHRoZSByZXF1aXJlbWVudHMgZGlyZWN0bHkgb3duZWQgYnkgdGhlIGNvbnRleHQgb2YgdGhlIHRhYmxlIiBuYW1lPSJSZXF1aXJlbWVudCBBeGlzIFByb3ZpZGVyIiBkaXNjb25uZWN0U2xhdmU9InRydWUiLz4KKzwvbmF0dGFibGVjb25maWd1cmF0aW9uOlRhYmxlQ29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9pY29ucy9vbGQvdGFibGVfU3lzTUxfUmVxdWlyZW1lbnQuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL2ljb25zL29sZC90YWJsZV9TeXNNTF9SZXF1aXJlbWVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmYzk4YgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9pY29ucy9vbGQvdGFibGVfU3lzTUxfUmVxdWlyZW1lbnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9pY29ucy90YWJsZV9TeXNNTF9SZXF1aXJlbWVudC5wbmcgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvaWNvbnMvdGFibGVfU3lzTUxfUmVxdWlyZW1lbnQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjU0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvaWNvbnMvdGFibGVfU3lzTUxfUmVxdWlyZW1lbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9wbHVnaW4ucHJvcGVydGllcyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGMzZjMyCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTUgQ0VBIExJU1QuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIEJlbm9pdCBNYWdnaSAoQ0VBIExJU1QpIGJlbm9pdC5tYWdnaUBjZWEuZnIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMpCisKK3BsdWdpbkRlc2NyaXB0aW9uPVRoaXMgcGx1Z2luIHByb3ZpZGVzIHRoZSBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgUmVxdWlyZW1lbnQgVGFibGUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL3BsdWdpbi54bWwgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGFhZDgxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5uYXR0YWJsZS5jb25maWd1cmF0aW9uIj4KKyAgICAgIDxjb25maWd1cmF0aW9uCisgICAgICAgICAgICBmaWxlPSJjb25maWdzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbiIKKyAgICAgICAgICAgIHR5cGU9IlBhcHlydXNTeXNNTFJlcXVpcmVtZW50VGFibGUiPgorICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9wb20ueG1sIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0M2RiNwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9wb20ueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCTxwYXJlbnQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnBsdWdpbnM8L2FydGlmYWN0SWQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWcvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbmF0dGFibGUvcmVxdWlyZW1lbnQvY29uZmlnL0FjdGl2YXRvci5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL25hdHRhYmxlL3JlcXVpcmVtZW50L2NvbmZpZy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWU5NmYxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL25hdHRhYmxlL3JlcXVpcmVtZW50L2NvbmZpZy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgVmluY2VudCBMb3JlbnpvIChDRUEgTElTVCkgdmluY2VudC5sb3JlbnpvQGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWc7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLy8gVGhlIHBsdWctaW4gSUQKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5yZXF1aXJlbWVudC5jb25maWciOyAvLyROT04tTkxTLTEkCisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUJMRV9UWVBFID0gIlBhcHlydXNTeXNNTFJlcXVpcmVtZW50VGFibGUiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKgorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCit9CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC8uY2xhc3NwYXRoIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmYzMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuOCIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC8ucHJvamVjdCBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NTZiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC8ucHJvamVjdApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5vb21waC52ZXJzaW9uLlZlcnNpb25OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhYTZkNgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDI5MSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS44CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjgKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbl90eXBlX21lbWJlcnNfb25fY29sdW1ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2Fubm90YXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2VudW1fY29uc3RhbnQ9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9leHBsaWNpdF9jb25zdHJ1Y3Rvcl9jYWxsPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9xdWFsaWZpZWRfYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2JpbmFyeV9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb21wYWN0X2lmPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb25kaXRpb25hbF9leHByZXNzaW9uPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9lbnVtX2NvbnN0YW50cz0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9leHByZXNzaW9uc19pbl9hcnJheV9pbml0aWFsaXplcj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Jlc291cmNlc19pbl90cnk9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3VuaW9uX3R5cGVfaW5fbXVsdGljYXRjaD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2s9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2NvbnN0YW50PWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbGFtYmRhX2JvZHk9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfaGVhZGVyPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfaHRtbD10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfamF2YWRvY19jb21tZW50cz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfbGluZV9jb21tZW50cz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3BhcmFtZXRlcl9kZXNjcmlwdGlvbj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcm9vdF90YWdzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9iZWZvcmVfcm9vdF90YWdzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2Zvcl9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5saW5lX2xlbmd0aD0yNjAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9ibG9ja19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9qYXZhZG9jX2JvdW5kYXJpZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQucHJlc2VydmVfd2hpdGVfc3BhY2VfYmV0d2Vlbl9jb2RlX2FuZF9saW5lX2NvbW1lbnRzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmRpc2FibGluZ190YWc9QGZvcm1hdHRlclw6b2ZmCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZW5hYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9uCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2d1YXJkaWFuX2NsYXVzZV9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9saW5lX2NvbW1lbnRfc3RhcnRpbmdfb25fZmlyc3RfY29sdW1uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fc3dpdGNoPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fZmllbGQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbG9jYWxfdmFyaWFibGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbWV0aG9kPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhY2thZ2U9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFyYW1ldGVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl90eXBlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9sYWJlbD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl90eXBlX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9maW5hbGx5X2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2xhbWJkYV9hcnJvdz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NhdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fZm9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fdHJ5PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9zZW1pY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9zZW1pY29sb25faW5fdHJ5X3Jlc291cmNlcz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NhdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZm9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3RyeT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Nhc2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9kZWZhdWx0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2xhYmVsZWRfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2VudW1fY29uc3RhbnRfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9mb3JfaW5jcmVtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9mb3JfaW5pdHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2xvY2FsX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfZWxsaXBzaXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfbGFtYmRhX2Fycm93PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2NvbnN0YW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9tZXRob2RfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3N3aXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NhdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2lmPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl90cnk9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3JldHVybj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl90aHJvdz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3Bvc3RmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fd2lsZGNhcmQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX3RyeV9yZXNvdXJjZXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfdW5hcnlfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2JyYWNrZXRzX2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFjZXNfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNrZXRzX2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9tZXRob2RfaW52b2NhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuam9pbl9saW5lc19pbl9jb21tZW50cz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fd3JhcHBlZF9saW5lcz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfaW1wbGVfaWZfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX3RoZW5fc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmxpbmVTcGxpdD0yNjAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5uZXZlcl9pbmRlbnRfYmxvY2tfY29tbWVudHNfb25fZmlyc3RfY29sdW1uPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2xpbmVfY29tbWVudHNfb25fZmlyc3RfY29sdW1uPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2JsYW5rX2xpbmVzX2F0X2JlZ2lubmluZ19vZl9tZXRob2RfYm9keT0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubnVtYmVyX29mX2VtcHR5X2xpbmVzX3RvX3ByZXNlcnZlPTUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5wdXRfZW1wdHlfc3RhdGVtZW50X29uX25ld19saW5lPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLmNoYXI9dGFiCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5zaXplPTQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2Vfb25fb2ZmX3RhZ3M9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9iZWZvcmVfb3Jfb3BlcmF0b3JfbXVsdGljYXRjaD10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9vdXRlcl9leHByZXNzaW9uc193aGVuX25lc3RlZD10cnVlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQyODFkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDY4IEBACitjbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKK2NsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19tZXRob2RzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnNfaW50ZXJmYWNlX21ldGhvZHM9dHJ1ZQorY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF9mdW5jdGlvbmFsX2ludGVyZmFjZXM9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD1mYWxzZQorY2xlYW51cC5jb3JyZWN0X2luZGVudGF0aW9uPWZhbHNlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT1mYWxzZQorY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGVfY2hhbmdlc19vbmx5PWZhbHNlCitjbGVhbnVwLmluc2VydF9pbmZlcnJlZF90eXBlX2FyZ3VtZW50cz1mYWxzZQorY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsPWZhbHNlCitjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3R5cGVfYWJzdHJhY3RfaWZfbWlzc2luZ19tZXRob2Q9ZmFsc2UKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX2Jsb2Nrcz1mYWxzZQorY2xlYW51cC5uZXZlcl91c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9dHJ1ZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPWZhbHNlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX2ZpZWxkX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX2luc3RhbmNlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX3N1YnR5cGVzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitjbGVhbnVwLnJlbW92ZV9yZWR1bmRhbnRfdHlwZV9hcmd1bWVudHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eT1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfdHlwZXM9dHJ1ZQorY2xlYW51cC5zb3J0X21lbWJlcnM9ZmFsc2UKK2NsZWFudXAuc29ydF9tZW1iZXJzX2FsbD1mYWxzZQorY2xlYW51cC51c2VfYW5vbnltb3VzX2NsYXNzX2NyZWF0aW9uPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX2xhbWJkYT10cnVlCitjbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXAudXNlX3R5cGVfYXJndW1lbnRzPWZhbHNlCitjbGVhbnVwX3Byb2ZpbGU9X1BhcHlydXMKK2NsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZm9ybWF0dGVyX3Byb2ZpbGU9X1BhcHlydXMKK2Zvcm1hdHRlcl9zZXR0aW5nc192ZXJzaW9uPTEyCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsKK29yZy5lY2xpcHNlLmpkdC51aS5qYXZhZG9jPXRydWUKK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5CitvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+PHRlbXBsYXRlcz48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJnZXR0ZXJjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBnZXR0ZXIgbWV0aG9kIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmdldHRlcmNvbW1lbnQiIG5hbWVcPSJnZXR0ZXJjb21tZW50Ij4vKipcbiAqIEByZXR1cm4gdGhlICR7YmFyZV9maWVsZF9uYW1lfVxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJzZXR0ZXJjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBzZXR0ZXIgbWV0aG9kIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLnNldHRlcmNvbW1lbnQiIG5hbWVcPSJzZXR0ZXJjb21tZW50Ij4vKipcbiAqIEBwYXJhbSAke3BhcmFtfSB0aGUgJHtiYXJlX2ZpZWxkX25hbWV9IHRvIHNldFxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9ImZhbHNlIiBjb250ZXh0XD0iY29uc3RydWN0b3Jjb21tZW50X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb21tZW50IGZvciBjcmVhdGVkIGNvbnN0cnVjdG9ycyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5jb25zdHJ1Y3RvcmNvbW1lbnQiIG5hbWVcPSJjb25zdHJ1Y3RvcmNvbW1lbnQiPi8qKlxuICogQ29uc3RydWN0b3IuXG4gKlxuICogJHt0YWdzfVxuICovPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9ImZhbHNlIiBjb250ZXh0XD0iZmlsZWNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGNyZWF0ZWQgSmF2YSBmaWxlcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5maWxlY29tbWVudCIgbmFtZVw9ImZpbGVjb21tZW50Ij4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAoYykgJHt5ZWFyfSBDRUEgTElTVCBhbmQgb3RoZXJzLlxuICogXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG4gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcbiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4gKiBodHRwXDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbiAqXG4gKiBDb250cmlidXRvcnNcOlxuICogICBDRUEgTElTVCAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuICogICBcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0idHlwZWNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGNyZWF0ZWQgdHlwZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMudHlwZWNvbW1lbnQiIG5hbWVcPSJ0eXBlY29tbWVudCI+LyoqXG4gKiBAYXV0aG9yICR7dXNlcn1cbiAqXG4gKiAke3RhZ3N9XG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImZpZWxkY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3IgZmllbGRzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmZpZWxkY29tbWVudCIgbmFtZVw9ImZpZWxkY29tbWVudCI+LyoqXG4gKiBcbiAqLzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ibWV0aG9kY29tbWVudF9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29tbWVudCBmb3Igbm9uLW92ZXJyaWRpbmcgbWV0aG9kcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5tZXRob2Rjb21tZW50IiBuYW1lXD0ibWV0aG9kY29tbWVudCI+LyoqXG4gKiAke3RhZ3N9XG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0iZmFsc2UiIGNvbnRleHRcPSJvdmVycmlkZWNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIG92ZXJyaWRpbmcgbWV0aG9kcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5vdmVycmlkZWNvbW1lbnQiIG5hbWVcPSJvdmVycmlkZWNvbW1lbnQiPi8qKlxuICogJHtzZWVfdG9fb3ZlcnJpZGRlbn1cbiAqXG4gKiAke3RhZ3N9XG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0iZmFsc2UiIGNvbnRleHRcPSJkZWxlZ2F0ZWNvbW1lbnRfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvbW1lbnQgZm9yIGRlbGVnYXRlIG1ldGhvZHMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZGVsZWdhdGVjb21tZW50IiBuYW1lXD0iZGVsZWdhdGVjb21tZW50Ij4vKipcbiAqICR7c2VlX3RvX3RhcmdldH1cbiAqXG4gKiAke3RhZ3N9XG4gKi88L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9Im5ld3R5cGVfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9Ik5ld2x5IGNyZWF0ZWQgZmlsZXMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMubmV3dHlwZSIgbmFtZVw9Im5ld3R5cGUiPiR7ZmlsZWNvbW1lbnR9XG4ke3BhY2thZ2VfZGVjbGFyYXRpb259XG5cbiR7dHlwZWNvbW1lbnR9XG4ke3R5cGVfZGVjbGFyYXRpb259PC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJjbGFzc2JvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gbmV3IGNsYXNzIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmNsYXNzYm9keSIgbmFtZVw9ImNsYXNzYm9keSI+XG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImludGVyZmFjZWJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gbmV3IGludGVyZmFjZSB0eXBlIGJvZGllcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5pbnRlcmZhY2Vib2R5IiBuYW1lXD0iaW50ZXJmYWNlYm9keSI+XG48L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImVudW1ib2R5X2NvbnRleHQiIGRlbGV0ZWRcPSJmYWxzZSIgZGVzY3JpcHRpb25cPSJDb2RlIGluIG5ldyBlbnVtIHR5cGUgYm9kaWVzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmVudW1ib2R5IiBuYW1lXD0iZW51bWJvZHkiPlxuPC90ZW1wbGF0ZT48dGVtcGxhdGUgYXV0b2luc2VydFw9InRydWUiIGNvbnRleHRcPSJhbm5vdGF0aW9uYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgYW5ub3RhdGlvbiB0eXBlIGJvZGllcyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5hbm5vdGF0aW9uYm9keSIgbmFtZVw9ImFubm90YXRpb25ib2R5Ij5cbjwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iY2F0Y2hibG9ja19jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBuZXcgY2F0Y2ggYmxvY2tzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmNhdGNoYmxvY2siIG5hbWVcPSJjYXRjaGJsb2NrIj4vLyAke3RvZG99IEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrXG4ke2V4Y2VwdGlvbl92YXJ9LnByaW50U3RhY2tUcmFjZSgpOzwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0ibWV0aG9kYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBjcmVhdGVkIG1ldGhvZCBzdHVicyIgZW5hYmxlZFw9InRydWUiIGlkXD0ib3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY29kZXRlbXBsYXRlcy5tZXRob2Rib2R5IiBuYW1lXD0ibWV0aG9kYm9keSI+Ly8gJHt0b2RvfSBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YlxuJHtib2R5X3N0YXRlbWVudH08L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9ImNvbnN0cnVjdG9yYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBjcmVhdGVkIGNvbnN0cnVjdG9yIHN0dWJzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLmNvbnN0cnVjdG9yYm9keSIgbmFtZVw9ImNvbnN0cnVjdG9yYm9keSI+JHtib2R5X3N0YXRlbWVudH1cbi8vICR7dG9kb30gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YjwvdGVtcGxhdGU+PHRlbXBsYXRlIGF1dG9pbnNlcnRcPSJ0cnVlIiBjb250ZXh0XD0iZ2V0dGVyYm9keV9jb250ZXh0IiBkZWxldGVkXD0iZmFsc2UiIGRlc2NyaXB0aW9uXD0iQ29kZSBpbiBjcmVhdGVkIGdldHRlcnMiIGVuYWJsZWRcPSJ0cnVlIiBpZFw9Im9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmNvZGV0ZW1wbGF0ZXMuZ2V0dGVyYm9keSIgbmFtZVw9ImdldHRlcmJvZHkiPnJldHVybiAke2ZpZWxkfTs8L3RlbXBsYXRlPjx0ZW1wbGF0ZSBhdXRvaW5zZXJ0XD0idHJ1ZSIgY29udGV4dFw9InNldHRlcmJvZHlfY29udGV4dCIgZGVsZXRlZFw9ImZhbHNlIiBkZXNjcmlwdGlvblw9IkNvZGUgaW4gY3JlYXRlZCBzZXR0ZXJzIiBlbmFibGVkXD0idHJ1ZSIgaWRcPSJvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jb2RldGVtcGxhdGVzLnNldHRlcmJvZHkiIG5hbWVcPSJzZXR0ZXJib2R5Ij4ke2ZpZWxkfSBcPSAke3BhcmFtfTs8L3RlbXBsYXRlPjwvdGVtcGxhdGVzPgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2ZiOTVlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKQEAgLTAsMCArMSw5OCBAQAorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EX1dJVEhPVVRfREVGQVVMVF9WQUxVRT1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfQVBJX1RZUEU9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfUkVFWFBPUlRFRF9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEU9RXJyb3IKK0FQSV9VU0VfU0NBTl9GSUVMRF9TRVZFUklUWT1FcnJvcgorQVBJX1VTRV9TQ0FOX01FVEhPRF9TRVZFUklUWT1FcnJvcgorQVBJX1VTRV9TQ0FOX1RZUEVfU0VWRVJJVFk9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NPTlNUUlVDVE9SPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9TVVBFUkNMQVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0VOVU1fQ09OU1RBTlQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQURERURfVkFMVUU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfRklOQUxfVE9fTk9OX0ZJTkFMX1NUQVRJQ19DT05TVEFOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fU1RBVElDX1RPX1NUQVRJQz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX0FSR1VNRU5UPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9WQUxVRT1FcnJvcgorSUxMRUdBTF9FWFRFTkQ9V2FybmluZworSUxMRUdBTF9JTVBMRU1FTlQ9V2FybmluZworSUxMRUdBTF9JTlNUQU5USUFURT1XYXJuaW5nCitJTExFR0FMX09WRVJSSURFPVdhcm5pbmcKK0lMTEVHQUxfUkVGRVJFTkNFPVdhcm5pbmcKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfRklFTEQ9SWdub3JlCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfU1VQRVJfSU5URVJGQUNFX1dJVEhfTUVUSE9EUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5WQUxJRF9BTk5PVEFUSU9OPUlnbm9yZQorSU5WQUxJRF9KQVZBRE9DX1RBRz1JZ25vcmUKK0lOVkFMSURfUkVGRVJFTkNFX0lOX1NZU1RFTV9MSUJSQVJJRVM9SWdub3JlCitMRUFLX0VYVEVORD1XYXJuaW5nCitMRUFLX0ZJRUxEX0RFQ0w9V2FybmluZworTEVBS19JTVBMRU1FTlQ9V2FybmluZworTEVBS19NRVRIT0RfUEFSQU09V2FybmluZworTEVBS19NRVRIT0RfUkVUVVJOX1RZUEU9V2FybmluZworTUVUSE9EX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fQUJTVFJBQ1RfVE9fQUJTVFJBQ1Q9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fRklOQUxfVE9fRklOQUw9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fU1RBVElDX1RPX1NUQVRJQz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1NUQVRJQ19UT19OT05fU1RBVElDPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFSQVJHU19UT19BUlJBWT1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0FOTk9UQVRJT05fREVGQVVMVF9WQUxVRT1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitNSVNTSU5HX0VFX0RFU0NSSVBUSU9OUz1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQURERURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitVTlVTRURfUFJPQkxFTV9GSUxURVJTPVdhcm5pbmcKK2F1dG9tYXRpY2FsbHlfcmVtb3ZlZF91bnVzZWRfcHJvYmxlbV9maWx0ZXJzPUVuYWJsZWQKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uPUVycm9yCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uX2luY2x1ZGVfbWFqb3Jfd2l0aG91dF9icmVha2luZ19jaGFuZ2U9RGlzYWJsZWQKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9taW5vcl93aXRob3V0X2FwaV9jaGFuZ2U9RGlzYWJsZWQKK2ludmFsaWRfc2luY2VfdGFnX3ZlcnNpb249RXJyb3IKK21hbGZvcm1lZF9zaW5jZV90YWc9RXJyb3IKK21pc3Npbmdfc2luY2VfdGFnPVdhcm5pbmcKK3JlcG9ydF9hcGlfYnJlYWthZ2Vfd2hlbl9tYWpvcl92ZXJzaW9uX2luY3JlbWVudGVkPURpc2FibGVkCityZXBvcnRfcmVzb2x1dGlvbl9lcnJvcnNfYXBpX2NvbXBvbmVudD1XYXJuaW5nCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NjlhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDQ3IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5leHRlbnNpb25wb2ludHM7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuMTIuMCw0LjAuMCkiLAorIG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQ7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiO3Zpc2liaWxpdHk6PXJlZXhwb3J0CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLnV0aWwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucywKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy51dGlsLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MudXRpbCwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbCwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLnV0aWwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuaW50ZXJuYWwuaW1wbCwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy51dGlsLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJuYWwuaW1wbCwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLnV0aWwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbCwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy51dGlsLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMudXRpbCwKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLmludGVybmFsLmltcGwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLnV0aWwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcywKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLmludGVybmFsLmltcGwsCisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy51dGlsLAorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXRpbAorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZXJzaW9uOiAwLjEyLjAucXVhbGlmaWVyCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2Fib3V0Lmh0bWwgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9hYm91dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNWQ1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9hYm91dC5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIi8+Cis8dGl0bGU+QWJvdXQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+CisgCis8cD5KdW5lIDUsIDIwMDc8L3A+CQorPGgzPkxpY2Vuc2U8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSAKK2luZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgCithdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgQ29udGVudCBpcyAKK2JlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKK2FwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyAKK3Byb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQoraW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQKK2FuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZzwvYT4uPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9idWlsZC5wcm9wZXJ0aWVzIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTY0YzZmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDggQEAKKyMKKyNNb24gU2VwIDEyIDA5OjMwOjEzIENFU1QgMjAxMQorb3V0cHV0Li49YmluLworYmluLmluY2x1ZGVzPS4sbW9kZWwvLE1FVEEtSU5GLyxwbHVnaW4ueG1sLHBsdWdpbi5wcm9wZXJ0aWVzLGxpYnJhcmllcy8saWNvbnMvLGFib3V0Lmh0bWwKK2phcnMuY29tcGlsZS5vcmRlcj0uCitzcmMuaW5jbHVkZXMgPSBhYm91dC5odG1sCitzb3VyY2UuLj1zcmMvCitiaW4uLj1iaW4vCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9TeXNNTExpYnJhcnkuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvU3lzTUxMaWJyYXJ5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjhiZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvU3lzTUxMaWJyYXJ5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9TeXNNTE1vZGVsLmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL1N5c01MTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWUzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9TeXNNTE1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9TeXNNTFByb2ZpbGUuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvU3lzTUxQcm9maWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGMzODM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvU3lzTUxQcm9maWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9hbGxvY2F0aW9ucy9BbGxvY2F0ZS5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9hbGxvY2F0aW9ucy9BbGxvY2F0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhMjUzNgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL2FsbG9jYXRpb25zL0FsbG9jYXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvQmxvY2suZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvYmxvY2tzL0Jsb2NrLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzVhYjgzCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvYmxvY2tzL0Jsb2NrLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvQmxvY2tQcm9wZXJ0eS5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvQmxvY2tQcm9wZXJ0eS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxNGM2NQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL2Jsb2Nrcy9CbG9ja1Byb3BlcnR5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvRGltZW5zaW9uLmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL2Jsb2Nrcy9EaW1lbnNpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODYxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvRGltZW5zaW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvVW5pdC5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvVW5pdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiZmIyNgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL2Jsb2Nrcy9Vbml0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvVmFsdWVUeXBlLmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL2Jsb2Nrcy9WYWx1ZVR5cGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTQ0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9ibG9ja3MvVmFsdWVUeXBlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9jb25zdHJhaW50cy9Db25zdHJhaW50QmxvY2suZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvY29uc3RyYWludHMvQ29uc3RyYWludEJsb2NrLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTc3NTBhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvY29uc3RyYWludHMvQ29uc3RyYWludEJsb2NrLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9jb25zdHJhaW50cy9Db25zdHJhaW50UHJvcGVydHkuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvY29uc3RyYWludHMvQ29uc3RyYWludFByb3BlcnR5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk0OGU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvY29uc3RyYWludHMvQ29uc3RyYWludFByb3BlcnR5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9tb2RlbGVsZW1lbnRzL0NvbmZvcm0uZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvbW9kZWxlbGVtZW50cy9Db25mb3JtLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzJjNWMyCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvbW9kZWxlbGVtZW50cy9Db25mb3JtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9tb2RlbGVsZW1lbnRzL1Byb2JsZW0uZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvbW9kZWxlbGVtZW50cy9Qcm9ibGVtLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDk4OWU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvbW9kZWxlbGVtZW50cy9Qcm9ibGVtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9tb2RlbGVsZW1lbnRzL1JhdGlvbmFsZS5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9tb2RlbGVsZW1lbnRzL1JhdGlvbmFsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyODUxZgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL21vZGVsZWxlbWVudHMvUmF0aW9uYWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9tb2RlbGVsZW1lbnRzL1ZpZXcuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvbW9kZWxlbGVtZW50cy9WaWV3LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg3NGZmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvbW9kZWxlbGVtZW50cy9WaWV3LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9tb2RlbGVsZW1lbnRzL1ZpZXdwb2ludC5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9tb2RlbGVsZW1lbnRzL1ZpZXdwb2ludC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjZDI4NQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL21vZGVsZWxlbWVudHMvVmlld3BvaW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnQuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGVkN2NlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnRfSU4uZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0X0lOLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ1Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0X0lOLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnRfSU5PVVQuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0X0lOT1VULmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGVkN2NlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0X0lOT1VULmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnRfTkEuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0X05BLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmQ0YjA1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0X05BLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnRfT1VULmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UG9ydF9PVVQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiN2MyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnRfT1VULmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5LmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzBlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X0lOLmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHlfSU4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjBiOTgKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X0lOLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X0lOT1VULmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHlfSU5PVVQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjRjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X0lOT1VULmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X09VVC5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X09VVC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzMDUzNQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHlfT1VULmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1NwZWNpZmljYXRpb24uZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dTcGVjaWZpY2F0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGY2MzVmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dTcGVjaWZpY2F0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvSXRlbUZsb3cuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0l0ZW1GbG93LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWM5ZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0l0ZW1GbG93LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvQ29weS5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvQ29weS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjYWEwYgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3JlcXVpcmVtZW50cy9Db3B5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvRGVyaXZlUmVxdC5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvRGVyaXZlUmVxdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxNzc0OAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3JlcXVpcmVtZW50cy9EZXJpdmVSZXF0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvUmVmaW5lLmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3JlcXVpcmVtZW50cy9SZWZpbmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDFkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvUmVmaW5lLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnQuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDYxOGUwCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvU2F0aXNmeS5naWYgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvU2F0aXNmeS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4NDhkOAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3JlcXVpcmVtZW50cy9TYXRpc2Z5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvVGVzdENhc2UuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcmVxdWlyZW1lbnRzL1Rlc3RDYXNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzI5NjExCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcmVxdWlyZW1lbnRzL1Rlc3RDYXNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvVHJhY2UuZ2lmIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcmVxdWlyZW1lbnRzL1RyYWNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGNiMGQzCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcmVxdWlyZW1lbnRzL1RyYWNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvVmVyaWZ5LmdpZiBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3JlcXVpcmVtZW50cy9WZXJpZnkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTRlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvVmVyaWZ5LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9saWJyYXJpZXMvU3lzTUxQcmltaXRpdmVUeXBlcy5kaTIgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9saWJyYXJpZXMvU3lzTUxQcmltaXRpdmVUeXBlcy5kaTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4NWE5MwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2xpYnJhcmllcy9TeXNNTFByaW1pdGl2ZVR5cGVzLmRpMgpAQCAtMCwwICsxLDkxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGRpMjpEaWFncmFtIHhtaTp2ZXJzaW9uPSIyLjEiIHhtbG5zOnhtaT0iaHR0cDovL3NjaGVtYS5vbWcub3JnL3NwZWMvWE1JLzIuMSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6ZGkyPSJodHRwOi8vd3d3LnBhcHlydXN1bWwub3JnIiB4bWxuczp1bWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi8yLjEuMC9VTUwiIHhtaTppZD0iX0FtUmhBTFhtRWR1SFdwQWFXak02MnciIGlzVmlzaWJsZT0idHJ1ZSIgZm9udEZhbWlseT0iQXJpYWwiIGxpbmVTdHlsZT0ic29saWQiIGZvbnRDb2xvcj0iMjU1OjI1NToyNTUiIGZvcmVncm91bmRDb2xvcj0iMjU1OjI1NToyNTUiIGJhY2tncm91bmRDb2xvcj0iMjU1OjI1NToyNTUiIGJvcmRlckNvbG9yPSIyNTU6MjU1OjI1NSIgcG9zaXRpb249IjA6MCIgbmFtZT0iQWN0aXZpdGllcyI+CisgIDxjb250YWluZWQgeHNpOnR5cGU9ImRpMjpHcmFwaE5vZGUiIHhtaTppZD0iX0U3NkVnTFhtRWR1SFdwQWFXak02MnciIGlzVmlzaWJsZT0idHJ1ZSIgZm9udEZhbWlseT0iQXJpYWwiIGxpbmVTdHlsZT0ic29saWQiIGZvbnRDb2xvcj0iMDowOjAiIGZvcmVncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJhY2tncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJvcmRlckNvbG9yPSIxNTc6MTI0OjQ3IiBwb3NpdGlvbj0iMTE2OjU2IiBzaXplPSIxNDY6MTMwIj4KKyAgICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiB4bWk6aWQ9Il9FOERPY0xYbUVkdUhXcEFhV2pNNjJ3IiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTU3OjEyNDo0NyIgcG9zaXRpb249IjIwOjIwIiBzaXplPSIxMDA6MTAwIj4KKyAgICAgIDxjb250YWluZWQgeHNpOnR5cGU9ImRpMjpHcmFwaE5vZGUiIHhtaTppZD0iX0hGcW1VTFhtRWR1SFdwQWFXak02MnciIGlzVmlzaWJsZT0idHJ1ZSIgZm9udEZhbWlseT0iQXJpYWwiIGxpbmVTdHlsZT0ic29saWQiIGZvbnRDb2xvcj0iMDowOjAiIGZvcmVncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJhY2tncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJvcmRlckNvbG9yPSIxNTc6MTI0OjQ3IiBwb3NpdGlvbj0iMjA6MjAiIHNpemU9IjEwMDoxMDAiPgorICAgICAgICA8c2VtYW50aWNNb2RlbCB4c2k6dHlwZT0iZGkyOlVtbDFTZW1hbnRpY01vZGVsQnJpZGdlIiB4bWk6aWQ9Il9IRnFtVWJYbUVkdUhXcEFhV2pNNjJ3IiBwcmVzZW50YXRpb249IlRleHRTdGVyZW90eXBlIj4KKyAgICAgICAgICA8ZWxlbWVudCB4c2k6dHlwZT0idW1sOkVudW1lcmF0aW9uTGl0ZXJhbCIgaHJlZj0iU3lzTUxQcmltaXRpdmVUeXBlcy51bWwjX0hGb0tFTFhtRWR1SFdwQWFXak02MnciLz4KKyAgICAgICAgPC9zZW1hbnRpY01vZGVsPgorICAgICAgPC9jb250YWluZWQ+CisgICAgICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiB4bWk6aWQ9Il9IUTQtNExYbUVkdUhXcEFhV2pNNjJ3IiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTU3OjEyNDo0NyIgcG9zaXRpb249IjIwOjIwIiBzaXplPSIxMDA6MTAwIj4KKyAgICAgICAgPHNlbWFudGljTW9kZWwgeHNpOnR5cGU9ImRpMjpVbWwxU2VtYW50aWNNb2RlbEJyaWRnZSIgeG1pOmlkPSJfSFE0LTRiWG1FZHVIV3BBYVdqTTYydyIgcHJlc2VudGF0aW9uPSJUZXh0U3RlcmVvdHlwZSI+CisgICAgICAgICAgPGVsZW1lbnQgeHNpOnR5cGU9InVtbDpFbnVtZXJhdGlvbkxpdGVyYWwiIGhyZWY9IlN5c01MUHJpbWl0aXZlVHlwZXMudW1sI19IUTN3d0xYbUVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICAgIDwvc2VtYW50aWNNb2RlbD4KKyAgICAgIDwvY29udGFpbmVkPgorICAgIDwvY29udGFpbmVkPgorICAgIDxzZW1hbnRpY01vZGVsIHhzaTp0eXBlPSJkaTI6VW1sMVNlbWFudGljTW9kZWxCcmlkZ2UiIHhtaTppZD0iX0U3NkVnYlhtRWR1SFdwQWFXak02MnciIHByZXNlbnRhdGlvbj0iVGV4dFN0ZXJlb3R5cGUiPgorICAgICAgPGVsZW1lbnQgeHNpOnR5cGU9InVtbDpFbnVtZXJhdGlvbiIgaHJlZj0iU3lzTUxQcmltaXRpdmVUeXBlcy51bWwjX0U3cmJBTFhtRWR1SFdwQWFXak02MnciLz4KKyAgICA8L3NlbWFudGljTW9kZWw+CisgIDwvY29udGFpbmVkPgorICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiB4bWk6aWQ9Il92bGtRc0xYekVkdTk0X05FMEVPNV9BIiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTU3OjEyNDo0NyIgcG9zaXRpb249IjMyMjo1NiIgc2l6ZT0iMTIwOjEzMCI+CisgICAgPHByb3BlcnR5IGtleT0iUHJvcFN0ZXJlb0Rpc3BsYXkiIHZhbHVlPSJTeXNNTDo6QmxvY2tzOjpWYWx1ZVR5cGUiLz4KKyAgICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiB4bWk6aWQ9Il92bHk2TUxYekVkdTk0X05FMEVPNV9BIiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTU3OjEyNDo0NyIgcG9zaXRpb249IjIwOjIwIiBzaXplPSIxMDA6MTAwIi8+CisgICAgPGNvbnRhaW5lZCB4c2k6dHlwZT0iZGkyOkdyYXBoTm9kZSIgeG1pOmlkPSJfdmx6aFFMWHpFZHU5NF9ORTBFTzVfQSIgaXNWaXNpYmxlPSJ0cnVlIiBmb250RmFtaWx5PSJBcmlhbCIgbGluZVN0eWxlPSJzb2xpZCIgZm9udENvbG9yPSIwOjA6MCIgZm9yZWdyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYmFja2dyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYm9yZGVyQ29sb3I9IjE1NzoxMjQ6NDciIHBvc2l0aW9uPSIyMDoyMCIgc2l6ZT0iMTAwOjEwMCIvPgorICAgIDxzZW1hbnRpY01vZGVsIHhzaTp0eXBlPSJkaTI6VW1sMVNlbWFudGljTW9kZWxCcmlkZ2UiIHhtaTppZD0iX3Zsa1FzYlh6RWR1OTRfTkUwRU81X0EiIHByZXNlbnRhdGlvbj0iVGV4dFN0ZXJlb3R5cGUiPgorICAgICAgPGVsZW1lbnQgeHNpOnR5cGU9InVtbDpEYXRhVHlwZSIgaHJlZj0iU3lzTUxQcmltaXRpdmVUeXBlcy51bWwjX3ZqWDRVTFh6RWR1OTRfTkUwRU81X0EiLz4KKyAgICA8L3NlbWFudGljTW9kZWw+CisgIDwvY29udGFpbmVkPgorICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiB4bWk6aWQ9Il94QjY1OExYekVkdTk0X05FMEVPNV9BIiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTU3OjEyNDo0NyIgcG9zaXRpb249IjQ4Mjo1NiIgc2l6ZT0iMjEyOjEzMCI+CisgICAgPHByb3BlcnR5IGtleT0iUHJvcFN0ZXJlb0Rpc3BsYXkiIHZhbHVlPSJTeXNNTDo6QmxvY2tzOjpWYWx1ZVR5cGUiLz4KKyAgICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiB4bWk6aWQ9Il94QjlXTUxYekVkdTk0X05FMEVPNV9BIiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTU3OjEyNDo0NyIgcG9zaXRpb249IjIwOjIwIiBzaXplPSIxMDA6MTAwIj4KKyAgICAgIDxjb250YWluZWQgeHNpOnR5cGU9ImRpMjpHcmFwaE5vZGUiIHhtaTppZD0iXzVwbFRVTFh6RWR1OTRfTkUwRU81X0EiIGlzVmlzaWJsZT0idHJ1ZSIgZm9udEZhbWlseT0iQXJpYWwiIGxpbmVTdHlsZT0ic29saWQiIGZvbnRDb2xvcj0iMDowOjAiIGZvcmVncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJhY2tncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJvcmRlckNvbG9yPSIxNjY6MTU3OjE4MyIgcG9zaXRpb249IjIwOjIwIiBzaXplPSIxMDA6MTAwIj4KKyAgICAgICAgPHByb3BlcnR5IHhtaTppZD0iXzVwbFRVclh6RWR1OTRfTkUwRU81X0EiIGtleT0iY3VzdG9tX2Rpc3AiIHZhbHVlPSIyNTQiLz4KKyAgICAgICAgPHNlbWFudGljTW9kZWwgeHNpOnR5cGU9ImRpMjpVbWwxU2VtYW50aWNNb2RlbEJyaWRnZSIgeG1pOmlkPSJfNXBsVFViWHpFZHU5NF9ORTBFTzVfQSIgcHJlc2VudGF0aW9uPSJUZXh0U3RlcmVvdHlwZSI+CisgICAgICAgICAgPGVsZW1lbnQgeHNpOnR5cGU9InVtbDpQcm9wZXJ0eSIgaHJlZj0iU3lzTUxQcmltaXRpdmVUeXBlcy51bWwjXzVwaG84TFh6RWR1OTRfTkUwRU81X0EiLz4KKyAgICAgICAgPC9zZW1hbnRpY01vZGVsPgorICAgICAgPC9jb250YWluZWQ+CisgICAgICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiB4bWk6aWQ9Il81dmQ0NExYekVkdTk0X05FMEVPNV9BIiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTY2OjE1NzoxODMiIHBvc2l0aW9uPSIyMDoyMCIgc2l6ZT0iMTAwOjEwMCI+CisgICAgICAgIDxwcm9wZXJ0eSB4bWk6aWQ9Il81dmVmOExYekVkdTk0X05FMEVPNV9BIiBrZXk9ImN1c3RvbV9kaXNwIiB2YWx1ZT0iMjU0Ii8+CisgICAgICAgIDxzZW1hbnRpY01vZGVsIHhzaTp0eXBlPSJkaTI6VW1sMVNlbWFudGljTW9kZWxCcmlkZ2UiIHhtaTppZD0iXzV2ZDQ0Ylh6RWR1OTRfTkUwRU81X0EiIHByZXNlbnRhdGlvbj0iVGV4dFN0ZXJlb3R5cGUiPgorICAgICAgICAgIDxlbGVtZW50IHhzaTp0eXBlPSJ1bWw6UHJvcGVydHkiIGhyZWY9IlN5c01MUHJpbWl0aXZlVHlwZXMudW1sI181dmNEc0xYekVkdTk0X05FMEVPNV9BIi8+CisgICAgICAgIDwvc2VtYW50aWNNb2RlbD4KKyAgICAgIDwvY29udGFpbmVkPgorICAgIDwvY29udGFpbmVkPgorICAgIDxjb250YWluZWQgeHNpOnR5cGU9ImRpMjpHcmFwaE5vZGUiIHhtaTppZD0iX3hCOTlRTFh6RWR1OTRfTkUwRU81X0EiIGlzVmlzaWJsZT0idHJ1ZSIgZm9udEZhbWlseT0iQXJpYWwiIGxpbmVTdHlsZT0ic29saWQiIGZvbnRDb2xvcj0iMDowOjAiIGZvcmVncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJhY2tncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJvcmRlckNvbG9yPSIxNTc6MTI0OjQ3IiBwb3NpdGlvbj0iMjA6MjAiIHNpemU9IjEwMDoxMDAiLz4KKyAgICA8c2VtYW50aWNNb2RlbCB4c2k6dHlwZT0iZGkyOlVtbDFTZW1hbnRpY01vZGVsQnJpZGdlIiB4bWk6aWQ9Il94QjY1OGJYekVkdTk0X05FMEVPNV9BIiBwcmVzZW50YXRpb249IlRleHRTdGVyZW90eXBlIj4KKyAgICAgIDxlbGVtZW50IHhzaTp0eXBlPSJ1bWw6RGF0YVR5cGUiIGhyZWY9IlN5c01MUHJpbWl0aXZlVHlwZXMudW1sI194QjVyMExYekVkdTk0X05FMEVPNV9BIi8+CisgICAgPC9zZW1hbnRpY01vZGVsPgorICA8L2NvbnRhaW5lZD4KKyAgPGNvbnRhaW5lZCB4c2k6dHlwZT0iZGkyOkdyYXBoTm9kZSIgaXNWaXNpYmxlPSJ0cnVlIiBmb250RmFtaWx5PSJBcmlhbCIgbGluZVN0eWxlPSJzb2xpZCIgZm9udENvbG9yPSIwOjA6MCIgZm9yZWdyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYmFja2dyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYm9yZGVyQ29sb3I9IjE1NzoxMjQ6NDciIHBvc2l0aW9uPSIxMTY6MjA1IiBzaXplPSIxNDY6MTMwIj4KKyAgICA8cHJvcGVydHkga2V5PSJTVEVSRU9UWVBFX0RJU1BMQVlfTE9DQVRJT04iIHZhbHVlPSJDb21tZW50Ii8+CisgICAgPHByb3BlcnR5IGtleT0iUVVBTElGSUVEX05BTUVfREVQVEgiIHZhbHVlPSIwIi8+CisgICAgPGNvbnRhaW5lZCB4c2k6dHlwZT0iZGkyOkdyYXBoTm9kZSIgaXNWaXNpYmxlPSJ0cnVlIiBmb250RmFtaWx5PSJBcmlhbCIgbGluZVN0eWxlPSJzb2xpZCIgZm9udENvbG9yPSIwOjA6MCIgZm9yZWdyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYmFja2dyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYm9yZGVyQ29sb3I9IjE1NzoxMjQ6NDciIHBvc2l0aW9uPSIyMDoyMCIgc2l6ZT0iMTAwOjEwMCI+CisgICAgICA8cHJvcGVydHkga2V5PSJTVEVSRU9UWVBFX0RJU1BMQVlfTE9DQVRJT04iIHZhbHVlPSJDb21tZW50Ii8+CisgICAgICA8cHJvcGVydHkga2V5PSJRVUFMSUZJRURfTkFNRV9ERVBUSCIgdmFsdWU9IjAiLz4KKyAgICAgIDxjb250YWluZWQgeHNpOnR5cGU9ImRpMjpHcmFwaE5vZGUiIGlzVmlzaWJsZT0idHJ1ZSIgZm9udEZhbWlseT0iQXJpYWwiIGxpbmVTdHlsZT0ic29saWQiIGZvbnRDb2xvcj0iMDowOjAiIGZvcmVncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJhY2tncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJvcmRlckNvbG9yPSIxNTc6MTI0OjQ3IiBwb3NpdGlvbj0iMjA6MjAiIHNpemU9IjEwMDoxMDAiPgorICAgICAgICA8cHJvcGVydHkga2V5PSJTVEVSRU9UWVBFX0RJU1BMQVlfTE9DQVRJT04iIHZhbHVlPSJDb21tZW50Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBrZXk9IlFVQUxJRklFRF9OQU1FX0RFUFRIIiB2YWx1ZT0iMCIvPgorICAgICAgICA8c2VtYW50aWNNb2RlbCB4c2k6dHlwZT0iZGkyOlVtbDFTZW1hbnRpY01vZGVsQnJpZGdlIiBwcmVzZW50YXRpb249IlRleHRTdGVyZW90eXBlIj4KKyAgICAgICAgICA8ZWxlbWVudCB4c2k6dHlwZT0idW1sOkVudW1lcmF0aW9uTGl0ZXJhbCIgaHJlZj0iU3lzTUxQcmltaXRpdmVUeXBlcy51bWwjX01FMTBjSFVORWQyd0w4SHdYbUhzcUEiLz4KKyAgICAgICAgPC9zZW1hbnRpY01vZGVsPgorICAgICAgPC9jb250YWluZWQ+CisgICAgICA8Y29udGFpbmVkIHhzaTp0eXBlPSJkaTI6R3JhcGhOb2RlIiBpc1Zpc2libGU9InRydWUiIGZvbnRGYW1pbHk9IkFyaWFsIiBsaW5lU3R5bGU9InNvbGlkIiBmb250Q29sb3I9IjA6MDowIiBmb3JlZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBiYWNrZ3JvdW5kQ29sb3I9IjI0ODoyNDk6MjE0IiBib3JkZXJDb2xvcj0iMTU3OjEyNDo0NyIgcG9zaXRpb249IjIwOjIwIiBzaXplPSIxMDA6MTAwIj4KKyAgICAgICAgPHByb3BlcnR5IGtleT0iU1RFUkVPVFlQRV9ESVNQTEFZX0xPQ0FUSU9OIiB2YWx1ZT0iQ29tbWVudCIvPgorICAgICAgICA8cHJvcGVydHkga2V5PSJRVUFMSUZJRURfTkFNRV9ERVBUSCIgdmFsdWU9IjAiLz4KKyAgICAgICAgPHNlbWFudGljTW9kZWwgeHNpOnR5cGU9ImRpMjpVbWwxU2VtYW50aWNNb2RlbEJyaWRnZSIgcHJlc2VudGF0aW9uPSJUZXh0U3RlcmVvdHlwZSI+CisgICAgICAgICAgPGVsZW1lbnQgeHNpOnR5cGU9InVtbDpFbnVtZXJhdGlvbkxpdGVyYWwiIGhyZWY9IlN5c01MUHJpbWl0aXZlVHlwZXMudW1sI19NT2g3OEhVTkVkMndMOEh3WG1Ic3FBIi8+CisgICAgICAgIDwvc2VtYW50aWNNb2RlbD4KKyAgICAgIDwvY29udGFpbmVkPgorICAgICAgPGNvbnRhaW5lZCB4c2k6dHlwZT0iZGkyOkdyYXBoTm9kZSIgaXNWaXNpYmxlPSJ0cnVlIiBmb250RmFtaWx5PSJBcmlhbCIgbGluZVN0eWxlPSJzb2xpZCIgZm9udENvbG9yPSIwOjA6MCIgZm9yZWdyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYmFja2dyb3VuZENvbG9yPSIyNDg6MjQ5OjIxNCIgYm9yZGVyQ29sb3I9IjE1NzoxMjQ6NDciIHBvc2l0aW9uPSIyMDoyMCIgc2l6ZT0iMTAwOjEwMCI+CisgICAgICAgIDxwcm9wZXJ0eSBrZXk9IlNURVJFT1RZUEVfRElTUExBWV9MT0NBVElPTiIgdmFsdWU9IkNvbW1lbnQiLz4KKyAgICAgICAgPHByb3BlcnR5IGtleT0iUVVBTElGSUVEX05BTUVfREVQVEgiIHZhbHVlPSIwIi8+CisgICAgICAgIDxzZW1hbnRpY01vZGVsIHhzaTp0eXBlPSJkaTI6VW1sMVNlbWFudGljTW9kZWxCcmlkZ2UiIHByZXNlbnRhdGlvbj0iVGV4dFN0ZXJlb3R5cGUiPgorICAgICAgICAgIDxlbGVtZW50IHhzaTp0eXBlPSJ1bWw6RW51bWVyYXRpb25MaXRlcmFsIiBocmVmPSJTeXNNTFByaW1pdGl2ZVR5cGVzLnVtbCNfTVVWcEFIVU5FZDJ3TDhId1htSHNxQSIvPgorICAgICAgICA8L3NlbWFudGljTW9kZWw+CisgICAgICA8L2NvbnRhaW5lZD4KKyAgICAgIDxjb250YWluZWQgeHNpOnR5cGU9ImRpMjpHcmFwaE5vZGUiIGlzVmlzaWJsZT0idHJ1ZSIgZm9udEZhbWlseT0iQXJpYWwiIGxpbmVTdHlsZT0ic29saWQiIGZvbnRDb2xvcj0iMDowOjAiIGZvcmVncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJhY2tncm91bmRDb2xvcj0iMjQ4OjI0OToyMTQiIGJvcmRlckNvbG9yPSIxNTc6MTI0OjQ3IiBwb3NpdGlvbj0iMjA6MjAiIHNpemU9IjEwMDoxMDAiPgorICAgICAgICA8cHJvcGVydHkga2V5PSJTVEVSRU9UWVBFX0RJU1BMQVlfTE9DQVRJT04iIHZhbHVlPSJDb21tZW50Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBrZXk9IlFVQUxJRklFRF9OQU1FX0RFUFRIIiB2YWx1ZT0iMCIvPgorICAgICAgICA8c2VtYW50aWNNb2RlbCB4c2k6dHlwZT0iZGkyOlVtbDFTZW1hbnRpY01vZGVsQnJpZGdlIiBwcmVzZW50YXRpb249IlRleHRTdGVyZW90eXBlIj4KKyAgICAgICAgICA8ZWxlbWVudCB4c2k6dHlwZT0idW1sOkVudW1lcmF0aW9uTGl0ZXJhbCIgaHJlZj0iU3lzTUxQcmltaXRpdmVUeXBlcy51bWwjX01ZZy1ZSFVORWQyd0w4SHdYbUhzcUEiLz4KKyAgICAgICAgPC9zZW1hbnRpY01vZGVsPgorICAgICAgPC9jb250YWluZWQ+CisgICAgPC9jb250YWluZWQ+CisgICAgPHNlbWFudGljTW9kZWwgeHNpOnR5cGU9ImRpMjpVbWwxU2VtYW50aWNNb2RlbEJyaWRnZSIgcHJlc2VudGF0aW9uPSJUZXh0U3RlcmVvdHlwZSI+CisgICAgICA8ZWxlbWVudCB4c2k6dHlwZT0idW1sOkVudW1lcmF0aW9uIiBocmVmPSJTeXNNTFByaW1pdGl2ZVR5cGVzLnVtbCNfSm9WVndIVU5FZDJ3TDhId1htSHNxQSIvPgorICAgIDwvc2VtYW50aWNNb2RlbD4KKyAgPC9jb250YWluZWQ+CisgIDxvd25lciB4c2k6dHlwZT0iZGkyOlVtbDFTZW1hbnRpY01vZGVsQnJpZGdlIiB4bWk6aWQ9Il9BbVJoQWJYbUVkdUhXcEFhV2pNNjJ3Ij4KKyAgICA8ZWxlbWVudCB4c2k6dHlwZT0idW1sOk1vZGVsIiBocmVmPSJTeXNNTFByaW1pdGl2ZVR5cGVzLnVtbCNfQW5aaVlMWG1FZHVIV3BBYVdqTTYydyIvPgorICA8L293bmVyPgorPC9kaTI6RGlhZ3JhbT4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2xpYnJhcmllcy9TeXNNTFByaW1pdGl2ZVR5cGVzLnVtbCBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2xpYnJhcmllcy9TeXNNTFByaW1pdGl2ZVR5cGVzLnVtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWYzMWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvbGlicmFyaWVzL1N5c01MUHJpbWl0aXZlVHlwZXMudW1sCkBAIC0wLDAgKzEsNjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8eG1pOlhNSSB4bWk6dmVyc2lvbj0iMjAxMzEwMDEiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvWE1JLzIwMTMxMDAxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpCbG9ja3M9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9CbG9ja3MiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiB4bWxuczp1bWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi81LjAuMC9VTUwiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0Jsb2NrcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwjLy9ibG9ja3MiPgorICA8dW1sOk1vZGVsIHhtaTppZD0iX0FuWmlZTFhtRWR1SFdwQWFXak02MnciIG5hbWU9IlN5c01MUHJpbWl0aXZlVHlwZXMiPgorICAgIDxvd25lZENvbW1lbnQgeG1pOmlkPSJfRnVjUFFMdDVFZHVlQk1XUWQxYkNsQSI+CisgICAgICA8Ym9keT5Db3B5cmlnaHQgKGMpIDIwMDcgQ0VBIExpc3QuJiN4RDsKKwkJCQkmI3hEOworCQkJCUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKwkJCQlwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyYjeEQ7CisJCQkJYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyCisJCQkJdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlCisJCQkJdjEuMCYjeEQ7CisJCQkJd2hpY2ggYWNjb21wYW5pZXMKKwkJCQl0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCYjeEQ7CisJCQkJaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmI3hEOworCQkJCSYjeEQ7CisJCQkJQ29udHJpYnV0b3JzOiYjeEQ7CisJCQkJQ0VBIExpc3QgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKwkJCTwvYm9keT4KKyAgICA8L293bmVkQ29tbWVudD4KKyAgICA8cGFja2FnZUltcG9ydCB4bWk6aWQ9Il9BblppWWJYbUVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgIDxpbXBvcnRlZFBhY2thZ2UgeG1pOnR5cGU9InVtbDpNb2RlbCIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjXzAiLz4KKyAgICA8L3BhY2thZ2VJbXBvcnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkVudW1lcmF0aW9uIiB4bWk6aWQ9Il9FN3JiQUxYbUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJDb250cm9sVmFsdWUiPgorICAgICAgPG93bmVkTGl0ZXJhbCB4bWk6aWQ9Il9IRm9LRUxYbUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJkaXNhYmxlIi8+CisgICAgICA8b3duZWRMaXRlcmFsIHhtaTppZD0iX0hRM3d3TFhtRWR1SFdwQWFXak02MnciIG5hbWU9ImVuYWJsZSIvPgorICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpEYXRhVHlwZSIgeG1pOmlkPSJfdmpYNFVMWHpFZHU5NF9ORTBFTzVfQSIgbmFtZT0iUmVhbCIvPgorICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpEYXRhVHlwZSIgeG1pOmlkPSJfeEI1cjBMWHpFZHU5NF9ORTBFTzVfQSIgbmFtZT0iQ29tcGxleCI+CisgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfNXBobzhMWHpFZHU5NF9ORTBFTzVfQSIgbmFtZT0icmVhbFBhcnQiIHZpc2liaWxpdHk9InB1YmxpYyIgdHlwZT0iX3ZqWDRVTFh6RWR1OTRfTkUwRU81X0EiIGlzVW5pcXVlPSJmYWxzZSI+CisgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX0FndGpNTFgwRWR1OTRfTkUwRU81X0EiLz4KKyAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfQWd4TmtMWDBFZHU5NF9ORTBFTzVfQSIgdmFsdWU9IjEiLz4KKyAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iXzc2SkFzTFh6RWR1OTRfTkUwRU81X0EiPgorICAgICAgICAgIDx2YWx1ZSB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il81dmNEc0xYekVkdTk0X05FMEVPNV9BIiBuYW1lPSJpbWFnaW5hcnlQYXJ0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIHR5cGU9Il92alg0VUxYekVkdTk0X05FMEVPNV9BIiBpc1VuaXF1ZT0iZmFsc2UiPgorICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9CQ1czc0xYMEVkdTk0X05FMEVPNV9BIi8+CisgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX0JDWjdBTFgwRWR1OTRfTkUwRU81X0EiIHZhbHVlPSIxIi8+CisgICAgICAgIDxkZWZhdWx0VmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsU3RyaW5nIiB4bWk6aWQ9Il8tWWMyTUxYekVkdTk0X05FMEVPNV9BIj4KKyAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkVudW1lcmF0aW9uIiB4bWk6aWQ9Il9Kb1ZWd0hVTkVkMndMOEh3WG1Ic3FBIiBuYW1lPSJWZXJkaWN0S2luZCI+CisgICAgICA8b3duZWRMaXRlcmFsIHhtaTppZD0iX01FMTBjSFVORWQyd0w4SHdYbUhzcUEiIG5hbWU9InBhc3MiLz4KKyAgICAgIDxvd25lZExpdGVyYWwgeG1pOmlkPSJfTU9oNzhIVU5FZDJ3TDhId1htSHNxQSIgbmFtZT0iZmFpbCIvPgorICAgICAgPG93bmVkTGl0ZXJhbCB4bWk6aWQ9Il9NVVZwQUhVTkVkMndMOEh3WG1Ic3FBIiBuYW1lPSJpbmNvbmNsdXNpdmUiLz4KKyAgICAgIDxvd25lZExpdGVyYWwgeG1pOmlkPSJfTVlnLVlIVU5FZDJ3TDhId1htSHNxQSIgbmFtZT0iZXJyb3IiLz4KKyAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICA8cHJvZmlsZUFwcGxpY2F0aW9uIHhtaTppZD0iX0FuWmlZclhtRWR1SFdwQWFXak02MnciPgorICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9BblppWTdYbUVkdUhXcEFhV2pNNjJ3IiBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi8yLjAuMC9VTUwiPgorICAgICAgICA8cmVmZXJlbmNlcyB4bWk6dHlwZT0iZWNvcmU6RVBhY2thZ2UiIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi81LjAuMC9VTUwvUHJvZmlsZS9TdGFuZGFyZCMvIi8+CisgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgIDxhcHBsaWVkUHJvZmlsZSBocmVmPSJwYXRobWFwOi8vVU1MX1BST0ZJTEVTL1N0YW5kYXJkLnByb2ZpbGUudW1sI18wIi8+CisgICAgPC9wcm9maWxlQXBwbGljYXRpb24+CisgICAgPHByb2ZpbGVBcHBsaWNhdGlvbiB4bWk6aWQ9Il9FTzBuc0txYUVlT3hZUExRUTVRZ1lnIj4KKyAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfRU8wbnNhcWFFZU94WVBMUVE1UWdZZyIgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvMi4wLjAvVU1MIj4KKyAgICAgICAgPHJlZmVyZW5jZXMgeG1pOnR5cGU9ImVjb3JlOkVQYWNrYWdlIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwjLy9ibG9ja3MiLz4KKyAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgPGFwcGxpZWRQcm9maWxlIGhyZWY9InBhdGhtYXA6Ly9TeXNNTF9QUk9GSUxFUy9TeXNNTC5wcm9maWxlLnVtbCNfZlN3MjhMWDdFZHVGbXFRc3JOQjlsdyIvPgorICAgIDwvcHJvZmlsZUFwcGxpY2F0aW9uPgorICA8L3VtbDpNb2RlbD4KKyAgPEJsb2NrczpWYWx1ZVR5cGUgeG1pOmlkPSJfVF95bWdMWC1FZHVGbXFRc3JOQjlsdyIgYmFzZV9EYXRhVHlwZT0iX3ZqWDRVTFh6RWR1OTRfTkUwRU81X0EiLz4KKyAgPEJsb2NrczpWYWx1ZVR5cGUgeG1pOmlkPSJfVXJnZEFMWC1FZHVGbXFRc3JOQjlsdyIgYmFzZV9EYXRhVHlwZT0iX3hCNXIwTFh6RWR1OTRfTkUwRU81X0EiLz4KKzwveG1pOlhNST4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL21vZGVsLy5naXRpZ25vcmUgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9tb2RlbC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjBjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9tb2RlbC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL1N5c01MLnByb2ZpbGUuZGkKKy9TeXNNTC5wcm9maWxlLm5vdGF0aW9uCisvU3lzTUwucHJvZmlsZS5zYXNoCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9tb2RlbC9TeXNNTC5wcm9maWxlLmdlbm1vZGVsIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvbW9kZWwvU3lzTUwucHJvZmlsZS5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODhkODMzCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvbW9kZWwvU3lzTUwucHJvZmlsZS5nZW5tb2RlbApAQCAtMCwwICsxLDI5MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvMi4yLjAvR2VuTW9kZWwiCisgICAgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYyIgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIKKyAgICBtb2RlbE5hbWU9IlN5c01MIiBlZGl0UGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucHJvdmlkZXIuU3lzbWxFZGl0UGx1Z2luIgorICAgIHJvb3RFeHRlbmRzQ2xhc3M9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbCRDb250YWluZXIiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLnVtbDIudW1sLmVjb3JlLmltcG9ydGVyIgorICAgIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQvbW9kZWwvU3RhbmRhcmQuZ2VubW9kZWwjLy9zdGFuZGFyZCAuLi8uLi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmdlbm1vZGVsIy8vdHlwZXMgLi4vLi4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmdlbm1vZGVsIy8vdW1sIgorICAgIG9wZXJhdGlvblJlZmxlY3Rpb249InRydWUiIGltcG9ydE9yZ2FuaXppbmc9InRydWUiPgorICA8Z2VuQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsL2ltcG9ydGVyL29yZy5lY2xpcHNlLnVtbDIudW1sLmVjb3JlLmltcG9ydGVyIj4KKyAgICA8ZGV0YWlscyBrZXk9IkVDT1JFX1RBR0dFRF9WQUxVRVMiIHZhbHVlPSJQUk9DRVNTIi8+CisgICAgPGRldGFpbHMga2V5PSJVTklPTl9QUk9QRVJUSUVTIiB2YWx1ZT0iUkVQT1JUIi8+CisgICAgPGRldGFpbHMga2V5PSJVTlRZUEVEX1BST1BFUlRJRVMiIHZhbHVlPSJSRVBPUlQiLz4KKyAgICA8ZGV0YWlscyBrZXk9IkRVUExJQ0FURV9GRUFUVVJFUyIgdmFsdWU9IkRJU0NBUkQiLz4KKyAgICA8ZGV0YWlscyBrZXk9IlNVQlNFVFRJTkdfUFJPUEVSVElFUyIgdmFsdWU9IlJFUE9SVCIvPgorICAgIDxkZXRhaWxzIGtleT0iVkFMSURBVElPTl9ERUxFR0FURVMiIHZhbHVlPSJJR05PUkUiLz4KKyAgICA8ZGV0YWlscyBrZXk9Ik9QUE9TSVRFX1JPTEVfTkFNRVMiIHZhbHVlPSJJR05PUkUiLz4KKyAgICA8ZGV0YWlscyBrZXk9IkNPTU1FTlRTIiB2YWx1ZT0iUFJPQ0VTUyIvPgorICAgIDxkZXRhaWxzIGtleT0iRFVQTElDQVRFX0ZFQVRVUkVfSU5IRVJJVEFOQ0UiIHZhbHVlPSJESVNDQVJEIi8+CisgICAgPGRldGFpbHMga2V5PSJEVVBMSUNBVEVfT1BFUkFUSU9OUyIgdmFsdWU9IkRJU0NBUkQiLz4KKyAgICA8ZGV0YWlscyBrZXk9IlBST1BFUlRZX0RFRkFVTFRfRVhQUkVTU0lPTlMiIHZhbHVlPSJJR05PUkUiLz4KKyAgICA8ZGV0YWlscyBrZXk9IklOVkFSSUFOVF9DT05TVFJBSU5UUyIgdmFsdWU9IlBST0NFU1MiLz4KKyAgICA8ZGV0YWlscyBrZXk9IlJFREVGSU5JTkdfUFJPUEVSVElFUyIgdmFsdWU9IlJFUE9SVCIvPgorICAgIDxkZXRhaWxzIGtleT0iQU5OT1RBVElPTl9ERVRBSUxTIiB2YWx1ZT0iUFJPQ0VTUyIvPgorICAgIDxkZXRhaWxzIGtleT0iTk9OX0FQSV9JTlZBUklBTlRTIiB2YWx1ZT0iSUdOT1JFIi8+CisgICAgPGRldGFpbHMga2V5PSJEVVBMSUNBVEVfT1BFUkFUSU9OX0lOSEVSSVRBTkNFIiB2YWx1ZT0iRElTQ0FSRCIvPgorICAgIDxkZXRhaWxzIGtleT0iUkVERUZJTklOR19PUEVSQVRJT05TIiB2YWx1ZT0iUkVQT1JUIi8+CisgICAgPGRldGFpbHMga2V5PSJJTlZPQ0FUSU9OX0RFTEVHQVRFUyIgdmFsdWU9IklHTk9SRSIvPgorICAgIDxkZXRhaWxzIGtleT0iREVSSVZFRF9GRUFUVVJFUyIgdmFsdWU9IlBST0NFU1MiLz4KKyAgICA8ZGV0YWlscyBrZXk9Ik9QRVJBVElPTl9CT0RJRVMiIHZhbHVlPSJJR05PUkUiLz4KKyAgICA8ZGV0YWlscyBrZXk9IkNBTUVMX0NBU0VfTkFNRVMiIHZhbHVlPSJJR05PUkUiLz4KKyAgICA8ZGV0YWlscyBrZXk9IlNVUEVSX0NMQVNTX09SREVSIiB2YWx1ZT0iUFJPQ0VTUyIvPgorICA8L2dlbkFubm90YXRpb25zPgorICA8Zm9yZWlnbk1vZGVsPlN5c01MLnByb2ZpbGUudW1sPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuUGFja2FnZSIgcHJlZml4PSJTeXNtbCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMiCisgICAgICBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBjbGFzc1BhY2thZ2VTdWZmaXg9ImludGVybmFsLmltcGwiIGZpbGVFeHRlbnNpb25zPSIiCisgICAgICBlY29yZVBhY2thZ2U9InN5c21sLmVjb3JlIy8iPgorICAgIDxnZW5EYXRhVHlwZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkRhdGFUeXBlIiBlY29yZURhdGFUeXBlPSJzeXNtbC5lY29yZSMvL0R1bW15Ii8+CisgICAgPG5lc3RlZEdlblBhY2thZ2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5QYWNrYWdlIiBwcmVmaXg9Ik1vZGVsZWxlbWVudHMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sIgorICAgICAgICBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBjbGFzc1BhY2thZ2VTdWZmaXg9ImludGVybmFsLmltcGwiIGZpbGVFeHRlbnNpb25zPSIiCisgICAgICAgIGVjb3JlUGFja2FnZT0ic3lzbWwuZWNvcmUjLy9tb2RlbGVsZW1lbnRzIj4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9tb2RlbGVsZW1lbnRzL0NvbmZvcm0iPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL21vZGVsZWxlbWVudHMvQ29uZm9ybS9iYXNlX0RlcGVuZGVuY3kiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9tb2RlbGVsZW1lbnRzL1ZpZXciPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vbW9kZWxlbGVtZW50cy9WaWV3L3ZpZXdQb2ludCIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL21vZGVsZWxlbWVudHMvVmlldy9iYXNlX1BhY2thZ2UiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9tb2RlbGVsZW1lbnRzL1ZpZXdQb2ludCI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vbW9kZWxlbGVtZW50cy9WaWV3UG9pbnQvYmFzZV9DbGFzcyIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN5c21sLmVjb3JlIy8vbW9kZWxlbGVtZW50cy9WaWV3UG9pbnQvc3Rha2VIb2xkZXJzIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3lzbWwuZWNvcmUjLy9tb2RlbGVsZW1lbnRzL1ZpZXdQb2ludC9wdXJwb3NlIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3lzbWwuZWNvcmUjLy9tb2RlbGVsZW1lbnRzL1ZpZXdQb2ludC9jb25jZXJucyIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN5c21sLmVjb3JlIy8vbW9kZWxlbGVtZW50cy9WaWV3UG9pbnQvbGFuZ3VhZ2VzIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3lzbWwuZWNvcmUjLy9tb2RlbGVsZW1lbnRzL1ZpZXdQb2ludC9tZXRob2RzIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vbW9kZWxlbGVtZW50cy9SYXRpb25hbGUiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL21vZGVsZWxlbWVudHMvUmF0aW9uYWxlL2Jhc2VfQ29tbWVudCIvPgorICAgICAgPC9nZW5DbGFzc2VzPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL21vZGVsZWxlbWVudHMvUHJvYmxlbSI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vbW9kZWxlbGVtZW50cy9Qcm9ibGVtL2Jhc2VfQ29tbWVudCIvPgorICAgICAgPC9nZW5DbGFzc2VzPgorICAgIDwvbmVzdGVkR2VuUGFja2FnZXM+CisgICAgPG5lc3RlZEdlblBhY2thZ2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5QYWNrYWdlIiBwcmVmaXg9IkJsb2NrcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiCisgICAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgZmlsZUV4dGVuc2lvbnM9IiIKKyAgICAgICAgZWNvcmVQYWNrYWdlPSJzeXNtbC5lY29yZSMvL2Jsb2NrcyI+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYmxvY2tzL0Jsb2NrIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzeXNtbC5lY29yZSMvL2Jsb2Nrcy9CbG9jay9pc0VuY2Fwc3VsYXRlZCIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2Jsb2Nrcy9CbG9jay9iYXNlX0NsYXNzIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYmxvY2tzL0Rpc3RyaWJ1dGVkUHJvcGVydHkiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2Jsb2Nrcy9EaXN0cmlidXRlZFByb3BlcnR5L2Jhc2VfUHJvcGVydHkiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9ibG9ja3MvRGltZW5zaW9uIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9ibG9ja3MvRGltZW5zaW9uL2Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYmxvY2tzL1VuaXQiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2Jsb2Nrcy9Vbml0L2Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYmxvY2tzL1VuaXQvZGltZW5zaW9uIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYmxvY2tzL1ZhbHVlVHlwZSI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYmxvY2tzL1ZhbHVlVHlwZS9iYXNlX0RhdGFUeXBlIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYmxvY2tzL1ZhbHVlVHlwZS91bml0Ii8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYmxvY2tzL1ZhbHVlVHlwZS9kaW1lbnNpb24iLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9ibG9ja3MvTmVzdGVkQ29ubmVjdG9yRW5kIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9ibG9ja3MvTmVzdGVkQ29ubmVjdG9yRW5kL3Byb3BlcnR5UGF0aCIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2Jsb2Nrcy9OZXN0ZWRDb25uZWN0b3JFbmQvYmFzZV9Db25uZWN0b3JFbmQiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9ibG9ja3MvUGFydGljaXBhbnRQcm9wZXJ0eSI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYmxvY2tzL1BhcnRpY2lwYW50UHJvcGVydHkvYmFzZV9Qcm9wZXJ0eSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2Jsb2Nrcy9QYXJ0aWNpcGFudFByb3BlcnR5L2VuZCIvPgorICAgICAgPC9nZW5DbGFzc2VzPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL2Jsb2Nrcy9Db25uZWN0b3JQcm9wZXJ0eSI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYmxvY2tzL0Nvbm5lY3RvclByb3BlcnR5L2Jhc2VfUHJvcGVydHkiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9ibG9ja3MvQ29ubmVjdG9yUHJvcGVydHkvY29ubmVjdG9yIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYmxvY2tzL0JpbmRpbmdDb25uZWN0b3IiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2Jsb2Nrcy9CaW5kaW5nQ29ubmVjdG9yL2Jhc2VfQ29ubmVjdG9yIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYmxvY2tzL1Byb3BlcnR5U3BlY2lmaWNUeXBlIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9ibG9ja3MvUHJvcGVydHlTcGVjaWZpY1R5cGUvYmFzZV9DbGFzc2lmaWVyIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgPC9uZXN0ZWRHZW5QYWNrYWdlcz4KKyAgICA8bmVzdGVkR2VuUGFja2FnZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlblBhY2thZ2UiIHByZWZpeD0iUG9ydGFuZGZsb3dzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIKKyAgICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIiBmaWxlRXh0ZW5zaW9ucz0iIgorICAgICAgICBlY29yZVBhY2thZ2U9InN5c21sLmVjb3JlIy8vcG9ydGFuZGZsb3dzIj4KKyAgICAgIDxnZW5FbnVtcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRW51bSIgdHlwZVNhZmVFbnVtQ29tcGF0aWJsZT0iZmFsc2UiIGVjb3JlRW51bT0ic3lzbWwuZWNvcmUjLy9wb3J0YW5kZmxvd3MvRmxvd0RpcmVjdGlvbiI+CisgICAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkVudW1MaXRlcmFsIiBlY29yZUVudW1MaXRlcmFsPSJzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9GbG93RGlyZWN0aW9uL2luIi8+CisgICAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkVudW1MaXRlcmFsIiBlY29yZUVudW1MaXRlcmFsPSJzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9GbG93RGlyZWN0aW9uL291dCIvPgorICAgICAgICA8Z2VuRW51bUxpdGVyYWxzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5FbnVtTGl0ZXJhbCIgZWNvcmVFbnVtTGl0ZXJhbD0ic3lzbWwuZWNvcmUjLy9wb3J0YW5kZmxvd3MvRmxvd0RpcmVjdGlvbi9pbm91dCIvPgorICAgICAgPC9nZW5FbnVtcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9wb3J0YW5kZmxvd3MvRmxvd1BvcnQiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9GbG93UG9ydC9iYXNlX1BvcnQiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9GbG93UG9ydC9pc0F0b21pYyIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN5c21sLmVjb3JlIy8vcG9ydGFuZGZsb3dzL0Zsb3dQb3J0L2lzQ29uanVnYXRlZCIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN5c21sLmVjb3JlIy8vcG9ydGFuZGZsb3dzL0Zsb3dQb3J0L2RpcmVjdGlvbiIvPgorICAgICAgICA8Z2VuT3BlcmF0aW9ucyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuT3BlcmF0aW9uIiBlY29yZU9wZXJhdGlvbj0ic3lzbWwuZWNvcmUjLy9wb3J0YW5kZmxvd3MvRmxvd1BvcnQvZ2V0SWNvbiIvPgorICAgICAgPC9nZW5DbGFzc2VzPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHkiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHkvYmFzZV9Qcm9wZXJ0eSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN5c21sLmVjb3JlIy8vcG9ydGFuZGZsb3dzL0Zsb3dQcm9wZXJ0eS9kaXJlY3Rpb24iLz4KKyAgICAgICAgPGdlbk9wZXJhdGlvbnMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbk9wZXJhdGlvbiIgZWNvcmVPcGVyYXRpb249InN5c21sLmVjb3JlIy8vcG9ydGFuZGZsb3dzL0Zsb3dQcm9wZXJ0eS9nZXRJY29uIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vcG9ydGFuZGZsb3dzL0Zsb3dTcGVjaWZpY2F0aW9uIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9wb3J0YW5kZmxvd3MvRmxvd1NwZWNpZmljYXRpb24vYmFzZV9JbnRlcmZhY2UiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9wb3J0YW5kZmxvd3MvSXRlbUZsb3ciPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9JdGVtRmxvdy9iYXNlX0luZm9ybWF0aW9uRmxvdyIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3BvcnRhbmRmbG93cy9JdGVtRmxvdy9pdGVtUHJvcGVydHkiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8L25lc3RlZEdlblBhY2thZ2VzPgorICAgIDxuZXN0ZWRHZW5QYWNrYWdlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuUGFja2FnZSIgcHJlZml4PSJDb25zdHJhaW50cyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiCisgICAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgZmlsZUV4dGVuc2lvbnM9IiIKKyAgICAgICAgZWNvcmVQYWNrYWdlPSJzeXNtbC5lY29yZSMvL2NvbnN0cmFpbnRzIj4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9jb25zdHJhaW50cy9Db25zdHJhaW50QmxvY2siLz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9jb25zdHJhaW50cy9Db25zdHJhaW50UHJvcGVydHkiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2NvbnN0cmFpbnRzL0NvbnN0cmFpbnRQcm9wZXJ0eS9iYXNlX1Byb3BlcnR5Ii8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgPC9uZXN0ZWRHZW5QYWNrYWdlcz4KKyAgICA8bmVzdGVkR2VuUGFja2FnZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlblBhY2thZ2UiIHByZWZpeD0iQWN0aXZpdGllcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiCisgICAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgZmlsZUV4dGVuc2lvbnM9IiIKKyAgICAgICAgZWNvcmVQYWNrYWdlPSJzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMiPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvT3B0aW9uYWwiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvT3B0aW9uYWwvYmFzZV9QYXJhbWV0ZXIiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9hY3Rpdml0aWVzL1JhdGUiPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvUmF0ZS9iYXNlX1BhcmFtZXRlciIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvUmF0ZS9iYXNlX0FjdGl2aXR5RWRnZSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvUmF0ZS9yYXRlIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYWN0aXZpdGllcy9Qcm9iYWJpbGl0eSI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYWN0aXZpdGllcy9Qcm9iYWJpbGl0eS9iYXNlX0FjdGl2aXR5RWRnZSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvUHJvYmFiaWxpdHkvYmFzZV9QYXJhbWV0ZXJTZXQiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9hY3Rpdml0aWVzL1Byb2JhYmlsaXR5L3Byb2JhYmlsaXR5Ii8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYWN0aXZpdGllcy9Db250aW51b3VzIi8+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYWN0aXZpdGllcy9EaXNjcmV0ZSIvPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvQ29udHJvbE9wZXJhdG9yIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9hY3Rpdml0aWVzL0NvbnRyb2xPcGVyYXRvci9iYXNlX09wZXJhdGlvbiIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvQ29udHJvbE9wZXJhdG9yL2Jhc2VfQmVoYXZpb3IiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9hY3Rpdml0aWVzL05vQnVmZmVyIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9hY3Rpdml0aWVzL05vQnVmZmVyL2Jhc2VfT2JqZWN0Tm9kZSIvPgorICAgICAgPC9nZW5DbGFzc2VzPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL2FjdGl2aXRpZXMvT3ZlcndyaXRlIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9hY3Rpdml0aWVzL092ZXJ3cml0ZS9iYXNlX09iamVjdE5vZGUiLz4KKyAgICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8L25lc3RlZEdlblBhY2thZ2VzPgorICAgIDxuZXN0ZWRHZW5QYWNrYWdlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuUGFja2FnZSIgcHJlZml4PSJBbGxvY2F0aW9ucyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiCisgICAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgZmlsZUV4dGVuc2lvbnM9IiIKKyAgICAgICAgZWNvcmVQYWNrYWdlPSJzeXNtbC5lY29yZSMvL2FsbG9jYXRpb25zIj4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9hbGxvY2F0aW9ucy9BbGxvY2F0ZSI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYWxsb2NhdGlvbnMvQWxsb2NhdGUvYmFzZV9BYnN0cmFjdGlvbiIvPgorICAgICAgPC9nZW5DbGFzc2VzPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL2FsbG9jYXRpb25zL0FsbG9jYXRlZCI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYWxsb2NhdGlvbnMvQWxsb2NhdGVkL2Jhc2VfTmFtZWRFbGVtZW50Ii8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIgorICAgICAgICAgICAgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9hbGxvY2F0aW9ucy9BbGxvY2F0ZWQvYWxsb2NhdGVkRnJvbSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYWxsb2NhdGlvbnMvQWxsb2NhdGVkL2FsbG9jYXRlZFRvIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vYWxsb2NhdGlvbnMvQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vYWxsb2NhdGlvbnMvQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbi9iYXNlX0FjdGl2aXR5UGFydGl0aW9uIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgPC9uZXN0ZWRHZW5QYWNrYWdlcz4KKyAgICA8bmVzdGVkR2VuUGFja2FnZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlblBhY2thZ2UiIHByZWZpeD0iUmVxdWlyZW1lbnRzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIKKyAgICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIiBmaWxlRXh0ZW5zaW9ucz0iIgorICAgICAgICBlY29yZVBhY2thZ2U9InN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzIj4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvRGVyaXZlUmVxdCIvPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL3JlcXVpcmVtZW50cy9WZXJpZnkiLz4KKyAgICAgIDxnZW5DbGFzc2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5DbGFzcyIgZWNvcmVDbGFzcz0ic3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvQ29weSIvPgorICAgICAgPGdlbkNsYXNzZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkNsYXNzIiBlY29yZUNsYXNzPSJzeXNtbC5lY29yZSMvL3JlcXVpcmVtZW50cy9TYXRpc2Z5Ii8+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1Rlc3RDYXNlIj4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvVGVzdENhc2UvYmFzZV9CZWhhdmlvciIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3JlcXVpcmVtZW50cy9UZXN0Q2FzZS9iYXNlX09wZXJhdGlvbiIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1Rlc3RDYXNlL3ZlcmlmaWVzIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50Ij4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzeXNtbC5lY29yZSMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudC90ZXh0Ii8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnQvaWQiLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiCisgICAgICAgICAgICBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudC9kZXJpdmVkIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIgorICAgICAgICAgICAgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnQvZGVyaXZlZEZyb20iLz4KKyAgICAgICAgPGdlbkZlYXR1cmVzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5GZWF0dXJlIiBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiCisgICAgICAgICAgICBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudC9zYXRpc2ZpZWRCeSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50L3JlZmluZWRCeSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50L3RyYWNlZFRvIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIgorICAgICAgICAgICAgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnQvdmVyaWZpZWRCeSIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50L21hc3RlciIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIKKyAgICAgICAgICAgIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzeXNtbC5lY29yZSMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudC9iYXNlX0NsYXNzIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgICA8Z2VuQ2xhc3NlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuQ2xhc3MiIGVjb3JlQ2xhc3M9InN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50UmVsYXRlZCI+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIgorICAgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50UmVsYXRlZC9iYXNlX05hbWVkRWxlbWVudCIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50UmVsYXRlZC90cmFjZWRGcm9tIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIgorICAgICAgICAgICAgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRSZWxhdGVkL3NhdGlzZmllcyIvPgorICAgICAgICA8Z2VuRmVhdHVyZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkZlYXR1cmUiIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIKKyAgICAgICAgICAgIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN5c21sLmVjb3JlIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50UmVsYXRlZC9yZWZpbmVzIi8+CisgICAgICAgIDxnZW5GZWF0dXJlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuRmVhdHVyZSIgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIgorICAgICAgICAgICAgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3lzbWwuZWNvcmUjLy9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRSZWxhdGVkL3ZlcmlmaWVzIi8+CisgICAgICA8L2dlbkNsYXNzZXM+CisgICAgPC9uZXN0ZWRHZW5QYWNrYWdlcz4KKyAgICA8bmVzdGVkR2VuUGFja2FnZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlblBhY2thZ2UiIHByZWZpeD0iSW50ZXJhY3Rpb25zIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIKKyAgICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgY2xhc3NQYWNrYWdlU3VmZml4PSJpbnRlcm5hbC5pbXBsIiBmaWxlRXh0ZW5zaW9ucz0iIgorICAgICAgICBlY29yZVBhY2thZ2U9InN5c21sLmVjb3JlIy8vaW50ZXJhY3Rpb25zIj4KKyAgICAgIDxnZW5EYXRhVHlwZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkRhdGFUeXBlIiBlY29yZURhdGFUeXBlPSJzeXNtbC5lY29yZSMvL2ludGVyYWN0aW9ucy9EdW1teSIvPgorICAgIDwvbmVzdGVkR2VuUGFja2FnZXM+CisgICAgPG5lc3RlZEdlblBhY2thZ2VzIHhzaTp0eXBlPSJnZW5tb2RlbDpHZW5QYWNrYWdlIiBwcmVmaXg9IlN0YXRlbWFjaGluZXMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sIgorICAgICAgICBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBjbGFzc1BhY2thZ2VTdWZmaXg9ImludGVybmFsLmltcGwiIGZpbGVFeHRlbnNpb25zPSIiCisgICAgICAgIGVjb3JlUGFja2FnZT0ic3lzbWwuZWNvcmUjLy9zdGF0ZW1hY2hpbmVzIj4KKyAgICAgIDxnZW5EYXRhVHlwZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkRhdGFUeXBlIiBlY29yZURhdGFUeXBlPSJzeXNtbC5lY29yZSMvL3N0YXRlbWFjaGluZXMvRHVtbXkiLz4KKyAgICA8L25lc3RlZEdlblBhY2thZ2VzPgorICAgIDxuZXN0ZWRHZW5QYWNrYWdlcyB4c2k6dHlwZT0iZ2VubW9kZWw6R2VuUGFja2FnZSIgcHJlZml4PSJVc2VjYXNlcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiCisgICAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIGNsYXNzUGFja2FnZVN1ZmZpeD0iaW50ZXJuYWwuaW1wbCIgZmlsZUV4dGVuc2lvbnM9IiIKKyAgICAgICAgZWNvcmVQYWNrYWdlPSJzeXNtbC5lY29yZSMvL3VzZWNhc2VzIj4KKyAgICAgIDxnZW5EYXRhVHlwZXMgeHNpOnR5cGU9Imdlbm1vZGVsOkdlbkRhdGFUeXBlIiBlY29yZURhdGFUeXBlPSJzeXNtbC5lY29yZSMvL3VzZWNhc2VzL0R1bW15Ii8+CisgICAgPC9uZXN0ZWRHZW5QYWNrYWdlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9tb2RlbC9TeXNNTC5wcm9maWxlLnVtbCBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL21vZGVsL1N5c01MLnByb2ZpbGUudW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYjU1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9tb2RlbC9TeXNNTC5wcm9maWxlLnVtbApAQCAtMCwwICsxLDg0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx4bWk6WE1JIHhtaTp2ZXJzaW9uPSIyMDEzMTAwMSIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9YTUkvMjAxMzEwMDEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOkVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvc2NoZW1hcy9FY29yZS81IiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgeG1sbnM6dW1sPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvNS4wLjAvVU1MIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi9zY2hlbWFzL0Vjb3JlLzUgcGF0aG1hcDovL1VNTF9QUk9GSUxFUy9FY29yZS5wcm9maWxlLnVtbCNfejFPRmNIanFFZHk4UzRDcjhSY19OQSI+CisgIDx1bWw6UHJvZmlsZSB4bWk6aWQ9Il9UWl9uVUxVNUVkdWlLcUN6Sk1XYkd3IiBuYW1lPSJTeXNNTCIgVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwiPgorICAgIDxvd25lZENvbW1lbnQgeG1pOmlkPSJfUzJSZWtLR3ZFZHlqMllhNTBIUGxYZyIgYW5ub3RhdGVkRWxlbWVudD0iX1RaX25VTFU1RWR1aUtxQ3pKTVdiR3ciPgorICAgICAgPGJvZHk+T01HIFN5c01MIFYxLjEgZm9ybWFsLzIwMDgtMTEtMDI8L2JvZHk+CisgICAgPC9vd25lZENvbW1lbnQ+CisgICAgPHBhY2thZ2VJbXBvcnQgeG1pOmlkPSJfVFpfblViVTVFZHVpS3FDekpNV2JHdyI+CisgICAgICA8aW1wb3J0ZWRQYWNrYWdlIHhtaTp0eXBlPSJ1bWw6TW9kZWwiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI18wIi8+CisgICAgPC9wYWNrYWdlSW1wb3J0PgorICAgIDxwYWNrYWdlSW1wb3J0IHhtaTppZD0iX0Jzc2Z3S0cxRWR5ajJZYTUwSFBsWGciPgorICAgICAgPGltcG9ydGVkUGFja2FnZSB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfUFJPRklMRVMvU3RhbmRhcmQucHJvZmlsZS51bWwjXzAiLz4KKyAgICA8L3BhY2thZ2VJbXBvcnQ+CisgICAgPHBhY2thZ2VJbXBvcnQgeG1pOmlkPSJfeHlyUzBFZEtFZUdKSGRRaXVzNU5aQSI+CisgICAgICA8aW1wb3J0ZWRQYWNrYWdlIHhtaTp0eXBlPSJ1bWw6TW9kZWwiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNfMCIvPgorICAgIDwvcGFja2FnZUltcG9ydD4KKyAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6UHJvZmlsZSIgeG1pOmlkPSJfR3g4TWdMWDdFZHVGbXFRc3JOQjlsdyIgbmFtZT0iTW9kZWxFbGVtZW50cyIgVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvTW9kZWxFbGVtZW50cyI+CisgICAgICA8b3duZWRSdWxlIHhtaTppZD0iX2g0Y0pzTFZBRWR1MmllRjRPTjhVakEiIG5hbWU9IkNvbmZvcm1fMSIgY29uc3RyYWluZWRFbGVtZW50PSJfbHNnWWtMVTlFZHUyaWVGNE9OOFVqQSI+CisgICAgICAgIDxzcGVjaWZpY2F0aW9uIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfdmd2TFlMVkFFZHUyaWVGNE9OOFVqQSIgbmFtZT0iY29uc3RyYWludEJvZHkiIHZhbHVlPSJUaGUgc3VwcGxpZXIvdGFyZ2V0IG11c3QgYmUgYW4gZWxlbWVudCBzdGVyZW90eXBlZCBieSAmbHQ7Jmx0O1ZpZXdQb2ludD4+Ii8+CisgICAgICA8L293bmVkUnVsZT4KKyAgICAgIDxvd25lZFJ1bGUgeG1pOmlkPSJfaXNlMXdMVkFFZHUyaWVGNE9OOFVqQSIgbmFtZT0iQ29uZm9ybV8yIiBjb25zdHJhaW5lZEVsZW1lbnQ9Il9sc2dZa0xVOUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgPHNwZWNpZmljYXRpb24geG1pOnR5cGU9InVtbDpMaXRlcmFsU3RyaW5nIiB4bWk6aWQ9Il81Z3BLRUxWQUVkdTJpZUY0T044VWpBIiBuYW1lPSJjb25zdHJhaW50Qm9keSIgdmFsdWU9IlRoZSBjbGllbnQvc291cmNlIG11c3QgYmUgYW4gZWxlbWVudCBzdGVyZW90eXBlZCBieSAmbHQ7Jmx0O1ZpZXc+PiIvPgorICAgICAgPC9vd25lZFJ1bGU+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfbHNnWWtMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iQ29uZm9ybSI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il85Y3h2MExVOUVkdTJpZUY0T044VWpBIiBuYW1lPSJiYXNlX0RlcGVuZGVuY3kiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il85Y3NRUUxVOUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjRGVwZW5kZW5jeSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9LOEtoRUl4UkVlQ2V2ZTlpaXNEZ3RBIiBjb250ZW50PSIiIGZvcm1hdD0iIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL21vZGVsZWxlbWVudHMvQ29uZm9ybS5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfSzhLaEVZeFJFZUNldmU5aWlzRGd0QSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iX0s4S2hFb3hSRWVDZXZlOWlpc0RndEEiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX21QR3ZVTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9IlZpZXciPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfM1FobzhMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0idmlld1BvaW50IiB0eXBlPSJfbWhTRWNMVTlFZHUyaWVGNE9OOFVqQSIgaXNVbmlxdWU9ImZhbHNlIiBpc1JlYWRPbmx5PSJ0cnVlIiBpc0Rlcml2ZWQ9InRydWUiLz4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzlIcnBrTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9ImJhc2VfUGFja2FnZSIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iXzlIbl9NTFU5RWR1MmllRjRPTjhVakEiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQYWNrYWdlIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxpY29uIHhtaTppZD0iX0hiaEUwSXhSRWVDZXZlOWlpc0RndEEiIGNvbnRlbnQ9IiIgZm9ybWF0PSIiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvbW9kZWxlbGVtZW50cy9WaWV3LmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9IYmhFMFl4UkVlQ2V2ZTlpaXNEZ3RBIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfSGJoRTBveFJFZUNldmU5aWlzRGd0QSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfbWhTRWNMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iVmlld1BvaW50Ij4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzg5R0tNTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9ImJhc2VfQ2xhc3MiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il84ODlBUUxVOUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ2xhc3MiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX19Wd0RvTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9InN0YWtlSG9sZGVycyIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX0NvQzYwTFUtRWR1MmllRjRPTjhVakEiLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9Db0pCY0xVLUVkdTJpZUY0T044VWpBIiB2YWx1ZT0iKiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfX2xCMXdMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0icHVycG9zZSIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX0NZdGNFTFh6RWR1OTRfTkUwRU81X0EiLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9DWXk3b0xYekVkdTk0X05FMEVPNV9BIiB2YWx1ZT0iMSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfX3M5cHdMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iY29uY2VybnMiIGlzVW5pcXVlPSJmYWxzZSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9HTEI1WUxVLUVkdTJpZUY0T044VWpBIi8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfR0xFOHNMVS1FZHUyaWVGNE9OOFVqQSIgdmFsdWU9IioiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX180OFFRTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9Imxhbmd1YWdlcyIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX0pzQXMwTFUtRWR1MmllRjRPTjhVakEiLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9Kc0VYTUxVLUVkdTJpZUY0T044VWpBIiB2YWx1ZT0iKiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfQUVzMFVMVS1FZHUyaWVGNE9OOFVqQSIgbmFtZT0ibWV0aG9kcyIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI1N0cmluZyIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX055TzdVTFUtRWR1MmllRjRPTjhVakEiLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9OeVR6MExVLUVkdTJpZUY0T044VWpBIiB2YWx1ZT0iKiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9fWnlxRUl4UUVlQ2V2ZTlpaXNEZ3RBIiBjb250ZW50PSIiIGZvcm1hdD0iIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL21vZGVsZWxlbWVudHMvVmlld3BvaW50LmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9fWnlxRVl4UUVlQ2V2ZTlpaXNEZ3RBIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfX1p5cUVveFFFZUNldmU5aWlzRGd0QSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfbXdBYzhMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iUmF0aW9uYWxlIj4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzh3MTI0TFU5RWR1MmllRjRPTjhVakEiIG5hbWU9ImJhc2VfQ29tbWVudCIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iXzh3T3k0TFU5RWR1MmllRjRPTjhVakEiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNDb21tZW50Ii8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxpY29uIHhtaTppZD0iX2hlX2d3SmFxRWQyb3FmNWh0UGpYbkEiIGZvcm1hdD0iIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL21vZGVsZWxlbWVudHMvUmF0aW9uYWxlLmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9pTHNPc0phcUVkMm9xZjVodFBqWG5BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfaUxzT3NaYXFFZDJvcWY1aHRQalhuQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfbkFSR2dMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iUHJvYmxlbSI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il84ZkJ1SUxVOUVkdTJpZUY0T044VWpBIiBuYW1lPSJiYXNlX0NvbW1lbnQiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il84ZXpFb0xVOUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ29tbWVudCIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9iTWxIZ0phcUVkMm9xZjVodFBqWG5BIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL21vZGVsZWxlbWVudHMvUHJvYmxlbS5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfY2xPVmNKYXFFZDJvcWY1aHRQalhuQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iX2NsT1ZjWmFxRWQyb3FmNWh0UGpYbkEiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfOGV6RW9MVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iQ29tbWVudFByb2JsZW0iIG1lbWJlckVuZD0iXzhlMDUwTFU5RWR1MmllRjRPTjhVakEgXzhmQnVJTFU5RWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iXzhlMDUwTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9Qcm9ibGVtIiB0eXBlPSJfbkFSR2dMVTlFZHUyaWVGNE9OOFVqQSIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il84ZXpFb0xVOUVkdTJpZUY0T044VWpBIi8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iXzh3T3k0TFU5RWR1MmllRjRPTjhVakEiIG5hbWU9IkNvbW1lbnRSYXRpb25hbGUiIG1lbWJlckVuZD0iXzh3UUJBTFU5RWR1MmllRjRPTjhVakEgXzh3MTI0TFU5RWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iXzh3UUJBTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9SYXRpb25hbGUiIHR5cGU9Il9td0FjOExVOUVkdTJpZUY0T044VWpBIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iXzh3T3k0TFU5RWR1MmllRjRPTjhVakEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfODg5QVFMVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iQ2xhc3NWaWV3UG9pbnQiIG1lbWJlckVuZD0iXzg4LU9ZTFU5RWR1MmllRjRPTjhVakEgXzg5R0tNTFU5RWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iXzg4LU9ZTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9WaWV3UG9pbnQiIHR5cGU9Il9taFNFY0xVOUVkdTJpZUY0T044VWpBIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iXzg4OUFRTFU5RWR1MmllRjRPTjhVakEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfOUhuX01MVTlFZHUyaWVGNE9OOFVqQSIgbmFtZT0iUGFja2FnZVZpZXciIG1lbWJlckVuZD0iXzlIcE5VTFU5RWR1MmllRjRPTjhVakEgXzlIcnBrTFU5RWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iXzlIcE5VTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9WaWV3IiB0eXBlPSJfbVBHdlVMVTlFZHUyaWVGNE9OOFVqQSIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il85SG5fTUxVOUVkdTJpZUY0T044VWpBIi8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iXzljc1FRTFU5RWR1MmllRjRPTjhVakEiIG5hbWU9IkRlcGVuZGVuY3lDb25mb3JtIiBtZW1iZXJFbmQ9Il85Y3VGY0xVOUVkdTJpZUY0T044VWpBIF85Y3h2MExVOUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il85Y3VGY0xVOUVkdTJpZUY0T044VWpBIiBuYW1lPSJleHRlbnNpb25fQ29uZm9ybSIgdHlwZT0iX2xzZ1lrTFU5RWR1MmllRjRPTjhVakEiIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfOWNzUVFMVTlFZHUyaWVGNE9OOFVqQSIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIHhtaTppZD0iX2ZTdzI4TFg3RWR1Rm1xUXNyTkI5bHciIG5hbWU9IkJsb2NrcyIgVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvQmxvY2tzIj4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il84SjJBOExWQUVkdTJpZUY0T044VWpBIiBuYW1lPSJCbG9jayI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9fQUlSa0xWQUVkdTJpZUY0T044VWpBIiBuYW1lPSJpc0VuY2Fwc3VsYXRlZCIgdmlzaWJpbGl0eT0icHVibGljIiBpc1VuaXF1ZT0iZmFsc2UiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjQm9vbGVhbiIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX1lsQnRRTFh6RWR1OTRfTkUwRU81X0EiLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9ZbEpwRUxYekVkdTk0X05FMEVPNV9BIiB2YWx1ZT0iMSIvPgorICAgICAgICAgIDxkZWZhdWx0VmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsU3RyaW5nIiB4bWk6aWQ9Il9DSjc3SUxWQkVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICAgIDx2YWx1ZSB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICAgICAgPC9kZWZhdWx0VmFsdWU+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9HZGpGWUxWQkVkdTJpZUY0T044VWpBIiBuYW1lPSJiYXNlX0NsYXNzIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfR2RlTTRMVkJFZHUyaWVGNE9OOFVqQSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0NsYXNzIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxpY29uIHhtaTppZD0iX1lPTEFNSmFyRWQyb3FmNWh0UGpYbkEiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvYmxvY2tzL0Jsb2NrLmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9ZdlBzOEphckVkMm9xZjVodFBqWG5BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfWXZQczhaYXJFZDJvcWY1aHRQalhuQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9HZGVNNExWQkVkdTJpZUY0T044VWpBIiBuYW1lPSJDbGFzc0Jsb2NrIiBtZW1iZXJFbmQ9Il9HZGdwSUxWQkVkdTJpZUY0T044VWpBIF9HZGpGWUxWQkVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9HZGdwSUxWQkVkdTJpZUY0T044VWpBIiBuYW1lPSJleHRlbnNpb25fQmxvY2siIHR5cGU9Il84SjJBOExWQUVkdTJpZUY0T044VWpBIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX0dkZU00TFZCRWR1MmllRjRPTjhVakEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX1JiVzJ3TFZCRWR1MmllRjRPTjhVakEiIG5hbWU9IkRpc3RyaWJ1dGVkUHJvcGVydHkiPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfUzJmRWdLR3dFZHlqMllhNTBIUGxYZyIgbmFtZT0iYmFzZV9Qcm9wZXJ0eSIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX1MxUHVZS0d3RWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQcm9wZXJ0eSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfc0xLaFFMVkJFZHUyaWVGNE9OOFVqQSIgbmFtZT0iRGltZW5zaW9uIj4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX0E4b1JrS0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9ImJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfQTczY2tLR3hFZHlqMllhNTBIUGxYZyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0luc3RhbmNlU3BlY2lmaWNhdGlvbiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9jbWF5MEphckVkMm9xZjVodFBqWG5BIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL2Jsb2Nrcy9EaW1lbnNpb24uZ2lmIj4KKyAgICAgICAgICA8ZUFubm90YXRpb25zIHhtaTppZD0iX2RXUHRRSmFyRWQyb3FmNWh0UGpYbkEiIHNvdXJjZT0iaW1hZ2VfcGFweXJ1cyI+CisgICAgICAgICAgICA8ZGV0YWlscyB4bWk6aWQ9Il9kV1B0UVphckVkMm9xZjVodFBqWG5BIiBrZXk9ImltYWdlX2tpbmRfa2V5IiB2YWx1ZT0iaWNvbiIvPgorICAgICAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgICA8L2ljb24+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il90OWs2RUxWQkVkdTJpZUY0T044VWpBIiBuYW1lPSJVbml0Ij4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX0NXeDdZS0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9ImJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfQ1ZjZW9LR3hFZHlqMllhNTBIUGxYZyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0luc3RhbmNlU3BlY2lmaWNhdGlvbiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfVThBeElLR3hFZHlqMllhNTBIUGxYZyIgbmFtZT0iZGltZW5zaW9uIiB0eXBlPSJfc0xLaFFMVkJFZHUyaWVGNE9OOFVqQSIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX1U2U1MwS0d4RWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX1U4WkxvS0d4RWR5ajJZYTUwSFBsWGciLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9VOGZTUUtHeEVkeWoyWWE1MEhQbFhnIiB2YWx1ZT0iMSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9meU9uZ0phckVkMm9xZjVodFBqWG5BIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL2Jsb2Nrcy9Vbml0LmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9nVU1zSUphckVkMm9xZjVodFBqWG5BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfZ1VNc0laYXJFZDJvcWY1aHRQalhuQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfeWZwLUlMVkJFZHUyaWVGNE9OOFVqQSIgbmFtZT0iVmFsdWVUeXBlIj4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzFJUEo4TFZCRWR1MmllRjRPTjhVakEiIG5hbWU9ImJhc2VfRGF0YVR5cGUiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il8xSUs0Z0xWQkVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjRGF0YVR5cGUiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX21mUFhVS0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9InVuaXQiIHR5cGU9Il90OWs2RUxWQkVkdTJpZUY0T044VWpBIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfbWVBQk1LR3hFZHlqMllhNTBIUGxYZyI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfbWZock1LR3hFZHlqMllhNTBIUGxYZyIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX21mbngwS0d4RWR5ajJZYTUwSFBsWGciIHZhbHVlPSIxIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9wajQwRUtHeEVkeWoyWWE1MEhQbFhnIiBuYW1lPSJkaW1lbnNpb24iIHR5cGU9Il9zTEtoUUxWQkVkdTJpZUY0T044VWpBIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfcGl2a2tLR3hFZHlqMllhNTBIUGxYZyI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfcGtMSDhLR3hFZHlqMllhNTBIUGxYZyIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX3BrTEg4YUd4RWR5ajJZYTUwSFBsWGciIHZhbHVlPSIxIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxpY29uIHhtaTppZD0iX2hxbkZjSmFyRWQyb3FmNWh0UGpYbkEiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvYmxvY2tzL1ZhbHVlVHlwZS5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfaUpUem9KYXJFZDJvcWY1aHRQalhuQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iX2lKVHpvWmFyRWQyb3FmNWh0UGpYbkEiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfMUlLNGdMVkJFZHUyaWVGNE9OOFVqQSIgbmFtZT0iRGF0YVR5cGVWYWx1ZVR5cGUiIG1lbWJlckVuZD0iXzFJTUdvTFZCRWR1MmllRjRPTjhVakEgXzFJUEo4TFZCRWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iXzFJTUdvTFZCRWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9WYWx1ZVR5cGUiIHR5cGU9Il95ZnAtSUxWQkVkdTJpZUY0T044VWpBIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iXzFJSzRnTFZCRWR1MmllRjRPTjhVakEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX21veGFRTFZDRWR1MmllRjRPTjhVakEiIG5hbWU9Ik5lc3RlZENvbm5lY3RvckVuZCI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9vSDY0MExWQ0VkdTJpZUY0T044VWpBIiBuYW1lPSJwcm9wZXJ0eVBhdGgiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNPcmRlcmVkPSJ0cnVlIiBpc1VuaXF1ZT0iZmFsc2UiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQcm9wZXJ0eSIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iXzRadFdzTXE0RWQyZWFyZlg2cTE2eGciIHZhbHVlPSIxIi8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfNFoxU2dNcTRFZDJlYXJmWDZxMTZ4ZyIgdmFsdWU9IioiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfX0RaOUlMVkNFZHUyaWVGNE9OOFVqQSI+CisgICAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfcGJDR2dMVkNFZHUyaWVGNE9OOFVqQSIgbmFtZT0iYmFzZV9Db25uZWN0b3JFbmQiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9wYTlPQUxWQ0VkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ29ubmVjdG9yRW5kIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX3BhOU9BTFZDRWR1MmllRjRPTjhVakEiIG5hbWU9IkNvbm5lY3RvckVuZE5lc3RlZENvbm5lY3RvckVuZCIgbWVtYmVyRW5kPSJfcGFfcVFMVkNFZHUyaWVGNE9OOFVqQSBfcGJDR2dMVkNFZHUyaWVGNE9OOFVqQSI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfcGFfcVFMVkNFZHUyaWVGNE9OOFVqQSIgbmFtZT0iZXh0ZW5zaW9uX05lc3RlZENvbm5lY3RvckVuZCIgdHlwZT0iX21veGFRTFZDRWR1MmllRjRPTjhVakEiIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfcGE5T0FMVkNFZHUyaWVGNE9OOFVqQSIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfQUp1RFlLR3dFZHlqMllhNTBIUGxYZyIgbmFtZT0iUGFydGljaXBhbnRQcm9wZXJ0eSI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9WSFhpQUtHd0VkeWoyWWE1MEhQbFhnIiBuYW1lPSJiYXNlX1Byb3BlcnR5IiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfVkdPU2dLR3dFZHlqMllhNTBIUGxYZyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI1Byb3BlcnR5Ii8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9YX0Jyb0tHd0VkeWoyWWE1MEhQbFhnIiBuYW1lPSJlbmQiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUHJvcGVydHkiLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9hb2NrOEtHd0VkeWoyWWE1MEhQbFhnIiB2YWx1ZT0iMSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX2FvY2s4YUd3RWR5ajJZYTUwSFBsWGciIHZhbHVlPSIxIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX2FvaXJrS0d3RWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX0ZDLVJVS0d3RWR5ajJZYTUwSFBsWGciIG5hbWU9IkNvbm5lY3RvclByb3BlcnR5Ij4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX1RzUU80S0d3RWR5ajJZYTUwSFBsWGciIG5hbWU9ImJhc2VfUHJvcGVydHkiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9UckdfWUtHd0VkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUHJvcGVydHkiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX2JxNnVrS0d3RWR5ajJZYTUwSFBsWGciIG5hbWU9ImNvbm5lY3RvciIgdmlzaWJpbGl0eT0icHVibGljIiBpc1VuaXF1ZT0iZmFsc2UiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNDb25uZWN0b3IiLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9weVlfa0tHd0VkeWoyWWE1MEhQbFhnIiB2YWx1ZT0iMSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX3B5ZkdNS0d3RWR5ajJZYTUwSFBsWGciIHZhbHVlPSIxIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX3B5ZkdNYUd3RWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfUzFQdVlLR3dFZHlqMllhNTBIUGxYZyIgbmFtZT0iRXh0ZW5zaW9uX0Rpc3RyaWJ1dGVkUHJvcGVydHkiIG1lbWJlckVuZD0iX1MyUzNRS0d3RWR5ajJZYTUwSFBsWGcgX1MyZkVnS0d3RWR5ajJZYTUwSFBsWGciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX1MyUzNRS0d3RWR5ajJZYTUwSFBsWGciIG5hbWU9ImV4dGVuc2lvbl9EaXN0cmlidXRlZFByb3BlcnR5IiB0eXBlPSJfUmJXMndMVkJFZHUyaWVGNE9OOFVqQSIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9TMVB1WUtHd0VkeWoyWWE1MEhQbFhnIi8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX1RyR19ZS0d3RWR5ajJZYTUwSFBsWGciIG5hbWU9IkV4dGVuc2lvbl9Db25uZWN0b3JQcm9wZXJ0eSIgbWVtYmVyRW5kPSJfVHNFQm9LR3dFZHlqMllhNTBIUGxYZyBfVHNRTzRLR3dFZHlqMllhNTBIUGxYZyI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfVHNFQm9LR3dFZHlqMllhNTBIUGxYZyIgbmFtZT0iZXh0ZW5zaW9uX0Nvbm5lY3RvclByb3BlcnR5IiB0eXBlPSJfRkMtUlVLR3dFZHlqMllhNTBIUGxYZyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9UckdfWUtHd0VkeWoyWWE1MEhQbFhnIi8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX1ZHT1NnS0d3RWR5ajJZYTUwSFBsWGciIG5hbWU9IkV4dGVuc2lvbl9QYXJ0aWNpcGFudFByb3BlcnR5IiBtZW1iZXJFbmQ9Il9WSExVd0tHd0VkeWoyWWE1MEhQbFhnIF9WSFhpQUtHd0VkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9WSExVd0tHd0VkeWoyWWE1MEhQbFhnIiBuYW1lPSJleHRlbnNpb25fUGFydGljaXBhbnRQcm9wZXJ0eSIgdHlwZT0iX0FKdURZS0d3RWR5ajJZYTUwSFBsWGciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfVkdPU2dLR3dFZHlqMllhNTBIUGxYZyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9BNzNja0tHeEVkeWoyWWE1MEhQbFhnIiBuYW1lPSJFeHRlbnNpb25fRGltZW5zaW9uIiBtZW1iZXJFbmQ9Il9BOGlLOEtHeEVkeWoyWWE1MEhQbFhnIF9BOG9Sa0tHeEVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9BOGlLOEtHeEVkeWoyWWE1MEhQbFhnIiBuYW1lPSJleHRlbnNpb25fRGltZW5zaW9uIiB0eXBlPSJfc0xLaFFMVkJFZHUyaWVGNE9OOFVqQSIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9BNzNja0tHeEVkeWoyWWE1MEhQbFhnIi8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX0NWY2VvS0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9IkV4dGVuc2lvbl9Vbml0IiBtZW1iZXJFbmQ9Il9DV2ZuZ0tHeEVkeWoyWWE1MEhQbFhnIF9DV3g3WUtHeEVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9DV2ZuZ0tHeEVkeWoyWWE1MEhQbFhnIiBuYW1lPSJleHRlbnNpb25fVW5pdCIgdHlwZT0iX3Q5azZFTFZCRWR1MmllRjRPTjhVakEiIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfQ1ZjZW9LR3hFZHlqMllhNTBIUGxYZyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfMnFnc0VLR3hFZHlqMllhNTBIUGxYZyIgbmFtZT0iQmluZGluZ0Nvbm5lY3RvciI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il83bDN5MEtHeEVkeWoyWWE1MEhQbFhnIiBuYW1lPSJiYXNlX0Nvbm5lY3RvciIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iXzdrNndrS0d4RWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNDb25uZWN0b3IiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfN2s2d2tLR3hFZHlqMllhNTBIUGxYZyIgbmFtZT0iRXh0ZW5zaW9uX0JpbmRpbmdDb25uZWN0b3IiIG1lbWJlckVuZD0iXzdscmxrS0d4RWR5ajJZYTUwSFBsWGcgXzdsM3kwS0d4RWR5ajJZYTUwSFBsWGciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iXzdscmxrS0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9ImV4dGVuc2lvbl9CaW5kaW5nQ29ubmVjdG9yIiB0eXBlPSJfMnFnc0VLR3hFZHlqMllhNTBIUGxYZyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il83azZ3a0tHeEVkeWoyWWE1MEhQbFhnIi8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il9hRC03RUtHeUVkeWoyWWE1MEhQbFhnIiBuYW1lPSJQcm9wZXJ0eVNwZWNpZmljVHlwZSI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9rd0xZQUtHeUVkeWoyWWE1MEhQbFhnIiBuYW1lPSJiYXNlX0NsYXNzaWZpZXIiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9rdXYwb0tHeUVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ2xhc3NpZmllciIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6QXNzb2NpYXRpb24iIHhtaTppZD0iX1U2U1MwS0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9IkFzc29jaWF0aW9uX1VuaXRfRGltZW5zaW9uIiBtZW1iZXJFbmQ9Il9VOEF4SUtHeEVkeWoyWWE1MEhQbFhnIF9VOGxZNEtHeEVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTppZD0iX1U4bFk0S0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9InVuaXQiIHR5cGU9Il90OWs2RUxWQkVkdTJpZUY0T044VWpBIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfVTZTUzBLR3hFZHlqMllhNTBIUGxYZyI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfVTlLQW9hR3hFZHlqMllhNTBIUGxYZyIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX1U5S0FvS0d4RWR5ajJZYTUwSFBsWGciIHZhbHVlPSIqIi8+CisgICAgICAgIDwvb3duZWRFbmQ+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpBc3NvY2lhdGlvbiIgeG1pOmlkPSJfbWVBQk1LR3hFZHlqMllhNTBIUGxYZyIgbmFtZT0iQXNzb2NpYXRpb25fVmFsdWVUeXBlX1VuaXQiIG1lbWJlckVuZD0iX21mUFhVS0d4RWR5ajJZYTUwSFBsWGcgX21mbngwYUd4RWR5ajJZYTUwSFBsWGciPgorICAgICAgICA8b3duZWRFbmQgeG1pOmlkPSJfbWZueDBhR3hFZHlqMllhNTBIUGxYZyIgbmFtZT0idmFsdWVUeXBlIiB0eXBlPSJfeWZwLUlMVkJFZHUyaWVGNE9OOFVqQSIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX21lQUJNS0d4RWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX21nR1M4YUd4RWR5ajJZYTUwSFBsWGciLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9tZ0dTOEtHeEVkeWoyWWE1MEhQbFhnIiB2YWx1ZT0iKiIvPgorICAgICAgICA8L293bmVkRW5kPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6QXNzb2NpYXRpb24iIHhtaTppZD0iX3BpdmtrS0d4RWR5ajJZYTUwSFBsWGciIG5hbWU9IkFzc29jaWF0aW9uX1ZhbHVlVHlwZV9EaW1lbnNpb24iIG1lbWJlckVuZD0iX3BqNDBFS0d4RWR5ajJZYTUwSFBsWGcgX3BrUk9rS0d4RWR5ajJZYTUwSFBsWGciPgorICAgICAgICA8b3duZWRFbmQgeG1pOmlkPSJfcGtST2tLR3hFZHlqMllhNTBIUGxYZyIgbmFtZT0idmFsdWVUeXBlIiB0eXBlPSJfeWZwLUlMVkJFZHUyaWVGNE9OOFVqQSIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX3BpdmtrS0d4RWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX3BrZGIwYUd4RWR5ajJZYTUwSFBsWGciLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9wa2RiMEtHeEVkeWoyWWE1MEhQbFhnIiB2YWx1ZT0iKiIvPgorICAgICAgICA8L293bmVkRW5kPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9rdXYwb0tHeUVkeWoyWWE1MEhQbFhnIiBuYW1lPSJFeHRlbnNpb25fUHJvcGVydHlTcGVjaWZpY1R5cGUiIG1lbWJlckVuZD0iX2t2X0t3S0d5RWR5ajJZYTUwSFBsWGcgX2t3TFlBS0d5RWR5ajJZYTUwSFBsWGciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX2t2X0t3S0d5RWR5ajJZYTUwSFBsWGciIG5hbWU9ImV4dGVuc2lvbl9Qcm9wZXJ0eVNwZWNpZmljVHlwZSIgdHlwZT0iX2FELTdFS0d5RWR5ajJZYTUwSFBsWGciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfa3V2MG9LR3lFZHlqMllhNTBIUGxYZyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIHhtaTppZD0iX3JweDI4TFg3RWR1Rm1xUXNyTkI5bHciIG5hbWU9IlBvcnRBbmRGbG93cyIgVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvUG9ydEFuZEZsb3dzIj4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il9sTnZLTUxWREVkdTJpZUY0T044VWpBIiBuYW1lPSJGbG93UG9ydCI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9DRktvZ0xWRUVkdTJpZUY0T044VWpBIiBuYW1lPSJiYXNlX1BvcnQiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9DRkZJOExWRUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUG9ydCIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfVHJZNFVMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iaXNBdG9taWMiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNVbmlxdWU9ImZhbHNlIiBpc1JlYWRPbmx5PSJ0cnVlIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6UHJpbWl0aXZlVHlwZSIgaHJlZj0icGF0aG1hcDovL1VNTF9MSUJSQVJJRVMvVU1MUHJpbWl0aXZlVHlwZXMubGlicmFyeS51bWwjQm9vbGVhbiIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX1hPZFdjTFZFRWR1MmllRjRPTjhVakEiIHZhbHVlPSIxIi8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfWE9udWdMVkVFZHUyaWVGNE9OOFVqQSIgdmFsdWU9IjEiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEJvb2xlYW4iIHhtaTppZD0iX1lxeGpjTFZFRWR1MmllRjRPTjhVakEiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX1QtdGM4TFZFRWR1MmllRjRPTjhVakEiIG5hbWU9ImlzQ29uanVnYXRlZCIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTElCUkFSSUVTL1VNTFByaW1pdGl2ZVR5cGVzLmxpYnJhcnkudW1sI0Jvb2xlYW4iLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9iS1hMVUxWRUVkdTJpZUY0T044VWpBIi8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfYktjRDBMVkVFZHUyaWVGNE9OOFVqQSIgdmFsdWU9IjEiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX1VMRFAwTFZFRWR1MmllRjRPTjhVakEiIG5hbWU9ImRpcmVjdGlvbiIgdmlzaWJpbGl0eT0icHVibGljIiB0eXBlPSJfNnVMejRMVkRFZHUyaWVGNE9OOFVqQSIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9hbTJpSUtHekVkeWoyWWE1MEhQbFhnIiB2YWx1ZT0iMSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX2FtOG93S0d6RWR5ajJZYTUwSFBsWGciIHZhbHVlPSIxIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX2F3bHM4S0d6RWR5ajJZYTUwSFBsWGciIHZhbHVlPSJpbm91dCIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRPcGVyYXRpb24geG1pOmlkPSJfaHh4MU1LYVZFZDJUNVBPcEVkOE1fQSIgbmFtZT0iZ2V0SWNvbiI+CisgICAgICAgICAgPG93bmVkUGFyYW1ldGVyIHhtaTppZD0iX2oySTVvS2FWRWQyVDVQT3BFZDhNX0EiIG5hbWU9ImltZyIgZGlyZWN0aW9uPSJyZXR1cm4iPgorICAgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0ltYWdlIi8+CisgICAgICAgICAgPC9vd25lZFBhcmFtZXRlcj4KKyAgICAgICAgPC9vd25lZE9wZXJhdGlvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfUHJybjhLYVVFZDJUNVBPcEVkOE1fQSIgZm9ybWF0PSIiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQb3J0LmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9iZ2JCVUthVUVkMlQ1UE9wRWQ4TV9BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfYmdiQlVhYVVFZDJUNVBPcEVkOE1fQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9SQ0lkZ0thVUVkMlQ1UE9wRWQ4TV9BIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UG9ydF9JTi5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfYzFya0VLYVVFZDJUNVBPcEVkOE1fQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iX2MxcmtFYWFVRWQyVDVQT3BFZDhNX0EiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfVVpncEFLYVVFZDJUNVBPcEVkOE1fQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnRfT1VULmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9lS0N1OEthVUVkMlQ1UE9wRWQ4TV9BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfZUtMNDRLYVVFZDJUNVBPcEVkOE1fQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9XTmVoQUthVUVkMlQ1UE9wRWQ4TV9BIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UG9ydF9JTk9VVC5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfZ2VNaTRLYVVFZDJUNVBPcEVkOE1fQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iX2dlTWk0YWFVRWQyVDVQT3BFZDhNX0EiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfV3hfalVLYVVFZDJUNVBPcEVkOE1fQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1BvcnRfTkEuZ2lmIj4KKyAgICAgICAgICA8ZUFubm90YXRpb25zIHhtaTppZD0iX2lLYU5FS2FVRWQyVDVQT3BFZDhNX0EiIHNvdXJjZT0iaW1hZ2VfcGFweXJ1cyI+CisgICAgICAgICAgICA8ZGV0YWlscyB4bWk6aWQ9Il9pS2FORWFhVUVkMlQ1UE9wRWQ4TV9BIiBrZXk9ImltYWdlX2tpbmRfa2V5IiB2YWx1ZT0iaWNvbiIvPgorICAgICAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgICA8L2ljb24+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il9tQi1xa0xWREVkdTJpZUY0T044VWpBIiBuYW1lPSJGbG93UHJvcGVydHkiPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfQ3lYc3dMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iYmFzZV9Qcm9wZXJ0eSIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX0N5Um1JTFZFRWR1MmllRjRPTjhVakEiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQcm9wZXJ0eSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfTTlOSkVMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iZGlyZWN0aW9uIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHR5cGU9Il82dUx6NExWREVkdTJpZUY0T044VWpBIiBpc1VuaXF1ZT0iZmFsc2UiPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX2VOaV9nTFgwRWR1OTRfTkUwRU81X0EiIHZhbHVlPSIxIi8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfZU5xVVFMWDBFZHU5NF9ORTBFTzVfQSIgdmFsdWU9IjEiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfUFJwUTRMVkVFZHUyaWVGNE9OOFVqQSIgdmFsdWU9Imlub3V0Ii8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZE9wZXJhdGlvbiB4bWk6aWQ9Il9zWlQwa0thVkVkMlQ1UE9wRWQ4TV9BIiBuYW1lPSJnZXRJY29uIj4KKyAgICAgICAgICA8b3duZWRQYXJhbWV0ZXIgeG1pOmlkPSJfc1pUMGthYVZFZDJUNVBPcEVkOE1fQSIgbmFtZT0iaW1nIiBkaXJlY3Rpb249InJldHVybiI+CisgICAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjSW1hZ2UiLz4KKyAgICAgICAgICA8L293bmVkUGFyYW1ldGVyPgorICAgICAgICA8L293bmVkT3BlcmF0aW9uPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il8zRm84OE5PcEVlQ2tzS0lCVk5DQnR3IiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHkuZ2lmIj4KKyAgICAgICAgICA8ZUFubm90YXRpb25zIHhtaTppZD0iXzNGbzg4ZE9wRWVDa3NLSUJWTkNCdHciIHNvdXJjZT0iaW1hZ2VfcGFweXJ1cyI+CisgICAgICAgICAgICA8ZGV0YWlscyB4bWk6aWQ9Il8zRm84OHRPcEVlQ2tzS0lCVk5DQnR3IiBrZXk9ImltYWdlX2tpbmRfa2V5IiB2YWx1ZT0iaWNvbiIvPgorICAgICAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgICA8L2ljb24+CisgICAgICAgIDxpY29uIHhtaTppZD0iX3lacm1vSmF5RWQyb3FmNWh0UGpYbkEiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dQcm9wZXJ0eV9JTi5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfMDEwUjRKYXlFZDJvcWY1aHRQalhuQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iXzAxLUM0SmF5RWQyb3FmNWh0UGpYbkEiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfeV9oZW9KYXlFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X09VVC5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfMnRCRUVKYXlFZDJvcWY1aHRQalhuQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iXzJ0QkVFWmF5RWQyb3FmNWh0UGpYbkEiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfei1HbXdKYXlFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9wb3J0YW5kZmxvd3MvRmxvd1Byb3BlcnR5X0lOT1VULmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il8zNkNRMEpheUVkMm9xZjVodFBqWG5BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfMzZDUTBaYXlFZDJvcWY1aHRQalhuQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfbTlRbkVMVkRFZHUyaWVGNE9OOFVqQSIgbmFtZT0iRmxvd1NwZWNpZmljYXRpb24iPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfREQ2dndMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iYmFzZV9JbnRlcmZhY2UiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9ERDBwSUxWRUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjSW50ZXJmYWNlIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxpY29uIHhtaTppZD0iX3ZpUjdzSmF5RWQyb3FmNWh0UGpYbkEiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcG9ydGFuZGZsb3dzL0Zsb3dTcGVjaWZpY2F0aW9uLmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il93VTdnb0pheUVkMm9xZjVodFBqWG5BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfd1U3Z29aYXlFZDJvcWY1aHRQalhuQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RW51bWVyYXRpb24iIHhtaTppZD0iXzZ1THo0TFZERWR1MmllRjRPTjhVakEiIG5hbWU9IkZsb3dEaXJlY3Rpb24iPgorICAgICAgICA8b3duZWRMaXRlcmFsIHhtaTppZD0iXzhBNVk4TFZERWR1MmllRjRPTjhVakEiIG5hbWU9ImluIi8+CisgICAgICAgIDxvd25lZExpdGVyYWwgeG1pOmlkPSJfOFpWSEVMVkRFZHUyaWVGNE9OOFVqQSIgbmFtZT0ib3V0Ii8+CisgICAgICAgIDxvd25lZExpdGVyYWwgeG1pOmlkPSJfOGx2TFlMVkRFZHUyaWVGNE9OOFVqQSIgbmFtZT0iaW5vdXQiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfQ0ZGSThMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iUG9ydEZsb3dQb3J0IiBtZW1iZXJFbmQ9Il9DRkctSUxWRUVkdTJpZUY0T044VWpBIF9DRktvZ0xWRUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9DRkctSUxWRUVkdTJpZUY0T044VWpBIiBuYW1lPSJleHRlbnNpb25fRmxvd1BvcnQiIHR5cGU9Il9sTnZLTUxWREVkdTJpZUY0T044VWpBIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX0NGRkk4TFZFRWR1MmllRjRPTjhVakEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfQ3lSbUlMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iUHJvcGVydHlGbG93UHJvcGVydHkiIG1lbWJlckVuZD0iX0N5VUNZTFZFRWR1MmllRjRPTjhVakEgX0N5WHN3TFZFRWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX0N5VUNZTFZFRWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9GbG93UHJvcGVydHkiIHR5cGU9Il9tQi1xa0xWREVkdTJpZUY0T044VWpBIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX0N5Um1JTFZFRWR1MmllRjRPTjhVakEiLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfREQwcElMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iSW50ZXJmYWNlRmxvd1NwZWNpZmljYXRpb24iIG1lbWJlckVuZD0iX0REMmVVTFZFRWR1MmllRjRPTjhVakEgX0RENnZ3TFZFRWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX0REMmVVTFZFRWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9GbG93U3BlY2lmaWNhdGlvbiIgdHlwZT0iX205UW5FTFZERWR1MmllRjRPTjhVakEiIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfREQwcElMVkVFZHUyaWVGNE9OOFVqQSIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfOWNkaWtMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iSXRlbUZsb3ciPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfLTh0MFlMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iYmFzZV9JbmZvcm1hdGlvbkZsb3ciIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il8tOG50d0xWRUVkdTJpZUY0T044VWpBIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjSW5mb3JtYXRpb25GbG93Ii8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9fdWxXTUxWRUVkdTJpZUY0T044VWpBIiBuYW1lPSJpdGVtUHJvcGVydHkiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUHJvcGVydHkiLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9GZHVEUUxWRkVkdTJpZUY0T044VWpBIi8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfRmR5N3dMVkZFZHUyaWVGNE9OOFVqQSIgdmFsdWU9IjEiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfRC13SzRMVkZFZHUyaWVGNE9OOFVqQSI+CisgICAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8aWNvbiB4bWk6aWQ9Il9pTlkwQUlRbEVkLTB3UHhDeVF4TmhnIiBsb2NhdGlvbj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2ljb25zL3BvcnRhbmRmbG93cy9JdGVtRmxvdy5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfbUtIdlVJUWxFZC0wd1B4Q3lReE5oZyIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iX21LSHZVWVFsRWQtMHdQeEN5UXhOaGciIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfLThudHdMVkVFZHUyaWVGNE9OOFVqQSIgbmFtZT0iSW5mb3JtYXRpb25GbG93SXRlbUZsb3ciIG1lbWJlckVuZD0iXy04cUtBTFZFRWR1MmllRjRPTjhVakEgXy04dDBZTFZFRWR1MmllRjRPTjhVakEiPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iXy04cUtBTFZFRWR1MmllRjRPTjhVakEiIG5hbWU9ImV4dGVuc2lvbl9JdGVtRmxvdyIgdHlwZT0iXzljZGlrTFZFRWR1MmllRjRPTjhVakEiIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfLThudHdMVkVFZHUyaWVGNE9OOFVqQSIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIHhtaTppZD0iXzVXWUowTFg3RWR1Rm1xUXNyTkI5bHciIG5hbWU9IkNvbnN0cmFpbnRzIiBVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9Db25zdHJhaW50cyI+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfWURLN2NMVkZFZHUyaWVGNE9OOFVqQSIgbmFtZT0iQ29uc3RyYWludEJsb2NrIj4KKyAgICAgICAgPGdlbmVyYWxpemF0aW9uIHhtaTppZD0iX2RnVWdvTFZGRWR1MmllRjRPTjhVakEiIGdlbmVyYWw9Il84SjJBOExWQUVkdTJpZUY0T044VWpBIi8+CisgICAgICAgIDxpY29uIHhtaTppZD0iX095Nm1zSmFyRWQyb3FmNWh0UGpYbkEiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvY29uc3RyYWludHMvQ29uc3RyYWludEJsb2NrLmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9QY2VoRUphckVkMm9xZjVodFBqWG5BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfUGNlaEVaYXJFZDJvcWY1aHRQalhuQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfWTlYNTRMVkZFZHUyaWVGNE9OOFVqQSIgbmFtZT0iQ29uc3RyYWludFByb3BlcnR5Ij4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX0YzYjNVS0cwRWR5ajJZYTUwSFBsWGciIG5hbWU9ImJhc2VfUHJvcGVydHkiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9GMkFUOEtHMEVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUHJvcGVydHkiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPGljb24geG1pOmlkPSJfVFNBb01KYXJFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9jb25zdHJhaW50cy9Db25zdHJhaW50UHJvcGVydHkuZ2lmIj4KKyAgICAgICAgICA8ZUFubm90YXRpb25zIHhtaTppZD0iX1QyT0lnSmFyRWQyb3FmNWh0UGpYbkEiIHNvdXJjZT0iaW1hZ2VfcGFweXJ1cyI+CisgICAgICAgICAgICA8ZGV0YWlscyB4bWk6aWQ9Il9UMk9JZ1phckVkMm9xZjVodFBqWG5BIiBrZXk9ImltYWdlX2tpbmRfa2V5IiB2YWx1ZT0iaWNvbiIvPgorICAgICAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgICA8L2ljb24+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX0YyQVQ4S0cwRWR5ajJZYTUwSFBsWGciIG5hbWU9IkV4dGVuc2lvbl9Db25zdHJhaW50UHJvcGVydHkiIG1lbWJlckVuZD0iX0YzUHFFS0cwRWR5ajJZYTUwSFBsWGcgX0YzYjNVS0cwRWR5ajJZYTUwSFBsWGciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX0YzUHFFS0cwRWR5ajJZYTUwSFBsWGciIG5hbWU9ImV4dGVuc2lvbl9Db25zdHJhaW50UHJvcGVydHkiIHR5cGU9Il9ZOVg1NExWRkVkdTJpZUY0T044VWpBIiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX0YyQVQ4S0cwRWR5ajJZYTUwSFBsWGciLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpQcm9maWxlIiB4bWk6aWQ9Il9DMnpYTUxYOEVkdUZtcVFzck5COWx3IiBuYW1lPSJBY3Rpdml0aWVzIiBVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BY3Rpdml0aWVzIj4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il8xdWhtUUxYakVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJPcHRpb25hbCI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9DczVoTUxYa0VkdUhXcEFhV2pNNjJ3IiBuYW1lPSJiYXNlX1BhcmFtZXRlciIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX0NzbFlJTFhrRWR1SFdwQWFXak02MnciPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNQYXJhbWV0ZXIiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iXzJhN1pRTFhqRWR1SFdwQWFXak02MnciIG5hbWU9IlJhdGUiPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfQy1vS1lMWGtFZHVIV3BBYVdqTTYydyIgbmFtZT0iYmFzZV9QYXJhbWV0ZXIiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9DLVhyc0xYa0VkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUGFyYW1ldGVyIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9EUDBCQUxYa0VkdUhXcEFhV2pNNjJ3IiBuYW1lPSJiYXNlX0FjdGl2aXR5RWRnZSIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX0RQc3NRTFhrRWR1SFdwQWFXak02MnciPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNBY3Rpdml0eUVkZ2UiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX1l6YXNZTFhrRWR1SFdwQWFXak02MnciIG5hbWU9InJhdGUiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNVbmlxdWU9ImZhbHNlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjSW5zdGFuY2VTcGVjaWZpY2F0aW9uIi8+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfdzUzVXNMWDBFZHU5NF9ORTBFTzVfQSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX3c1X1FnTFgwRWR1OTRfTkUwRU81X0EiIHZhbHVlPSIxIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iXzY4YXlBTFhrRWR1SFdwQWFXak02MnciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iXzNNRWlVTFhqRWR1SFdwQWFXak02MnciIG5hbWU9IlByb2JhYmlsaXR5Ij4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX0RseHA4TFhrRWR1SFdwQWFXak02MnciIG5hbWU9ImJhc2VfQWN0aXZpdHlFZGdlIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfRGxxVk1MWGtFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0FjdGl2aXR5RWRnZSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfRHpJSmNMWGtFZHVIV3BBYVdqTTYydyIgbmFtZT0iYmFzZV9QYXJhbWV0ZXJTZXQiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9EeXl5UUxYa0VkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjUGFyYW1ldGVyU2V0Ii8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9mclR4UUxYa0VkdUhXcEFhV2pNNjJ3IiBuYW1lPSJwcm9iYWJpbGl0eSIgdmlzaWJpbGl0eT0icHVibGljIiBpc1VuaXF1ZT0iZmFsc2UiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNWYWx1ZVNwZWNpZmljYXRpb24iLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il94YmhRUUxYMEVkdTk0X05FMEVPNV9BIi8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfeGJtSXdMWDBFZHU5NF9ORTBFTzVfQSIgdmFsdWU9IjEiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfOUN1WE1MWGtFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfOFg0ZjRMWGpFZHVIV3BBYVdqTTYydyIgbmFtZT0iQ29udGludW91cyI+CisgICAgICAgIDxnZW5lcmFsaXphdGlvbiB4bWk6aWQ9Il9Cc0hab0xYa0VkdUhXcEFhV2pNNjJ3IiBnZW5lcmFsPSJfMmE3WlFMWGpFZHVIV3BBYVdqTTYydyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfLU4tZTBMWGpFZHVIV3BBYVdqTTYydyIgbmFtZT0iRGlzY3JldGUiPgorICAgICAgICA8Z2VuZXJhbGl6YXRpb24geG1pOmlkPSJfQmNTMDhMWGtFZHVIV3BBYVdqTTYydyIgZ2VuZXJhbD0iXzJhN1pRTFhqRWR1SFdwQWFXak02MnciLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfQ3NsWUlMWGtFZHVIV3BBYVdqTTYydyIgbmFtZT0iUGFyYW1ldGVyT3B0aW9ubmFsIiBtZW1iZXJFbmQ9Il9Dc3Bwa0xYa0VkdUhXcEFhV2pNNjJ3IF9DczVoTUxYa0VkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9Dc3Bwa0xYa0VkdUhXcEFhV2pNNjJ3IiBuYW1lPSJleHRlbnNpb25fT3B0aW9ubmFsIiB0eXBlPSJfMXVobVFMWGpFZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9Dc2xZSUxYa0VkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX0MtWHJzTFhrRWR1SFdwQWFXak02MnciIG5hbWU9IlBhcmFtZXRlclJhdGUiIG1lbWJlckVuZD0iX0MtYjlJTFhrRWR1SFdwQWFXak02MncgX0Mtb0tZTFhrRWR1SFdwQWFXak02MnciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX0MtYjlJTFhrRWR1SFdwQWFXak02MnciIG5hbWU9ImV4dGVuc2lvbl9SYXRlIiB0eXBlPSJfMmE3WlFMWGpFZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9DLVhyc0xYa0VkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX0RQc3NRTFhrRWR1SFdwQWFXak02MnciIG5hbWU9IkFjdGl2aXR5RWRnZVJhdGUiIG1lbWJlckVuZD0iX0RQdklnTFhrRWR1SFdwQWFXak02MncgX0RQMEJBTFhrRWR1SFdwQWFXak02MnciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX0RQdklnTFhrRWR1SFdwQWFXak02MnciIG5hbWU9ImV4dGVuc2lvbl9SYXRlIiB0eXBlPSJfMmE3WlFMWGpFZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9EUHNzUUxYa0VkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX0RscVZNTFhrRWR1SFdwQWFXak02MnciIG5hbWU9IkFjdGl2aXR5RWRnZVByb2JhYmlsaXR5IiBtZW1iZXJFbmQ9Il9EbHRZZ0xYa0VkdUhXcEFhV2pNNjJ3IF9EbHhwOExYa0VkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9EbHRZZ0xYa0VkdUhXcEFhV2pNNjJ3IiBuYW1lPSJleHRlbnNpb25fUHJvYmFiaWxpdHkiIHR5cGU9Il8zTUVpVUxYakVkdUhXcEFhV2pNNjJ3IiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX0RscVZNTFhrRWR1SFdwQWFXak02MnciLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfRHl5eVFMWGtFZHVIV3BBYVdqTTYydyIgbmFtZT0iUGFyYW1ldGVyU2V0UHJvYmFiaWxpdHkiIG1lbWJlckVuZD0iX0R5OUtVTFhrRWR1SFdwQWFXak02MncgX0R6SUpjTFhrRWR1SFdwQWFXak02MnciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX0R5OUtVTFhrRWR1SFdwQWFXak02MnciIG5hbWU9ImV4dGVuc2lvbl9Qcm9iYWJpbGl0eSIgdHlwZT0iXzNNRWlVTFhqRWR1SFdwQWFXak02MnciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfRHl5eVFMWGtFZHVIV3BBYVdqTTYydyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfS25nSzBMWGxFZHVIV3BBYVdqTTYydyIgbmFtZT0iQ29udHJvbE9wZXJhdG9yIj4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX2IyZzBnTFhsRWR1SFdwQWFXak02MnciIG5hbWU9ImJhc2VfT3BlcmF0aW9uIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfYjJaZndMWGxFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI09wZXJhdGlvbiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfY0VNck1MWGxFZHVIV3BBYVdqTTYydyIgbmFtZT0iYmFzZV9CZWhhdmlvciIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX2NFRXZZTFhsRWR1SFdwQWFXak02MnciPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNCZWhhdmlvciIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfTENsa1VMWGxFZHVIV3BBYVdqTTYydyIgbmFtZT0iTm9CdWZmZXIiPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfYmJnNmtMWGxFZHVIV3BBYVdqTTYydyIgbmFtZT0iYmFzZV9PYmplY3ROb2RlIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfYmJPbXNMWGxFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI09iamVjdE5vZGUiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX0xaa2c4TFhsRWR1SFdwQWFXak02MnciIG5hbWU9Ik92ZXJ3cml0ZSI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9hLXVRNExYbEVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJiYXNlX09iamVjdE5vZGUiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9hLVYyWUxYbEVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjT2JqZWN0Tm9kZSIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9hLVYyWUxYbEVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJPYmplY3ROb2RlT3ZlcndyaXRlIiBtZW1iZXJFbmQ9Il9hLVk1c0xYbEVkdUhXcEFhV2pNNjJ3IF9hLXVRNExYbEVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9hLVk1c0xYbEVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJleHRlbnNpb25fT3ZlcndyaXRlIiB0eXBlPSJfTFprZzhMWGxFZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9hLVYyWUxYbEVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX2JiT21zTFhsRWR1SFdwQWFXak02MnciIG5hbWU9Ik9iamVjdE5vZGVOb0J1ZmZlciIgbWVtYmVyRW5kPSJfYmJScUFMWGxFZHVIV3BBYVdqTTYydyBfYmJnNmtMWGxFZHVIV3BBYVdqTTYydyI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfYmJScUFMWGxFZHVIV3BBYVdqTTYydyIgbmFtZT0iZXh0ZW5zaW9uX05vQnVmZmVyIiB0eXBlPSJfTENsa1VMWGxFZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9iYk9tc0xYbEVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX2IyWmZ3TFhsRWR1SFdwQWFXak02MnciIG5hbWU9Ik9wZXJhdGlvbkNvbnRyb2xPcGVyYXRvciIgbWVtYmVyRW5kPSJfYjJjakVMWGxFZHVIV3BBYVdqTTYydyBfYjJnMGdMWGxFZHVIV3BBYVdqTTYydyI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfYjJjakVMWGxFZHVIV3BBYVdqTTYydyIgbmFtZT0iZXh0ZW5zaW9uX0NvbnRyb2xPcGVyYXRvciIgdHlwZT0iX0tuZ0swTFhsRWR1SFdwQWFXak02MnciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfYjJaZndMWGxFZHVIV3BBYVdqTTYydyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9jRUV2WUxYbEVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJCZWhhdmlvckNvbnRyb2xPcGVyYXRvciIgbWVtYmVyRW5kPSJfY0VITG9MWGxFZHVIV3BBYVdqTTYydyBfY0VNck1MWGxFZHVIV3BBYVdqTTYydyI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfY0VITG9MWGxFZHVIV3BBYVdqTTYydyIgbmFtZT0iZXh0ZW5zaW9uX0NvbnRyb2xPcGVyYXRvciIgdHlwZT0iX0tuZ0swTFhsRWR1SFdwQWFXak02MnciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfY0VFdllMWGxFZHVIV3BBYVdqTTYydyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIHhtaTppZD0iX054ZEc0TFg4RWR1Rm1xUXNyTkI5bHciIG5hbWU9IkFsbG9jYXRpb25zIiBVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BbGxvY2F0aW9ucyI+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfSEdOamNMWG5FZHVIV3BBYVdqTTYydyIgbmFtZT0iQWxsb2NhdGUiPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfeEw1UUlMWUZFZHV0Sk1oWlhSdmk3dyIgbmFtZT0iYmFzZV9BYnN0cmFjdGlvbiIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX3hMa2dBTFlGRWR1dEpNaFpYUnZpN3ciPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNBYnN0cmFjdGlvbiIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfSGowc2dMWG5FZHVIV3BBYVdqTTYydyIgbmFtZT0iQWxsb2NhdGVkIj4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX05rdnRJTFhuRWR1SFdwQWFXak02MnciIG5hbWU9ImJhc2VfTmFtZWRFbGVtZW50IiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfTmtTYUlMWG5FZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI05hbWVkRWxlbWVudCIvPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfU2ozNWtMWG5FZHVIV3BBYVdqTTYydyIgbmFtZT0iYWxsb2NhdGVkRnJvbSIgdmlzaWJpbGl0eT0icHVibGljIiBpc1VuaXF1ZT0iZmFsc2UiIGlzUmVhZE9ubHk9InRydWUiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI05hbWVkRWxlbWVudCIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX1p3UjE0TFhuRWR1SFdwQWFXak02MnciLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9ad1pLb0xYbkVkdUhXcEFhV2pNNjJ3IiB2YWx1ZT0iKiIvPgorICAgICAgICAgIDxkZWZhdWx0VmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsU3RyaW5nIiB4bWk6aWQ9Il9Wa21mb0xYbkVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICAgIDx2YWx1ZSB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICAgICAgPC9kZWZhdWx0VmFsdWU+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9TMDdOVUxYbkVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJhbGxvY2F0ZWRUbyIgdmlzaWJpbGl0eT0icHVibGljIiBpc1VuaXF1ZT0iZmFsc2UiIGlzUmVhZE9ubHk9InRydWUiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI05hbWVkRWxlbWVudCIvPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX1pHWWtVTFhuRWR1SFdwQWFXak02MnciLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9aR2RjMExYbkVkdUhXcEFhV2pNNjJ3IiB2YWx1ZT0iKiIvPgorICAgICAgICAgIDxkZWZhdWx0VmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsU3RyaW5nIiB4bWk6aWQ9Il9YZ3lmZ0xYbkVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICAgIDx2YWx1ZSB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICAgICAgPC9kZWZhdWx0VmFsdWU+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il9JTVUyOExYbkVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uIj4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX05KdWxFTFhuRWR1SFdwQWFXak02MnciIG5hbWU9ImJhc2VfQWN0aXZpdHlQYXJ0aXRpb24iIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9OSmFjQUxYbkVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQWN0aXZpdHlQYXJ0aXRpb24iLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfTkphY0FMWG5FZHVIV3BBYVdqTTYydyIgbmFtZT0iQWN0aXZpdHlQYXJ0aXRpb25BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uIiBtZW1iZXJFbmQ9Il9OSmRmVUxYbkVkdUhXcEFhV2pNNjJ3IF9OSnVsRUxYbkVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9OSmRmVUxYbkVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJleHRlbnNpb25fQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiIgdHlwZT0iX0lNVTI4TFhuRWR1SFdwQWFXak02MnciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfTkphY0FMWG5FZHVIV3BBYVdqTTYydyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9Oa1NhSUxYbkVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJOYW1lZEVsZW1lbnRBbGxvY2F0ZWQiIG1lbWJlckVuZD0iX05rVmRjTFhuRWR1SFdwQWFXak02MncgX05rdnRJTFhuRWR1SFdwQWFXak02MnciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX05rVmRjTFhuRWR1SFdwQWFXak02MnciIG5hbWU9ImV4dGVuc2lvbl9BbGxvY2F0ZWQiIHR5cGU9Il9IajBzZ0xYbkVkdUhXcEFhV2pNNjJ3IiBhZ2dyZWdhdGlvbj0iY29tcG9zaXRlIiBhc3NvY2lhdGlvbj0iX05rU2FJTFhuRWR1SFdwQWFXak02MnciLz4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfeExrZ0FMWUZFZHV0Sk1oWlhSdmk3dyIgbmFtZT0iQWJzdHJhY3Rpb25BbGxvY2F0ZSIgbWVtYmVyRW5kPSJfeEx5aWNMWUZFZHV0Sk1oWlhSdmk3dyBfeEw1UUlMWUZFZHV0Sk1oWlhSdmk3dyI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfeEx5aWNMWUZFZHV0Sk1oWlhSdmk3dyIgbmFtZT0iZXh0ZW5zaW9uX0FsbG9jYXRlIiB0eXBlPSJfSEdOamNMWG5FZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il94TGtnQUxZRkVkdXRKTWhaWFJ2aTd3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6UHJvZmlsZSIgeG1pOmlkPSJfT09KQzRMWDhFZHVGbXFRc3JOQjlsdyIgbmFtZT0iUmVxdWlyZW1lbnRzIiBVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9SZXF1aXJlbWVudHMiPgorICAgICAgPG93bmVkQ29tbWVudCB4bWk6aWQ9Il9CbXBHOExYb0VkdUhXcEFhV2pNNjJ3IiBhbm5vdGF0ZWRFbGVtZW50PSJfVFpfblVMVTVFZHVpS3FDekpNV2JHdyI+CisgICAgICAgIDxib2R5PlRyYWNlIGluc3RlYWQgb2YgQWJzdHJhY3Rpb24gaW4gU3lzTUwgc3BlY2lmaWNhdGlvbnMuPC9ib2R5PgorICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfTFBuellMWG9FZHVIV3BBYVdqTTYydyIgbmFtZT0iRGVyaXZlUmVxdCI+CisgICAgICAgIDxnZW5lcmFsaXphdGlvbiB4bWk6aWQ9Il9scjVTQUtHMUVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgICA8Z2VuZXJhbCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfUFJPRklMRVMvU3RhbmRhcmQucHJvZmlsZS51bWwjVHJhY2UiLz4KKyAgICAgICAgPC9nZW5lcmFsaXphdGlvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfX0FlQm9KYXFFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvRGVyaXZlUmVxdC5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfX2tPMkFKYXFFZDJvcWY1aHRQalhuQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iX19rTzJBWmFxRWQyb3FmNWh0UGpYbkEiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX0xvcC1jTFhvRWR1SFdwQWFXak02MnciIG5hbWU9IlZlcmlmeSI+CisgICAgICAgIDxnZW5lcmFsaXphdGlvbiB4bWk6aWQ9Il9tUnpiY0tHMUVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgICA8Z2VuZXJhbCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfUFJPRklMRVMvU3RhbmRhcmQucHJvZmlsZS51bWwjVHJhY2UiLz4KKyAgICAgICAgPC9nZW5lcmFsaXphdGlvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfS2N2M3NKYXJFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvVmVyaWZ5LmdpZiI+CisgICAgICAgICAgPGVBbm5vdGF0aW9ucyB4bWk6aWQ9Il9MR25VRUphckVkMm9xZjVodFBqWG5BIiBzb3VyY2U9ImltYWdlX3BhcHlydXMiPgorICAgICAgICAgICAgPGRldGFpbHMgeG1pOmlkPSJfTEd4RkVKYXJFZDJvcWY1aHRQalhuQSIga2V5PSJpbWFnZV9raW5kX2tleSIgdmFsdWU9Imljb24iLz4KKyAgICAgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgICAgPC9pY29uPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6U3RlcmVvdHlwZSIgeG1pOmlkPSJfTDhIRjhMWG9FZHVIV3BBYVdqTTYydyIgbmFtZT0iQ29weSI+CisgICAgICAgIDxnZW5lcmFsaXphdGlvbiB4bWk6aWQ9Il9tM2gtc0tHMUVkeWoyWWE1MEhQbFhnIj4KKyAgICAgICAgICA8Z2VuZXJhbCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIGhyZWY9InBhdGhtYXA6Ly9VTUxfUFJPRklMRVMvU3RhbmRhcmQucHJvZmlsZS51bWwjVHJhY2UiLz4KKyAgICAgICAgPC9nZW5lcmFsaXphdGlvbj4KKyAgICAgICAgPGljb24geG1pOmlkPSJfNm9xNjhKYXFFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvQ29weS5naWYiPgorICAgICAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfN0xZbWNKYXFFZDJvcWY1aHRQalhuQSIgc291cmNlPSJpbWFnZV9wYXB5cnVzIj4KKyAgICAgICAgICAgIDxkZXRhaWxzIHhtaTppZD0iXzdMWW1jWmFxRWQyb3FmNWh0UGpYbkEiIGtleT0iaW1hZ2Vfa2luZF9rZXkiIHZhbHVlPSJpY29uIi8+CisgICAgICAgICAgPC9lQW5ub3RhdGlvbnM+CisgICAgICAgIDwvaWNvbj4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlN0ZXJlb3R5cGUiIHhtaTppZD0iX01xeXc0TFhvRWR1SFdwQWFXak02MnciIG5hbWU9IlNhdGlzZnkiPgorICAgICAgICA8Z2VuZXJhbGl6YXRpb24geG1pOmlkPSJfcXZDaEFNcTVFZDJlYXJmWDZxMTZ4ZyI+CisgICAgICAgICAgPGdlbmVyYWwgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX1BST0ZJTEVTL1N0YW5kYXJkLnByb2ZpbGUudW1sI1RyYWNlIi8+CisgICAgICAgIDwvZ2VuZXJhbGl6YXRpb24+CisgICAgICAgIDxpY29uIHhtaTppZD0iX0ZzcXo0SmFyRWQyb3FmNWh0UGpYbkEiIGxvY2F0aW9uPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvaWNvbnMvcmVxdWlyZW1lbnRzL1NhdGlzZnkuZ2lmIj4KKyAgICAgICAgICA8ZUFubm90YXRpb25zIHhtaTppZD0iX0dUUVN3SmFyRWQyb3FmNWh0UGpYbkEiIHNvdXJjZT0iaW1hZ2VfcGFweXJ1cyI+CisgICAgICAgICAgICA8ZGV0YWlscyB4bWk6aWQ9Il9HVFFTd1phckVkMm9xZjVodFBqWG5BIiBrZXk9ImltYWdlX2tpbmRfa2V5IiB2YWx1ZT0iaWNvbiIvPgorICAgICAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgICA8L2ljb24+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il9TYjZ3RUxYcUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJUZXN0Q2FzZSI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9XQ3EwVUxYcUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJiYXNlX0JlaGF2aW9yIiBpc1VuaXF1ZT0iZmFsc2UiIGFzc29jaWF0aW9uPSJfV0NmT0lMWHFFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpDbGFzcyIgaHJlZj0icGF0aG1hcDovL1VNTF9NRVRBTU9ERUxTL1VNTC5tZXRhbW9kZWwudW1sI0JlaGF2aW9yIi8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il9XZWlROExYcUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJiYXNlX09wZXJhdGlvbiIgaXNVbmlxdWU9ImZhbHNlIiBhc3NvY2lhdGlvbj0iX1dlTmcwTFhxRWR1SFdwQWFXak02MnciPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNPcGVyYXRpb24iLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX3pON1RvS0cxRWR5ajJZYTUwSFBsWGciIG5hbWU9InZlcmlmaWVzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHR5cGU9Il94YWp5Z0xYcUVkdUhXcEFhV2pNNjJ3IiBpc1VuaXF1ZT0iZmFsc2UiIGlzUmVhZE9ubHk9InRydWUiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfMzhUSFFLRzFFZHlqMllhNTBIUGxYZyIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iXzM4Wk40S0cxRWR5ajJZYTUwSFBsWGciIHZhbHVlPSIqIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iXzNNUXhjS0cxRWR5ajJZYTUwSFBsWGciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPGljb24geG1pOmlkPSJfSHo4cGNKYXJFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvVGVzdENhc2UuZ2lmIj4KKyAgICAgICAgICA8ZUFubm90YXRpb25zIHhtaTppZD0iX0lUaUljSmFyRWQyb3FmNWh0UGpYbkEiIHNvdXJjZT0iaW1hZ2VfcGFweXJ1cyI+CisgICAgICAgICAgICA8ZGV0YWlscyB4bWk6aWQ9Il9JVGlJY1phckVkMm9xZjVodFBqWG5BIiBrZXk9ImltYWdlX2tpbmRfa2V5IiB2YWx1ZT0iaWNvbiIvPgorICAgICAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgICA8L2ljb24+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX1dDZk9JTFhxRWR1SFdwQWFXak02MnciIG5hbWU9IkJlaGF2aW9yVGVzdENhc2UiIG1lbWJlckVuZD0iX1dDamZrTFhxRWR1SFdwQWFXak02MncgX1dDcTBVTFhxRWR1SFdwQWFXak02MnciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX1dDamZrTFhxRWR1SFdwQWFXak02MnciIG5hbWU9ImV4dGVuc2lvbl9UZXN0Q2FzZSIgdHlwZT0iX1NiNndFTFhxRWR1SFdwQWFXak02MnciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfV0NmT0lMWHFFZHVIV3BBYVdqTTYydyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgICA8cGFja2FnZWRFbGVtZW50IHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uIiB4bWk6aWQ9Il9XZU5nMExYcUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJPcGVyYXRpb25UZXN0Q2FzZSIgbWVtYmVyRW5kPSJfV2VSTE1MWHFFZHVIV3BBYVdqTTYydyBfV2VpUThMWHFFZHVIV3BBYVdqTTYydyI+CisgICAgICAgIDxvd25lZEVuZCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbkVuZCIgeG1pOmlkPSJfV2VSTE1MWHFFZHVIV3BBYVdqTTYydyIgbmFtZT0iZXh0ZW5zaW9uX1Rlc3RDYXNlIiB0eXBlPSJfU2I2d0VMWHFFZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9XZU5nMExYcUVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il94YWp5Z0xYcUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJSZXF1aXJlbWVudCI+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il8zRHhkd0xYcUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJ0ZXh0IiB2aXNpYmlsaXR5PSJwdWJsaWMiIGlzVW5pcXVlPSJmYWxzZSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il82STFLTUxYcUVkdUhXcEFhV2pNNjJ3IiB2YWx1ZT0iMSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iXzZJNnB3TFhxRWR1SFdwQWFXak02MnciIHZhbHVlPSIxIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iXzZKRHpzTFhxRWR1SFdwQWFXak02MnciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzNZbFFJTFhxRWR1SFdwQWFXak02MnciIG5hbWU9ImlkIiB2aXNpYmlsaXR5PSJwdWJsaWMiIGlzVW5pcXVlPSJmYWxzZSI+CisgICAgICAgICAgPHR5cGUgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiBocmVmPSJwYXRobWFwOi8vVU1MX0xJQlJBUklFUy9VTUxQcmltaXRpdmVUeXBlcy5saWJyYXJ5LnVtbCNTdHJpbmciLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il84MmdSWUxYcUVkdUhXcEFhV2pNNjJ3IiB2YWx1ZT0iMSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iXzgyaGZnTFhxRWR1SFdwQWFXak02MnciIHZhbHVlPSIxIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iXzgyaXRvTFhxRWR1SFdwQWFXak02MnciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzNqcDNzTFhxRWR1SFdwQWFXak02MnciIG5hbWU9ImRlcml2ZWQiIHZpc2liaWxpdHk9InB1YmxpYyIgdHlwZT0iX3hhanlnTFhxRWR1SFdwQWFXak02MnciIGlzVW5pcXVlPSJmYWxzZSIgaXNSZWFkT25seT0idHJ1ZSIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9BeUM1NExYckVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfQXlIeVlMWHJFZHVIV3BBYVdqTTYydyIgdmFsdWU9IioiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfQUNfYmdMWHJFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfM3dGeE1MWHFFZHVIV3BBYVdqTTYydyIgbmFtZT0iZGVyaXZlZEZyb20iIHZpc2liaWxpdHk9InB1YmxpYyIgdHlwZT0iX3hhanlnTFhxRWR1SFdwQWFXak02MnciIGlzVW5pcXVlPSJmYWxzZSIgaXNSZWFkT25seT0idHJ1ZSIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9EakRCNExYckVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfRGpKdmtMWHJFZHVIV3BBYVdqTTYydyIgdmFsdWU9IioiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfREJaR1VMWHJFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfRkhjejRMWHJFZHVIV3BBYVdqTTYydyIgbmFtZT0ic2F0aXNmaWVkQnkiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNVbmlxdWU9ImZhbHNlIiBpc1JlYWRPbmx5PSJ0cnVlIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNOYW1lZEVsZW1lbnQiLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9NV3VlQUxYckVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfTVcxeXdMWHJFZHVIV3BBYVdqTTYydyIgdmFsdWU9IioiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfSUtaQWNMWHJFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfRi1LWmNMWHJFZHVIV3BBYVdqTTYydyIgbmFtZT0icmVmaW5lZEJ5IiB2aXNpYmlsaXR5PSJwdWJsaWMiIGlzVW5pcXVlPSJmYWxzZSIgaXNSZWFkT25seT0idHJ1ZSIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjTmFtZWRFbGVtZW50Ii8+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfTTN3dWdMWHJFZHVIV3BBYVdqTTYydyIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX00zMW5BTFhyRWR1SFdwQWFXak02MnciIHZhbHVlPSIqIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX0tLamhZTFhyRWR1SFdwQWFXak02MnciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX082ckJjTFhyRWR1SFdwQWFXak02MnciIG5hbWU9InRyYWNlZFRvIiB2aXNpYmlsaXR5PSJwdWJsaWMiIGlzVW5pcXVlPSJmYWxzZSIgaXNSZWFkT25seT0idHJ1ZSIgaXNEZXJpdmVkPSJ0cnVlIj4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjTmFtZWRFbGVtZW50Ii8+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfYXR0eHNMWHJFZHVIV3BBYVdqTTYydyIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX2F0MlVrTFhyRWR1SFdwQWFXak02MnciIHZhbHVlPSIqIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX1FqczB3TFhyRWR1SFdwQWFXak02MnciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX1BIdW1BTFhyRWR1SFdwQWFXak02MnciIG5hbWU9InZlcmlmaWVkQnkiIHZpc2liaWxpdHk9InB1YmxpYyIgaXNVbmlxdWU9ImZhbHNlIiBpc1JlYWRPbmx5PSJ0cnVlIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDx0eXBlIHhtaTp0eXBlPSJ1bWw6Q2xhc3MiIGhyZWY9InBhdGhtYXA6Ly9VTUxfTUVUQU1PREVMUy9VTUwubWV0YW1vZGVsLnVtbCNOYW1lZEVsZW1lbnQiLz4KKyAgICAgICAgICA8bG93ZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxJbnRlZ2VyIiB4bWk6aWQ9Il9hRkNvSUxYckVkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICAgICAgPHVwcGVyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsVW5saW1pdGVkTmF0dXJhbCIgeG1pOmlkPSJfYUZJSHNMWHJFZHVIV3BBYVdqTTYydyIgdmFsdWU9IioiLz4KKyAgICAgICAgICA8ZGVmYXVsdFZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFN0cmluZyIgeG1pOmlkPSJfUjF3U2dMWHJFZHVIV3BBYVdqTTYydyI+CisgICAgICAgICAgICA8dmFsdWUgeHNpOm5pbD0idHJ1ZSIvPgorICAgICAgICAgIDwvZGVmYXVsdFZhbHVlPgorICAgICAgICA8L293bmVkQXR0cmlidXRlPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfUFN0dUFMWHJFZHVIV3BBYVdqTTYydyIgbmFtZT0ibWFzdGVyIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHR5cGU9Il94YWp5Z0xYcUVkdUhXcEFhV2pNNjJ3IiBpc1VuaXF1ZT0iZmFsc2UiIGlzUmVhZE9ubHk9InRydWUiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfUHhjUGNBX3JFZDJkNi03d1hRYjRoUSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX1B4bFpZQV9yRWQyZDYtN3dYUWI0aFEiIHZhbHVlPSIxIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX1N2eTQ0TFhyRWR1SFdwQWFXak02MnciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iX3RTVFJ3TFhzRWR1SFdwQWFXak02MnciIG5hbWU9ImJhc2VfQ2xhc3MiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il90Uk5zb0xYc0VkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjQ2xhc3MiLz4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPGljb24geG1pOmlkPSJfQ0VaRm9KYXJFZDJvcWY1aHRQalhuQSIgbG9jYXRpb249InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9pY29ucy9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnQuZ2lmIj4KKyAgICAgICAgICA8ZUFubm90YXRpb25zIHhtaTppZD0iX0NzVW9VSmFyRWQyb3FmNWh0UGpYbkEiIHNvdXJjZT0iaW1hZ2VfcGFweXJ1cyI+CisgICAgICAgICAgICA8ZGV0YWlscyB4bWk6aWQ9Il9Dc1VvVVphckVkMm9xZjVodFBqWG5BIiBrZXk9ImltYWdlX2tpbmRfa2V5IiB2YWx1ZT0iaWNvbiIvPgorICAgICAgICAgIDwvZUFubm90YXRpb25zPgorICAgICAgICA8L2ljb24+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpTdGVyZW90eXBlIiB4bWk6aWQ9Il95cGlIRUxYcUVkdUhXcEFhV2pNNjJ3IiBuYW1lPSJSZXF1aXJlbWVudFJlbGF0ZWQiPgorICAgICAgICA8b3duZWRBdHRyaWJ1dGUgeG1pOmlkPSJfczRkT1lMWHNFZHVIV3BBYVdqTTYydyIgbmFtZT0iYmFzZV9OYW1lZEVsZW1lbnQiIGlzVW5pcXVlPSJmYWxzZSIgYXNzb2NpYXRpb249Il9zM1YwRUxYc0VkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgICA8dHlwZSB4bWk6dHlwZT0idW1sOkNsYXNzIiBocmVmPSJwYXRobWFwOi8vVU1MX01FVEFNT0RFTFMvVU1MLm1ldGFtb2RlbC51bWwjTmFtZWRFbGVtZW50Ii8+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il8wbkJ0Z0xYMUVkdTk0X05FMEVPNV9BIiBuYW1lPSJ0cmFjZWRGcm9tIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHR5cGU9Il94YWp5Z0xYcUVkdUhXcEFhV2pNNjJ3IiBpc1VuaXF1ZT0iZmFsc2UiIGlzUmVhZE9ubHk9InRydWUiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfRE80SHNMWDJFZHU5NF9ORTBFTzVfQSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX0RPOW5RTFgyRWR1OTRfTkUwRU81X0EiIHZhbHVlPSIqIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iXzNoams4TFgxRWR1OTRfTkUwRU81X0EiPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzB5Sl9jTFgxRWR1OTRfTkUwRU81X0EiIG5hbWU9InNhdGlzZmllcyIgdmlzaWJpbGl0eT0icHVibGljIiB0eXBlPSJfeGFqeWdMWHFFZHVIV3BBYVdqTTYydyIgaXNVbmlxdWU9ImZhbHNlIiBpc1JlYWRPbmx5PSJ0cnVlIiBpc0Rlcml2ZWQ9InRydWUiPgorICAgICAgICAgIDxsb3dlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbEludGVnZXIiIHhtaTppZD0iX0Qyanl3TFgyRWR1OTRfTkUwRU81X0EiLz4KKyAgICAgICAgICA8dXBwZXJWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxVbmxpbWl0ZWROYXR1cmFsIiB4bWk6aWQ9Il9EMnBTVUxYMkVkdTk0X05FMEVPNV9BIiB2YWx1ZT0iKiIvPgorICAgICAgICAgIDxkZWZhdWx0VmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsU3RyaW5nIiB4bWk6aWQ9Il82eElmVUxYMUVkdTk0X05FMEVPNV9BIj4KKyAgICAgICAgICAgIDx2YWx1ZSB4c2k6bmlsPSJ0cnVlIi8+CisgICAgICAgICAgPC9kZWZhdWx0VmFsdWU+CisgICAgICAgIDwvb3duZWRBdHRyaWJ1dGU+CisgICAgICAgIDxvd25lZEF0dHJpYnV0ZSB4bWk6aWQ9Il8xQXFWZ0xYMUVkdTk0X05FMEVPNV9BIiBuYW1lPSJyZWZpbmVzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHR5cGU9Il94YWp5Z0xYcUVkdUhXcEFhV2pNNjJ3IiBpc1VuaXF1ZT0iZmFsc2UiIGlzUmVhZE9ubHk9InRydWUiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfRXBkMllMWDJFZHU5NF9ORTBFTzVfQSIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iX0VwaXU0TFgyRWR1OTRfTkUwRU81X0EiIHZhbHVlPSIqIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iXzRqWEFNTFgxRWR1OTRfTkUwRU81X0EiPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgICAgPG93bmVkQXR0cmlidXRlIHhtaTppZD0iXzU2LVZJTXE0RWQyZWFyZlg2cTE2eGciIG5hbWU9InZlcmlmaWVzIiB2aXNpYmlsaXR5PSJwdWJsaWMiIHR5cGU9Il94YWp5Z0xYcUVkdUhXcEFhV2pNNjJ3IiBpc1VuaXF1ZT0iZmFsc2UiIGlzUmVhZE9ubHk9InRydWUiIGlzRGVyaXZlZD0idHJ1ZSI+CisgICAgICAgICAgPGxvd2VyVmFsdWUgeG1pOnR5cGU9InVtbDpMaXRlcmFsSW50ZWdlciIgeG1pOmlkPSJfOVBSLWdNcTRFZDJlYXJmWDZxMTZ4ZyIvPgorICAgICAgICAgIDx1cHBlclZhbHVlIHhtaTp0eXBlPSJ1bWw6TGl0ZXJhbFVubGltaXRlZE5hdHVyYWwiIHhtaTppZD0iXzlQYkljTXE0RWQyZWFyZlg2cTE2eGciIHZhbHVlPSIqIi8+CisgICAgICAgICAgPGRlZmF1bHRWYWx1ZSB4bWk6dHlwZT0idW1sOkxpdGVyYWxTdHJpbmciIHhtaTppZD0iX1E3M2Q0TXE1RWQyZWFyZlg2cTE2eGciPgorICAgICAgICAgICAgPHZhbHVlIHhzaTpuaWw9InRydWUiLz4KKyAgICAgICAgICA8L2RlZmF1bHRWYWx1ZT4KKyAgICAgICAgPC9vd25lZEF0dHJpYnV0ZT4KKyAgICAgIDwvcGFja2FnZWRFbGVtZW50PgorICAgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOkV4dGVuc2lvbiIgeG1pOmlkPSJfczNWMEVMWHNFZHVIV3BBYVdqTTYydyIgbmFtZT0iTmFtZWRFbGVtZW50UmVxdWlyZW1lbnRSZWxhdGVkIiBtZW1iZXJFbmQ9Il9zMzJ4Y0xYc0VkdUhXcEFhV2pNNjJ3IF9zNGRPWUxYc0VkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgPG93bmVkRW5kIHhtaTp0eXBlPSJ1bWw6RXh0ZW5zaW9uRW5kIiB4bWk6aWQ9Il9zMzJ4Y0xYc0VkdUhXcEFhV2pNNjJ3IiBuYW1lPSJleHRlbnNpb25fUmVxdWlyZW1lbnRSZWxhdGVkIiB0eXBlPSJfeXBpSEVMWHFFZHVIV3BBYVdqTTYydyIgYWdncmVnYXRpb249ImNvbXBvc2l0ZSIgYXNzb2NpYXRpb249Il9zM1YwRUxYc0VkdUhXcEFhV2pNNjJ3Ii8+CisgICAgICA8L3BhY2thZ2VkRWxlbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb24iIHhtaTppZD0iX3RSTnNvTFhzRWR1SFdwQWFXak02MnciIG5hbWU9IkNsYXNzUmVxdWlyZW1lbnQiIG1lbWJlckVuZD0iX3RSZlpjTFhzRWR1SFdwQWFXak02MncgX3RTVFJ3TFhzRWR1SFdwQWFXak02MnciPgorICAgICAgICA8b3duZWRFbmQgeG1pOnR5cGU9InVtbDpFeHRlbnNpb25FbmQiIHhtaTppZD0iX3RSZlpjTFhzRWR1SFdwQWFXak02MnciIG5hbWU9ImV4dGVuc2lvbl9SZXF1aXJlbWVudCIgdHlwZT0iX3hhanlnTFhxRWR1SFdwQWFXak02MnciIGFnZ3JlZ2F0aW9uPSJjb21wb3NpdGUiIGFzc29jaWF0aW9uPSJfdFJOc29MWHNFZHVIV3BBYVdqTTYydyIvPgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIHhtaTppZD0iX21lT2lvTFg4RWR1Rm1xUXNyTkI5bHciIG5hbWU9IkludGVyYWN0aW9ucyIgVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvSW50ZXJhY3Rpb25zIj4KKyAgICAgIDxvd25lZENvbW1lbnQgeG1pOmlkPSJfWVE2S1VMWG1FZHVIV3BBYVdqTTYydyI+CisgICAgICAgIDxib2R5Pk5vIHN0ZXJlb3R5cGVzIGRlZmluZWQgZm9yIGludGVyYWN0aW9ucy48L2JvZHk+CisgICAgICA8L293bmVkQ29tbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiB4bWk6aWQ9Il9NbUlQc0lZOEVkMjJmNTJ4OWpjWUlRIiBuYW1lPSJEdW1teSI+CisgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOmlkPSJfTW1JUHNZWThFZDIyZjUyeDlqY1lJUSI+CisgICAgICAgICAgPGJvZHk+RHVtbXkgRGF0YVR5cGUsIGp1c3QgYWRkZWQgZm9yIGNvZGUgZ2VuZXJhdGlvbiBwdXJwb3NlLiYjeEQ7CitJbiBvdGhlciB3b3JkcywgdGhpcyBkYXRhIHR5cGUgZm9yIEVNRiBnZW5lcmF0aW9uIG9mIFN5c21sUGFja2FnZSBhbmQgU3lzbWxGYWN0b3J5JiN4RDsKK2phdmEgY2xhc3NlcyBpbiB0aGUgbW9kZWwgY29kZS4mI3hEOworJiN4RDsKK0RvIG5vdCByZW1vdmUgdGhpcyAhISE8L2JvZHk+CisgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIHhtaTppZD0iX25BRjVrTFg4RWR1Rm1xUXNyTkI5bHciIG5hbWU9IlN0YXRlTWFjaGluZXMiIFVSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1N0YXRlTWFjaGluZXMiPgorICAgICAgPG93bmVkQ29tbWVudCB4bWk6aWQ9Il9qWW1RY0xYbUVkdUhXcEFhV2pNNjJ3Ij4KKyAgICAgICAgPGJvZHk+Tm8gc3RlcmVvdHlwZXMgZGVmaW5lZCBmb3IgU3RhdGVNYWNoaW5lcy48L2JvZHk+CisgICAgICA8L293bmVkQ29tbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiB4bWk6aWQ9Il9NYnNoVUlZOEVkMjJmNTJ4OWpjWUlRIiBuYW1lPSJEdW1teSI+CisgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOmlkPSJfTWJzaFVZWThFZDIyZjUyeDlqY1lJUSI+CisgICAgICAgICAgPGJvZHk+RHVtbXkgRGF0YVR5cGUsIGp1c3QgYWRkZWQgZm9yIGNvZGUgZ2VuZXJhdGlvbiBwdXJwb3NlLiYjeEQ7CitJbiBvdGhlciB3b3JkcywgdGhpcyBkYXRhIHR5cGUgZm9yIEVNRiBnZW5lcmF0aW9uIG9mIFN5c21sUGFja2FnZSBhbmQgU3lzbWxGYWN0b3J5JiN4RDsKK2phdmEgY2xhc3NlcyBpbiB0aGUgbW9kZWwgY29kZS4mI3hEOworJiN4RDsKK0RvIG5vdCByZW1vdmUgdGhpcyAhISE8L2JvZHk+CisgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByb2ZpbGUiIHhtaTppZD0iX25lWm1NTFg4RWR1Rm1xUXNyTkI5bHciIG5hbWU9IlVzZUNhc2VzIiBVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9Vc2VDYXNlcyI+CisgICAgICA8b3duZWRDb21tZW50IHhtaTppZD0iX3QzUUFvTFhtRWR1SFdwQWFXak02MnciPgorICAgICAgICA8Ym9keT5ObyBzdGVyZW90eXBlcyBkZWZpbmVkIGZvciBVc2VDYXNlcy48L2JvZHk+CisgICAgICA8L293bmVkQ29tbWVudD4KKyAgICAgIDxwYWNrYWdlZEVsZW1lbnQgeG1pOnR5cGU9InVtbDpQcmltaXRpdmVUeXBlIiB4bWk6aWQ9Il9NQ1hiVUlZOEVkMjJmNTJ4OWpjWUlRIiBuYW1lPSJEdW1teSI+CisgICAgICAgIDxvd25lZENvbW1lbnQgeG1pOmlkPSJfTUNYYlVZWThFZDIyZjUyeDlqY1lJUSI+CisgICAgICAgICAgPGJvZHk+RHVtbXkgRGF0YVR5cGUsIGp1c3QgYWRkZWQgZm9yIGNvZGUgZ2VuZXJhdGlvbiBwdXJwb3NlLiYjeEQ7CitJbiBvdGhlciB3b3JkcywgdGhpcyBkYXRhIHR5cGUgZm9yIEVNRiBnZW5lcmF0aW9uIG9mIFN5c21sUGFja2FnZSBhbmQgU3lzbWxGYWN0b3J5JiN4RDsKK2phdmEgY2xhc3NlcyBpbiB0aGUgbW9kZWwgY29kZS4mI3hEOworJiN4RDsKK0RvIG5vdCByZW1vdmUgdGhpcyAhISE8L2JvZHk+CisgICAgICAgIDwvb3duZWRDb21tZW50PgorICAgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHBhY2thZ2VkRWxlbWVudCB4bWk6dHlwZT0idW1sOlByaW1pdGl2ZVR5cGUiIHhtaTppZD0iX3E3V1hNSVYzRWQyTVo3MnFBbGZRM0EiIG5hbWU9IkR1bW15Ij4KKyAgICAgIDxvd25lZENvbW1lbnQgeG1pOmlkPSJfT1FpX29JVjNFZDJNWjcycUFsZlEzQSI+CisgICAgICAgIDxib2R5PkR1bW15IERhdGFUeXBlLCBqdXN0IGFkZGVkIGZvciBjb2RlIGdlbmVyYXRpb24gcHVycG9zZS4mI3hEOworSW4gb3RoZXIgd29yZHMsIHRoaXMgZGF0YSB0eXBlIGZvciBFTUYgZ2VuZXJhdGlvbiBvZiBTeXNtbFBhY2thZ2UgYW5kIFN5c21sRmFjdG9yeSYjeEQ7CitqYXZhIGNsYXNzZXMgaW4gdGhlIG1vZGVsIGNvZGUuJiN4RDsKKyYjeEQ7CitEbyBub3QgcmVtb3ZlIHRoaXMgISEhPC9ib2R5PgorICAgICAgPC9vd25lZENvbW1lbnQ+CisgICAgPC9wYWNrYWdlZEVsZW1lbnQ+CisgICAgPHByb2ZpbGVBcHBsaWNhdGlvbiB4bWk6aWQ9Il81R2x2WUFlckVkMjJJOVhHSlMtQTJRIj4KKyAgICAgIDxlQW5ub3RhdGlvbnMgeG1pOmlkPSJfNmtuem9BZXJFZDIySTlYR0pTLUEyUSIgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvMi4wLjAvVU1MIj4KKyAgICAgICAgPHJlZmVyZW5jZXMgeG1pOnR5cGU9ImVjb3JlOkVQYWNrYWdlIiBocmVmPSJwYXRobWFwOi8vVU1MX1BST0ZJTEVTL0Vjb3JlLnByb2ZpbGUudW1sI196MU9GY0hqcUVkeThTNENyOFJjX05BIi8+CisgICAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICAgIDxhcHBsaWVkUHJvZmlsZSBocmVmPSJwYXRobWFwOi8vVU1MX1BST0ZJTEVTL0Vjb3JlLnByb2ZpbGUudW1sI18wIi8+CisgICAgPC9wcm9maWxlQXBwbGljYXRpb24+CisgIDwvdW1sOlByb2ZpbGU+CisgIDxFY29yZTpFUGFja2FnZSB4bWk6aWQ9Il9CMU82Z0Flc0VkMjJJOVhHSlMtQTJRIiBiYXNlX1BhY2thZ2U9Il9UWl9uVUxVNUVkdWlLcUN6Sk1XYkd3IiBwYWNrYWdlTmFtZT0ic3lzbWwiIG5zUHJlZml4PSJTeXNNTCIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMiIHByZWZpeD0ic3lzbWwiLz4KKyAgPEVjb3JlOkVQYWNrYWdlIHhtaTppZD0iXzNwZmJRQWZYRWQyUVI2Y1lidFMwcVEiIGJhc2VfUGFja2FnZT0iX0d4OE1nTFg3RWR1Rm1xUXNyTkI5bHciIHBhY2thZ2VOYW1lPSJtb2RlbGVsZW1lbnRzIiBuc1ByZWZpeD0iTW9kZWxFbGVtZW50cyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9Nb2RlbEVsZW1lbnRzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIgcHJlZml4PSJtb2RlbGVsZW1lbnRzIi8+CisgIDxFY29yZTpFUGFja2FnZSB4bWk6aWQ9Il9Jd1dyNEFsVUVkMmlnZVlaY3dvbGN3IiBiYXNlX1BhY2thZ2U9Il9mU3cyOExYN0VkdUZtcVFzck5COWx3IiBwYWNrYWdlTmFtZT0iYmxvY2tzIiBuc1ByZWZpeD0iQmxvY2tzIiBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0Jsb2NrcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiIHByZWZpeD0iYmxvY2tzIi8+CisgIDxFY29yZTpFUGFja2FnZSB4bWk6aWQ9Il9kMWdnc0FsVUVkMmlnZVlaY3dvbGN3IiBiYXNlX1BhY2thZ2U9Il9ycHgyOExYN0VkdUZtcVFzck5COWx3IiBwYWNrYWdlTmFtZT0icG9ydGFuZGZsb3dzIiBuc1ByZWZpeD0iUG9ydEFuZEZsb3dzIiBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1BvcnRBbmRGbG93cyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiIHByZWZpeD0icG9ydGFuZGZsb3dzIi8+CisgIDxFY29yZTpFUGFja2FnZSB4bWk6aWQ9Il9yTzZ4MEFsVUVkMmlnZVlaY3dvbGN3IiBiYXNlX1BhY2thZ2U9Il81V1lKMExYN0VkdUZtcVFzck5COWx3IiBwYWNrYWdlTmFtZT0iY29uc3RyYWludHMiIG5zUHJlZml4PSJDb25zdHJhaW50cyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9Db25zdHJhaW50cyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiIHByZWZpeD0iY29uc3RyYWludHMiLz4KKyAgPEVjb3JlOkVQYWNrYWdlIHhtaTppZD0iX3lRZlhJQWxVRWQyaWdlWVpjd29sY3ciIGJhc2VfUGFja2FnZT0iX0MyelhNTFg4RWR1Rm1xUXNyTkI5bHciIHBhY2thZ2VOYW1lPSJhY3Rpdml0aWVzIiBuc1ByZWZpeD0iQWN0aXZpdGllcyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BY3Rpdml0aWVzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIgcHJlZml4PSJhY3Rpdml0aWVzIi8+CisgIDxFY29yZTpFUGFja2FnZSB4bWk6aWQ9Il9BTWVKMEFsVkVkMmlnZVlaY3dvbGN3IiBiYXNlX1BhY2thZ2U9Il9OeGRHNExYOEVkdUZtcVFzck5COWx3IiBwYWNrYWdlTmFtZT0iYWxsb2NhdGlvbnMiIG5zUHJlZml4PSJBbGxvY2F0aW9ucyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BbGxvY2F0aW9ucyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiIHByZWZpeD0iYWxsb2NhdGlvbnMiLz4KKyAgPEVjb3JlOkVQYWNrYWdlIHhtaTppZD0iX0Y4LXY0QWxWRWQyaWdlWVpjd29sY3ciIGJhc2VfUGFja2FnZT0iX09PSkM0TFg4RWR1Rm1xUXNyTkI5bHciIHBhY2thZ2VOYW1lPSJyZXF1aXJlbWVudHMiIG5zUHJlZml4PSJSZXF1aXJlbWVudHMiIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvUmVxdWlyZW1lbnRzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIgcHJlZml4PSJyZXF1aXJlbWVudHMiLz4KKyAgPEVjb3JlOkVQYWNrYWdlIHhtaTppZD0iX09admcwQWxWRWQyaWdlWVpjd29sY3ciIGJhc2VfUGFja2FnZT0iX21lT2lvTFg4RWR1Rm1xUXNyTkI5bHciIHBhY2thZ2VOYW1lPSJpbnRlcmFjdGlvbnMiIG5zUHJlZml4PSJJbnRlcmFjdGlvbnMiIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvSW50ZXJhY3Rpb25zIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIgcHJlZml4PSJpbnRlcmFjdGlvbnMiLz4KKyAgPEVjb3JlOkVQYWNrYWdlIHhtaTppZD0iX1VZc3lrQWxWRWQyaWdlWVpjd29sY3ciIGJhc2VfUGFja2FnZT0iX25BRjVrTFg4RWR1Rm1xUXNyTkI5bHciIHBhY2thZ2VOYW1lPSJzdGF0ZW1hY2hpbmVzIiBuc1ByZWZpeD0iU3RhdGVNYWNoaW5lcyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9TdGF0ZU1hY2hpbmVzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbCIgcHJlZml4PSJzdGF0ZW1hY2hpbmVzIi8+CisgIDxFY29yZTpFUGFja2FnZSB4bWk6aWQ9Il9hd194WUFsVkVkMmlnZVlaY3dvbGN3IiBiYXNlX1BhY2thZ2U9Il9uZVptTUxYOEVkdUZtcVFzck5COWx3IiBwYWNrYWdlTmFtZT0idXNlY2FzZXMiIG5zUHJlZml4PSJVc2VDYXNlcyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9Vc2VDYXNlcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwiIHByZWZpeD0idXNlY2FzZXMiLz4KKyAgPEVjb3JlOkVSZWZlcmVuY2UgeG1pOmlkPSJfZ1lUVmdCRVRFZDJsbHRGVUVBRXVlQSIgaXNUcmFuc2llbnQ9InRydWUiIGlzVm9sYXRpbGU9InRydWUiIGJhc2VfUHJvcGVydHk9Il8zUWhvOExVOUVkdTJpZUY0T044VWpBIi8+CisgIDxFY29yZTpFQXR0cmlidXRlIHhtaTppZD0iX251TDk4QkVURWQybGx0RlVFQUV1ZUEiIGlzVHJhbnNpZW50PSJ0cnVlIiBpc1ZvbGF0aWxlPSJ0cnVlIiBiYXNlX1Byb3BlcnR5PSJfVHJZNFVMVkVFZHUyaWVGNE9OOFVqQSIvPgorICA8RWNvcmU6RVJlZmVyZW5jZSB4bWk6aWQ9Il92Q2lWVUJFVEVkMmxsdEZVRUFFdWVBIiBpc1RyYW5zaWVudD0idHJ1ZSIgaXNWb2xhdGlsZT0idHJ1ZSIgYmFzZV9Qcm9wZXJ0eT0iX1NqMzVrTFhuRWR1SFdwQWFXak02MnciLz4KKyAgPEVjb3JlOkVSZWZlcmVuY2UgeG1pOmlkPSJfdnNYOGdCRVRFZDJsbHRGVUVBRXVlQSIgaXNUcmFuc2llbnQ9InRydWUiIGlzVm9sYXRpbGU9InRydWUiIGJhc2VfUHJvcGVydHk9Il9TMDdOVUxYbkVkdUhXcEFhV2pNNjJ3Ii8+CisgIDxFY29yZTpFUmVmZXJlbmNlIHhtaTppZD0iXzJNZXpnQkVURWQybGx0RlVFQUV1ZUEiIGlzVHJhbnNpZW50PSJ0cnVlIiBpc1ZvbGF0aWxlPSJ0cnVlIiBiYXNlX1Byb3BlcnR5PSJfek43VG9LRzFFZHlqMllhNTBIUGxYZyIvPgorICA8RWNvcmU6RVJlZmVyZW5jZSB4bWk6aWQ9Il82Z05TZ0JFVEVkMmxsdEZVRUFFdWVBIiBpc1RyYW5zaWVudD0idHJ1ZSIgaXNWb2xhdGlsZT0idHJ1ZSIgYmFzZV9Qcm9wZXJ0eT0iXzNqcDNzTFhxRWR1SFdwQWFXak02MnciLz4KKyAgPEVjb3JlOkVSZWZlcmVuY2UgeG1pOmlkPSJfOVRYOXNCRVRFZDJsbHRGVUVBRXVlQSIgaXNUcmFuc2llbnQ9InRydWUiIGlzVm9sYXRpbGU9InRydWUiIGJhc2VfUHJvcGVydHk9Il8zd0Z4TUxYcUVkdUhXcEFhV2pNNjJ3Ii8+CisgIDxFY29yZTpFUmVmZXJlbmNlIHhtaTppZD0iX19vOEc0QkVURWQybGx0RlVFQUV1ZUEiIGlzVHJhbnNpZW50PSJ0cnVlIiBpc1ZvbGF0aWxlPSJ0cnVlIiBiYXNlX1Byb3BlcnR5PSJfRkhjejRMWHJFZHVIV3BBYVdqTTYydyIvPgorICA8RWNvcmU6RVJlZmVyZW5jZSB4bWk6aWQ9Il9Dc3VBOEJFVUVkMmxsdEZVRUFFdWVBIiBpc1RyYW5zaWVudD0idHJ1ZSIgaXNWb2xhdGlsZT0idHJ1ZSIgYmFzZV9Qcm9wZXJ0eT0iX0YtS1pjTFhyRWR1SFdwQWFXak02MnciLz4KKyAgPEVjb3JlOkVSZWZlcmVuY2UgeG1pOmlkPSJfRjh1WklCRVVFZDJsbHRGVUVBRXVlQSIgaXNUcmFuc2llbnQ9InRydWUiIGlzVm9sYXRpbGU9InRydWUiIGJhc2VfUHJvcGVydHk9Il9PNnJCY0xYckVkdUhXcEFhV2pNNjJ3Ii8+CisgIDxFY29yZTpFUmVmZXJlbmNlIHhtaTppZD0iX0piRUlRQkVVRWQybGx0RlVFQUV1ZUEiIGlzVHJhbnNpZW50PSJ0cnVlIiBpc1ZvbGF0aWxlPSJ0cnVlIiBiYXNlX1Byb3BlcnR5PSJfUEh1bUFMWHJFZHVIV3BBYVdqTTYydyIvPgorICA8RWNvcmU6RVJlZmVyZW5jZSB4bWk6aWQ9Il9NS2dLQUJFVUVkMmxsdEZVRUFFdWVBIiBpc1RyYW5zaWVudD0idHJ1ZSIgaXNWb2xhdGlsZT0idHJ1ZSIgYmFzZV9Qcm9wZXJ0eT0iX1BTdHVBTFhyRWR1SFdwQWFXak02MnciLz4KKyAgPEVjb3JlOkVSZWZlcmVuY2UgeG1pOmlkPSJfUFE5a29CRVVFZDJsbHRGVUVBRXVlQSIgaXNUcmFuc2llbnQ9InRydWUiIGlzVm9sYXRpbGU9InRydWUiIGJhc2VfUHJvcGVydHk9Il8wbkJ0Z0xYMUVkdTk0X05FMEVPNV9BIi8+CisgIDxFY29yZTpFUmVmZXJlbmNlIHhtaTppZD0iX1NEUlVNQkVVRWQybGx0RlVFQUV1ZUEiIGlzVHJhbnNpZW50PSJ0cnVlIiBpc1ZvbGF0aWxlPSJ0cnVlIiBiYXNlX1Byb3BlcnR5PSJfMHlKX2NMWDFFZHU5NF9ORTBFTzVfQSIvPgorICA8RWNvcmU6RVJlZmVyZW5jZSB4bWk6aWQ9Il9VX3pXd0JFVUVkMmxsdEZVRUFFdWVBIiBpc1RyYW5zaWVudD0idHJ1ZSIgaXNWb2xhdGlsZT0idHJ1ZSIgYmFzZV9Qcm9wZXJ0eT0iXzFBcVZnTFgxRWR1OTRfTkUwRU81X0EiLz4KKyAgPEVjb3JlOkVEYXRhVHlwZSB4bWk6aWQ9Il91RU0tZ0lWM0VkMk1aNzJxQWxmUTNBIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS5sYW5nLlN0cmluZyIgYmFzZV9QcmltaXRpdmVUeXBlPSJfcTdXWE1JVjNFZDJNWjcycUFsZlEzQSIgZGF0YVR5cGVOYW1lPSJEdW1teSIvPgorICA8RWNvcmU6RURhdGFUeXBlIHhtaTppZD0iX1BPRFVNSVk4RWQyMmY1Mng5amNZSVEiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLmxhbmcuU3RyaW5nIiBiYXNlX1ByaW1pdGl2ZVR5cGU9Il9NbUlQc0lZOEVkMjJmNTJ4OWpjWUlRIiBkYXRhVHlwZU5hbWU9IkR1bW15Ii8+CisgIDxFY29yZTpFRGF0YVR5cGUgeG1pOmlkPSJfUTB0d0FJWThFZDIyZjUyeDlqY1lJUSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubGFuZy5TdHJpbmciIGJhc2VfUHJpbWl0aXZlVHlwZT0iX01ic2hVSVk4RWQyMmY1Mng5amNZSVEiIGRhdGFUeXBlTmFtZT0iRHVtbXkiLz4KKyAgPEVjb3JlOkVEYXRhVHlwZSB4bWk6aWQ9Il9TUlpKWUlZOEVkMjJmNTJ4OWpjWUlRIiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS5sYW5nLlN0cmluZyIgYmFzZV9QcmltaXRpdmVUeXBlPSJfTUNYYlVJWThFZDIyZjUyeDlqY1lJUSIvPgorICA8RWNvcmU6RVJlZmVyZW5jZSB4bWk6aWQ9Il9UOE5DWU1xNUVkMmVhcmZYNnExNnhnIiBpc1RyYW5zaWVudD0idHJ1ZSIgaXNWb2xhdGlsZT0idHJ1ZSIgYmFzZV9Qcm9wZXJ0eT0iXzU2LVZJTXE0RWQyZWFyZlg2cTE2eGciLz4KKzwveG1pOlhNST4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL21vZGVsL3N5c21sLmVjb3JlIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvbW9kZWwvc3lzbWwuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1NDMyOAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL21vZGVsL3N5c21sLmVjb3JlCkBAIC0wLDAgKzEsMjgzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ic3lzbWwiIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwiIG5zUHJlZml4PSJTeXNNTCI+CisgIDxlQW5ub3RhdGlvbnMgc291cmNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIj4KKyAgICA8ZGV0YWlscyBrZXk9ImRvY3VtZW50YXRpb24iIHZhbHVlPSJPTUcgU3lzTUwgVjEuMSBmb3JtYWwvMjAwOC0xMS0wMiYjeEQ7JiN4QTtUcmFjZSBpbnN0ZWFkIG9mIEFic3RyYWN0aW9uIGluIFN5c01MIHNwZWNpZmljYXRpb25zLiIvPgorICA8L2VBbm5vdGF0aW9ucz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJEdW1teSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubGFuZy5TdHJpbmciLz4KKyAgPGVTdWJwYWNrYWdlcyBuYW1lPSJtb2RlbGVsZW1lbnRzIiBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML01vZGVsRWxlbWVudHMiCisgICAgICBuc1ByZWZpeD0iTW9kZWxFbGVtZW50cyI+CisgICAgPGVBbm5vdGF0aW9ucyBzb3VyY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiPgorICAgICAgPGRldGFpbHMga2V5PSJkb2N1bWVudGF0aW9uIiB2YWx1ZT0iVGhlIHN1cHBsaWVyL3RhcmdldCBtdXN0IGJlIGFuIGVsZW1lbnQgc3RlcmVvdHlwZWQgYnkgJmx0OyZsdDtWaWV3UG9pbnQ+PiYjeEQ7JiN4QTtUaGUgY2xpZW50L3NvdXJjZSBtdXN0IGJlIGFuIGVsZW1lbnQgc3RlcmVvdHlwZWQgYnkgJmx0OyZsdDtWaWV3Pj4iLz4KKyAgICA8L2VBbm5vdGF0aW9ucz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkNvbmZvcm0iPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfRGVwZW5kZW5jeSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0RlcGVuZGVuY3kiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlZpZXciPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InZpZXdQb2ludCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9IiMvL21vZGVsZWxlbWVudHMvVmlld1BvaW50IiBjaGFuZ2VhYmxlPSJmYWxzZSIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9QYWNrYWdlIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vUGFja2FnZSIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVmlld1BvaW50Ij4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX0NsYXNzIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vQ2xhc3MiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdGFrZUhvbGRlcnMiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InB1cnBvc2UiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY29uY2VybnMiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL1N0cmluZyIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imxhbmd1YWdlcyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWV0aG9kcyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnR5cGVzL21vZGVsL1R5cGVzLmVjb3JlIy8vU3RyaW5nIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSYXRpb25hbGUiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQ29tbWVudCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0NvbW1lbnQiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlByb2JsZW0iPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQ29tbWVudCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0NvbW1lbnQiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgPC9lU3VicGFja2FnZXM+CisgIDxlU3VicGFja2FnZXMgbmFtZT0iYmxvY2tzIiBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0Jsb2NrcyIKKyAgICAgIG5zUHJlZml4PSJCbG9ja3MiPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQmxvY2siPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlzRW5jYXBzdWxhdGVkIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL0Jvb2xlYW4iLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX0NsYXNzIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vQ2xhc3MiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRpc3RyaWJ1dGVkUHJvcGVydHkiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfUHJvcGVydHkiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9Qcm9wZXJ0eSIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGltZW5zaW9uIj4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiIKKyAgICAgICAgICBvcmRlcmVkPSJmYWxzZSIgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0luc3RhbmNlU3BlY2lmaWNhdGlvbiIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVW5pdCI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24iCisgICAgICAgICAgb3JkZXJlZD0iZmFsc2UiIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9JbnN0YW5jZVNwZWNpZmljYXRpb24iLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkaW1lbnNpb24iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSIjLy9ibG9ja3MvRGltZW5zaW9uIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJWYWx1ZVR5cGUiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfRGF0YVR5cGUiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9EYXRhVHlwZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InVuaXQiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGVUeXBlPSIjLy9ibG9ja3MvVW5pdCIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRpbWVuc2lvbiIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgZVR5cGU9IiMvL2Jsb2Nrcy9EaW1lbnNpb24iLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5lc3RlZENvbm5lY3RvckVuZCI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icHJvcGVydHlQYXRoIiB1bmlxdWU9ImZhbHNlIgorICAgICAgICAgIGxvd2VyQm91bmQ9IjEiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vUHJvcGVydHkiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX0Nvbm5lY3RvckVuZCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0Nvbm5lY3RvckVuZCIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUGFydGljaXBhbnRQcm9wZXJ0eSI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9Qcm9wZXJ0eSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL1Byb3BlcnR5Ii8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZW5kIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vUHJvcGVydHkiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkNvbm5lY3RvclByb3BlcnR5Ij4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX1Byb3BlcnR5IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vUHJvcGVydHkiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjb25uZWN0b3IiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9Db25uZWN0b3IiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkJpbmRpbmdDb25uZWN0b3IiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQ29ubmVjdG9yIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vQ29ubmVjdG9yIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQcm9wZXJ0eVNwZWNpZmljVHlwZSI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9DbGFzc2lmaWVyIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vQ2xhc3NpZmllciIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICA8L2VTdWJwYWNrYWdlcz4KKyAgPGVTdWJwYWNrYWdlcyBuYW1lPSJwb3J0YW5kZmxvd3MiIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvUG9ydEFuZEZsb3dzIgorICAgICAgbnNQcmVmaXg9IlBvcnRBbmRGbG93cyI+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJGbG93UG9ydCI+CisgICAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0SWNvbiIgb3JkZXJlZD0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9JbWFnZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfUG9ydCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL1BvcnQiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpc0F0b21pYyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9Cb29sZWFuIgorICAgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSJmYWxzZSIKKyAgICAgICAgICBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaXNDb25qdWdhdGVkIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi50eXBlcy9tb2RlbC9UeXBlcy5lY29yZSMvL0Jvb2xlYW4iLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkaXJlY3Rpb24iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSIjLy9wb3J0YW5kZmxvd3MvRmxvd0RpcmVjdGlvbiIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaW5vdXQiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRW51bSIgbmFtZT0iRmxvd0RpcmVjdGlvbiI+CisgICAgICA8ZUxpdGVyYWxzIG5hbWU9ImluIi8+CisgICAgICA8ZUxpdGVyYWxzIG5hbWU9Im91dCIgdmFsdWU9IjEiLz4KKyAgICAgIDxlTGl0ZXJhbHMgbmFtZT0iaW5vdXQiIHZhbHVlPSIyIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJGbG93UHJvcGVydHkiPgorICAgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEljb24iIG9yZGVyZWQ9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vSW1hZ2UiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX1Byb3BlcnR5IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vUHJvcGVydHkiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkaXJlY3Rpb24iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSIjLy9wb3J0YW5kZmxvd3MvRmxvd0RpcmVjdGlvbiIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaW5vdXQiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkZsb3dTcGVjaWZpY2F0aW9uIj4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX0ludGVyZmFjZSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0ludGVyZmFjZSIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSXRlbUZsb3ciPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfSW5mb3JtYXRpb25GbG93IgorICAgICAgICAgIG9yZGVyZWQ9ImZhbHNlIiB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vSW5mb3JtYXRpb25GbG93Ii8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaXRlbVByb3BlcnR5IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vUHJvcGVydHkiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgPC9lU3VicGFja2FnZXM+CisgIDxlU3VicGFja2FnZXMgbmFtZT0iY29uc3RyYWludHMiIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvQ29uc3RyYWludHMiCisgICAgICBuc1ByZWZpeD0iQ29uc3RyYWludHMiPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ29uc3RyYWludEJsb2NrIiBlU3VwZXJUeXBlcz0iIy8vYmxvY2tzL0Jsb2NrIi8+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb25zdHJhaW50UHJvcGVydHkiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfUHJvcGVydHkiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9Qcm9wZXJ0eSIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICA8L2VTdWJwYWNrYWdlcz4KKyAgPGVTdWJwYWNrYWdlcyBuYW1lPSJhY3Rpdml0aWVzIiBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0FjdGl2aXRpZXMiCisgICAgICBuc1ByZWZpeD0iQWN0aXZpdGllcyI+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJPcHRpb25hbCI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9QYXJhbWV0ZXIiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9QYXJhbWV0ZXIiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlJhdGUiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfUGFyYW1ldGVyIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vUGFyYW1ldGVyIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9BY3Rpdml0eUVkZ2UiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9BY3Rpdml0eUVkZ2UiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJyYXRlIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vSW5zdGFuY2VTcGVjaWZpY2F0aW9uIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQcm9iYWJpbGl0eSI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9BY3Rpdml0eUVkZ2UiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9BY3Rpdml0eUVkZ2UiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX1BhcmFtZXRlclNldCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL1BhcmFtZXRlclNldCIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InByb2JhYmlsaXR5IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vVmFsdWVTcGVjaWZpY2F0aW9uIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb250aW51b3VzIiBlU3VwZXJUeXBlcz0iIy8vYWN0aXZpdGllcy9SYXRlIi8+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEaXNjcmV0ZSIgZVN1cGVyVHlwZXM9IiMvL2FjdGl2aXRpZXMvUmF0ZSIvPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ29udHJvbE9wZXJhdG9yIj4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX09wZXJhdGlvbiIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL09wZXJhdGlvbiIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQmVoYXZpb3IiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9CZWhhdmlvciIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm9CdWZmZXIiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfT2JqZWN0Tm9kZSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL09iamVjdE5vZGUiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik92ZXJ3cml0ZSI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9PYmplY3ROb2RlIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vT2JqZWN0Tm9kZSIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICA8L2VTdWJwYWNrYWdlcz4KKyAgPGVTdWJwYWNrYWdlcyBuYW1lPSJhbGxvY2F0aW9ucyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BbGxvY2F0aW9ucyIKKyAgICAgIG5zUHJlZml4PSJBbGxvY2F0aW9ucyI+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJBbGxvY2F0ZSI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYmFzZV9BYnN0cmFjdGlvbiIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL0Fic3RyYWN0aW9uIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJBbGxvY2F0ZWQiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfTmFtZWRFbGVtZW50IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vTmFtZWRFbGVtZW50Ii8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYWxsb2NhdGVkRnJvbSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9OYW1lZEVsZW1lbnQiCisgICAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJhbGxvY2F0ZWRUbyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9OYW1lZEVsZW1lbnQiCisgICAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KKyAgICA8L2VDbGFzc2lmaWVycz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24iPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQWN0aXZpdHlQYXJ0aXRpb24iCisgICAgICAgICAgb3JkZXJlZD0iZmFsc2UiIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9BY3Rpdml0eVBhcnRpdGlvbiIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICA8L2VTdWJwYWNrYWdlcz4KKyAgPGVTdWJwYWNrYWdlcyBuYW1lPSJyZXF1aXJlbWVudHMiIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvUmVxdWlyZW1lbnRzIgorICAgICAgbnNQcmVmaXg9IlJlcXVpcmVtZW50cyI+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZXJpdmVSZXF0IiBlU3VwZXJUeXBlcz0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkL21vZGVsL1N0YW5kYXJkLmVjb3JlIy8vVHJhY2UiLz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlZlcmlmeSIgZVN1cGVyVHlwZXM9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC9tb2RlbC9TdGFuZGFyZC5lY29yZSMvL1RyYWNlIi8+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb3B5IiBlU3VwZXJUeXBlcz0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkL21vZGVsL1N0YW5kYXJkLmVjb3JlIy8vVHJhY2UiLz4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNhdGlzZnkiIGVTdXBlclR5cGVzPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQvbW9kZWwvU3RhbmRhcmQuZWNvcmUjLy9UcmFjZSIvPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdENhc2UiPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQmVoYXZpb3IiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9CZWhhdmlvciIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfT3BlcmF0aW9uIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UudW1sMi51bWwvbW9kZWwvVU1MLmVjb3JlIy8vT3BlcmF0aW9uIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmVyaWZpZXMiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50IiBjaGFuZ2VhYmxlPSJmYWxzZSIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZXF1aXJlbWVudCI+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGV4dCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpZCIgb3JkZXJlZD0iZmFsc2UiIHVuaXF1ZT0iZmFsc2UiCisgICAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudHlwZXMvbW9kZWwvVHlwZXMuZWNvcmUjLy9TdHJpbmciLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXJpdmVkIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudCIgY2hhbmdlYWJsZT0iZmFsc2UiCisgICAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRlcml2ZWRGcm9tIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudCIgY2hhbmdlYWJsZT0iZmFsc2UiCisgICAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNhdGlzZmllZEJ5IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL05hbWVkRWxlbWVudCIKKyAgICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InJlZmluZWRCeSIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9OYW1lZEVsZW1lbnQiCisgICAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0cmFjZWRUbyIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9OYW1lZEVsZW1lbnQiCisgICAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGRlcml2ZWQ9InRydWUiLz4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2ZXJpZmllZEJ5IiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL05hbWVkRWxlbWVudCIKKyAgICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im1hc3RlciIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgZVR5cGU9IiMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudCIgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIgorICAgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VfQ2xhc3MiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFQ2xhc3MgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS51bWwyLnVtbC9tb2RlbC9VTUwuZWNvcmUjLy9DbGFzcyIvPgorICAgIDwvZUNsYXNzaWZpZXJzPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUmVxdWlyZW1lbnRSZWxhdGVkIj4KKyAgICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJiYXNlX05hbWVkRWxlbWVudCIgb3JkZXJlZD0iZmFsc2UiCisgICAgICAgICAgdW5pcXVlPSJmYWxzZSIgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnVtbDIudW1sL21vZGVsL1VNTC5lY29yZSMvL05hbWVkRWxlbWVudCIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRyYWNlZEZyb20iIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50IiBjaGFuZ2VhYmxlPSJmYWxzZSIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic2F0aXNmaWVzIiBvcmRlcmVkPSJmYWxzZSIKKyAgICAgICAgICB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudCIgY2hhbmdlYWJsZT0iZmFsc2UiCisgICAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIvPgorICAgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InJlZmluZXMiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50IiBjaGFuZ2VhYmxlPSJmYWxzZSIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmVyaWZpZXMiIG9yZGVyZWQ9ImZhbHNlIgorICAgICAgICAgIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50IiBjaGFuZ2VhYmxlPSJmYWxzZSIKKyAgICAgICAgICB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIi8+CisgICAgPC9lQ2xhc3NpZmllcnM+CisgIDwvZVN1YnBhY2thZ2VzPgorICA8ZVN1YnBhY2thZ2VzIG5hbWU9ImludGVyYWN0aW9ucyIgbnNVUkk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9JbnRlcmFjdGlvbnMiCisgICAgICBuc1ByZWZpeD0iSW50ZXJhY3Rpb25zIj4KKyAgICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IkR1bW15IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS5sYW5nLlN0cmluZyIvPgorICA8L2VTdWJwYWNrYWdlcz4KKyAgPGVTdWJwYWNrYWdlcyBuYW1lPSJzdGF0ZW1hY2hpbmVzIiBuc1VSST0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1N0YXRlTWFjaGluZXMiCisgICAgICBuc1ByZWZpeD0iU3RhdGVNYWNoaW5lcyI+CisgICAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJEdW1teSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubGFuZy5TdHJpbmciLz4KKyAgPC9lU3VicGFja2FnZXM+CisgIDxlU3VicGFja2FnZXMgbmFtZT0idXNlY2FzZXMiIG5zVVJJPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvVXNlQ2FzZXMiCisgICAgICBuc1ByZWZpeD0iVXNlQ2FzZXMiPgorICAgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iRHVtbXkiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLmxhbmcuU3RyaW5nIi8+CisgIDwvZVN1YnBhY2thZ2VzPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3BsdWdpbi5wcm9wZXJ0aWVzIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyNmMzNQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQ0VBIExJU1QuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitwbHVnaW5OYW1lPVVNTCBwcm9maWxlIGZvciBTeXNNTCAoZnJvbSBPTUcgU3lzTUwgVjEuMSBmb3JtYWwvMjAwOC0xMS0wMikKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlIE1vZGVsaW5nIFByb2plY3QKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3BsdWdpbi54bWwgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmI0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTg2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgPHBhY2thZ2UgCisgICAgICAgdXJpID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTCIgCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5TeXNtbFBhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvU3lzTUwucHJvZmlsZS5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPCEtLSBAZ2VuZXJhdGVkIFN5c01MLnByb2ZpbGUgLS0+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvTW9kZWxFbGVtZW50cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvU3lzTUwucHJvZmlsZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8IS0tIEBnZW5lcmF0ZWQgU3lzTUwucHJvZmlsZSAtLT4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9CbG9ja3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9TeXNNTC5wcm9maWxlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDwhLS0gQGdlbmVyYXRlZCBTeXNNTC5wcm9maWxlIC0tPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1BvcnRBbmRGbG93cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1N5c01MLnByb2ZpbGUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPCEtLSBAZ2VuZXJhdGVkIFN5c01MLnByb2ZpbGUgLS0+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvQ29uc3RyYWludHMiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50c1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvU3lzTUwucHJvZmlsZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8IS0tIEBnZW5lcmF0ZWQgU3lzTUwucHJvZmlsZSAtLT4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BY3Rpdml0aWVzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9TeXNNTC5wcm9maWxlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDwhLS0gQGdlbmVyYXRlZCBTeXNNTC5wcm9maWxlIC0tPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0FsbG9jYXRpb25zIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1N5c01MLnByb2ZpbGUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPCEtLSBAZ2VuZXJhdGVkIFN5c01MLnByb2ZpbGUgLS0+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvUmVxdWlyZW1lbnRzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvU3lzTUwucHJvZmlsZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8IS0tIEBnZW5lcmF0ZWQgU3lzTUwucHJvZmlsZSAtLT4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9JbnRlcmFjdGlvbnMiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuSW50ZXJhY3Rpb25zUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9TeXNNTC5wcm9maWxlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDwhLS0gQGdlbmVyYXRlZCBTeXNNTC5wcm9maWxlIC0tPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1N0YXRlTWFjaGluZXMiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLlN0YXRlbWFjaGluZXNQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL1N5c01MLnByb2ZpbGUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPCEtLSBAZ2VuZXJhdGVkIFN5c01MLnByb2ZpbGUgLS0+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvVXNlQ2FzZXMiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvU3lzTUwucHJvZmlsZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVtbDIudW1sLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgICAgPHByb2ZpbGUgCisgICAJCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTCIgCisgICAJCQlsb2NhdGlvbj0icGF0aG1hcDovL1N5c01MX1BST0ZJTEVTL1N5c01MLnByb2ZpbGUudW1sI19UWl9uVUxVNUVkdWlLcUN6Sk1XYkd3Ii8+IAorICA8L2V4dGVuc2lvbj4gIAorCisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51bWwyLnVtbC5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICAgIDxwcm9maWxlIAorICAgCQkJdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvTW9kZWxFbGVtZW50cyIgCisgICAJCQlsb2NhdGlvbj0icGF0aG1hcDovL1N5c01MX1BST0ZJTEVTL1N5c01MLnByb2ZpbGUudW1sI19HeDhNZ0xYN0VkdUZtcVFzck5COWx3Ii8+IAorICA8L2V4dGVuc2lvbj4gIAorICAKKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudW1sMi51bWwuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgICA8cHJvZmlsZSAKKyAgIAkJCXVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0Jsb2NrcyIgCisgICAJCQlsb2NhdGlvbj0icGF0aG1hcDovL1N5c01MX1BST0ZJTEVTL1N5c01MLnByb2ZpbGUudW1sI19mU3cyOExYN0VkdUZtcVFzck5COWx3Ii8+IAorICA8L2V4dGVuc2lvbj4gICAgCisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51bWwyLnVtbC5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICAgIDxwcm9maWxlIAorICAgCQkJdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvUG9ydEFuZEZsb3dzIiAKKyAgIAkJCWxvY2F0aW9uPSJwYXRobWFwOi8vU3lzTUxfUFJPRklMRVMvU3lzTUwucHJvZmlsZS51bWwjX3JweDI4TFg3RWR1Rm1xUXNyTkI5bHciLz4gCisgIDwvZXh0ZW5zaW9uPiAgICAgIAorCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVtbDIudW1sLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgICAgPHByb2ZpbGUgCisgICAJCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9Db25zdHJhaW50cyIgCisgICAJCQlsb2NhdGlvbj0icGF0aG1hcDovL1N5c01MX1BST0ZJTEVTL1N5c01MLnByb2ZpbGUudW1sI181V1lKMExYN0VkdUZtcVFzck5COWx3Ii8+IAorICA8L2V4dGVuc2lvbj4gICAgICAgIAorCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVtbDIudW1sLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgICAgPHByb2ZpbGUgCisgICAJCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BY3Rpdml0aWVzIiAKKyAgIAkJCWxvY2F0aW9uPSJwYXRobWFwOi8vU3lzTUxfUFJPRklMRVMvU3lzTUwucHJvZmlsZS51bWwjX0MyelhNTFg4RWR1Rm1xUXNyTkI5bHciLz4gCisgIDwvZXh0ZW5zaW9uPiAgICAgICAKKworICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51bWwyLnVtbC5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICAgIDxwcm9maWxlIAorICAgCQkJdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvQWxsb2NhdGlvbnMiIAorICAgCQkJbG9jYXRpb249InBhdGhtYXA6Ly9TeXNNTF9QUk9GSUxFUy9TeXNNTC5wcm9maWxlLnVtbCNfTnhkRzRMWDhFZHVGbXFRc3JOQjlsdyIvPiAKKyAgPC9leHRlbnNpb24+ICAgICAKKworICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51bWwyLnVtbC5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICAgIDxwcm9maWxlIAorICAgCQkJdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvUmVxdWlyZW1lbnRzIiAKKyAgIAkJCWxvY2F0aW9uPSJwYXRobWFwOi8vU3lzTUxfUFJPRklMRVMvU3lzTUwucHJvZmlsZS51bWwjX09PSkM0TFg4RWR1Rm1xUXNyTkI5bHciLz4gCisgIDwvZXh0ZW5zaW9uPiAgICAgCisgICAgCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVtbDIudW1sLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgICAgPHByb2ZpbGUgCisgICAJCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9JbnRlcmFjdGlvbnMiIAorICAgCQkJbG9jYXRpb249InBhdGhtYXA6Ly9TeXNNTF9QUk9GSUxFUy9TeXNNTC5wcm9maWxlLnVtbCNfbWVPaW9MWDhFZHVGbXFRc3JOQjlsdyIvPiAKKyAgPC9leHRlbnNpb24+IAorCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVtbDIudW1sLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgICAgPHByb2ZpbGUgCisgICAJCQl1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9TdGF0ZU1hY2hpbmVzIiAKKyAgIAkJCWxvY2F0aW9uPSJwYXRobWFwOi8vU3lzTUxfUFJPRklMRVMvU3lzTUwucHJvZmlsZS51bWwjX25BRjVrTFg4RWR1Rm1xUXNyTkI5bHciLz4gCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51bWwyLnVtbC5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgIDxwcm9maWxlCisgICAgICAgICAgIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1VzZUNhc2VzIgorICAgICAgICAgICBsb2NhdGlvbj0icGF0aG1hcDovL1N5c01MX1BST0ZJTEVTL1N5c01MLnByb2ZpbGUudW1sI19uZVptTUxYOEVkdUZtcVFzck5COWx3Ii8+CisgIDwvZXh0ZW5zaW9uPiAKKyAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS51cmlfbWFwcGluZyI+CisgICAgICA8bWFwcGluZworICAgICAgICAgICAgc291cmNlPSJwYXRobWFwOi8vU3lzTUxfTElCUkFSSUVTLyIKKyAgICAgICAgICAgIHRhcmdldD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL2xpYnJhcmllcy8iLz4KKyAgICAgIDxtYXBwaW5nCisgICAgICAgICAgICBzb3VyY2U9InBhdGhtYXA6Ly9TeXNNTF9QUk9GSUxFUy8iCisgICAgICAgICAgICB0YXJnZXQ9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9tb2RlbC8iLz4KKyAgIDwvZXh0ZW5zaW9uPiAgIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9wb20ueG1sIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDY2NTRlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvcG9tLnhtbApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKwk8cGFyZW50PgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5wbHVnaW5zPC9hcnRpZmFjdElkPgorCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9TeXNtbEZhY3RvcnkuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL1N5c21sRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGZmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9TeXNtbEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0IHByb3ZpZGVzIGEKKyAqIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN5c21sRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTeXNtbEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcm5hbC5pbXBsLlN5c21sRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN5c21sUGFja2FnZSBnZXRTeXNtbFBhY2thZ2UoKTsKKworfSAvLyBTeXNtbEZhY3RvcnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL1N5c21sUGFja2FnZS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvU3lzbWxQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5ODBiYQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL1N5c21sUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgY29udGFpbnMKKyAqIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPiA8IS0tIGJlZ2luLW1vZGVsLWRvYyAtLT4gVmVyc2lvbiA6IDEuMCBCYXNlZCBvbiBPTUcKKyAqIFN5c01MIFNwZWNpZmljYXRpb24gVjEuMCAoZm9ybWFsLzIwMDctMDktMDEpIFRyYWNlIGluc3RlYWQgb2YgQWJzdHJhY3Rpb24gaW4KKyAqIFN5c01MIHNwZWNpZmljYXRpb25zLiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3lzbWxQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0CisJICogcmVwcmVzZW50CisJICogPHVsPgorCSAqIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPkR1bW15PC9lbT4nIGRhdGEgdHlwZS4gPCEtLQorCQkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBzZWUgamF2YS5sYW5nLlN0cmluZworCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJuYWwuaW1wbC5TeXNtbFBhY2thZ2VJbXBsI2dldER1bW15KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRURhdGFUeXBlIERVTU1ZID0gZUlOU1RBTkNFLmdldER1bW15KCk7CisKKwl9CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJzeXNtbCI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTCI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJTeXNNTCI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3lzbWxQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJuYWwuaW1wbC5TeXNtbFBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+RHVtbXk8L2VtPicgZGF0YSB0eXBlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVybmFsLmltcGwuU3lzbWxQYWNrYWdlSW1wbCNnZXREdW1teSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBEVU1NWSA9IDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YS5sYW5nLlN0cmluZyA8ZW0+RHVtbXk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPkR1bW15PC9lbT4nLgorCSAqIEBzZWUgamF2YS5sYW5nLlN0cmluZworCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0RHVtbXkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN5c21sRmFjdG9yeSBnZXRTeXNtbEZhY3RvcnkoKTsKKworfSAvLyBTeXNtbFBhY2thZ2UKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvQWN0aXZpdGllc0ZhY3RvcnkuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvQWN0aXZpdGllc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QzZDcxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9BY3Rpdml0aWVzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgcHJvdmlkZXMgYQorICogY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEFjdGl2aXRpZXNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUFjdGl2aXRpZXNGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkFjdGl2aXRpZXNGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wdGlvbmFsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wdGlvbmFsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlPcHRpb25hbCBjcmVhdGVPcHRpb25hbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250aW51b3VzPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbnRpbnVvdXM8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbnRpbnVvdXMgY3JlYXRlQ29udGludW91cygpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250cm9sIE9wZXJhdG9yPC9lbT4nLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250cm9sIE9wZXJhdG9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb250cm9sT3BlcmF0b3IgY3JlYXRlQ29udHJvbE9wZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2NyZXRlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2NyZXRlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEaXNjcmV0ZSBjcmVhdGVEaXNjcmV0ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5ObyBCdWZmZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm8gQnVmZmVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlOb0J1ZmZlciBjcmVhdGVOb0J1ZmZlcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PdmVyd3JpdGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+T3ZlcndyaXRlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlPdmVyd3JpdGUgY3JlYXRlT3ZlcndyaXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlByb2JhYmlsaXR5PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlByb2JhYmlsaXR5PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQcm9iYWJpbGl0eSBjcmVhdGVQcm9iYWJpbGl0eSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SYXRlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJhdGU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVJhdGUgY3JlYXRlUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFjdGl2aXRpZXNQYWNrYWdlIGdldEFjdGl2aXRpZXNQYWNrYWdlKCk7CisKK30gLy8gQWN0aXZpdGllc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvQWN0aXZpdGllc1BhY2thZ2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvQWN0aXZpdGllc1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTIzNGU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9BY3Rpdml0aWVzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsODcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBjb250YWlucworICogYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogPGxpPmVhY2ggZW51bSw8L2xpPgorICogPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEFjdGl2aXRpZXNQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0CisJICogcmVwcmVzZW50CisJICogPHVsPgorCSAqIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5PcHRpb25hbEltcGwKKwkJICogPGVtPk9wdGlvbmFsPC9lbT59JyBjbGFzcy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkJICogLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuT3B0aW9uYWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsI2dldE9wdGlvbmFsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE9QVElPTkFMID0gZUlOU1RBTkNFLmdldE9wdGlvbmFsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIFBhcmFtZXRlcjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE9QVElPTkFMX19CQVNFX1BBUkFNRVRFUiA9IGVJTlNUQU5DRS5nZXRPcHRpb25hbF9CYXNlX1BhcmFtZXRlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuUmF0ZUltcGwgPGVtPlJhdGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5SYXRlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkFjdGl2aXRpZXNQYWNrYWdlSW1wbCNnZXRSYXRlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJBVEUgPSBlSU5TVEFOQ0UuZ2V0UmF0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQYXJhbWV0ZXI8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSQVRFX19CQVNFX1BBUkFNRVRFUiA9IGVJTlNUQU5DRS5nZXRSYXRlX0Jhc2VfUGFyYW1ldGVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIEFjdGl2aXR5IEVkZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSQVRFX19CQVNFX0FDVElWSVRZX0VER0UgPSBlSU5TVEFOQ0UuZ2V0UmF0ZV9CYXNlX0FjdGl2aXR5RWRnZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFJBVEVfX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0UmF0ZV9SYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Qcm9iYWJpbGl0eUltcGwgPGVtPlByb2JhYmlsaXR5PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCQkgKiBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuUHJvYmFiaWxpdHlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsI2dldFByb2JhYmlsaXR5KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBST0JBQklMSVRZID0gZUlOU1RBTkNFLmdldFByb2JhYmlsaXR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIEFjdGl2aXR5IEVkZ2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQUk9CQUJJTElUWV9fQkFTRV9BQ1RJVklUWV9FREdFID0gZUlOU1RBTkNFLmdldFByb2JhYmlsaXR5X0Jhc2VfQWN0aXZpdHlFZGdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIFBhcmFtZXRlciBTZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQUk9CQUJJTElUWV9fQkFTRV9QQVJBTUVURVJfU0VUID0gZUlOU1RBTkNFLmdldFByb2JhYmlsaXR5X0Jhc2VfUGFyYW1ldGVyU2V0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qcm9iYWJpbGl0eTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFBST0JBQklMSVRZX19QUk9CQUJJTElUWSA9IGVJTlNUQU5DRS5nZXRQcm9iYWJpbGl0eV9Qcm9iYWJpbGl0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQ29udGludW91c0ltcGwgPGVtPkNvbnRpbnVvdXM8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Db250aW51b3VzSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkFjdGl2aXRpZXNQYWNrYWdlSW1wbCNnZXRDb250aW51b3VzKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENPTlRJTlVPVVMgPSBlSU5TVEFOQ0UuZ2V0Q29udGludW91cygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkRpc2NyZXRlSW1wbAorCQkgKiA8ZW0+RGlzY3JldGU8L2VtPn0nIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCQkgKiAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5EaXNjcmV0ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5BY3Rpdml0aWVzUGFja2FnZUltcGwjZ2V0RGlzY3JldGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRElTQ1JFVEUgPSBlSU5TVEFOQ0UuZ2V0RGlzY3JldGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkNvbnRyb2xPcGVyYXRvckltcGwgPGVtPkNvbnRyb2wgT3BlcmF0b3I8L2VtPn0nCisJCSAqIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Db250cm9sT3BlcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsI2dldENvbnRyb2xPcGVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT05UUk9MX09QRVJBVE9SID0gZUlOU1RBTkNFLmdldENvbnRyb2xPcGVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBDT05UUk9MX09QRVJBVE9SX19CQVNFX09QRVJBVElPTiA9IGVJTlNUQU5DRS5nZXRDb250cm9sT3BlcmF0b3JfQmFzZV9PcGVyYXRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQmVoYXZpb3I8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBDT05UUk9MX09QRVJBVE9SX19CQVNFX0JFSEFWSU9SID0gZUlOU1RBTkNFLmdldENvbnRyb2xPcGVyYXRvcl9CYXNlX0JlaGF2aW9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuTm9CdWZmZXJJbXBsCisJCSAqIDxlbT5ObyBCdWZmZXI8L2VtPn0nIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCQkgKiAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Ob0J1ZmZlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5BY3Rpdml0aWVzUGFja2FnZUltcGwjZ2V0Tm9CdWZmZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTk9fQlVGRkVSID0gZUlOU1RBTkNFLmdldE5vQnVmZmVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIE9iamVjdCBOb2RlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTk9fQlVGRkVSX19CQVNFX09CSkVDVF9OT0RFID0gZUlOU1RBTkNFLmdldE5vQnVmZmVyX0Jhc2VfT2JqZWN0Tm9kZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLk92ZXJ3cml0ZUltcGwKKwkJICogPGVtPk92ZXJ3cml0ZTwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLk92ZXJ3cml0ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5BY3Rpdml0aWVzUGFja2FnZUltcGwjZ2V0T3ZlcndyaXRlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE9WRVJXUklURSA9IGVJTlNUQU5DRS5nZXRPdmVyd3JpdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgT2JqZWN0IE5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBPVkVSV1JJVEVfX0JBU0VfT0JKRUNUX05PREUgPSBlSU5TVEFOQ0UuZ2V0T3ZlcndyaXRlX0Jhc2VfT2JqZWN0Tm9kZSgpOworCisJfQorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiYWN0aXZpdGllcyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9BY3Rpdml0aWVzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIkFjdGl2aXRpZXMiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUFjdGl2aXRpZXNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkFjdGl2aXRpZXNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLk9wdGlvbmFsSW1wbCA8ZW0+T3B0aW9uYWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5PcHRpb25hbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkFjdGl2aXRpZXNQYWNrYWdlSW1wbCNnZXRPcHRpb25hbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBPUFRJT05BTCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQYXJhbWV0ZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBPUFRJT05BTF9fQkFTRV9QQVJBTUVURVIgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk9wdGlvbmFsPC9lbT4nIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE9QVElPTkFMX0ZFQVRVUkVfQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPk9wdGlvbmFsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgT1BUSU9OQUxfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuUmF0ZUltcGwgPGVtPlJhdGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5SYXRlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsI2dldFJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUkFURSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQYXJhbWV0ZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQVRFX19CQVNFX1BBUkFNRVRFUiA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBBY3Rpdml0eSBFZGdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFURV9fQkFTRV9BQ1RJVklUWV9FREdFID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFURV9fUkFURSA9IDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UmF0ZTwvZW0+JyBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQVRFX0ZFQVRVUkVfQ09VTlQgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPlJhdGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQVRFX09QRVJBVElPTl9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Qcm9iYWJpbGl0eUltcGwKKwkgKiA8ZW0+UHJvYmFiaWxpdHk8L2VtPn0nIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Qcm9iYWJpbGl0eUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkFjdGl2aXRpZXNQYWNrYWdlSW1wbCNnZXRQcm9iYWJpbGl0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQUk9CQUJJTElUWSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBBY3Rpdml0eSBFZGdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPQkFCSUxJVFlfX0JBU0VfQUNUSVZJVFlfRURHRSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQYXJhbWV0ZXIgU2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPQkFCSUxJVFlfX0JBU0VfUEFSQU1FVEVSX1NFVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmFiaWxpdHk8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9CQUJJTElUWV9fUFJPQkFCSUxJVFkgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlByb2JhYmlsaXR5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBST0JBQklMSVRZX0ZFQVRVUkVfQ09VTlQgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPlByb2JhYmlsaXR5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPQkFCSUxJVFlfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkNvbnRpbnVvdXNJbXBsCisJICogPGVtPkNvbnRpbnVvdXM8L2VtPn0nIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Db250aW51b3VzSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsI2dldENvbnRpbnVvdXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgQ09OVElOVU9VUyA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQYXJhbWV0ZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05USU5VT1VTX19CQVNFX1BBUkFNRVRFUiA9IFJBVEVfX0JBU0VfUEFSQU1FVEVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQWN0aXZpdHkgRWRnZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTlRJTlVPVVNfX0JBU0VfQUNUSVZJVFlfRURHRSA9IFJBVEVfX0JBU0VfQUNUSVZJVFlfRURHRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVElOVU9VU19fUkFURSA9IFJBVEVfX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29udGludW91czwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05USU5VT1VTX0ZFQVRVUkVfQ09VTlQgPSBSQVRFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkNvbnRpbnVvdXM8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05USU5VT1VTX09QRVJBVElPTl9DT1VOVCA9IFJBVEVfT1BFUkFUSU9OX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuRGlzY3JldGVJbXBsIDxlbT5EaXNjcmV0ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkRpc2NyZXRlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsI2dldERpc2NyZXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERJU0NSRVRFID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIFBhcmFtZXRlcjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0NSRVRFX19CQVNFX1BBUkFNRVRFUiA9IFJBVEVfX0JBU0VfUEFSQU1FVEVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQWN0aXZpdHkgRWRnZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0NSRVRFX19CQVNFX0FDVElWSVRZX0VER0UgPSBSQVRFX19CQVNFX0FDVElWSVRZX0VER0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmF0ZTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0NSRVRFX19SQVRFID0gUkFURV9fUkFURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EaXNjcmV0ZTwvZW0+JyBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNDUkVURV9GRUFUVVJFX0NPVU5UID0gUkFURV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5EaXNjcmV0ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0NSRVRFX09QRVJBVElPTl9DT1VOVCA9IFJBVEVfT1BFUkFUSU9OX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQ29udHJvbE9wZXJhdG9ySW1wbCA8ZW0+Q29udHJvbCBPcGVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQ29udHJvbE9wZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsI2dldENvbnRyb2xPcGVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT05UUk9MX09QRVJBVE9SID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIE9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTlRST0xfT1BFUkFUT1JfX0JBU0VfT1BFUkFUSU9OID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIEJlaGF2aW9yPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9PUEVSQVRPUl9fQkFTRV9CRUhBVklPUiA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29udHJvbCBPcGVyYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX09QRVJBVE9SX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkNvbnRyb2wgT3BlcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX09QRVJBVE9SX09QRVJBVElPTl9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLk5vQnVmZmVySW1wbCA8ZW0+Tm8gQnVmZmVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuTm9CdWZmZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5BY3Rpdml0aWVzUGFja2FnZUltcGwjZ2V0Tm9CdWZmZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9fQlVGRkVSID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIE9iamVjdCBOb2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9fQlVGRkVSX19CQVNFX09CSkVDVF9OT0RFID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5ObyBCdWZmZXI8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9fQlVGRkVSX0ZFQVRVUkVfQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPk5vIEJ1ZmZlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PX0JVRkZFUl9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5PdmVyd3JpdGVJbXBsIDxlbT5PdmVyd3JpdGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5PdmVyd3JpdGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5BY3Rpdml0aWVzUGFja2FnZUltcGwjZ2V0T3ZlcndyaXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE9WRVJXUklURSA9IDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBPYmplY3QgTm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE9WRVJXUklURV9fQkFTRV9PQkpFQ1RfTk9ERSA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3ZlcndyaXRlPC9lbT4nIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE9WRVJXUklURV9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5PdmVyd3JpdGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBPVkVSV1JJVEVfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFjdGl2aXRpZXNGYWN0b3J5IGdldEFjdGl2aXRpZXNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udGludW91cyA8ZW0+Q29udGludW91czwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Db250aW51b3VzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkNvbnRpbnVvdXMKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbnRpbnVvdXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yCisJICogPGVtPkNvbnRyb2wgT3BlcmF0b3I8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q29udHJvbCBPcGVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250cm9sT3BlcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbnRyb2xPcGVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yI2dldEJhc2VfQmVoYXZpb3IgPGVtPkJhc2UgQmVoYXZpb3I8L2VtPn0gJy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250cm9sT3BlcmF0b3IjZ2V0QmFzZV9CZWhhdmlvcigpCisJICogQHNlZSAjZ2V0Q29udHJvbE9wZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRDb250cm9sT3BlcmF0b3JfQmFzZV9CZWhhdmlvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yI2dldEJhc2VfT3BlcmF0aW9uCisJICogPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBPcGVyYXRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yI2dldEJhc2VfT3BlcmF0aW9uKCkKKwkgKiBAc2VlICNnZXRDb250cm9sT3BlcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldENvbnRyb2xPcGVyYXRvcl9CYXNlX09wZXJhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkRpc2NyZXRlIDxlbT5EaXNjcmV0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNjcmV0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5EaXNjcmV0ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGlzY3JldGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Ob0J1ZmZlciA8ZW0+Tm8gQnVmZmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tm8gQnVmZmVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk5vQnVmZmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXROb0J1ZmZlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk5vQnVmZmVyI2dldEJhc2VfT2JqZWN0Tm9kZQorCSAqIDxlbT5CYXNlIE9iamVjdCBOb2RlPC9lbT59Jy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBPYmplY3QgTm9kZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Ob0J1ZmZlciNnZXRCYXNlX09iamVjdE5vZGUoKQorCSAqIEBzZWUgI2dldE5vQnVmZmVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXROb0J1ZmZlcl9CYXNlX09iamVjdE5vZGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PcHRpb25hbCA8ZW0+T3B0aW9uYWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+T3B0aW9uYWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3B0aW9uYWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE9wdGlvbmFsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PcHRpb25hbCNnZXRCYXNlX1BhcmFtZXRlciA8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFBhcmFtZXRlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PcHRpb25hbCNnZXRCYXNlX1BhcmFtZXRlcigpCisJICogQHNlZSAjZ2V0T3B0aW9uYWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE9wdGlvbmFsX0Jhc2VfUGFyYW1ldGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3ZlcndyaXRlIDxlbT5PdmVyd3JpdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PdmVyd3JpdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3ZlcndyaXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRPdmVyd3JpdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PdmVyd3JpdGUjZ2V0QmFzZV9PYmplY3ROb2RlCisJICogPGVtPkJhc2UgT2JqZWN0IE5vZGU8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIE9iamVjdCBOb2RlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk92ZXJ3cml0ZSNnZXRCYXNlX09iamVjdE5vZGUoKQorCSAqIEBzZWUgI2dldE92ZXJ3cml0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0T3ZlcndyaXRlX0Jhc2VfT2JqZWN0Tm9kZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5IDxlbT5Qcm9iYWJpbGl0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qcm9iYWJpbGl0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UHJvYmFiaWxpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eSNnZXRCYXNlX0FjdGl2aXR5RWRnZQorCSAqIDxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUHJvYmFiaWxpdHkjZ2V0QmFzZV9BY3Rpdml0eUVkZ2UoKQorCSAqIEBzZWUgI2dldFByb2JhYmlsaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRQcm9iYWJpbGl0eV9CYXNlX0FjdGl2aXR5RWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5I2dldEJhc2VfUGFyYW1ldGVyU2V0CisJICogPGVtPkJhc2UgUGFyYW1ldGVyIFNldDwvZW0+fScuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgUGFyYW1ldGVyIFNldDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eSNnZXRCYXNlX1BhcmFtZXRlclNldCgpCisJICogQHNlZSAjZ2V0UHJvYmFiaWxpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFByb2JhYmlsaXR5X0Jhc2VfUGFyYW1ldGVyU2V0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eSNnZXRQcm9iYWJpbGl0eSA8ZW0+UHJvYmFiaWxpdHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Qcm9iYWJpbGl0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eSNnZXRQcm9iYWJpbGl0eSgpCisJICogQHNlZSAjZ2V0UHJvYmFiaWxpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFByb2JhYmlsaXR5X1Byb2JhYmlsaXR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlJhdGUgPGVtPlJhdGU8L2VtPn0nLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5SYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZSNnZXRCYXNlX0FjdGl2aXR5RWRnZQorCSAqIDxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZSNnZXRCYXNlX0FjdGl2aXR5RWRnZSgpCisJICogQHNlZSAjZ2V0UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmF0ZV9CYXNlX0FjdGl2aXR5RWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZSNnZXRCYXNlX1BhcmFtZXRlciA8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFBhcmFtZXRlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5SYXRlI2dldEJhc2VfUGFyYW1ldGVyKCkKKwkgKiBAc2VlICNnZXRSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRSYXRlX0Jhc2VfUGFyYW1ldGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5SYXRlI2dldFJhdGUgPGVtPlJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5SYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlJhdGUjZ2V0UmF0ZSgpCisJICogQHNlZSAjZ2V0UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmF0ZV9SYXRlKCk7CisKK30gLy8gQWN0aXZpdGllc1BhY2thZ2UKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvQ29udGludW91cy5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9Db250aW51b3VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2ZjA3OQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvQ29udGludW91cy5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5Db250aW51b3VzPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlI2dldENvbnRpbnVvdXMoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29udGludW91cyBleHRlbmRzIFJhdGUgeworfSAvLyBDb250aW51b3VzCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL0NvbnRyb2xPcGVyYXRvci5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9Db250cm9sT3BlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQ1YTVjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9Db250cm9sT3BlcmF0b3IuamF2YQpAQCAtMCwwICsxLDkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkJlaGF2aW9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk9wZXJhdGlvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+Q29udHJvbCBPcGVyYXRvcjwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yI2dldEJhc2VfT3BlcmF0aW9uIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250cm9sT3BlcmF0b3IjZ2V0QmFzZV9CZWhhdmlvciA8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlI2dldENvbnRyb2xPcGVyYXRvcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBDb250cm9sT3BlcmF0b3IgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgQmVoYXZpb3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgQmVoYXZpb3I8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9CZWhhdmlvcihCZWhhdmlvcikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZSNnZXRDb250cm9sT3BlcmF0b3JfQmFzZV9CZWhhdmlvcigpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQmVoYXZpb3IgZ2V0QmFzZV9CZWhhdmlvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX09wZXJhdGlvbihPcGVyYXRpb24pCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0Q29udHJvbE9wZXJhdG9yX0Jhc2VfT3BlcmF0aW9uKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlPcGVyYXRpb24gZ2V0QmFzZV9PcGVyYXRpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250cm9sT3BlcmF0b3IjZ2V0QmFzZV9CZWhhdmlvciA8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9CZWhhdmlvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9CZWhhdmlvcihCZWhhdmlvciB2YWx1ZSk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yI2dldEJhc2VfT3BlcmF0aW9uIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfT3BlcmF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX09wZXJhdGlvbihPcGVyYXRpb24gdmFsdWUpOworCit9IC8vIENvbnRyb2xPcGVyYXRvcgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9EaXNjcmV0ZS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9EaXNjcmV0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODMxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL0Rpc2NyZXRlLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkRpc2NyZXRlPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlI2dldERpc2NyZXRlKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIERpc2NyZXRlIGV4dGVuZHMgUmF0ZSB7Cit9IC8vIERpc2NyZXRlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL05vQnVmZmVyLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL05vQnVmZmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2NzBkMAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvTm9CdWZmZXIuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk9iamVjdE5vZGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPk5vIEJ1ZmZlcjwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuTm9CdWZmZXIjZ2V0QmFzZV9PYmplY3ROb2RlIDxlbT5CYXNlIE9iamVjdCBOb2RlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0Tm9CdWZmZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTm9CdWZmZXIgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgT2JqZWN0IE5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgT2JqZWN0IE5vZGU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBPYmplY3QgTm9kZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9PYmplY3ROb2RlKE9iamVjdE5vZGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0Tm9CdWZmZXJfQmFzZV9PYmplY3ROb2RlKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlPYmplY3ROb2RlIGdldEJhc2VfT2JqZWN0Tm9kZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk5vQnVmZmVyI2dldEJhc2VfT2JqZWN0Tm9kZSA8ZW0+QmFzZSBPYmplY3QgTm9kZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBPYmplY3QgTm9kZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9PYmplY3ROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX09iamVjdE5vZGUoT2JqZWN0Tm9kZSB2YWx1ZSk7CisKK30gLy8gTm9CdWZmZXIKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvT3B0aW9uYWwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvT3B0aW9uYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDIxNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9PcHRpb25hbC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUGFyYW1ldGVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5PcHRpb25hbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3B0aW9uYWwjZ2V0QmFzZV9QYXJhbWV0ZXIgPGVtPkJhc2UgUGFyYW1ldGVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0T3B0aW9uYWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgT3B0aW9uYWwgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgUGFyYW1ldGVyPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIFBhcmFtZXRlcjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIFBhcmFtZXRlcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9QYXJhbWV0ZXIoUGFyYW1ldGVyKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlI2dldE9wdGlvbmFsX0Jhc2VfUGFyYW1ldGVyKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQYXJhbWV0ZXIgZ2V0QmFzZV9QYXJhbWV0ZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PcHRpb25hbCNnZXRCYXNlX1BhcmFtZXRlciA8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUGFyYW1ldGVyPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX1BhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9QYXJhbWV0ZXIoUGFyYW1ldGVyIHZhbHVlKTsKKworfSAvLyBPcHRpb25hbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9PdmVyd3JpdGUuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvT3ZlcndyaXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3MjJlMAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvT3ZlcndyaXRlLmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5PYmplY3ROb2RlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5PdmVyd3JpdGU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk92ZXJ3cml0ZSNnZXRCYXNlX09iamVjdE5vZGUgPGVtPkJhc2UgT2JqZWN0IE5vZGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZSNnZXRPdmVyd3JpdGUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgT3ZlcndyaXRlIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIE9iamVjdCBOb2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIE9iamVjdCBOb2RlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgT2JqZWN0IE5vZGU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfT2JqZWN0Tm9kZShPYmplY3ROb2RlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlI2dldE92ZXJ3cml0ZV9CYXNlX09iamVjdE5vZGUoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCU9iamVjdE5vZGUgZ2V0QmFzZV9PYmplY3ROb2RlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3ZlcndyaXRlI2dldEJhc2VfT2JqZWN0Tm9kZSA8ZW0+QmFzZSBPYmplY3QgTm9kZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBPYmplY3QgTm9kZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9PYmplY3ROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX09iamVjdE5vZGUoT2JqZWN0Tm9kZSB2YWx1ZSk7CisKK30gLy8gT3ZlcndyaXRlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL1Byb2JhYmlsaXR5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL1Byb2JhYmlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4NTg2NwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvUHJvYmFiaWxpdHkuamF2YQpAQCAtMCwwICsxLDEyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5BY3Rpdml0eUVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUGFyYW1ldGVyU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlZhbHVlU3BlY2lmaWNhdGlvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UHJvYmFiaWxpdHk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5I2dldEJhc2VfQWN0aXZpdHlFZGdlIDxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUHJvYmFiaWxpdHkjZ2V0QmFzZV9QYXJhbWV0ZXJTZXQgPGVtPkJhc2UgUGFyYW1ldGVyIFNldDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eSNnZXRQcm9iYWJpbGl0eSA8ZW0+UHJvYmFiaWxpdHk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZSNnZXRQcm9iYWJpbGl0eSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQcm9iYWJpbGl0eSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBBY3Rpdml0eSBFZGdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBBY3Rpdml0eSBFZGdlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0FjdGl2aXR5RWRnZShBY3Rpdml0eUVkZ2UpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0UHJvYmFiaWxpdHlfQmFzZV9BY3Rpdml0eUVkZ2UoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUFjdGl2aXR5RWRnZSBnZXRCYXNlX0FjdGl2aXR5RWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBQYXJhbWV0ZXIgU2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIFBhcmFtZXRlciBTZXQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBQYXJhbWV0ZXIgU2V0PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX1BhcmFtZXRlclNldChQYXJhbWV0ZXJTZXQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0UHJvYmFiaWxpdHlfQmFzZV9QYXJhbWV0ZXJTZXQoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVBhcmFtZXRlclNldCBnZXRCYXNlX1BhcmFtZXRlclNldCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHJvYmFiaWxpdHk8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlByb2JhYmlsaXR5PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlByb2JhYmlsaXR5PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRQcm9iYWJpbGl0eShWYWx1ZVNwZWNpZmljYXRpb24pCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0UHJvYmFiaWxpdHlfUHJvYmFiaWxpdHkoKQorCSAqIEBtb2RlbCBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVmFsdWVTcGVjaWZpY2F0aW9uIGdldFByb2JhYmlsaXR5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUHJvYmFiaWxpdHkjZ2V0QmFzZV9BY3Rpdml0eUVkZ2UgPGVtPkJhc2UgQWN0aXZpdHkgRWRnZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBBY3Rpdml0eSBFZGdlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0FjdGl2aXR5RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9BY3Rpdml0eUVkZ2UoQWN0aXZpdHlFZGdlIHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eSNnZXRCYXNlX1BhcmFtZXRlclNldCA8ZW0+QmFzZSBQYXJhbWV0ZXIgU2V0PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIFBhcmFtZXRlciBTZXQ8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfUGFyYW1ldGVyU2V0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX1BhcmFtZXRlclNldChQYXJhbWV0ZXJTZXQgdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5I2dldFByb2JhYmlsaXR5IDxlbT5Qcm9iYWJpbGl0eTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJvYmFiaWxpdHk8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFByb2JhYmlsaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcm9iYWJpbGl0eShWYWx1ZVNwZWNpZmljYXRpb24gdmFsdWUpOworCit9IC8vIFByb2JhYmlsaXR5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL1JhdGUuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvUmF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDIxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL1JhdGUuamF2YQpAQCAtMCwwICsxLDEyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5BY3Rpdml0eUVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuSW5zdGFuY2VTcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhcmFtZXRlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UmF0ZTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZSNnZXRCYXNlX1BhcmFtZXRlciA8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZSNnZXRCYXNlX0FjdGl2aXR5RWRnZSA8ZW0+QmFzZSBBY3Rpdml0eSBFZGdlPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlJhdGUjZ2V0UmF0ZSA8ZW0+UmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlI2dldFJhdGUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmF0ZSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBBY3Rpdml0eSBFZGdlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBBY3Rpdml0eSBFZGdlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0FjdGl2aXR5RWRnZShBY3Rpdml0eUVkZ2UpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0UmF0ZV9CYXNlX0FjdGl2aXR5RWRnZSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQWN0aXZpdHlFZGdlIGdldEJhc2VfQWN0aXZpdHlFZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIFBhcmFtZXRlcjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfUGFyYW1ldGVyKFBhcmFtZXRlcikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZSNnZXRSYXRlX0Jhc2VfUGFyYW1ldGVyKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQYXJhbWV0ZXIgZ2V0QmFzZV9QYXJhbWV0ZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJhdGU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmF0ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0UmF0ZShJbnN0YW5jZVNwZWNpZmljYXRpb24pCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2UjZ2V0UmF0ZV9SYXRlKCkKKwkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUluc3RhbmNlU3BlY2lmaWNhdGlvbiBnZXRSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZSNnZXRCYXNlX0FjdGl2aXR5RWRnZSA8ZW0+QmFzZSBBY3Rpdml0eSBFZGdlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfQWN0aXZpdHlFZGdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0FjdGl2aXR5RWRnZShBY3Rpdml0eUVkZ2UgdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlJhdGUjZ2V0QmFzZV9QYXJhbWV0ZXIgPGVtPkJhc2UgUGFyYW1ldGVyPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIFBhcmFtZXRlcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9QYXJhbWV0ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfUGFyYW1ldGVyKFBhcmFtZXRlciB2YWx1ZSk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZSNnZXRSYXRlIDxlbT5SYXRlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmF0ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmF0ZShJbnN0YW5jZVNwZWNpZmljYXRpb24gdmFsdWUpOworCit9IC8vIFJhdGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9BY3Rpdml0aWVzRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9BY3Rpdml0aWVzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ4NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL0FjdGl2aXRpZXNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udGludW91czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5EaXNjcmV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuTm9CdWZmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk9wdGlvbmFsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PdmVyd3JpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5SYXRlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFjdGl2aXRpZXNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEFjdGl2aXRpZXNGYWN0b3J5IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEFjdGl2aXRpZXNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBBY3Rpdml0aWVzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBBY3Rpdml0aWVzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJQWN0aXZpdGllc0ZhY3RvcnkgdGhlQWN0aXZpdGllc0ZhY3RvcnkgPSAoQWN0aXZpdGllc0ZhY3RvcnkpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpOworCQkJaWYgKHRoZUFjdGl2aXRpZXNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlQWN0aXZpdGllc0ZhY3Rvcnk7CisJCQl9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgQWN0aXZpdGllc0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBY3Rpdml0aWVzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5PUFRJT05BTDoKKwkJCXJldHVybiBjcmVhdGVPcHRpb25hbCgpOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEU6CisJCQlyZXR1cm4gY3JlYXRlUmF0ZSgpOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlBST0JBQklMSVRZOgorCQkJcmV0dXJuIGNyZWF0ZVByb2JhYmlsaXR5KCk7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuQ09OVElOVU9VUzoKKwkJCXJldHVybiBjcmVhdGVDb250aW51b3VzKCk7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuRElTQ1JFVEU6CisJCQlyZXR1cm4gY3JlYXRlRGlzY3JldGUoKTsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5DT05UUk9MX09QRVJBVE9SOgorCQkJcmV0dXJuIGNyZWF0ZUNvbnRyb2xPcGVyYXRvcigpOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk5PX0JVRkZFUjoKKwkJCXJldHVybiBjcmVhdGVOb0J1ZmZlcigpOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk9WRVJXUklURToKKwkJCXJldHVybiBjcmVhdGVPdmVyd3JpdGUoKTsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT3B0aW9uYWwgY3JlYXRlT3B0aW9uYWwoKSB7CisJCU9wdGlvbmFsSW1wbCBvcHRpb25hbCA9IG5ldyBPcHRpb25hbEltcGwoKTsKKwkJcmV0dXJuIG9wdGlvbmFsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb250aW51b3VzIGNyZWF0ZUNvbnRpbnVvdXMoKSB7CisJCUNvbnRpbnVvdXNJbXBsIGNvbnRpbnVvdXMgPSBuZXcgQ29udGludW91c0ltcGwoKTsKKwkJcmV0dXJuIGNvbnRpbnVvdXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbnRyb2xPcGVyYXRvciBjcmVhdGVDb250cm9sT3BlcmF0b3IoKSB7CisJCUNvbnRyb2xPcGVyYXRvckltcGwgY29udHJvbE9wZXJhdG9yID0gbmV3IENvbnRyb2xPcGVyYXRvckltcGwoKTsKKwkJcmV0dXJuIGNvbnRyb2xPcGVyYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzY3JldGUgY3JlYXRlRGlzY3JldGUoKSB7CisJCURpc2NyZXRlSW1wbCBkaXNjcmV0ZSA9IG5ldyBEaXNjcmV0ZUltcGwoKTsKKwkJcmV0dXJuIGRpc2NyZXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb0J1ZmZlciBjcmVhdGVOb0J1ZmZlcigpIHsKKwkJTm9CdWZmZXJJbXBsIG5vQnVmZmVyID0gbmV3IE5vQnVmZmVySW1wbCgpOworCQlyZXR1cm4gbm9CdWZmZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE92ZXJ3cml0ZSBjcmVhdGVPdmVyd3JpdGUoKSB7CisJCU92ZXJ3cml0ZUltcGwgb3ZlcndyaXRlID0gbmV3IE92ZXJ3cml0ZUltcGwoKTsKKwkJcmV0dXJuIG92ZXJ3cml0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvYmFiaWxpdHkgY3JlYXRlUHJvYmFiaWxpdHkoKSB7CisJCVByb2JhYmlsaXR5SW1wbCBwcm9iYWJpbGl0eSA9IG5ldyBQcm9iYWJpbGl0eUltcGwoKTsKKwkJcmV0dXJuIHByb2JhYmlsaXR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSYXRlIGNyZWF0ZVJhdGUoKSB7CisJCVJhdGVJbXBsIHJhdGUgPSBuZXcgUmF0ZUltcGwoKTsKKwkJcmV0dXJuIHJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFjdGl2aXRpZXNQYWNrYWdlIGdldEFjdGl2aXRpZXNQYWNrYWdlKCkgeworCQlyZXR1cm4gKEFjdGl2aXRpZXNQYWNrYWdlKSBnZXRFUGFja2FnZSgpOworCX0KKworfSAvLyBBY3Rpdml0aWVzRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9BY3Rpdml0aWVzUGFja2FnZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9BY3Rpdml0aWVzUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQ2NDBlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL0FjdGl2aXRpZXNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuU3lzbWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkNvbnRpbnVvdXM7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkNvbnRyb2xPcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuRGlzY3JldGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk5vQnVmZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PcHRpb25hbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3ZlcndyaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUmF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGlvbnNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuSW50ZXJhY3Rpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5pbnRlcm5hbC5pbXBsLkludGVyYWN0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJuYWwuaW1wbC5TeXNtbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLlBvcnRhbmRmbG93c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuU3RhdGVtYWNoaW5lc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLmludGVybmFsLmltcGwuU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuVXNlY2FzZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuaW50ZXJuYWwuaW1wbC5Vc2VjYXNlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlVNTFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQWN0aXZpdGllc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgQWN0aXZpdGllc1BhY2thZ2UgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgb3B0aW9uYWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqCisJICogPHA+CisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBBY3Rpdml0aWVzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4gQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBBY3Rpdml0aWVzUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHsKKwkJCXJldHVybiAoQWN0aXZpdGllc1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpOworCQl9CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlBY3Rpdml0aWVzUGFja2FnZUltcGwgdGhlQWN0aXZpdGllc1BhY2thZ2UgPSAoQWN0aXZpdGllc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgQWN0aXZpdGllc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEFjdGl2aXRpZXNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJU3lzbWxQYWNrYWdlSW1wbCB0aGVTeXNtbFBhY2thZ2UgPSAoU3lzbWxQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN5c21sUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTeXNtbFBhY2thZ2UuZU5TX1VSSSkgOiBTeXNtbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsIHRoZU1vZGVsZWxlbWVudHNQYWNrYWdlID0gKE1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsZWxlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UKKwkJCQkuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbGVsZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlCbG9ja3NQYWNrYWdlSW1wbCB0aGVCbG9ja3NQYWNrYWdlID0gKEJsb2Nrc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEJsb2Nrc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSA6IEJsb2Nrc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUG9ydGFuZGZsb3dzUGFja2FnZUltcGwgdGhlUG9ydGFuZGZsb3dzUGFja2FnZSA9IChQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFBvcnRhbmRmbG93c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQ29uc3RyYWludHNQYWNrYWdlSW1wbCB0aGVDb25zdHJhaW50c1BhY2thZ2UgPSAoQ29uc3RyYWludHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbnN0cmFpbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IENvbnN0cmFpbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBbGxvY2F0aW9uc1BhY2thZ2VJbXBsIHRoZUFsbG9jYXRpb25zUGFja2FnZSA9IChBbGxvY2F0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWxsb2NhdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUludGVyYWN0aW9uc1BhY2thZ2VJbXBsIHRoZUludGVyYWN0aW9uc1BhY2thZ2UgPSAoSW50ZXJhY3Rpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBJbnRlcmFjdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpIDogU3RhdGVtYWNoaW5lc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVXNlY2FzZXNQYWNrYWdlSW1wbCB0aGVVc2VjYXNlc1BhY2thZ2UgPSAoVXNlY2FzZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVzZWNhc2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVzZWNhc2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFVzZWNhc2VzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUFjdGl2aXRpZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTeXNtbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVCbG9ja3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb25zdHJhaW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUmVxdWlyZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVVzZWNhc2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUFjdGl2aXRpZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVCbG9ja3NQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUG9ydGFuZGZsb3dzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVJbnRlcmFjdGlvbnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuZnJlZXplKCk7CisKKworCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkksIHRoZUFjdGl2aXRpZXNQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUFjdGl2aXRpZXNQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0T3B0aW9uYWwoKSB7CisJCXJldHVybiBvcHRpb25hbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRPcHRpb25hbF9CYXNlX1BhcmFtZXRlcigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBvcHRpb25hbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHJhdGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcHJvYmFiaWxpdHlFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY29udGludW91c0VDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkaXNjcmV0ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBjb250cm9sT3BlcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgbm9CdWZmZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgb3ZlcndyaXRlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZQorCSAqIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD4KKwkgKiBOb3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBBY3Rpdml0aWVzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEFjdGl2aXRpZXNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlvcHRpb25hbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhPUFRJT05BTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uob3B0aW9uYWxFQ2xhc3MsIE9QVElPTkFMX19CQVNFX1BBUkFNRVRFUik7CisKKwkJcmF0ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhSQVRFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyYXRlRUNsYXNzLCBSQVRFX19CQVNFX1BBUkFNRVRFUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UocmF0ZUVDbGFzcywgUkFURV9fQkFTRV9BQ1RJVklUWV9FREdFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyYXRlRUNsYXNzLCBSQVRFX19SQVRFKTsKKworCQlwcm9iYWJpbGl0eUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQUk9CQUJJTElUWSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocHJvYmFiaWxpdHlFQ2xhc3MsIFBST0JBQklMSVRZX19CQVNFX0FDVElWSVRZX0VER0UpOworCQljcmVhdGVFUmVmZXJlbmNlKHByb2JhYmlsaXR5RUNsYXNzLCBQUk9CQUJJTElUWV9fQkFTRV9QQVJBTUVURVJfU0VUKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShwcm9iYWJpbGl0eUVDbGFzcywgUFJPQkFCSUxJVFlfX1BST0JBQklMSVRZKTsKKworCQljb250aW51b3VzRUNsYXNzID0gY3JlYXRlRUNsYXNzKENPTlRJTlVPVVMpOworCisJCWRpc2NyZXRlRUNsYXNzID0gY3JlYXRlRUNsYXNzKERJU0NSRVRFKTsKKworCQljb250cm9sT3BlcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQ09OVFJPTF9PUEVSQVRPUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UoY29udHJvbE9wZXJhdG9yRUNsYXNzLCBDT05UUk9MX09QRVJBVE9SX19CQVNFX09QRVJBVElPTik7CisJCWNyZWF0ZUVSZWZlcmVuY2UoY29udHJvbE9wZXJhdG9yRUNsYXNzLCBDT05UUk9MX09QRVJBVE9SX19CQVNFX0JFSEFWSU9SKTsKKworCQlub0J1ZmZlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOT19CVUZGRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKG5vQnVmZmVyRUNsYXNzLCBOT19CVUZGRVJfX0JBU0VfT0JKRUNUX05PREUpOworCisJCW92ZXJ3cml0ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhPVkVSV1JJVEUpOworCQljcmVhdGVFUmVmZXJlbmNlKG92ZXJ3cml0ZUVDbGFzcywgT1ZFUldSSVRFX19CQVNFX09CSkVDVF9OT0RFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWN0aXZpdGllc0ZhY3RvcnkgZ2V0QWN0aXZpdGllc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoQWN0aXZpdGllc0ZhY3RvcnkpIGdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldENvbnRpbnVvdXMoKSB7CisJCXJldHVybiBjb250aW51b3VzRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29udHJvbE9wZXJhdG9yKCkgeworCQlyZXR1cm4gY29udHJvbE9wZXJhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldENvbnRyb2xPcGVyYXRvcl9CYXNlX0JlaGF2aW9yKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIGNvbnRyb2xPcGVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldENvbnRyb2xPcGVyYXRvcl9CYXNlX09wZXJhdGlvbigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBjb250cm9sT3BlcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERpc2NyZXRlKCkgeworCQlyZXR1cm4gZGlzY3JldGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXROb0J1ZmZlcigpIHsKKwkJcmV0dXJuIG5vQnVmZmVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE5vQnVmZmVyX0Jhc2VfT2JqZWN0Tm9kZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBub0J1ZmZlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0T3ZlcndyaXRlKCkgeworCQlyZXR1cm4gb3ZlcndyaXRlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE92ZXJ3cml0ZV9CYXNlX09iamVjdE5vZGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgb3ZlcndyaXRlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQcm9iYWJpbGl0eSgpIHsKKwkJcmV0dXJuIHByb2JhYmlsaXR5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFByb2JhYmlsaXR5X0Jhc2VfQWN0aXZpdHlFZGdlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHByb2JhYmlsaXR5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UHJvYmFiaWxpdHlfQmFzZV9QYXJhbWV0ZXJTZXQoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgcHJvYmFiaWxpdHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRQcm9iYWJpbGl0eV9Qcm9iYWJpbGl0eSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBwcm9iYWJpbGl0eUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UmF0ZSgpIHsKKwkJcmV0dXJuIHJhdGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UmF0ZV9CYXNlX0FjdGl2aXR5RWRnZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByYXRlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UmF0ZV9CYXNlX1BhcmFtZXRlcigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByYXRlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UmF0ZV9SYXRlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHJhdGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgeworCQkJcmV0dXJuOworCQl9CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJVU1MUGFja2FnZSB0aGVVTUxQYWNrYWdlID0gKFVNTFBhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVNTFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJY29udGludW91c0VDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFJhdGUoKSk7CisJCWRpc2NyZXRlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UmF0ZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMsIGZlYXR1cmVzLCBhbmQgb3BlcmF0aW9uczsgYWRkIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhvcHRpb25hbEVDbGFzcywgT3B0aW9uYWwuY2xhc3MsICJPcHRpb25hbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0T3B0aW9uYWxfQmFzZV9QYXJhbWV0ZXIoKSwgdGhlVU1MUGFja2FnZS5nZXRQYXJhbWV0ZXIoKSwgbnVsbCwgImJhc2VfUGFyYW1ldGVyIiwgbnVsbCwgMSwgMSwgT3B0aW9uYWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MocmF0ZUVDbGFzcywgUmF0ZS5jbGFzcywgIlJhdGUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldFJhdGVfQmFzZV9QYXJhbWV0ZXIoKSwgdGhlVU1MUGFja2FnZS5nZXRQYXJhbWV0ZXIoKSwgbnVsbCwgImJhc2VfUGFyYW1ldGVyIiwgbnVsbCwgMSwgMSwgUmF0ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRSYXRlX0Jhc2VfQWN0aXZpdHlFZGdlKCksIHRoZVVNTFBhY2thZ2UuZ2V0QWN0aXZpdHlFZGdlKCksIG51bGwsICJiYXNlX0FjdGl2aXR5RWRnZSIsIG51bGwsIDEsIDEsIFJhdGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRSYXRlX1JhdGUoKSwgdGhlVU1MUGFja2FnZS5nZXRJbnN0YW5jZVNwZWNpZmljYXRpb24oKSwgbnVsbCwgInJhdGUiLCBudWxsLCAwLCAxLCBSYXRlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhwcm9iYWJpbGl0eUVDbGFzcywgUHJvYmFiaWxpdHkuY2xhc3MsICJQcm9iYWJpbGl0eSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UHJvYmFiaWxpdHlfQmFzZV9BY3Rpdml0eUVkZ2UoKSwgdGhlVU1MUGFja2FnZS5nZXRBY3Rpdml0eUVkZ2UoKSwgbnVsbCwgImJhc2VfQWN0aXZpdHlFZGdlIiwgbnVsbCwgMSwgMSwgUHJvYmFiaWxpdHkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwKKwkJCQkhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRQcm9iYWJpbGl0eV9CYXNlX1BhcmFtZXRlclNldCgpLCB0aGVVTUxQYWNrYWdlLmdldFBhcmFtZXRlclNldCgpLCBudWxsLCAiYmFzZV9QYXJhbWV0ZXJTZXQiLCBudWxsLCAxLCAxLCBQcm9iYWJpbGl0eS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLAorCQkJCSFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFByb2JhYmlsaXR5X1Byb2JhYmlsaXR5KCksIHRoZVVNTFBhY2thZ2UuZ2V0VmFsdWVTcGVjaWZpY2F0aW9uKCksIG51bGwsICJwcm9iYWJpbGl0eSIsIG51bGwsIDAsIDEsIFByb2JhYmlsaXR5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsCisJCQkJIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKGNvbnRpbnVvdXNFQ2xhc3MsIENvbnRpbnVvdXMuY2xhc3MsICJDb250aW51b3VzIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3MoZGlzY3JldGVFQ2xhc3MsIERpc2NyZXRlLmNsYXNzLCAiRGlzY3JldGUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhjb250cm9sT3BlcmF0b3JFQ2xhc3MsIENvbnRyb2xPcGVyYXRvci5jbGFzcywgIkNvbnRyb2xPcGVyYXRvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Q29udHJvbE9wZXJhdG9yX0Jhc2VfT3BlcmF0aW9uKCksIHRoZVVNTFBhY2thZ2UuZ2V0T3BlcmF0aW9uKCksIG51bGwsICJiYXNlX09wZXJhdGlvbiIsIG51bGwsIDEsIDEsIENvbnRyb2xPcGVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLAorCQkJCSFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldENvbnRyb2xPcGVyYXRvcl9CYXNlX0JlaGF2aW9yKCksIHRoZVVNTFBhY2thZ2UuZ2V0QmVoYXZpb3IoKSwgbnVsbCwgImJhc2VfQmVoYXZpb3IiLCBudWxsLCAxLCAxLCBDb250cm9sT3BlcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwKKwkJCQkhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3Mobm9CdWZmZXJFQ2xhc3MsIE5vQnVmZmVyLmNsYXNzLCAiTm9CdWZmZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldE5vQnVmZmVyX0Jhc2VfT2JqZWN0Tm9kZSgpLCB0aGVVTUxQYWNrYWdlLmdldE9iamVjdE5vZGUoKSwgbnVsbCwgImJhc2VfT2JqZWN0Tm9kZSIsIG51bGwsIDEsIDEsIE5vQnVmZmVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELAorCQkJCSFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKG92ZXJ3cml0ZUVDbGFzcywgT3ZlcndyaXRlLmNsYXNzLCAiT3ZlcndyaXRlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRPdmVyd3JpdGVfQmFzZV9PYmplY3ROb2RlKCksIHRoZVVNTFBhY2thZ2UuZ2V0T2JqZWN0Tm9kZSgpLCBudWxsLCAiYmFzZV9PYmplY3ROb2RlIiwgbnVsbCwgMSwgMSwgT3ZlcndyaXRlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELAorCQkJCSFJU19PUkRFUkVEKTsKKwl9CisKK30gLy8gQWN0aXZpdGllc1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL2ludGVybmFsL2ltcGwvQ29udGludW91c0ltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9Db250aW51b3VzSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NzE3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL2ludGVybmFsL2ltcGwvQ29udGludW91c0ltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkNvbnRpbnVvdXM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5Db250aW51b3VzPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb250aW51b3VzSW1wbCBleHRlbmRzIFJhdGVJbXBsIGltcGxlbWVudHMgQ29udGludW91cyB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29udGludW91c0ltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBBY3Rpdml0aWVzUGFja2FnZS5MaXRlcmFscy5DT05USU5VT1VTOworCX0KKworfSAvLyBDb250aW51b3VzSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL0NvbnRyb2xPcGVyYXRvckltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9Db250cm9sT3BlcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0MDExZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9Db250cm9sT3BlcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSwyMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkNvbnRyb2xPcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5CZWhhdmlvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5PcGVyYXRpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5Db250cm9sIE9wZXJhdG9yPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Db250cm9sT3BlcmF0b3JJbXBsI2dldEJhc2VfT3BlcmF0aW9uIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkNvbnRyb2xPcGVyYXRvckltcGwjZ2V0QmFzZV9CZWhhdmlvciA8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbnRyb2xPcGVyYXRvckltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgQ29udHJvbE9wZXJhdG9yIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfT3BlcmF0aW9uKCkgPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfT3BlcmF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgT3BlcmF0aW9uIGJhc2VfT3BlcmF0aW9uOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9CZWhhdmlvcigpIDxlbT5CYXNlIEJlaGF2aW9yPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfQmVoYXZpb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBCZWhhdmlvciBiYXNlX0JlaGF2aW9yOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbnRyb2xPcGVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJlaGF2aW9yIGJhc2ljR2V0QmFzZV9CZWhhdmlvcigpIHsKKwkJcmV0dXJuIGJhc2VfQmVoYXZpb3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9wZXJhdGlvbiBiYXNpY0dldEJhc2VfT3BlcmF0aW9uKCkgeworCQlyZXR1cm4gYmFzZV9PcGVyYXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLkNPTlRST0xfT1BFUkFUT1JfX0JBU0VfT1BFUkFUSU9OOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9PcGVyYXRpb24oKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfT3BlcmF0aW9uKCk7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuQ09OVFJPTF9PUEVSQVRPUl9fQkFTRV9CRUhBVklPUjoKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfQmVoYXZpb3IoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfQmVoYXZpb3IoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLkNPTlRST0xfT1BFUkFUT1JfX0JBU0VfT1BFUkFUSU9OOgorCQkJcmV0dXJuIGJhc2VfT3BlcmF0aW9uICE9IG51bGw7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuQ09OVFJPTF9PUEVSQVRPUl9fQkFTRV9CRUhBVklPUjoKKwkJCXJldHVybiBiYXNlX0JlaGF2aW9yICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuQ09OVFJPTF9PUEVSQVRPUl9fQkFTRV9PUEVSQVRJT046CisJCQlzZXRCYXNlX09wZXJhdGlvbigoT3BlcmF0aW9uKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuQ09OVFJPTF9PUEVSQVRPUl9fQkFTRV9CRUhBVklPUjoKKwkJCXNldEJhc2VfQmVoYXZpb3IoKEJlaGF2aW9yKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEFjdGl2aXRpZXNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfT1BFUkFUT1I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5DT05UUk9MX09QRVJBVE9SX19CQVNFX09QRVJBVElPTjoKKwkJCXNldEJhc2VfT3BlcmF0aW9uKChPcGVyYXRpb24pIG51bGwpOworCQkJcmV0dXJuOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLkNPTlRST0xfT1BFUkFUT1JfX0JBU0VfQkVIQVZJT1I6CisJCQlzZXRCYXNlX0JlaGF2aW9yKChCZWhhdmlvcikgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJlaGF2aW9yIGdldEJhc2VfQmVoYXZpb3IoKSB7CisJCWlmIChiYXNlX0JlaGF2aW9yICE9IG51bGwgJiYgYmFzZV9CZWhhdmlvci5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9CZWhhdmlvciA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfQmVoYXZpb3I7CisJCQliYXNlX0JlaGF2aW9yID0gKEJlaGF2aW9yKSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfQmVoYXZpb3IpOworCQkJaWYgKGJhc2VfQmVoYXZpb3IgIT0gb2xkQmFzZV9CZWhhdmlvcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQWN0aXZpdGllc1BhY2thZ2UuQ09OVFJPTF9PUEVSQVRPUl9fQkFTRV9CRUhBVklPUiwgb2xkQmFzZV9CZWhhdmlvciwgYmFzZV9CZWhhdmlvcikpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9CZWhhdmlvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT3BlcmF0aW9uIGdldEJhc2VfT3BlcmF0aW9uKCkgeworCQlpZiAoYmFzZV9PcGVyYXRpb24gIT0gbnVsbCAmJiBiYXNlX09wZXJhdGlvbi5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9PcGVyYXRpb24gPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX09wZXJhdGlvbjsKKwkJCWJhc2VfT3BlcmF0aW9uID0gKE9wZXJhdGlvbikgZVJlc29sdmVQcm94eShvbGRCYXNlX09wZXJhdGlvbik7CisJCQlpZiAoYmFzZV9PcGVyYXRpb24gIT0gb2xkQmFzZV9PcGVyYXRpb24pIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEFjdGl2aXRpZXNQYWNrYWdlLkNPTlRST0xfT1BFUkFUT1JfX0JBU0VfT1BFUkFUSU9OLCBvbGRCYXNlX09wZXJhdGlvbiwgYmFzZV9PcGVyYXRpb24pKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfT3BlcmF0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfQmVoYXZpb3IoQmVoYXZpb3IgbmV3QmFzZV9CZWhhdmlvcikgeworCQlCZWhhdmlvciBvbGRCYXNlX0JlaGF2aW9yID0gYmFzZV9CZWhhdmlvcjsKKwkJYmFzZV9CZWhhdmlvciA9IG5ld0Jhc2VfQmVoYXZpb3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQWN0aXZpdGllc1BhY2thZ2UuQ09OVFJPTF9PUEVSQVRPUl9fQkFTRV9CRUhBVklPUiwgb2xkQmFzZV9CZWhhdmlvciwgYmFzZV9CZWhhdmlvcikpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9PcGVyYXRpb24oT3BlcmF0aW9uIG5ld0Jhc2VfT3BlcmF0aW9uKSB7CisJCU9wZXJhdGlvbiBvbGRCYXNlX09wZXJhdGlvbiA9IGJhc2VfT3BlcmF0aW9uOworCQliYXNlX09wZXJhdGlvbiA9IG5ld0Jhc2VfT3BlcmF0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFjdGl2aXRpZXNQYWNrYWdlLkNPTlRST0xfT1BFUkFUT1JfX0JBU0VfT1BFUkFUSU9OLCBvbGRCYXNlX09wZXJhdGlvbiwgYmFzZV9PcGVyYXRpb24pKTsKKwkJfQorCX0KKworfSAvLyBDb250cm9sT3BlcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL2ludGVybmFsL2ltcGwvRGlzY3JldGVJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL2ludGVybmFsL2ltcGwvRGlzY3JldGVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5NGY5YQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9EaXNjcmV0ZUltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkRpc2NyZXRlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+RGlzY3JldGU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2NyZXRlSW1wbCBleHRlbmRzIFJhdGVJbXBsIGltcGxlbWVudHMgRGlzY3JldGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2NyZXRlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEFjdGl2aXRpZXNQYWNrYWdlLkxpdGVyYWxzLkRJU0NSRVRFOworCX0KKworfSAvLyBEaXNjcmV0ZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9Ob0J1ZmZlckltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9Ob0J1ZmZlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RkNTg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL05vQnVmZmVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Ob0J1ZmZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5PYmplY3ROb2RlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+Tm8gQnVmZmVyPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Ob0J1ZmZlckltcGwjZ2V0QmFzZV9PYmplY3ROb2RlIDxlbT5CYXNlIE9iamVjdCBOb2RlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9CdWZmZXJJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIE5vQnVmZmVyIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfT2JqZWN0Tm9kZSgpIDxlbT5CYXNlIE9iamVjdCBOb2RlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfT2JqZWN0Tm9kZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIE9iamVjdE5vZGUgYmFzZV9PYmplY3ROb2RlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vQnVmZmVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT2JqZWN0Tm9kZSBiYXNpY0dldEJhc2VfT2JqZWN0Tm9kZSgpIHsKKwkJcmV0dXJuIGJhc2VfT2JqZWN0Tm9kZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuTk9fQlVGRkVSX19CQVNFX09CSkVDVF9OT0RFOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9PYmplY3ROb2RlKCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX09iamVjdE5vZGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk5PX0JVRkZFUl9fQkFTRV9PQkpFQ1RfTk9ERToKKwkJCXJldHVybiBiYXNlX09iamVjdE5vZGUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5OT19CVUZGRVJfX0JBU0VfT0JKRUNUX05PREU6CisJCQlzZXRCYXNlX09iamVjdE5vZGUoKE9iamVjdE5vZGUpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQWN0aXZpdGllc1BhY2thZ2UuTGl0ZXJhbHMuTk9fQlVGRkVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuTk9fQlVGRkVSX19CQVNFX09CSkVDVF9OT0RFOgorCQkJc2V0QmFzZV9PYmplY3ROb2RlKChPYmplY3ROb2RlKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgT2JqZWN0Tm9kZSBnZXRCYXNlX09iamVjdE5vZGUoKSB7CisJCWlmIChiYXNlX09iamVjdE5vZGUgIT0gbnVsbCAmJiBiYXNlX09iamVjdE5vZGUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfT2JqZWN0Tm9kZSA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfT2JqZWN0Tm9kZTsKKwkJCWJhc2VfT2JqZWN0Tm9kZSA9IChPYmplY3ROb2RlKSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfT2JqZWN0Tm9kZSk7CisJCQlpZiAoYmFzZV9PYmplY3ROb2RlICE9IG9sZEJhc2VfT2JqZWN0Tm9kZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQWN0aXZpdGllc1BhY2thZ2UuTk9fQlVGRkVSX19CQVNFX09CSkVDVF9OT0RFLCBvbGRCYXNlX09iamVjdE5vZGUsIGJhc2VfT2JqZWN0Tm9kZSkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9PYmplY3ROb2RlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfT2JqZWN0Tm9kZShPYmplY3ROb2RlIG5ld0Jhc2VfT2JqZWN0Tm9kZSkgeworCQlPYmplY3ROb2RlIG9sZEJhc2VfT2JqZWN0Tm9kZSA9IGJhc2VfT2JqZWN0Tm9kZTsKKwkJYmFzZV9PYmplY3ROb2RlID0gbmV3QmFzZV9PYmplY3ROb2RlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFjdGl2aXRpZXNQYWNrYWdlLk5PX0JVRkZFUl9fQkFTRV9PQkpFQ1RfTk9ERSwgb2xkQmFzZV9PYmplY3ROb2RlLCBiYXNlX09iamVjdE5vZGUpKTsKKwkJfQorCX0KKworfSAvLyBOb0J1ZmZlckltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9PcHRpb25hbEltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9PcHRpb25hbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzIwNWNkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL09wdGlvbmFsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PcHRpb25hbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5QYXJhbWV0ZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5PcHRpb25hbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuT3B0aW9uYWxJbXBsI2dldEJhc2VfUGFyYW1ldGVyIDxlbT5CYXNlIFBhcmFtZXRlcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE9wdGlvbmFsSW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBPcHRpb25hbCB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX1BhcmFtZXRlcigpIDxlbT5CYXNlIFBhcmFtZXRlcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX1BhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFBhcmFtZXRlciBiYXNlX1BhcmFtZXRlcjsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBPcHRpb25hbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBBY3Rpdml0aWVzUGFja2FnZS5MaXRlcmFscy5PUFRJT05BTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGFyYW1ldGVyIGdldEJhc2VfUGFyYW1ldGVyKCkgeworCQlpZiAoYmFzZV9QYXJhbWV0ZXIgIT0gbnVsbCAmJiBiYXNlX1BhcmFtZXRlci5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9QYXJhbWV0ZXIgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX1BhcmFtZXRlcjsKKwkJCWJhc2VfUGFyYW1ldGVyID0gKFBhcmFtZXRlcikgZVJlc29sdmVQcm94eShvbGRCYXNlX1BhcmFtZXRlcik7CisJCQlpZiAoYmFzZV9QYXJhbWV0ZXIgIT0gb2xkQmFzZV9QYXJhbWV0ZXIpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEFjdGl2aXRpZXNQYWNrYWdlLk9QVElPTkFMX19CQVNFX1BBUkFNRVRFUiwgb2xkQmFzZV9QYXJhbWV0ZXIsIGJhc2VfUGFyYW1ldGVyKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1BhcmFtZXRlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGFyYW1ldGVyIGJhc2ljR2V0QmFzZV9QYXJhbWV0ZXIoKSB7CisJCXJldHVybiBiYXNlX1BhcmFtZXRlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX1BhcmFtZXRlcihQYXJhbWV0ZXIgbmV3QmFzZV9QYXJhbWV0ZXIpIHsKKwkJUGFyYW1ldGVyIG9sZEJhc2VfUGFyYW1ldGVyID0gYmFzZV9QYXJhbWV0ZXI7CisJCWJhc2VfUGFyYW1ldGVyID0gbmV3QmFzZV9QYXJhbWV0ZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQWN0aXZpdGllc1BhY2thZ2UuT1BUSU9OQUxfX0JBU0VfUEFSQU1FVEVSLCBvbGRCYXNlX1BhcmFtZXRlciwgYmFzZV9QYXJhbWV0ZXIpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5PUFRJT05BTF9fQkFTRV9QQVJBTUVURVI6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX1BhcmFtZXRlcigpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9QYXJhbWV0ZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk9QVElPTkFMX19CQVNFX1BBUkFNRVRFUjoKKwkJCXNldEJhc2VfUGFyYW1ldGVyKChQYXJhbWV0ZXIpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuT1BUSU9OQUxfX0JBU0VfUEFSQU1FVEVSOgorCQkJc2V0QmFzZV9QYXJhbWV0ZXIoKFBhcmFtZXRlcikgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5PUFRJT05BTF9fQkFTRV9QQVJBTUVURVI6CisJCQlyZXR1cm4gYmFzZV9QYXJhbWV0ZXIgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vIE9wdGlvbmFsSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL092ZXJ3cml0ZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9PdmVyd3JpdGVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNWE2YwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvaW50ZXJuYWwvaW1wbC9PdmVyd3JpdGVJbXBsLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk92ZXJ3cml0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5PYmplY3ROb2RlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+T3ZlcndyaXRlPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5PdmVyd3JpdGVJbXBsI2dldEJhc2VfT2JqZWN0Tm9kZSA8ZW0+QmFzZSBPYmplY3QgTm9kZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE92ZXJ3cml0ZUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgT3ZlcndyaXRlIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfT2JqZWN0Tm9kZSgpIDxlbT5CYXNlIE9iamVjdCBOb2RlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfT2JqZWN0Tm9kZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIE9iamVjdE5vZGUgYmFzZV9PYmplY3ROb2RlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE92ZXJ3cml0ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9iamVjdE5vZGUgYmFzaWNHZXRCYXNlX09iamVjdE5vZGUoKSB7CisJCXJldHVybiBiYXNlX09iamVjdE5vZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk9WRVJXUklURV9fQkFTRV9PQkpFQ1RfTk9ERToKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfT2JqZWN0Tm9kZSgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9PYmplY3ROb2RlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5PVkVSV1JJVEVfX0JBU0VfT0JKRUNUX05PREU6CisJCQlyZXR1cm4gYmFzZV9PYmplY3ROb2RlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuT1ZFUldSSVRFX19CQVNFX09CSkVDVF9OT0RFOgorCQkJc2V0QmFzZV9PYmplY3ROb2RlKChPYmplY3ROb2RlKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEFjdGl2aXRpZXNQYWNrYWdlLkxpdGVyYWxzLk9WRVJXUklURTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk9WRVJXUklURV9fQkFTRV9PQkpFQ1RfTk9ERToKKwkJCXNldEJhc2VfT2JqZWN0Tm9kZSgoT2JqZWN0Tm9kZSkgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9iamVjdE5vZGUgZ2V0QmFzZV9PYmplY3ROb2RlKCkgeworCQlpZiAoYmFzZV9PYmplY3ROb2RlICE9IG51bGwgJiYgYmFzZV9PYmplY3ROb2RlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX09iamVjdE5vZGUgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX09iamVjdE5vZGU7CisJCQliYXNlX09iamVjdE5vZGUgPSAoT2JqZWN0Tm9kZSkgZVJlc29sdmVQcm94eShvbGRCYXNlX09iamVjdE5vZGUpOworCQkJaWYgKGJhc2VfT2JqZWN0Tm9kZSAhPSBvbGRCYXNlX09iamVjdE5vZGUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEFjdGl2aXRpZXNQYWNrYWdlLk9WRVJXUklURV9fQkFTRV9PQkpFQ1RfTk9ERSwgb2xkQmFzZV9PYmplY3ROb2RlLCBiYXNlX09iamVjdE5vZGUpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfT2JqZWN0Tm9kZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX09iamVjdE5vZGUoT2JqZWN0Tm9kZSBuZXdCYXNlX09iamVjdE5vZGUpIHsKKwkJT2JqZWN0Tm9kZSBvbGRCYXNlX09iamVjdE5vZGUgPSBiYXNlX09iamVjdE5vZGU7CisJCWJhc2VfT2JqZWN0Tm9kZSA9IG5ld0Jhc2VfT2JqZWN0Tm9kZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBY3Rpdml0aWVzUGFja2FnZS5PVkVSV1JJVEVfX0JBU0VfT0JKRUNUX05PREUsIG9sZEJhc2VfT2JqZWN0Tm9kZSwgYmFzZV9PYmplY3ROb2RlKSk7CisJCX0KKwl9CisKK30gLy8gT3ZlcndyaXRlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL1Byb2JhYmlsaXR5SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL1Byb2JhYmlsaXR5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjBiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL2ludGVybmFsL2ltcGwvUHJvYmFiaWxpdHlJbXBsLmphdmEKQEAgLTAsMCArMSwzMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkFjdGl2aXR5RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5QYXJhbWV0ZXJTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuVmFsdWVTcGVjaWZpY2F0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UHJvYmFiaWxpdHk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLlByb2JhYmlsaXR5SW1wbCNnZXRCYXNlX0FjdGl2aXR5RWRnZSA8ZW0+QmFzZSBBY3Rpdml0eSBFZGdlPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuUHJvYmFiaWxpdHlJbXBsI2dldEJhc2VfUGFyYW1ldGVyU2V0IDxlbT5CYXNlIFBhcmFtZXRlciBTZXQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5Qcm9iYWJpbGl0eUltcGwjZ2V0UHJvYmFiaWxpdHkgPGVtPlByb2JhYmlsaXR5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUHJvYmFiaWxpdHlJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIFByb2JhYmlsaXR5IHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfQWN0aXZpdHlFZGdlKCkgPGVtPkJhc2UgQWN0aXZpdHkgRWRnZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX0FjdGl2aXR5RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEFjdGl2aXR5RWRnZSBiYXNlX0FjdGl2aXR5RWRnZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfUGFyYW1ldGVyU2V0KCkgPGVtPkJhc2UgUGFyYW1ldGVyIFNldDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX1BhcmFtZXRlclNldCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFBhcmFtZXRlclNldCBiYXNlX1BhcmFtZXRlclNldDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByb2JhYmlsaXR5KCkgPGVtPlByb2JhYmlsaXR5PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRQcm9iYWJpbGl0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFZhbHVlU3BlY2lmaWNhdGlvbiBwcm9iYWJpbGl0eTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9iYWJpbGl0eUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFjdGl2aXR5RWRnZSBiYXNpY0dldEJhc2VfQWN0aXZpdHlFZGdlKCkgeworCQlyZXR1cm4gYmFzZV9BY3Rpdml0eUVkZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBhcmFtZXRlclNldCBiYXNpY0dldEJhc2VfUGFyYW1ldGVyU2V0KCkgeworCQlyZXR1cm4gYmFzZV9QYXJhbWV0ZXJTZXQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZhbHVlU3BlY2lmaWNhdGlvbiBiYXNpY0dldFByb2JhYmlsaXR5KCkgeworCQlyZXR1cm4gcHJvYmFiaWxpdHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlBST0JBQklMSVRZX19CQVNFX0FDVElWSVRZX0VER0U6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0FjdGl2aXR5RWRnZSgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9BY3Rpdml0eUVkZ2UoKTsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fQkFTRV9QQVJBTUVURVJfU0VUOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9QYXJhbWV0ZXJTZXQoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfUGFyYW1ldGVyU2V0KCk7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUFJPQkFCSUxJVFlfX1BST0JBQklMSVRZOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0UHJvYmFiaWxpdHkoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldFByb2JhYmlsaXR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fQkFTRV9BQ1RJVklUWV9FREdFOgorCQkJcmV0dXJuIGJhc2VfQWN0aXZpdHlFZGdlICE9IG51bGw7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUFJPQkFCSUxJVFlfX0JBU0VfUEFSQU1FVEVSX1NFVDoKKwkJCXJldHVybiBiYXNlX1BhcmFtZXRlclNldCAhPSBudWxsOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlBST0JBQklMSVRZX19QUk9CQUJJTElUWToKKwkJCXJldHVybiBwcm9iYWJpbGl0eSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlBST0JBQklMSVRZX19CQVNFX0FDVElWSVRZX0VER0U6CisJCQlzZXRCYXNlX0FjdGl2aXR5RWRnZSgoQWN0aXZpdHlFZGdlKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUFJPQkFCSUxJVFlfX0JBU0VfUEFSQU1FVEVSX1NFVDoKKwkJCXNldEJhc2VfUGFyYW1ldGVyU2V0KChQYXJhbWV0ZXJTZXQpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fUFJPQkFCSUxJVFk6CisJCQlzZXRQcm9iYWJpbGl0eSgoVmFsdWVTcGVjaWZpY2F0aW9uKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEFjdGl2aXRpZXNQYWNrYWdlLkxpdGVyYWxzLlBST0JBQklMSVRZOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUFJPQkFCSUxJVFlfX0JBU0VfQUNUSVZJVFlfRURHRToKKwkJCXNldEJhc2VfQWN0aXZpdHlFZGdlKChBY3Rpdml0eUVkZ2UpIG51bGwpOworCQkJcmV0dXJuOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlBST0JBQklMSVRZX19CQVNFX1BBUkFNRVRFUl9TRVQ6CisJCQlzZXRCYXNlX1BhcmFtZXRlclNldCgoUGFyYW1ldGVyU2V0KSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fUFJPQkFCSUxJVFk6CisJCQlzZXRQcm9iYWJpbGl0eSgoVmFsdWVTcGVjaWZpY2F0aW9uKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWN0aXZpdHlFZGdlIGdldEJhc2VfQWN0aXZpdHlFZGdlKCkgeworCQlpZiAoYmFzZV9BY3Rpdml0eUVkZ2UgIT0gbnVsbCAmJiBiYXNlX0FjdGl2aXR5RWRnZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9BY3Rpdml0eUVkZ2UgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX0FjdGl2aXR5RWRnZTsKKwkJCWJhc2VfQWN0aXZpdHlFZGdlID0gKEFjdGl2aXR5RWRnZSkgZVJlc29sdmVQcm94eShvbGRCYXNlX0FjdGl2aXR5RWRnZSk7CisJCQlpZiAoYmFzZV9BY3Rpdml0eUVkZ2UgIT0gb2xkQmFzZV9BY3Rpdml0eUVkZ2UpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEFjdGl2aXRpZXNQYWNrYWdlLlBST0JBQklMSVRZX19CQVNFX0FDVElWSVRZX0VER0UsIG9sZEJhc2VfQWN0aXZpdHlFZGdlLCBiYXNlX0FjdGl2aXR5RWRnZSkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9BY3Rpdml0eUVkZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBhcmFtZXRlclNldCBnZXRCYXNlX1BhcmFtZXRlclNldCgpIHsKKwkJaWYgKGJhc2VfUGFyYW1ldGVyU2V0ICE9IG51bGwgJiYgYmFzZV9QYXJhbWV0ZXJTZXQuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfUGFyYW1ldGVyU2V0ID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9QYXJhbWV0ZXJTZXQ7CisJCQliYXNlX1BhcmFtZXRlclNldCA9IChQYXJhbWV0ZXJTZXQpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9QYXJhbWV0ZXJTZXQpOworCQkJaWYgKGJhc2VfUGFyYW1ldGVyU2V0ICE9IG9sZEJhc2VfUGFyYW1ldGVyU2V0KSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fQkFTRV9QQVJBTUVURVJfU0VULCBvbGRCYXNlX1BhcmFtZXRlclNldCwgYmFzZV9QYXJhbWV0ZXJTZXQpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfUGFyYW1ldGVyU2V0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWYWx1ZVNwZWNpZmljYXRpb24gZ2V0UHJvYmFiaWxpdHkoKSB7CisJCWlmIChwcm9iYWJpbGl0eSAhPSBudWxsICYmIHByb2JhYmlsaXR5LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRQcm9iYWJpbGl0eSA9IChJbnRlcm5hbEVPYmplY3QpIHByb2JhYmlsaXR5OworCQkJcHJvYmFiaWxpdHkgPSAoVmFsdWVTcGVjaWZpY2F0aW9uKSBlUmVzb2x2ZVByb3h5KG9sZFByb2JhYmlsaXR5KTsKKwkJCWlmIChwcm9iYWJpbGl0eSAhPSBvbGRQcm9iYWJpbGl0eSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQWN0aXZpdGllc1BhY2thZ2UuUFJPQkFCSUxJVFlfX1BST0JBQklMSVRZLCBvbGRQcm9iYWJpbGl0eSwgcHJvYmFiaWxpdHkpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHByb2JhYmlsaXR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfQWN0aXZpdHlFZGdlKEFjdGl2aXR5RWRnZSBuZXdCYXNlX0FjdGl2aXR5RWRnZSkgeworCQlBY3Rpdml0eUVkZ2Ugb2xkQmFzZV9BY3Rpdml0eUVkZ2UgPSBiYXNlX0FjdGl2aXR5RWRnZTsKKwkJYmFzZV9BY3Rpdml0eUVkZ2UgPSBuZXdCYXNlX0FjdGl2aXR5RWRnZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fQkFTRV9BQ1RJVklUWV9FREdFLCBvbGRCYXNlX0FjdGl2aXR5RWRnZSwgYmFzZV9BY3Rpdml0eUVkZ2UpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfUGFyYW1ldGVyU2V0KFBhcmFtZXRlclNldCBuZXdCYXNlX1BhcmFtZXRlclNldCkgeworCQlQYXJhbWV0ZXJTZXQgb2xkQmFzZV9QYXJhbWV0ZXJTZXQgPSBiYXNlX1BhcmFtZXRlclNldDsKKwkJYmFzZV9QYXJhbWV0ZXJTZXQgPSBuZXdCYXNlX1BhcmFtZXRlclNldDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fQkFTRV9QQVJBTUVURVJfU0VULCBvbGRCYXNlX1BhcmFtZXRlclNldCwgYmFzZV9QYXJhbWV0ZXJTZXQpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFByb2JhYmlsaXR5KFZhbHVlU3BlY2lmaWNhdGlvbiBuZXdQcm9iYWJpbGl0eSkgeworCQlWYWx1ZVNwZWNpZmljYXRpb24gb2xkUHJvYmFiaWxpdHkgPSBwcm9iYWJpbGl0eTsKKwkJcHJvYmFiaWxpdHkgPSBuZXdQcm9iYWJpbGl0eTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBY3Rpdml0aWVzUGFja2FnZS5QUk9CQUJJTElUWV9fUFJPQkFCSUxJVFksIG9sZFByb2JhYmlsaXR5LCBwcm9iYWJpbGl0eSkpOworCQl9CisJfQorCit9IC8vIFByb2JhYmlsaXR5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL1JhdGVJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL2ludGVybmFsL2ltcGwvUmF0ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTBhZDZlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy9pbnRlcm5hbC9pbXBsL1JhdGVJbXBsLmphdmEKQEAgLTAsMCArMSwzMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlJhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQWN0aXZpdHlFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkluc3RhbmNlU3BlY2lmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5QYXJhbWV0ZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5SYXRlPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5SYXRlSW1wbCNnZXRCYXNlX1BhcmFtZXRlciA8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5SYXRlSW1wbCNnZXRCYXNlX0FjdGl2aXR5RWRnZSA8ZW0+QmFzZSBBY3Rpdml0eSBFZGdlPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuUmF0ZUltcGwjZ2V0UmF0ZSA8ZW0+UmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJhdGVJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIFJhdGUgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9QYXJhbWV0ZXIoKSA8ZW0+QmFzZSBQYXJhbWV0ZXI8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9QYXJhbWV0ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQYXJhbWV0ZXIgYmFzZV9QYXJhbWV0ZXI7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0FjdGl2aXR5RWRnZSgpIDxlbT5CYXNlIEFjdGl2aXR5IEVkZ2U8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9BY3Rpdml0eUVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBBY3Rpdml0eUVkZ2UgYmFzZV9BY3Rpdml0eUVkZ2U7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYXRlKCkgPGVtPlJhdGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldFJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJbnN0YW5jZVNwZWNpZmljYXRpb24gcmF0ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSYXRlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWN0aXZpdHlFZGdlIGJhc2ljR2V0QmFzZV9BY3Rpdml0eUVkZ2UoKSB7CisJCXJldHVybiBiYXNlX0FjdGl2aXR5RWRnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGFyYW1ldGVyIGJhc2ljR2V0QmFzZV9QYXJhbWV0ZXIoKSB7CisJCXJldHVybiBiYXNlX1BhcmFtZXRlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW5zdGFuY2VTcGVjaWZpY2F0aW9uIGJhc2ljR2V0UmF0ZSgpIHsKKwkJcmV0dXJuIHJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEVfX0JBU0VfUEFSQU1FVEVSOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9QYXJhbWV0ZXIoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfUGFyYW1ldGVyKCk7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fQkFTRV9BQ1RJVklUWV9FREdFOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9BY3Rpdml0eUVkZ2UoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfQWN0aXZpdHlFZGdlKCk7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fUkFURToKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldFJhdGUoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldFJhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEVfX0JBU0VfUEFSQU1FVEVSOgorCQkJcmV0dXJuIGJhc2VfUGFyYW1ldGVyICE9IG51bGw7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fQkFTRV9BQ1RJVklUWV9FREdFOgorCQkJcmV0dXJuIGJhc2VfQWN0aXZpdHlFZGdlICE9IG51bGw7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fUkFURToKKwkJCXJldHVybiByYXRlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fQkFTRV9QQVJBTUVURVI6CisJCQlzZXRCYXNlX1BhcmFtZXRlcigoUGFyYW1ldGVyKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fQkFTRV9BQ1RJVklUWV9FREdFOgorCQkJc2V0QmFzZV9BY3Rpdml0eUVkZ2UoKEFjdGl2aXR5RWRnZSkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEVfX1JBVEU6CisJCQlzZXRSYXRlKChJbnN0YW5jZVNwZWNpZmljYXRpb24pIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQWN0aXZpdGllc1BhY2thZ2UuTGl0ZXJhbHMuUkFURTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEVfX0JBU0VfUEFSQU1FVEVSOgorCQkJc2V0QmFzZV9QYXJhbWV0ZXIoKFBhcmFtZXRlcikgbnVsbCk7CisJCQlyZXR1cm47CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fQkFTRV9BQ1RJVklUWV9FREdFOgorCQkJc2V0QmFzZV9BY3Rpdml0eUVkZ2UoKEFjdGl2aXR5RWRnZSkgbnVsbCk7CisJCQlyZXR1cm47CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fUkFURToKKwkJCXNldFJhdGUoKEluc3RhbmNlU3BlY2lmaWNhdGlvbikgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFjdGl2aXR5RWRnZSBnZXRCYXNlX0FjdGl2aXR5RWRnZSgpIHsKKwkJaWYgKGJhc2VfQWN0aXZpdHlFZGdlICE9IG51bGwgJiYgYmFzZV9BY3Rpdml0eUVkZ2UuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfQWN0aXZpdHlFZGdlID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9BY3Rpdml0eUVkZ2U7CisJCQliYXNlX0FjdGl2aXR5RWRnZSA9IChBY3Rpdml0eUVkZ2UpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9BY3Rpdml0eUVkZ2UpOworCQkJaWYgKGJhc2VfQWN0aXZpdHlFZGdlICE9IG9sZEJhc2VfQWN0aXZpdHlFZGdlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBBY3Rpdml0aWVzUGFja2FnZS5SQVRFX19CQVNFX0FDVElWSVRZX0VER0UsIG9sZEJhc2VfQWN0aXZpdHlFZGdlLCBiYXNlX0FjdGl2aXR5RWRnZSkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9BY3Rpdml0eUVkZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBhcmFtZXRlciBnZXRCYXNlX1BhcmFtZXRlcigpIHsKKwkJaWYgKGJhc2VfUGFyYW1ldGVyICE9IG51bGwgJiYgYmFzZV9QYXJhbWV0ZXIuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfUGFyYW1ldGVyID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9QYXJhbWV0ZXI7CisJCQliYXNlX1BhcmFtZXRlciA9IChQYXJhbWV0ZXIpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9QYXJhbWV0ZXIpOworCQkJaWYgKGJhc2VfUGFyYW1ldGVyICE9IG9sZEJhc2VfUGFyYW1ldGVyKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBBY3Rpdml0aWVzUGFja2FnZS5SQVRFX19CQVNFX1BBUkFNRVRFUiwgb2xkQmFzZV9QYXJhbWV0ZXIsIGJhc2VfUGFyYW1ldGVyKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1BhcmFtZXRlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW5zdGFuY2VTcGVjaWZpY2F0aW9uIGdldFJhdGUoKSB7CisJCWlmIChyYXRlICE9IG51bGwgJiYgcmF0ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkUmF0ZSA9IChJbnRlcm5hbEVPYmplY3QpIHJhdGU7CisJCQlyYXRlID0gKEluc3RhbmNlU3BlY2lmaWNhdGlvbikgZVJlc29sdmVQcm94eShvbGRSYXRlKTsKKwkJCWlmIChyYXRlICE9IG9sZFJhdGUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEVfX1JBVEUsIG9sZFJhdGUsIHJhdGUpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9BY3Rpdml0eUVkZ2UoQWN0aXZpdHlFZGdlIG5ld0Jhc2VfQWN0aXZpdHlFZGdlKSB7CisJCUFjdGl2aXR5RWRnZSBvbGRCYXNlX0FjdGl2aXR5RWRnZSA9IGJhc2VfQWN0aXZpdHlFZGdlOworCQliYXNlX0FjdGl2aXR5RWRnZSA9IG5ld0Jhc2VfQWN0aXZpdHlFZGdlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEVfX0JBU0VfQUNUSVZJVFlfRURHRSwgb2xkQmFzZV9BY3Rpdml0eUVkZ2UsIGJhc2VfQWN0aXZpdHlFZGdlKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX1BhcmFtZXRlcihQYXJhbWV0ZXIgbmV3QmFzZV9QYXJhbWV0ZXIpIHsKKwkJUGFyYW1ldGVyIG9sZEJhc2VfUGFyYW1ldGVyID0gYmFzZV9QYXJhbWV0ZXI7CisJCWJhc2VfUGFyYW1ldGVyID0gbmV3QmFzZV9QYXJhbWV0ZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQWN0aXZpdGllc1BhY2thZ2UuUkFURV9fQkFTRV9QQVJBTUVURVIsIG9sZEJhc2VfUGFyYW1ldGVyLCBiYXNlX1BhcmFtZXRlcikpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmF0ZShJbnN0YW5jZVNwZWNpZmljYXRpb24gbmV3UmF0ZSkgeworCQlJbnN0YW5jZVNwZWNpZmljYXRpb24gb2xkUmF0ZSA9IHJhdGU7CisJCXJhdGUgPSBuZXdSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEVfX1JBVEUsIG9sZFJhdGUsIHJhdGUpKTsKKwkJfQorCX0KKworfSAvLyBSYXRlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNBZGFwdGVyRmFjdG9yeS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYmU5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL3V0aWwvQWN0aXZpdGllc0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udGludW91czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQ29udHJvbE9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5EaXNjcmV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuTm9CdWZmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk9wdGlvbmFsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5PdmVyd3JpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5SYXRlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0IHByb3ZpZGVzCisgKiBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBY3Rpdml0aWVzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQWN0aXZpdGllc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBY3Rpdml0aWVzU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0gbmV3IEFjdGl2aXRpZXNTd2l0Y2g8QWRhcHRlcj4oKSB7CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VPcHRpb25hbChPcHRpb25hbCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVPcHRpb25hbEFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlUmF0ZShSYXRlIG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVJhdGVBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZVByb2JhYmlsaXR5KFByb2JhYmlsaXR5IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVByb2JhYmlsaXR5QWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VDb250aW51b3VzKENvbnRpbnVvdXMgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQ29udGludW91c0FkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzY3JldGUoRGlzY3JldGUgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlRGlzY3JldGVBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZUNvbnRyb2xPcGVyYXRvcihDb250cm9sT3BlcmF0b3Igb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQ29udHJvbE9wZXJhdG9yQWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb0J1ZmZlcihOb0J1ZmZlciBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVOb0J1ZmZlckFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlT3ZlcndyaXRlKE92ZXJ3cml0ZSBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVPdmVyd3JpdGVBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQl9CisJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBY3Rpdml0aWVzQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQWN0aXZpdGllc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHRhcmdldAorCSAqICAgICAgICAgICAgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KSB0YXJnZXQpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk9wdGlvbmFsIDxlbT5PcHRpb25hbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3B0aW9uYWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlT3B0aW9uYWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250aW51b3VzIDxlbT5Db250aW51b3VzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkNvbnRpbnVvdXMKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29udGludW91c0FkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkNvbnRyb2xPcGVyYXRvciA8ZW0+Q29udHJvbCBPcGVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0CisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MKKwkgKiB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250cm9sT3BlcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29udHJvbE9wZXJhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuRGlzY3JldGUgPGVtPkRpc2NyZXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5EaXNjcmV0ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNjcmV0ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Ob0J1ZmZlciA8ZW0+Tm8gQnVmZmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28KKwkgKiB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4KKwkgKiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk5vQnVmZmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vQnVmZmVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3ZlcndyaXRlIDxlbT5PdmVyd3JpdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbworCSAqIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbgorCSAqIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3ZlcndyaXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU92ZXJ3cml0ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlByb2JhYmlsaXR5IDxlbT5Qcm9iYWJpbGl0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0CisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MKKwkgKiB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Qcm9iYWJpbGl0eQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQcm9iYWJpbGl0eUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5SYXRlIDxlbT5SYXRlPC9lbT59Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UKKwkgKiBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5SYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJhdGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmCisJICogdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlCisJICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KSBvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKK30gLy8gQWN0aXZpdGllc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL3V0aWwvQWN0aXZpdGllc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FjdGl2aXRpZXMvdXRpbC9BY3Rpdml0aWVzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNjFjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL3V0aWwvQWN0aXZpdGllc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiBwYWNrYWdlLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy51dGlsLkFjdGl2aXRpZXNSZXNvdXJjZUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFjdGl2aXRpZXNSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgUmVzb3VyY2VGYWN0b3J5SW1wbCB7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFjdGl2aXRpZXNSZXNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKKwkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IEFjdGl2aXRpZXNSZXNvdXJjZUltcGwodXJpKTsKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBCb29sZWFuLlRSVUUpOworCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOworCisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOworCisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCit9IC8vIEFjdGl2aXRpZXNSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL3V0aWwvQWN0aXZpdGllc1Jlc291cmNlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNSZXNvdXJjZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTk4NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNSZXNvdXJjZUltcGwuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLnV0aWwuQWN0aXZpdGllc1Jlc291cmNlRmFjdG9yeUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFjdGl2aXRpZXNSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFjdGl2aXRpZXNSZXNvdXJjZUltcGwoVVJJIHVyaSkgeworCQlzdXBlcih1cmkpOworCX0KKworfSAvLyBBY3Rpdml0aWVzUmVzb3VyY2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL3V0aWwvQWN0aXZpdGllc1N3aXRjaC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzJlMDhhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDMwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5Td2l0Y2g7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250aW51b3VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Db250cm9sT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkRpc2NyZXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5Ob0J1ZmZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuT3B0aW9uYWw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLk92ZXJ3cml0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuUHJvYmFiaWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLlJhdGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlCisgKiBoaWVyYXJjaHkuIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0gdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QgYW5kIHByb2NlZWRpbmcgdXAgdGhlCisgKiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZQorICogcmVzdWx0IG9mIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBY3Rpdml0aWVzU3dpdGNoPFQ+IGV4dGVuZHMgU3dpdGNoPFQ+IHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQWN0aXZpdGllc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFjdGl2aXRpZXNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQWN0aXZpdGllc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2tzIHdoZXRoZXIgdGhpcyBpcyBhIHN3aXRjaCBmb3IgdGhlIGdpdmVuIHBhY2thZ2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW1ldGVyIGVQYWNrYWdlIHRoZSBwYWNrYWdlIGluIHF1ZXN0aW9uLgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGlzIGEgc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNTd2l0Y2hGb3IoRVBhY2thZ2UgZVBhY2thZ2UpIHsKKwkJcmV0dXJuIGVQYWNrYWdlID09IG1vZGVsUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db250aW51b3VzPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbnRpbnVvdXM8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VDb250aW51b3VzKENvbnRpbnVvdXMgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbnRyb2wgT3BlcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbgorCSAqIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29udHJvbCBPcGVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZUNvbnRyb2xPcGVyYXRvcihDb250cm9sT3BlcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2NyZXRlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2NyZXRlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlRGlzY3JldGUoRGlzY3JldGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vIEJ1ZmZlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5ObyBCdWZmZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VOb0J1ZmZlcihOb0J1ZmZlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3ZlcndyaXRlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk92ZXJ3cml0ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZU92ZXJ3cml0ZShPdmVyd3JpdGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByb2JhYmlsaXR5PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24KKwkgKiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByb2JhYmlsaXR5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlUHJvYmFiaWxpdHkoUHJvYmFiaWxpdHkgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnIDxlbT5SYXRlPC9lbT4nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJyA8ZW0+UmF0ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVJhdGUoUmF0ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMKKwkgKiB0aGUgbGFzdCBjYXNlIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk9QVElPTkFMOiB7CisJCQlPcHRpb25hbCBvcHRpb25hbCA9IChPcHRpb25hbCkgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZU9wdGlvbmFsKG9wdGlvbmFsKTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlJBVEU6IHsKKwkJCVJhdGUgcmF0ZSA9IChSYXRlKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlUmF0ZShyYXRlKTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLlBST0JBQklMSVRZOiB7CisJCQlQcm9iYWJpbGl0eSBwcm9iYWJpbGl0eSA9IChQcm9iYWJpbGl0eSkgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZVByb2JhYmlsaXR5KHByb2JhYmlsaXR5KTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLkNPTlRJTlVPVVM6IHsKKwkJCUNvbnRpbnVvdXMgY29udGludW91cyA9IChDb250aW51b3VzKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlQ29udGludW91cyhjb250aW51b3VzKTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGNhc2VSYXRlKGNvbnRpbnVvdXMpOworCQkJfQorCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuRElTQ1JFVEU6IHsKKwkJCURpc2NyZXRlIGRpc2NyZXRlID0gKERpc2NyZXRlKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlRGlzY3JldGUoZGlzY3JldGUpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gY2FzZVJhdGUoZGlzY3JldGUpOworCQkJfQorCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgQWN0aXZpdGllc1BhY2thZ2UuQ09OVFJPTF9PUEVSQVRPUjogeworCQkJQ29udHJvbE9wZXJhdG9yIGNvbnRyb2xPcGVyYXRvciA9IChDb250cm9sT3BlcmF0b3IpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VDb250cm9sT3BlcmF0b3IoY29udHJvbE9wZXJhdG9yKTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIEFjdGl2aXRpZXNQYWNrYWdlLk5PX0JVRkZFUjogeworCQkJTm9CdWZmZXIgbm9CdWZmZXIgPSAoTm9CdWZmZXIpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VOb0J1ZmZlcihub0J1ZmZlcik7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBBY3Rpdml0aWVzUGFja2FnZS5PVkVSV1JJVEU6IHsKKwkJCU92ZXJ3cml0ZSBvdmVyd3JpdGUgPSAoT3ZlcndyaXRlKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlT3ZlcndyaXRlKG92ZXJ3cml0ZSk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wdGlvbmFsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9wdGlvbmFsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlT3B0aW9uYWwoT3B0aW9uYWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvLyBBY3Rpdml0aWVzU3dpdGNoCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hY3Rpdml0aWVzL3V0aWwvQWN0aXZpdGllc1hNTFByb2Nlc3Nvci5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNYTUxQcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGYwYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWN0aXZpdGllcy91dGlsL0FjdGl2aXRpZXNYTUxQcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy51dGlsOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS51dGlsLlhNTFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXIgbWV0aG9kcyB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIFhNTCBkb2N1bWVudHMKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFjdGl2aXRpZXNYTUxQcm9jZXNzb3IgZXh0ZW5kcyBYTUxQcm9jZXNzb3IgeworCisJLyoqCisJICogUHVibGljIGNvbnN0cnVjdG9yIHRvIGluc3RhbnRpYXRlIHRoZSBoZWxwZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWN0aXZpdGllc1hNTFByb2Nlc3NvcigpIHsKKwkJc3VwZXIoKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFKSk7CisJCUFjdGl2aXRpZXNQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwl9CisKKwkvKioKKwkgKiBSZWdpc3RlciBmb3IgIioiIGFuZCAieG1sIiBmaWxlIGV4dGVuc2lvbnMgdGhlIEFjdGl2aXRpZXNSZXNvdXJjZUZhY3RvcnlJbXBsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgUmVzb3VyY2UuRmFjdG9yeT4gZ2V0UmVnaXN0cmF0aW9ucygpIHsKKwkJaWYgKHJlZ2lzdHJhdGlvbnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UmVnaXN0cmF0aW9ucygpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoWE1MX0VYVEVOU0lPTiwgbmV3IEFjdGl2aXRpZXNSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoU1RBUl9FWFRFTlNJT04sIG5ldyBBY3Rpdml0aWVzUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJfQorCQlyZXR1cm4gcmVnaXN0cmF0aW9uczsKKwl9CisKK30gLy8gQWN0aXZpdGllc1hNTFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvQWxsb2NhdGUuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzM2U5ZgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRlLmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQWJzdHJhY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkFsbG9jYXRlPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGUjZ2V0QmFzZV9BYnN0cmFjdGlvbiA8ZW0+QmFzZSBBYnN0cmFjdGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0aW9uc1BhY2thZ2UjZ2V0QWxsb2NhdGUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQWxsb2NhdGUgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgQWJzdHJhY3Rpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgQWJzdHJhY3Rpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBBYnN0cmFjdGlvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9BYnN0cmFjdGlvbihBYnN0cmFjdGlvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlI2dldEFsbG9jYXRlX0Jhc2VfQWJzdHJhY3Rpb24oKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUFic3RyYWN0aW9uIGdldEJhc2VfQWJzdHJhY3Rpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGUjZ2V0QmFzZV9BYnN0cmFjdGlvbiA8ZW0+QmFzZSBBYnN0cmFjdGlvbjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBBYnN0cmFjdGlvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9BYnN0cmFjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9BYnN0cmFjdGlvbihBYnN0cmFjdGlvbiB2YWx1ZSk7CisKK30gLy8gQWxsb2NhdGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24uamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU4NmI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9uczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkFjdGl2aXR5UGFydGl0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5BbGxvY2F0ZSBBY3Rpdml0eSBQYXJ0aXRpb248L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uI2dldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24gPGVtPkJhc2UgQWN0aXZpdHkgUGFydGl0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZSNnZXRBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24gZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgQWN0aXZpdHkgUGFydGl0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIEFjdGl2aXR5IFBhcnRpdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEFjdGl2aXR5IFBhcnRpdGlvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9BY3Rpdml0eVBhcnRpdGlvbihBY3Rpdml0eVBhcnRpdGlvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlI2dldEFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25fQmFzZV9BY3Rpdml0eVBhcnRpdGlvbigpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQWN0aXZpdHlQYXJ0aXRpb24gZ2V0QmFzZV9BY3Rpdml0eVBhcnRpdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uI2dldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24KKwkgKiA8ZW0+QmFzZSBBY3Rpdml0eSBQYXJ0aXRpb248L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgQWN0aXZpdHkgUGFydGl0aW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0FjdGl2aXR5UGFydGl0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0FjdGl2aXR5UGFydGl0aW9uKEFjdGl2aXR5UGFydGl0aW9uIHZhbHVlKTsKKworfSAvLyBBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9BbGxvY2F0ZWQuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRlZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjZmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9BbGxvY2F0ZWQuamF2YQpAQCAtMCwwICsxLDE2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5BbGxvY2F0ZWQ8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZWQjZ2V0QmFzZV9OYW1lZEVsZW1lbnQgPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkI2dldEFsbG9jYXRlZEZyb20gPGVtPkFsbG9jYXRlZCBGcm9tPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZWQjZ2V0QWxsb2NhdGVkVG8gPGVtPkFsbG9jYXRlZCBUbzwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0aW9uc1BhY2thZ2UjZ2V0QWxsb2NhdGVkKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEFsbG9jYXRlZCBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QWxsb2NhdGVkIEZyb208L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QWxsb2NhdGVkIEZyb208L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BbGxvY2F0ZWQgRnJvbTwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlI2dldEFsbG9jYXRlZF9BbGxvY2F0ZWRGcm9tKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxOYW1lZEVsZW1lbnQ+IGdldEFsbG9jYXRlZEZyb20oKTsKKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgZnJvbSB0aGUgJyA8ZW0+PGI+QWxsb2NhdGVkIEZyb208L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcmV0dXJuIFRoZSBmaXJzdCB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jywgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHNlZSAjZ2V0QWxsb2NhdGVkRnJvbSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCU5hbWVkRWxlbWVudCBnZXRBbGxvY2F0ZWRGcm9tKFN0cmluZyBuYW1lKTsKKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgZnJvbSB0aGUgJyA8ZW0+PGI+QWxsb2NhdGVkIEZyb208L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcGFyYW0gaWdub3JlQ2FzZQorCSAqICAgICAgICAgICAgV2hldGhlciB0byBpZ25vcmUgY2FzZSBpbiB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30gY29tcGFyaXNvbnMuCisJICogQHBhcmFtIGVDbGFzcworCSAqICAgICAgICAgICAgVGhlIEVjb3JlIGNsYXNzIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHJldHVybiBUaGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEBzZWUgI2dldEFsbG9jYXRlZEZyb20oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlOYW1lZEVsZW1lbnQgZ2V0QWxsb2NhdGVkRnJvbShTdHJpbmcgbmFtZSwgYm9vbGVhbiBpZ25vcmVDYXNlLCBFQ2xhc3MgZUNsYXNzKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkFsbG9jYXRlZCBUbzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5BbGxvY2F0ZWQgVG88L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BbGxvY2F0ZWQgVG88L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZSNnZXRBbGxvY2F0ZWRfQWxsb2NhdGVkVG8oKQorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PE5hbWVkRWxlbWVudD4gZ2V0QWxsb2NhdGVkVG8oKTsKKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgZnJvbSB0aGUgJzxlbT48Yj5BbGxvY2F0ZWQgVG88L2I+PC9lbT4nCisJICogcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBUaGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gdG8gcmV0cmlldmUsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEByZXR1cm4gVGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAc2VlICNnZXRBbGxvY2F0ZWRUbygpCisJICogQGdlbmVyYXRlZAorCSAqLworCU5hbWVkRWxlbWVudCBnZXRBbGxvY2F0ZWRUbyhTdHJpbmcgbmFtZSk7CisKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGZyb20gdGhlICc8ZW0+PGI+QWxsb2NhdGVkIFRvPC9iPjwvZW0+JworCSAqIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcGFyYW0gaWdub3JlQ2FzZQorCSAqICAgICAgICAgICAgV2hldGhlciB0byBpZ25vcmUgY2FzZSBpbiB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30gY29tcGFyaXNvbnMuCisJICogQHBhcmFtIGVDbGFzcworCSAqICAgICAgICAgICAgVGhlIEVjb3JlIGNsYXNzIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHJldHVybiBUaGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEBzZWUgI2dldEFsbG9jYXRlZFRvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTmFtZWRFbGVtZW50IGdldEFsbG9jYXRlZFRvKFN0cmluZyBuYW1lLCBib29sZWFuIGlnbm9yZUNhc2UsIEVDbGFzcyBlQ2xhc3MpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBOYW1lZCBFbGVtZW50PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIE5hbWVkIEVsZW1lbnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBOYW1lZCBFbGVtZW50PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX05hbWVkRWxlbWVudChOYW1lZEVsZW1lbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZSNnZXRBbGxvY2F0ZWRfQmFzZV9OYW1lZEVsZW1lbnQoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCU5hbWVkRWxlbWVudCBnZXRCYXNlX05hbWVkRWxlbWVudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZWQjZ2V0QmFzZV9OYW1lZEVsZW1lbnQgPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBOYW1lZCBFbGVtZW50PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX05hbWVkRWxlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9OYW1lZEVsZW1lbnQoTmFtZWRFbGVtZW50IHZhbHVlKTsKKworfSAvLyBBbGxvY2F0ZWQKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRpb25zRmFjdG9yeS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvQWxsb2NhdGlvbnNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwMDU2MwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRpb25zRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9uczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgcHJvdmlkZXMgYQorICogY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQWxsb2NhdGlvbnNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUFsbG9jYXRpb25zRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGlvbnNGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFsbG9jYXRlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFsbG9jYXRlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBbGxvY2F0ZSBjcmVhdGVBbGxvY2F0ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BbGxvY2F0ZSBBY3Rpdml0eSBQYXJ0aXRpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFsbG9jYXRlIEFjdGl2aXR5IFBhcnRpdGlvbjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiBjcmVhdGVBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFsbG9jYXRlZDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BbGxvY2F0ZWQ8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFsbG9jYXRlZCBjcmVhdGVBbGxvY2F0ZWQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBbGxvY2F0aW9uc1BhY2thZ2UgZ2V0QWxsb2NhdGlvbnNQYWNrYWdlKCk7CisKK30gLy8gQWxsb2NhdGlvbnNGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9BbGxvY2F0aW9uc1BhY2thZ2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL0FsbG9jYXRpb25zUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjE5NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9BbGxvY2F0aW9uc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDM5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuIEl0IGNvbnRhaW5zCisgKiBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBBbGxvY2F0aW9uc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQKKwkgKiByZXByZXNlbnQKKwkgKiA8dWw+CisJICogPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0ZUltcGwKKwkJICogPGVtPkFsbG9jYXRlPC9lbT59JyBjbGFzcy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkJICogLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsI2dldEFsbG9jYXRlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEFMTE9DQVRFID0gZUlOU1RBTkNFLmdldEFsbG9jYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIEFic3RyYWN0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgQUxMT0NBVEVfX0JBU0VfQUJTVFJBQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0QWxsb2NhdGVfQmFzZV9BYnN0cmFjdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0ZWRJbXBsCisJCSAqIDxlbT5BbGxvY2F0ZWQ8L2VtPn0nIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCQkgKiAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGVkSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsI2dldEFsbG9jYXRlZCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBBTExPQ0FURUQgPSBlSU5TVEFOQ0UuZ2V0QWxsb2NhdGVkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIE5hbWVkIEVsZW1lbnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBBTExPQ0FURURfX0JBU0VfTkFNRURfRUxFTUVOVCA9IGVJTlNUQU5DRS5nZXRBbGxvY2F0ZWRfQmFzZV9OYW1lZEVsZW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFsbG9jYXRlZCBGcm9tPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBBTExPQ0FURURfX0FMTE9DQVRFRF9GUk9NID0gZUlOU1RBTkNFLmdldEFsbG9jYXRlZF9BbGxvY2F0ZWRGcm9tKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5BbGxvY2F0ZWQgVG88L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEFMTE9DQVRFRF9fQUxMT0NBVEVEX1RPID0gZUlOU1RBTkNFLmdldEFsbG9jYXRlZF9BbGxvY2F0ZWRUbygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25JbXBsCisJCSAqIDxlbT5BbGxvY2F0ZSBBY3Rpdml0eSBQYXJ0aXRpb248L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCNnZXRBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEFMTE9DQVRFX0FDVElWSVRZX1BBUlRJVElPTiA9IGVJTlNUQU5DRS5nZXRBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJyA8ZW0+PGI+QmFzZSBBY3Rpdml0eSBQYXJ0aXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLiA8IS0tCisJCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBBTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT05fX0JBU0VfQUNUSVZJVFlfUEFSVElUSU9OID0gZUlOU1RBTkNFLmdldEFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25fQmFzZV9BY3Rpdml0eVBhcnRpdGlvbigpOworCisJfQorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiYWxsb2NhdGlvbnMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvQWxsb2NhdGlvbnMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAiQWxsb2NhdGlvbnMiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUFsbG9jYXRpb25zUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGlvbnNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0ZUltcGwgPGVtPkFsbG9jYXRlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRpb25zUGFja2FnZUltcGwjZ2V0QWxsb2NhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgQUxMT0NBVEUgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQWJzdHJhY3Rpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTExPQ0FURV9fQkFTRV9BQlNUUkFDVElPTiA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QWxsb2NhdGU8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQUxMT0NBVEVfRkVBVFVSRV9DT1VOVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+QWxsb2NhdGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTExPQ0FURV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGVkSW1wbCA8ZW0+QWxsb2NhdGVkPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlZEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsI2dldEFsbG9jYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBBTExPQ0FURUQgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgTmFtZWQgRWxlbWVudDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFMTE9DQVRFRF9fQkFTRV9OQU1FRF9FTEVNRU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BbGxvY2F0ZWQgRnJvbTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQUxMT0NBVEVEX19BTExPQ0FURURfRlJPTSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QWxsb2NhdGVkIFRvPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTExPQ0FURURfX0FMTE9DQVRFRF9UTyA9IDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QWxsb2NhdGVkPC9lbT4nIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFMTE9DQVRFRF9GRUFUVVJFX0NPVU5UID0gMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5BbGxvY2F0ZWQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTExPQ0FURURfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25JbXBsCisJICogPGVtPkFsbG9jYXRlIEFjdGl2aXR5IFBhcnRpdGlvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCNnZXRBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEFMTE9DQVRFX0FDVElWSVRZX1BBUlRJVElPTiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBBY3Rpdml0eSBQYXJ0aXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT05fX0JBU0VfQUNUSVZJVFlfUEFSVElUSU9OID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BbGxvY2F0ZSBBY3Rpdml0eSBQYXJ0aXRpb248L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT05fRkVBVFVSRV9DT1VOVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+QWxsb2NhdGUgQWN0aXZpdHkgUGFydGl0aW9uPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQUxMT0NBVEVfQUNUSVZJVFlfUEFSVElUSU9OX09QRVJBVElPTl9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlIDxlbT5BbGxvY2F0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFsbG9jYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0QWxsb2NhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGUjZ2V0QmFzZV9BYnN0cmFjdGlvbgorCSAqIDxlbT5CYXNlIEFic3RyYWN0aW9uPC9lbT59Jy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBBYnN0cmFjdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGUjZ2V0QmFzZV9BYnN0cmFjdGlvbigpCisJICogQHNlZSAjZ2V0QWxsb2NhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEFsbG9jYXRlX0Jhc2VfQWJzdHJhY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiA8ZW0+QWxsb2NhdGUgQWN0aXZpdHkgUGFydGl0aW9uPC9lbT59ICcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFsbG9jYXRlIEFjdGl2aXR5IFBhcnRpdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0QWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24jZ2V0QmFzZV9BY3Rpdml0eVBhcnRpdGlvbgorCSAqIDxlbT5CYXNlIEFjdGl2aXR5IFBhcnRpdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBBY3Rpdml0eSBQYXJ0aXRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24jZ2V0QmFzZV9BY3Rpdml0eVBhcnRpdGlvbigpCisJICogQHNlZSAjZ2V0QWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0QWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbl9CYXNlX0FjdGl2aXR5UGFydGl0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlZCA8ZW0+QWxsb2NhdGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFsbG9jYXRlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRBbGxvY2F0ZWQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlZCNnZXRBbGxvY2F0ZWRGcm9tCisJICogPGVtPkFsbG9jYXRlZCBGcm9tPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5BbGxvY2F0ZWQgRnJvbTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkI2dldEFsbG9jYXRlZEZyb20oKQorCSAqIEBzZWUgI2dldEFsbG9jYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0QWxsb2NhdGVkX0FsbG9jYXRlZEZyb20oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlZCNnZXRBbGxvY2F0ZWRUbyA8ZW0+QWxsb2NhdGVkIFRvPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5BbGxvY2F0ZWQgVG88L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlZCNnZXRBbGxvY2F0ZWRUbygpCisJICogQHNlZSAjZ2V0QWxsb2NhdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRBbGxvY2F0ZWRfQWxsb2NhdGVkVG8oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkI2dldEJhc2VfTmFtZWRFbGVtZW50CisJICogPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+fScuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkI2dldEJhc2VfTmFtZWRFbGVtZW50KCkKKwkgKiBAc2VlICNnZXRBbGxvY2F0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEFsbG9jYXRlZF9CYXNlX05hbWVkRWxlbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQWxsb2NhdGlvbnNGYWN0b3J5IGdldEFsbG9jYXRpb25zRmFjdG9yeSgpOworCit9IC8vIEFsbG9jYXRpb25zUGFja2FnZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvaW50ZXJuYWwvaW1wbC9BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvaW50ZXJuYWwvaW1wbC9BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxN2U4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9pbnRlcm5hbC9pbXBsL0FsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25JbXBsLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkFjdGl2aXR5UGFydGl0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+QWxsb2NhdGUgQWN0aXZpdHkgUGFydGl0aW9uPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkltcGwjZ2V0QmFzZV9BY3Rpdml0eVBhcnRpdGlvbiA8ZW0+QmFzZSBBY3Rpdml0eSBQYXJ0aXRpb24gPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0FjdGl2aXR5UGFydGl0aW9uKCkgPGVtPkJhc2UgQWN0aXZpdHkgUGFydGl0aW9uPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBBY3Rpdml0eVBhcnRpdGlvbiBiYXNlX0FjdGl2aXR5UGFydGl0aW9uOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBY3Rpdml0eVBhcnRpdGlvbiBiYXNpY0dldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24oKSB7CisJCXJldHVybiBiYXNlX0FjdGl2aXR5UGFydGl0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVfQUNUSVZJVFlfUEFSVElUSU9OX19CQVNFX0FDVElWSVRZX1BBUlRJVElPTjoKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24oKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT05fX0JBU0VfQUNUSVZJVFlfUEFSVElUSU9OOgorCQkJcmV0dXJuIGJhc2VfQWN0aXZpdHlQYXJ0aXRpb24gIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVfQUNUSVZJVFlfUEFSVElUSU9OX19CQVNFX0FDVElWSVRZX1BBUlRJVElPTjoKKwkJCXNldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24oKEFjdGl2aXR5UGFydGl0aW9uKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEFsbG9jYXRpb25zUGFja2FnZS5MaXRlcmFscy5BTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT047CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVfQUNUSVZJVFlfUEFSVElUSU9OX19CQVNFX0FDVElWSVRZX1BBUlRJVElPTjoKKwkJCXNldEJhc2VfQWN0aXZpdHlQYXJ0aXRpb24oKEFjdGl2aXR5UGFydGl0aW9uKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWN0aXZpdHlQYXJ0aXRpb24gZ2V0QmFzZV9BY3Rpdml0eVBhcnRpdGlvbigpIHsKKwkJaWYgKGJhc2VfQWN0aXZpdHlQYXJ0aXRpb24gIT0gbnVsbCAmJiBiYXNlX0FjdGl2aXR5UGFydGl0aW9uLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0FjdGl2aXR5UGFydGl0aW9uID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9BY3Rpdml0eVBhcnRpdGlvbjsKKwkJCWJhc2VfQWN0aXZpdHlQYXJ0aXRpb24gPSAoQWN0aXZpdHlQYXJ0aXRpb24pIGVSZXNvbHZlUHJveHkob2xkQmFzZV9BY3Rpdml0eVBhcnRpdGlvbik7CisJCQlpZiAoYmFzZV9BY3Rpdml0eVBhcnRpdGlvbiAhPSBvbGRCYXNlX0FjdGl2aXR5UGFydGl0aW9uKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVfQUNUSVZJVFlfUEFSVElUSU9OX19CQVNFX0FDVElWSVRZX1BBUlRJVElPTiwgb2xkQmFzZV9BY3Rpdml0eVBhcnRpdGlvbiwgYmFzZV9BY3Rpdml0eVBhcnRpdGlvbikpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9BY3Rpdml0eVBhcnRpdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0FjdGl2aXR5UGFydGl0aW9uKEFjdGl2aXR5UGFydGl0aW9uIG5ld0Jhc2VfQWN0aXZpdHlQYXJ0aXRpb24pIHsKKwkJQWN0aXZpdHlQYXJ0aXRpb24gb2xkQmFzZV9BY3Rpdml0eVBhcnRpdGlvbiA9IGJhc2VfQWN0aXZpdHlQYXJ0aXRpb247CisJCWJhc2VfQWN0aXZpdHlQYXJ0aXRpb24gPSBuZXdCYXNlX0FjdGl2aXR5UGFydGl0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT05fX0JBU0VfQUNUSVZJVFlfUEFSVElUSU9OLCBvbGRCYXNlX0FjdGl2aXR5UGFydGl0aW9uLCBiYXNlX0FjdGl2aXR5UGFydGl0aW9uKSk7CisJCX0KKwl9CisKK30gLy8gQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL2ludGVybmFsL2ltcGwvQWxsb2NhdGVJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9pbnRlcm5hbC9pbXBsL0FsbG9jYXRlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Y2Q5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9pbnRlcm5hbC9pbXBsL0FsbG9jYXRlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQWJzdHJhY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5BbGxvY2F0ZTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlSW1wbCNnZXRCYXNlX0Fic3RyYWN0aW9uIDxlbT5CYXNlIEFic3RyYWN0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQWxsb2NhdGVJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIEFsbG9jYXRlIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfQWJzdHJhY3Rpb24oKSA8ZW0+QmFzZSBBYnN0cmFjdGlvbjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX0Fic3RyYWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWJzdHJhY3Rpb24gYmFzZV9BYnN0cmFjdGlvbjsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBbGxvY2F0ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFic3RyYWN0aW9uIGJhc2ljR2V0QmFzZV9BYnN0cmFjdGlvbigpIHsKKwkJcmV0dXJuIGJhc2VfQWJzdHJhY3Rpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURV9fQkFTRV9BQlNUUkFDVElPTjoKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfQWJzdHJhY3Rpb24oKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfQWJzdHJhY3Rpb24oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURV9fQkFTRV9BQlNUUkFDVElPTjoKKwkJCXJldHVybiBiYXNlX0Fic3RyYWN0aW9uICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWxsb2NhdGlvbnNQYWNrYWdlLkFMTE9DQVRFX19CQVNFX0FCU1RSQUNUSU9OOgorCQkJc2V0QmFzZV9BYnN0cmFjdGlvbigoQWJzdHJhY3Rpb24pIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQWxsb2NhdGlvbnNQYWNrYWdlLkxpdGVyYWxzLkFMTE9DQVRFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQWxsb2NhdGlvbnNQYWNrYWdlLkFMTE9DQVRFX19CQVNFX0FCU1RSQUNUSU9OOgorCQkJc2V0QmFzZV9BYnN0cmFjdGlvbigoQWJzdHJhY3Rpb24pIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBYnN0cmFjdGlvbiBnZXRCYXNlX0Fic3RyYWN0aW9uKCkgeworCQlpZiAoYmFzZV9BYnN0cmFjdGlvbiAhPSBudWxsICYmIGJhc2VfQWJzdHJhY3Rpb24uZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfQWJzdHJhY3Rpb24gPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX0Fic3RyYWN0aW9uOworCQkJYmFzZV9BYnN0cmFjdGlvbiA9IChBYnN0cmFjdGlvbikgZVJlc29sdmVQcm94eShvbGRCYXNlX0Fic3RyYWN0aW9uKTsKKwkJCWlmIChiYXNlX0Fic3RyYWN0aW9uICE9IG9sZEJhc2VfQWJzdHJhY3Rpb24pIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURV9fQkFTRV9BQlNUUkFDVElPTiwgb2xkQmFzZV9BYnN0cmFjdGlvbiwgYmFzZV9BYnN0cmFjdGlvbikpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9BYnN0cmFjdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0Fic3RyYWN0aW9uKEFic3RyYWN0aW9uIG5ld0Jhc2VfQWJzdHJhY3Rpb24pIHsKKwkJQWJzdHJhY3Rpb24gb2xkQmFzZV9BYnN0cmFjdGlvbiA9IGJhc2VfQWJzdHJhY3Rpb247CisJCWJhc2VfQWJzdHJhY3Rpb24gPSBuZXdCYXNlX0Fic3RyYWN0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURV9fQkFTRV9BQlNUUkFDVElPTiwgb2xkQmFzZV9BYnN0cmFjdGlvbiwgYmFzZV9BYnN0cmFjdGlvbikpOworCQl9CisJfQorCit9IC8vIEFsbG9jYXRlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvaW50ZXJuYWwvaW1wbC9BbGxvY2F0ZWRJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy9pbnRlcm5hbC9pbXBsL0FsbG9jYXRlZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNlZTYxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvaW50ZXJuYWwvaW1wbC9BbGxvY2F0ZWRJbXBsLmphdmEKQEAgLTAsMCArMSwzMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRUxpc3QuVW5tb2RpZmlhYmxlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5EZXBlbmRlbmN5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkRpcmVjdGVkUmVsYXRpb25zaGlwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLnV0aWwuVU1MVXRpbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkFsbG9jYXRlZDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlZEltcGwjZ2V0QmFzZV9OYW1lZEVsZW1lbnQgPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0ZWRJbXBsI2dldEFsbG9jYXRlZEZyb20gPGVtPkFsbG9jYXRlZCBGcm9tPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRlZEltcGwjZ2V0QWxsb2NhdGVkVG8gPGVtPkFsbG9jYXRlZCBUbzwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFsbG9jYXRlZEltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgQWxsb2NhdGVkIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfTmFtZWRFbGVtZW50KCkgPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX05hbWVkRWxlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIE5hbWVkRWxlbWVudCBiYXNlX05hbWVkRWxlbWVudDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBbGxvY2F0ZWRJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgYmFzaWNHZXRCYXNlX05hbWVkRWxlbWVudCgpIHsKKwkJcmV0dXJuIGJhc2VfTmFtZWRFbGVtZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVEX19CQVNFX05BTUVEX0VMRU1FTlQ6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX05hbWVkRWxlbWVudCgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9OYW1lZEVsZW1lbnQoKTsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVEX19BTExPQ0FURURfRlJPTToKKwkJCXJldHVybiBnZXRBbGxvY2F0ZWRGcm9tKCk7CisJCWNhc2UgQWxsb2NhdGlvbnNQYWNrYWdlLkFMTE9DQVRFRF9fQUxMT0NBVEVEX1RPOgorCQkJcmV0dXJuIGdldEFsbG9jYXRlZFRvKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVEX19CQVNFX05BTUVEX0VMRU1FTlQ6CisJCQlyZXR1cm4gYmFzZV9OYW1lZEVsZW1lbnQgIT0gbnVsbDsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVEX19BTExPQ0FURURfRlJPTToKKwkJCXJldHVybiAhZ2V0QWxsb2NhdGVkRnJvbSgpLmlzRW1wdHkoKTsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVEX19BTExPQ0FURURfVE86CisJCQlyZXR1cm4gIWdldEFsbG9jYXRlZFRvKCkuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURURfX0JBU0VfTkFNRURfRUxFTUVOVDoKKwkJCXNldEJhc2VfTmFtZWRFbGVtZW50KChOYW1lZEVsZW1lbnQpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQWxsb2NhdGlvbnNQYWNrYWdlLkxpdGVyYWxzLkFMTE9DQVRFRDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURURfX0JBU0VfTkFNRURfRUxFTUVOVDoKKwkJCXNldEJhc2VfTmFtZWRFbGVtZW50KChOYW1lZEVsZW1lbnQpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8TmFtZWRFbGVtZW50PiBnZXRBbGxvY2F0ZWRGcm9tKCkgeworCQkvLyBBbGxvY2F0ZWRGcm9tIHByb3BlcnR5IGxpc3RzIGFsbCB0aGUgbmFtZWQgZWxlbWVudHMgbGlua2VkIHRvIGN1cnJlbnQKKwkJLy8gYnkgYW4gQWxsb2NhdGUgbGluay4KKwkJLy8gQ3VycmVudCBlbGVtZW50IGlzIHRoZSB0YXJnZXQgb2YgdGhlIEFsbG9jYXRlIGxpbmsuCisJCUVMaXN0PE5hbWVkRWxlbWVudD4gYWxsb2NhdGVkRnJvbSA9IG5ldyBCYXNpY0VMaXN0PE5hbWVkRWxlbWVudD4oKTsKKwkJQWxsb2NhdGUgY3VycmVudEFsbG9jYXRlID0gbnVsbDsKKworCQlpZiAoZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKSAhPSBudWxsKSB7CisJCQkvLyBGaW5kIEFsbG9jYXRlIGxpbmsKKwkJCUl0ZXJhdG9yPERpcmVjdGVkUmVsYXRpb25zaGlwPiBpdERlcCA9IGdldEJhc2VfTmFtZWRFbGVtZW50KCkuZ2V0VGFyZ2V0RGlyZWN0ZWRSZWxhdGlvbnNoaXBzKCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlIChpdERlcC5oYXNOZXh0KCkpIHsKKwkJCQlEaXJlY3RlZFJlbGF0aW9uc2hpcCBjdXJyZW50RFJlbGF0aW9uc2hpcCA9IGl0RGVwLm5leHQoKTsKKwkJCQljdXJyZW50QWxsb2NhdGUgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihjdXJyZW50RFJlbGF0aW9uc2hpcCwgQWxsb2NhdGUuY2xhc3MpOworCisJCQkJaWYgKGN1cnJlbnRBbGxvY2F0ZSAhPSBudWxsKSB7CisJCQkJCUVMaXN0PEVsZW1lbnQ+IHRhcmdldHMgPSBjdXJyZW50QWxsb2NhdGUuZ2V0QmFzZV9BYnN0cmFjdGlvbigpLmdldFNvdXJjZXMoKTsKKwkJCQkJSXRlcmF0b3I8RWxlbWVudD4gaXQgPSB0YXJnZXRzLml0ZXJhdG9yKCk7CisJCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCQkJCUVsZW1lbnQgY3VycmVudEVsdCA9IGl0Lm5leHQoKTsKKwkJCQkJCWlmIChjdXJyZW50RWx0IGluc3RhbmNlb2YgTmFtZWRFbGVtZW50KSB7CisJCQkJCQkJYWxsb2NhdGVkRnJvbS5hZGQoKE5hbWVkRWxlbWVudCkgY3VycmVudEVsdCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlVbm1vZGlmaWFibGVFTGlzdDxOYW1lZEVsZW1lbnQ+IHJlc3VsdExpc3QgPSBuZXcgVW5tb2RpZmlhYmxlRUxpc3Q8TmFtZWRFbGVtZW50Pih0aGlzLCBBbGxvY2F0aW9uc1BhY2thZ2UuZUlOU1RBTkNFLmdldEFsbG9jYXRlZF9BbGxvY2F0ZWRGcm9tKCksIGFsbG9jYXRlZEZyb20uc2l6ZSgpLCBhbGxvY2F0ZWRGcm9tLnRvQXJyYXkoKSk7CisJCXJldHVybiByZXN1bHRMaXN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5hbWVkRWxlbWVudCBnZXRBbGxvY2F0ZWRGcm9tKFN0cmluZyBuYW1lKSB7CisJCXJldHVybiBnZXRBbGxvY2F0ZWRGcm9tKG5hbWUsIGZhbHNlLCBudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0QWxsb2NhdGVkRnJvbShTdHJpbmcgbmFtZSwgYm9vbGVhbiBpZ25vcmVDYXNlLCBFQ2xhc3MgZUNsYXNzKSB7CisJCWFsbG9jYXRlZEZyb21Mb29wOiBmb3IgKE5hbWVkRWxlbWVudCBhbGxvY2F0ZWRGcm9tIDogZ2V0QWxsb2NhdGVkRnJvbSgpKSB7CisJCQlpZiAoZUNsYXNzICE9IG51bGwgJiYgIWVDbGFzcy5pc0luc3RhbmNlKGFsbG9jYXRlZEZyb20pKSB7CisJCQkJY29udGludWUgYWxsb2NhdGVkRnJvbUxvb3A7CisJCQl9CisJCQlpZiAobmFtZSAhPSBudWxsICYmICEoaWdub3JlQ2FzZSA/IG5hbWUuZXF1YWxzSWdub3JlQ2FzZShhbGxvY2F0ZWRGcm9tLmdldE5hbWUoKSkgOiBuYW1lLmVxdWFscyhhbGxvY2F0ZWRGcm9tLmdldE5hbWUoKSkpKSB7CisJCQkJY29udGludWUgYWxsb2NhdGVkRnJvbUxvb3A7CisJCQl9CisJCQlyZXR1cm4gYWxsb2NhdGVkRnJvbTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEVMaXN0PE5hbWVkRWxlbWVudD4gZ2V0QWxsb2NhdGVkVG8oKSB7CisJCS8vIEFsbG9jYXRlZEZyb20gcHJvcGVydHkgbGlzdHMgYWxsIHRoZSBuYW1lZCBlbGVtZW50cyBsaW5rZWQgdG8gY3VycmVudAorCQkvLyBieSBhbiBBbGxvY2F0ZSBsaW5rLgorCQkvLyBDdXJyZW50IGVsZW1lbnQgaXMgdGhlIHRhcmdldCBvZiB0aGUgQWxsb2NhdGUgbGluay4KKwkJRUxpc3Q8TmFtZWRFbGVtZW50PiBhbGxvY2F0ZWRUbyA9IG5ldyBCYXNpY0VMaXN0PE5hbWVkRWxlbWVudD4oKTsKKwkJQWxsb2NhdGUgY3VycmVudEFsbG9jYXRlID0gbnVsbDsKKworCQlpZiAoZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKSAhPSBudWxsKSB7CisJCQkvLyBGaW5kIEFsbG9jYXRlIGxpbmsKKwkJCUl0ZXJhdG9yPERlcGVuZGVuY3k+IGl0RGVwID0gZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKS5nZXRDbGllbnREZXBlbmRlbmNpZXMoKS5pdGVyYXRvcigpOworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSkgeworCQkJCURlcGVuZGVuY3kgY3VycmVudERlcGVuZGVuY3kgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudEFsbG9jYXRlID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oY3VycmVudERlcGVuZGVuY3ksIEFsbG9jYXRlLmNsYXNzKTsKKworCQkJCWlmIChjdXJyZW50QWxsb2NhdGUgIT0gbnVsbCkgeworCQkJCQlhbGxvY2F0ZWRUby5hZGRBbGwoY3VycmVudEFsbG9jYXRlLmdldEJhc2VfQWJzdHJhY3Rpb24oKS5nZXRTdXBwbGllcnMoKSk7CisJCQkJfQorCQkJfQorCQl9CisJCVVubW9kaWZpYWJsZUVMaXN0PE5hbWVkRWxlbWVudD4gcmVzdWx0TGlzdCA9IG5ldyBVbm1vZGlmaWFibGVFTGlzdDxOYW1lZEVsZW1lbnQ+KHRoaXMsIEFsbG9jYXRpb25zUGFja2FnZS5lSU5TVEFOQ0UuZ2V0QWxsb2NhdGVkX0FsbG9jYXRlZFRvKCksIGFsbG9jYXRlZFRvLnNpemUoKSwgYWxsb2NhdGVkVG8udG9BcnJheSgpKTsKKwkJcmV0dXJuIHJlc3VsdExpc3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTmFtZWRFbGVtZW50IGdldEFsbG9jYXRlZFRvKFN0cmluZyBuYW1lKSB7CisJCXJldHVybiBnZXRBbGxvY2F0ZWRUbyhuYW1lLCBmYWxzZSwgbnVsbCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTmFtZWRFbGVtZW50IGdldEFsbG9jYXRlZFRvKFN0cmluZyBuYW1lLCBib29sZWFuIGlnbm9yZUNhc2UsIEVDbGFzcyBlQ2xhc3MpIHsKKwkJYWxsb2NhdGVkVG9Mb29wOiBmb3IgKE5hbWVkRWxlbWVudCBhbGxvY2F0ZWRUbyA6IGdldEFsbG9jYXRlZFRvKCkpIHsKKwkJCWlmIChlQ2xhc3MgIT0gbnVsbCAmJiAhZUNsYXNzLmlzSW5zdGFuY2UoYWxsb2NhdGVkVG8pKSB7CisJCQkJY29udGludWUgYWxsb2NhdGVkVG9Mb29wOworCQkJfQorCQkJaWYgKG5hbWUgIT0gbnVsbCAmJiAhKGlnbm9yZUNhc2UgPyBuYW1lLmVxdWFsc0lnbm9yZUNhc2UoYWxsb2NhdGVkVG8uZ2V0TmFtZSgpKSA6IG5hbWUuZXF1YWxzKGFsbG9jYXRlZFRvLmdldE5hbWUoKSkpKSB7CisJCQkJY29udGludWUgYWxsb2NhdGVkVG9Mb29wOworCQkJfQorCQkJcmV0dXJuIGFsbG9jYXRlZFRvOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKSB7CisJCWlmIChiYXNlX05hbWVkRWxlbWVudCAhPSBudWxsICYmIGJhc2VfTmFtZWRFbGVtZW50LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX05hbWVkRWxlbWVudCA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfTmFtZWRFbGVtZW50OworCQkJYmFzZV9OYW1lZEVsZW1lbnQgPSAoTmFtZWRFbGVtZW50KSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfTmFtZWRFbGVtZW50KTsKKwkJCWlmIChiYXNlX05hbWVkRWxlbWVudCAhPSBvbGRCYXNlX05hbWVkRWxlbWVudCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQWxsb2NhdGlvbnNQYWNrYWdlLkFMTE9DQVRFRF9fQkFTRV9OQU1FRF9FTEVNRU5ULCBvbGRCYXNlX05hbWVkRWxlbWVudCwgYmFzZV9OYW1lZEVsZW1lbnQpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfTmFtZWRFbGVtZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfTmFtZWRFbGVtZW50KE5hbWVkRWxlbWVudCBuZXdCYXNlX05hbWVkRWxlbWVudCkgeworCQlOYW1lZEVsZW1lbnQgb2xkQmFzZV9OYW1lZEVsZW1lbnQgPSBiYXNlX05hbWVkRWxlbWVudDsKKwkJYmFzZV9OYW1lZEVsZW1lbnQgPSBuZXdCYXNlX05hbWVkRWxlbWVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVEX19CQVNFX05BTUVEX0VMRU1FTlQsIG9sZEJhc2VfTmFtZWRFbGVtZW50LCBiYXNlX05hbWVkRWxlbWVudCkpOworCQl9CisJfQorCit9IC8vIEFsbG9jYXRlZEltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL2ludGVybmFsL2ltcGwvQWxsb2NhdGlvbnNGYWN0b3J5SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvaW50ZXJuYWwvaW1wbC9BbGxvY2F0aW9uc0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4YThjOQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL2ludGVybmFsL2ltcGwvQWxsb2NhdGlvbnNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFsbG9jYXRpb25zRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBBbGxvY2F0aW9uc0ZhY3RvcnkgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgQWxsb2NhdGlvbnNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBBbGxvY2F0aW9uc1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgQWxsb2NhdGlvbnNGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlBbGxvY2F0aW9uc0ZhY3RvcnkgdGhlQWxsb2NhdGlvbnNGYWN0b3J5ID0gKEFsbG9jYXRpb25zRmFjdG9yeSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpOworCQkJaWYgKHRoZUFsbG9jYXRpb25zRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUFsbG9jYXRpb25zRmFjdG9yeTsKKwkJCX0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBBbGxvY2F0aW9uc0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbGxvY2F0aW9uc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCWNhc2UgQWxsb2NhdGlvbnNQYWNrYWdlLkFMTE9DQVRFOgorCQkJcmV0dXJuIGNyZWF0ZUFsbG9jYXRlKCk7CisJCWNhc2UgQWxsb2NhdGlvbnNQYWNrYWdlLkFMTE9DQVRFRDoKKwkJCXJldHVybiBjcmVhdGVBbGxvY2F0ZWQoKTsKKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVfQUNUSVZJVFlfUEFSVElUSU9OOgorCQkJcmV0dXJuIGNyZWF0ZUFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24oKTsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWxsb2NhdGUgY3JlYXRlQWxsb2NhdGUoKSB7CisJCUFsbG9jYXRlSW1wbCBhbGxvY2F0ZSA9IG5ldyBBbGxvY2F0ZUltcGwoKTsKKwkJcmV0dXJuIGFsbG9jYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uIGNyZWF0ZUFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24oKSB7CisJCUFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25JbXBsIGFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24gPSBuZXcgQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkltcGwoKTsKKwkJcmV0dXJuIGFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFsbG9jYXRlZCBjcmVhdGVBbGxvY2F0ZWQoKSB7CisJCUFsbG9jYXRlZEltcGwgYWxsb2NhdGVkID0gbmV3IEFsbG9jYXRlZEltcGwoKTsKKwkJcmV0dXJuIGFsbG9jYXRlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWxsb2NhdGlvbnNQYWNrYWdlIGdldEFsbG9jYXRpb25zUGFja2FnZSgpIHsKKwkJcmV0dXJuIChBbGxvY2F0aW9uc1BhY2thZ2UpIGdldEVQYWNrYWdlKCk7CisJfQorCit9IC8vIEFsbG9jYXRpb25zRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL2ludGVybmFsL2ltcGwvQWxsb2NhdGlvbnNQYWNrYWdlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvaW50ZXJuYWwvaW1wbC9BbGxvY2F0aW9uc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyZDJjNwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL2ludGVybmFsL2ltcGwvQWxsb2NhdGlvbnNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGwuSW50ZXJhY3Rpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcm5hbC5pbXBsLlN5c21sUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLk1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuUG9ydGFuZGZsb3dzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5TdGF0ZW1hY2hpbmVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuaW50ZXJuYWwuaW1wbC5TdGF0ZW1hY2hpbmVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5pbnRlcm5hbC5pbXBsLlVzZWNhc2VzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuVU1MUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbGxvY2F0aW9uc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgQWxsb2NhdGlvbnNQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgQWxsb2NhdGlvbnNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFsbG9jYXRpb25zUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHsKKwkJCXJldHVybiAoQWxsb2NhdGlvbnNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBbGxvY2F0aW9uc1BhY2thZ2UuZU5TX1VSSSk7CisJCX0KKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUFsbG9jYXRpb25zUGFja2FnZUltcGwgdGhlQWxsb2NhdGlvbnNQYWNrYWdlID0gKEFsbG9jYXRpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBBbGxvY2F0aW9uc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEFsbG9jYXRpb25zUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCVN5c21sUGFja2FnZUltcGwgdGhlU3lzbWxQYWNrYWdlID0gKFN5c21sUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTeXNtbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTeXNtbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpIDogU3lzbWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCB0aGVNb2RlbGVsZW1lbnRzUGFja2FnZSA9IChNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKE1vZGVsZWxlbWVudHNQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxlbGVtZW50c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQmxvY2tzUGFja2FnZUltcGwgdGhlQmxvY2tzUGFja2FnZSA9IChCbG9ja3NQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEJsb2Nrc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBCbG9ja3NQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEJsb2Nrc1BhY2thZ2UuZU5TX1VSSSkgOiBCbG9ja3NQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVBvcnRhbmRmbG93c1BhY2thZ2VJbXBsIHRoZVBvcnRhbmRmbG93c1BhY2thZ2UgPSAoUG9ydGFuZGZsb3dzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQb3J0YW5kZmxvd3NQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUG9ydGFuZGZsb3dzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQb3J0YW5kZmxvd3NQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBQb3J0YW5kZmxvd3NQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUNvbnN0cmFpbnRzUGFja2FnZUltcGwgdGhlQ29uc3RyYWludHNQYWNrYWdlID0gKENvbnN0cmFpbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb25zdHJhaW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29uc3RyYWludHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBDb25zdHJhaW50c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQWN0aXZpdGllc1BhY2thZ2VJbXBsIHRoZUFjdGl2aXRpZXNQYWNrYWdlID0gKEFjdGl2aXRpZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWN0aXZpdGllc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWN0aXZpdGllc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IEFjdGl2aXRpZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUludGVyYWN0aW9uc1BhY2thZ2VJbXBsIHRoZUludGVyYWN0aW9uc1BhY2thZ2UgPSAoSW50ZXJhY3Rpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBJbnRlcmFjdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpIDogU3RhdGVtYWNoaW5lc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVXNlY2FzZXNQYWNrYWdlSW1wbCB0aGVVc2VjYXNlc1BhY2thZ2UgPSAoVXNlY2FzZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVzZWNhc2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVzZWNhc2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFVzZWNhc2VzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQmxvY2tzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUG9ydGFuZGZsb3dzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBY3Rpdml0aWVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUmVxdWlyZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVVzZWNhc2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN5c21sUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQmxvY2tzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb25zdHJhaW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBY3Rpdml0aWVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVJbnRlcmFjdGlvbnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlQWxsb2NhdGlvbnNQYWNrYWdlLmZyZWV6ZSgpOworCisKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChBbGxvY2F0aW9uc1BhY2thZ2UuZU5TX1VSSSwgdGhlQWxsb2NhdGlvbnNQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUFsbG9jYXRpb25zUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBhbGxvY2F0ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBhbGxvY2F0ZWRFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgYWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUKKwkgKiBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+CisJICogTm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLCBpZiBvbmUgYWxyZWFkeSBleGlzdHMuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBBbGxvY2F0aW9uc1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBBbGxvY2F0aW9uc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgeworCQkJcmV0dXJuOworCQl9CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWFsbG9jYXRlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEFMTE9DQVRFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShhbGxvY2F0ZUVDbGFzcywgQUxMT0NBVEVfX0JBU0VfQUJTVFJBQ1RJT04pOworCisJCWFsbG9jYXRlZEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBTExPQ0FURUQpOworCQljcmVhdGVFUmVmZXJlbmNlKGFsbG9jYXRlZEVDbGFzcywgQUxMT0NBVEVEX19CQVNFX05BTUVEX0VMRU1FTlQpOworCQljcmVhdGVFUmVmZXJlbmNlKGFsbG9jYXRlZEVDbGFzcywgQUxMT0NBVEVEX19BTExPQ0FURURfRlJPTSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoYWxsb2NhdGVkRUNsYXNzLCBBTExPQ0FURURfX0FMTE9DQVRFRF9UTyk7CisKKwkJYWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT04pOworCQljcmVhdGVFUmVmZXJlbmNlKGFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb25FQ2xhc3MsIEFMTE9DQVRFX0FDVElWSVRZX1BBUlRJVElPTl9fQkFTRV9BQ1RJVklUWV9QQVJUSVRJT04pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0QWxsb2NhdGUoKSB7CisJCXJldHVybiBhbGxvY2F0ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBbGxvY2F0ZV9CYXNlX0Fic3RyYWN0aW9uKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIGFsbG9jYXRlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKCkgeworCQlyZXR1cm4gYWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uX0Jhc2VfQWN0aXZpdHlQYXJ0aXRpb24oKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgYWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0QWxsb2NhdGVkKCkgeworCQlyZXR1cm4gYWxsb2NhdGVkRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEFsbG9jYXRlZF9BbGxvY2F0ZWRGcm9tKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIGFsbG9jYXRlZEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEFsbG9jYXRlZF9BbGxvY2F0ZWRUbygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBhbGxvY2F0ZWRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBbGxvY2F0ZWRfQmFzZV9OYW1lZEVsZW1lbnQoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgYWxsb2NhdGVkRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFsbG9jYXRpb25zRmFjdG9yeSBnZXRBbGxvY2F0aW9uc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoQWxsb2NhdGlvbnNGYWN0b3J5KSBnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCVVNTFBhY2thZ2UgdGhlVU1MUGFja2FnZSA9IChVTUxQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVTUxQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzLCBmZWF0dXJlcywgYW5kIG9wZXJhdGlvbnM7IGFkZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoYWxsb2NhdGVFQ2xhc3MsIEFsbG9jYXRlLmNsYXNzLCAiQWxsb2NhdGUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldEFsbG9jYXRlX0Jhc2VfQWJzdHJhY3Rpb24oKSwgdGhlVU1MUGFja2FnZS5nZXRBYnN0cmFjdGlvbigpLCBudWxsLCAiYmFzZV9BYnN0cmFjdGlvbiIsIG51bGwsIDEsIDEsIEFsbG9jYXRlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsCisJCQkJIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKGFsbG9jYXRlZEVDbGFzcywgQWxsb2NhdGVkLmNsYXNzLCAiQWxsb2NhdGVkIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRBbGxvY2F0ZWRfQmFzZV9OYW1lZEVsZW1lbnQoKSwgdGhlVU1MUGFja2FnZS5nZXROYW1lZEVsZW1lbnQoKSwgbnVsbCwgImJhc2VfTmFtZWRFbGVtZW50IiwgbnVsbCwgMSwgMSwgQWxsb2NhdGVkLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsCisJCQkJIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0QWxsb2NhdGVkX0FsbG9jYXRlZEZyb20oKSwgdGhlVU1MUGFja2FnZS5nZXROYW1lZEVsZW1lbnQoKSwgbnVsbCwgImFsbG9jYXRlZEZyb20iLCBudWxsLCAwLCAtMSwgQWxsb2NhdGVkLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldEFsbG9jYXRlZF9BbGxvY2F0ZWRUbygpLCB0aGVVTUxQYWNrYWdlLmdldE5hbWVkRWxlbWVudCgpLCBudWxsLCAiYWxsb2NhdGVkVG8iLCBudWxsLCAwLCAtMSwgQWxsb2NhdGVkLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhhbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uRUNsYXNzLCBBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uLmNsYXNzLCAiQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0QWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbl9CYXNlX0FjdGl2aXR5UGFydGl0aW9uKCksIHRoZVVNTFBhY2thZ2UuZ2V0QWN0aXZpdHlQYXJ0aXRpb24oKSwgbnVsbCwgImJhc2VfQWN0aXZpdHlQYXJ0aXRpb24iLCBudWxsLCAxLCAxLCBBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsCisJCQkJSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwl9CisKK30gLy8gQWxsb2NhdGlvbnNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvdXRpbC9BbGxvY2F0aW9uc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9hbGxvY2F0aW9ucy91dGlsL0FsbG9jYXRpb25zQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDljMDkyCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvdXRpbC9BbGxvY2F0aW9uc0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcworICogYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbGxvY2F0aW9uc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEFsbG9jYXRpb25zUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFsbG9jYXRpb25zU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0gbmV3IEFsbG9jYXRpb25zU3dpdGNoPEFkYXB0ZXI+KCkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlQWxsb2NhdGUoQWxsb2NhdGUgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQWxsb2NhdGVBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZUFsbG9jYXRlZChBbGxvY2F0ZWQgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQWxsb2NhdGVkQWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKEFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24gb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCX0KKwl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFsbG9jYXRpb25zQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQWxsb2NhdGlvbnNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB0YXJnZXQKKwkgKiAgICAgICAgICAgIHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCkgdGFyZ2V0KTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbgorCSAqIDxlbT5BbGxvY2F0ZSBBY3Rpdml0eSBQYXJ0aXRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMKKwkgKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMKKwkgKiBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZSA8ZW0+QWxsb2NhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbworCSAqIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbgorCSAqIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFsbG9jYXRlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZWQKKwkgKiA8ZW0+QWxsb2NhdGVkPC9lbT59Jy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisJICogcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhCisJICogY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFsbG9jYXRlZEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmCisJICogdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlCisJICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KSBvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKK30gLy8gQWxsb2NhdGlvbnNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvdXRpbC9BbGxvY2F0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjZWQ2NQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy51dGlsLkFsbG9jYXRpb25zUmVzb3VyY2VJbXBsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbGxvY2F0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBSZXNvdXJjZUZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWxsb2NhdGlvbnNSZXNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKKwkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IEFsbG9jYXRpb25zUmVzb3VyY2VJbXBsKHVyaSk7CisJCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgQm9vbGVhbi5UUlVFKTsKKwkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBCb29sZWFuLlRSVUUpOworCisJCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1NDSEVNQV9MT0NBVElPTiwgQm9vbGVhbi5UUlVFKTsKKworCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7CisJCXJlc3VsdC5nZXREZWZhdWx0U2F2ZU9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKKworCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfTEVYSUNBTF9IQU5ETEVSLCBCb29sZWFuLlRSVUUpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworfSAvLyBBbGxvY2F0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNSZXNvdXJjZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNSZXNvdXJjZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTE2ZDNiCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvdXRpbC9BbGxvY2F0aW9uc1Jlc291cmNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy51dGlsLkFsbG9jYXRpb25zUmVzb3VyY2VGYWN0b3J5SW1wbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQWxsb2NhdGlvbnNSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFsbG9jYXRpb25zUmVzb3VyY2VJbXBsKFVSSSB1cmkpIHsKKwkJc3VwZXIodXJpKTsKKwl9CisKK30gLy8gQWxsb2NhdGlvbnNSZXNvdXJjZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNTd2l0Y2guamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGJhZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvdXRpbC9BbGxvY2F0aW9uc1N3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5Td2l0Y2g7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0ZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0aW9uc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlCisgKiBoaWVyYXJjaHkuIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0gdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QgYW5kIHByb2NlZWRpbmcgdXAgdGhlCisgKiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZQorICogcmVzdWx0IG9mIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0aW9uc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFsbG9jYXRpb25zU3dpdGNoPFQ+IGV4dGVuZHMgU3dpdGNoPFQ+IHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQWxsb2NhdGlvbnNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbGxvY2F0aW9uc1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBBbGxvY2F0aW9uc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2tzIHdoZXRoZXIgdGhpcyBpcyBhIHN3aXRjaCBmb3IgdGhlIGdpdmVuIHBhY2thZ2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW1ldGVyIGVQYWNrYWdlIHRoZSBwYWNrYWdlIGluIHF1ZXN0aW9uLgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGlzIGEgc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNTd2l0Y2hGb3IoRVBhY2thZ2UgZVBhY2thZ2UpIHsKKwkJcmV0dXJuIGVQYWNrYWdlID09IG1vZGVsUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BbGxvY2F0ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BbGxvY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZUFsbG9jYXRlKEFsbG9jYXRlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BbGxvY2F0ZSBBY3Rpdml0eSBQYXJ0aXRpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlCisJICogdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWxsb2NhdGUgQWN0aXZpdHkgUGFydGl0aW9uPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbihBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BbGxvY2F0ZWQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisJICogbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWxsb2NhdGVkPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQWxsb2NhdGVkKEFsbG9jYXRlZCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMKKwkgKiB0aGUgbGFzdCBjYXNlIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQljYXNlIEFsbG9jYXRpb25zUGFja2FnZS5BTExPQ0FURTogeworCQkJQWxsb2NhdGUgYWxsb2NhdGUgPSAoQWxsb2NhdGUpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VBbGxvY2F0ZShhbGxvY2F0ZSk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBBbGxvY2F0aW9uc1BhY2thZ2UuQUxMT0NBVEVEOiB7CisJCQlBbGxvY2F0ZWQgYWxsb2NhdGVkID0gKEFsbG9jYXRlZCkgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZUFsbG9jYXRlZChhbGxvY2F0ZWQpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgQWxsb2NhdGlvbnNQYWNrYWdlLkFMTE9DQVRFX0FDVElWSVRZX1BBUlRJVElPTjogeworCQkJQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiBhbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uID0gKEFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24pIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKGFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24pOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKK30gLy8gQWxsb2NhdGlvbnNTd2l0Y2gKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNYTUxQcm9jZXNzb3IuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2FsbG9jYXRpb25zL3V0aWwvQWxsb2NhdGlvbnNYTUxQcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmIxODE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYWxsb2NhdGlvbnMvdXRpbC9BbGxvY2F0aW9uc1hNTFByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy51dGlsOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS51dGlsLlhNTFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGhlbHBlciBtZXRob2RzIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgWE1MIGRvY3VtZW50cworICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQWxsb2NhdGlvbnNYTUxQcm9jZXNzb3IgZXh0ZW5kcyBYTUxQcm9jZXNzb3IgeworCisJLyoqCisJICogUHVibGljIGNvbnN0cnVjdG9yIHRvIGluc3RhbnRpYXRlIHRoZSBoZWxwZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWxsb2NhdGlvbnNYTUxQcm9jZXNzb3IoKSB7CisJCXN1cGVyKChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRSkpOworCQlBbGxvY2F0aW9uc1BhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCX0KKworCS8qKgorCSAqIFJlZ2lzdGVyIGZvciAiKiIgYW5kICJ4bWwiIGZpbGUgZXh0ZW5zaW9ucyB0aGUgQWxsb2NhdGlvbnNSZXNvdXJjZUZhY3RvcnlJbXBsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgUmVzb3VyY2UuRmFjdG9yeT4gZ2V0UmVnaXN0cmF0aW9ucygpIHsKKwkJaWYgKHJlZ2lzdHJhdGlvbnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UmVnaXN0cmF0aW9ucygpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoWE1MX0VYVEVOU0lPTiwgbmV3IEFsbG9jYXRpb25zUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJCXJlZ2lzdHJhdGlvbnMucHV0KFNUQVJfRVhURU5TSU9OLCBuZXcgQWxsb2NhdGlvbnNSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQl9CisJCXJldHVybiByZWdpc3RyYXRpb25zOworCX0KKworfSAvLyBBbGxvY2F0aW9uc1hNTFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0JpbmRpbmdDb25uZWN0b3IuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9CaW5kaW5nQ29ubmVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmY2MwNAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9CaW5kaW5nQ29ubmVjdG9yLmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2NrczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkNvbm5lY3RvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+QmluZGluZyBDb25uZWN0b3I8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmluZGluZ0Nvbm5lY3RvciNnZXRCYXNlX0Nvbm5lY3RvciA8ZW0+QmFzZSBDb25uZWN0b3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0QmluZGluZ0Nvbm5lY3RvcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBCaW5kaW5nQ29ubmVjdG9yIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIENvbm5lY3RvcjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBDb25uZWN0b3I8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDb25uZWN0b3I8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfQ29ubmVjdG9yKENvbm5lY3RvcikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0QmluZGluZ0Nvbm5lY3Rvcl9CYXNlX0Nvbm5lY3RvcigpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQ29ubmVjdG9yIGdldEJhc2VfQ29ubmVjdG9yKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CaW5kaW5nQ29ubmVjdG9yI2dldEJhc2VfQ29ubmVjdG9yIDxlbT5CYXNlIENvbm5lY3RvcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDb25uZWN0b3I8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfQ29ubmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0Nvbm5lY3RvcihDb25uZWN0b3IgdmFsdWUpOworCit9IC8vIEJpbmRpbmdDb25uZWN0b3IKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9CbG9jay5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Jsb2NrLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5NjIyZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9CbG9jay5qYXZhCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+QmxvY2s8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2sjaXNFbmNhcHN1bGF0ZWQgPGVtPklzIEVuY2Fwc3VsYXRlZDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrI2dldEJhc2VfQ2xhc3MgPGVtPkJhc2UgQ2xhc3M8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0QmxvY2soKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQmxvY2sgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklzIEVuY2Fwc3VsYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SXMgRW5jYXBzdWxhdGVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklzIEVuY2Fwc3VsYXRlZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SXNFbmNhcHN1bGF0ZWQoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0QmxvY2tfSXNFbmNhcHN1bGF0ZWQoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UudW1sMi50eXBlcy5Cb29sZWFuIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc0VuY2Fwc3VsYXRlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBDbGFzczwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBDbGFzczwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIENsYXNzPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0NsYXNzKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRCbG9ja19CYXNlX0NsYXNzKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBnZXRCYXNlX0NsYXNzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9jayNnZXRCYXNlX0NsYXNzIDxlbT5CYXNlIENsYXNzPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIENsYXNzPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0NsYXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0NsYXNzKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrI2lzRW5jYXBzdWxhdGVkIDxlbT5JcyBFbmNhcHN1bGF0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklzIEVuY2Fwc3VsYXRlZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNFbmNhcHN1bGF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElzRW5jYXBzdWxhdGVkKGJvb2xlYW4gdmFsdWUpOworCit9IC8vIEJsb2NrCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvQmxvY2tzRmFjdG9yeS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Jsb2Nrc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNiOWJjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Jsb2Nrc0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2NrczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgcHJvdmlkZXMgYQorICogY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBCbG9ja3NGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUJsb2Nrc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJpbmRpbmcgQ29ubmVjdG9yPC9lbT4nLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5CaW5kaW5nIENvbm5lY3RvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQmluZGluZ0Nvbm5lY3RvciBjcmVhdGVCaW5kaW5nQ29ubmVjdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJsb2NrPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkJsb2NrPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlCbG9jayBjcmVhdGVCbG9jaygpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db25uZWN0b3IgUHJvcGVydHk8L2VtPicuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbm5lY3RvciBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQ29ubmVjdG9yUHJvcGVydHkgY3JlYXRlQ29ubmVjdG9yUHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGltZW5zaW9uPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpbWVuc2lvbjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGltZW5zaW9uIGNyZWF0ZURpbWVuc2lvbigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EaXN0cmlidXRlZCBQcm9wZXJ0eTwvZW0+Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGlzdHJpYnV0ZWQgUHJvcGVydHk8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURpc3RyaWJ1dGVkUHJvcGVydHkgY3JlYXRlRGlzdHJpYnV0ZWRQcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OZXN0ZWQgQ29ubmVjdG9yIEVuZDwvZW0+Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TmVzdGVkIENvbm5lY3RvciBFbmQ8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU5lc3RlZENvbm5lY3RvckVuZCBjcmVhdGVOZXN0ZWRDb25uZWN0b3JFbmQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGFydGljaXBhbnQgUHJvcGVydHk8L2VtPicuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBhcnRpY2lwYW50IFByb3BlcnR5PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQYXJ0aWNpcGFudFByb3BlcnR5IGNyZWF0ZVBhcnRpY2lwYW50UHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvZW0+Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJvcGVydHlTcGVjaWZpY1R5cGUgY3JlYXRlUHJvcGVydHlTcGVjaWZpY1R5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VW5pdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Vbml0PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlVbml0IGNyZWF0ZVVuaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VmFsdWUgVHlwZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5WYWx1ZSBUeXBlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlWYWx1ZVR5cGUgY3JlYXRlVmFsdWVUeXBlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQmxvY2tzUGFja2FnZSBnZXRCbG9ja3NQYWNrYWdlKCk7CisKK30gLy8gQmxvY2tzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Jsb2Nrc1BhY2thZ2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9CbG9ja3NQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0ZjQ0MAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9CbG9ja3NQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxMTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuIEl0IGNvbnRhaW5zCisgKiBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEJsb2Nrc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQKKwkgKiByZXByZXNlbnQKKwkgKiA8dWw+CisJICogPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja0ltcGwgPGVtPkJsb2NrPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja0ltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsI2dldEJsb2NrKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEJMT0NLID0gZUlOU1RBTkNFLmdldEJsb2NrKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JcyBFbmNhcHN1bGF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBCTE9DS19fSVNfRU5DQVBTVUxBVEVEID0gZUlOU1RBTkNFLmdldEJsb2NrX0lzRW5jYXBzdWxhdGVkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgQkxPQ0tfX0JBU0VfQ0xBU1MgPSBlSU5TVEFOQ0UuZ2V0QmxvY2tfQmFzZV9DbGFzcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5EaXN0cmlidXRlZFByb3BlcnR5SW1wbAorCQkgKiA8ZW0+RGlzdHJpYnV0ZWQgUHJvcGVydHk8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkRpc3RyaWJ1dGVkUHJvcGVydHlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbCNnZXREaXN0cmlidXRlZFByb3BlcnR5KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERJU1RSSUJVVEVEX1BST1BFUlRZID0gZUlOU1RBTkNFLmdldERpc3RyaWJ1dGVkUHJvcGVydHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUHJvcGVydHk8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBESVNUUklCVVRFRF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSA9IGVJTlNUQU5DRS5nZXREaXN0cmlidXRlZFByb3BlcnR5X0Jhc2VfUHJvcGVydHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkRpbWVuc2lvbkltcGwKKwkJICogPGVtPkRpbWVuc2lvbjwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuRGltZW5zaW9uSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGwjZ2V0RGltZW5zaW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERJTUVOU0lPTiA9IGVJTlNUQU5DRS5nZXREaW1lbnNpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnIDxlbT48Yj5CYXNlIEluc3RhbmNlIFNwZWNpZmljYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLiA8IS0tCisJCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBESU1FTlNJT05fX0JBU0VfSU5TVEFOQ0VfU1BFQ0lGSUNBVElPTiA9IGVJTlNUQU5DRS5nZXREaW1lbnNpb25fQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuVW5pdEltcGwgPGVtPlVuaXQ8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlVuaXRJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbCNnZXRVbml0KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFVOSVQgPSBlSU5TVEFOQ0UuZ2V0VW5pdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcgPGVtPjxiPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuIDwhLS0KKwkJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOSVRfX0JBU0VfSU5TVEFOQ0VfU1BFQ0lGSUNBVElPTiA9IGVJTlNUQU5DRS5nZXRVbml0X0Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaW1lbnNpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVTklUX19ESU1FTlNJT04gPSBlSU5TVEFOQ0UuZ2V0VW5pdF9EaW1lbnNpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuVmFsdWVUeXBlSW1wbCA8ZW0+VmFsdWUgVHlwZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuVmFsdWVUeXBlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGwjZ2V0VmFsdWVUeXBlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFZBTFVFX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0VmFsdWVUeXBlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIERhdGEgVHlwZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFZBTFVFX1RZUEVfX0JBU0VfREFUQV9UWVBFID0gZUlOU1RBTkNFLmdldFZhbHVlVHlwZV9CYXNlX0RhdGFUeXBlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vbml0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVkFMVUVfVFlQRV9fVU5JVCA9IGVJTlNUQU5DRS5nZXRWYWx1ZVR5cGVfVW5pdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGltZW5zaW9uPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVkFMVUVfVFlQRV9fRElNRU5TSU9OID0gZUlOU1RBTkNFLmdldFZhbHVlVHlwZV9EaW1lbnNpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuTmVzdGVkQ29ubmVjdG9yRW5kSW1wbAorCQkgKiA8ZW0+TmVzdGVkIENvbm5lY3RvciBFbmQ8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLk5lc3RlZENvbm5lY3RvckVuZEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsI2dldE5lc3RlZENvbm5lY3RvckVuZCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBORVNURURfQ09OTkVDVE9SX0VORCA9IGVJTlNUQU5DRS5nZXROZXN0ZWRDb25uZWN0b3JFbmQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByb3BlcnR5IFBhdGg8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE5FU1RFRF9DT05ORUNUT1JfRU5EX19QUk9QRVJUWV9QQVRIID0gZUlOU1RBTkNFLmdldE5lc3RlZENvbm5lY3RvckVuZF9Qcm9wZXJ0eVBhdGgoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQ29ubmVjdG9yIEVuZDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE5FU1RFRF9DT05ORUNUT1JfRU5EX19CQVNFX0NPTk5FQ1RPUl9FTkQgPSBlSU5TVEFOQ0UuZ2V0TmVzdGVkQ29ubmVjdG9yRW5kX0Jhc2VfQ29ubmVjdG9yRW5kKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlBhcnRpY2lwYW50UHJvcGVydHlJbXBsCisJCSAqIDxlbT5QYXJ0aWNpcGFudCBQcm9wZXJ0eTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuUGFydGljaXBhbnRQcm9wZXJ0eUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsI2dldFBhcnRpY2lwYW50UHJvcGVydHkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUEFSVElDSVBBTlRfUFJPUEVSVFkgPSBlSU5TVEFOQ0UuZ2V0UGFydGljaXBhbnRQcm9wZXJ0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQcm9wZXJ0eTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFBBUlRJQ0lQQU5UX1BST1BFUlRZX19CQVNFX1BST1BFUlRZID0gZUlOU1RBTkNFLmdldFBhcnRpY2lwYW50UHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5kPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUEFSVElDSVBBTlRfUFJPUEVSVFlfX0VORCA9IGVJTlNUQU5DRS5nZXRQYXJ0aWNpcGFudFByb3BlcnR5X0VuZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5Db25uZWN0b3JQcm9wZXJ0eUltcGwgPGVtPkNvbm5lY3RvciBQcm9wZXJ0eTwvZW0+fScKKwkJICogY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQ29ubmVjdG9yUHJvcGVydHlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbCNnZXRDb25uZWN0b3JQcm9wZXJ0eSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT05ORUNUT1JfUFJPUEVSVFkgPSBlSU5TVEFOQ0UuZ2V0Q29ubmVjdG9yUHJvcGVydHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUHJvcGVydHk8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBDT05ORUNUT1JfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFkgPSBlSU5TVEFOQ0UuZ2V0Q29ubmVjdG9yUHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q29ubmVjdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgQ09OTkVDVE9SX1BST1BFUlRZX19DT05ORUNUT1IgPSBlSU5TVEFOQ0UuZ2V0Q29ubmVjdG9yUHJvcGVydHlfQ29ubmVjdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJpbmRpbmdDb25uZWN0b3JJbXBsIDxlbT5CaW5kaW5nIENvbm5lY3RvcjwvZW0+fScKKwkJICogY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmluZGluZ0Nvbm5lY3RvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsI2dldEJpbmRpbmdDb25uZWN0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgQklORElOR19DT05ORUNUT1IgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0Nvbm5lY3RvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBDb25uZWN0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBCSU5ESU5HX0NPTk5FQ1RPUl9fQkFTRV9DT05ORUNUT1IgPSBlSU5TVEFOQ0UuZ2V0QmluZGluZ0Nvbm5lY3Rvcl9CYXNlX0Nvbm5lY3RvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5Qcm9wZXJ0eVNwZWNpZmljVHlwZUltcGwKKwkJICogPGVtPlByb3BlcnR5IFNwZWNpZmljIFR5cGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlByb3BlcnR5U3BlY2lmaWNUeXBlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGwjZ2V0UHJvcGVydHlTcGVjaWZpY1R5cGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRSA9IGVJTlNUQU5DRS5nZXRQcm9wZXJ0eVNwZWNpZmljVHlwZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBDbGFzc2lmaWVyPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9fQkFTRV9DTEFTU0lGSUVSID0gZUlOU1RBTkNFLmdldFByb3BlcnR5U3BlY2lmaWNUeXBlX0Jhc2VfQ2xhc3NpZmllcigpOworCisJfQorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiYmxvY2tzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0Jsb2NrcyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJCbG9ja3MiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUJsb2Nrc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tJbXBsIDxlbT5CbG9jazwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsI2dldEJsb2NrKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEJMT0NLID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JcyBFbmNhcHN1bGF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBCTE9DS19fSVNfRU5DQVBTVUxBVEVEID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQkxPQ0tfX0JBU0VfQ0xBU1MgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJsb2NrPC9lbT4nIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEJMT0NLX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkJsb2NrPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQkxPQ0tfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5EaXN0cmlidXRlZFByb3BlcnR5SW1wbCA8ZW0+RGlzdHJpYnV0ZWQgUHJvcGVydHk8L2VtPn0nCisJICogY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5EaXN0cmlidXRlZFByb3BlcnR5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbCNnZXREaXN0cmlidXRlZFByb3BlcnR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERJU1RSSUJVVEVEX1BST1BFUlRZID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIFByb3BlcnR5PC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTVFJJQlVURURfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFkgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc3RyaWJ1dGVkIFByb3BlcnR5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU1RSSUJVVEVEX1BST1BFUlRZX0ZFQVRVUkVfQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkRpc3RyaWJ1dGVkIFByb3BlcnR5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTVFJJQlVURURfUFJPUEVSVFlfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5EaW1lbnNpb25JbXBsIDxlbT5EaW1lbnNpb248L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkRpbWVuc2lvbkltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGwjZ2V0RGltZW5zaW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERJTUVOU0lPTiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElNRU5TSU9OX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT04gPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpbWVuc2lvbjwvZW0+JyBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESU1FTlNJT05fRkVBVFVSRV9DT1VOVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+RGltZW5zaW9uPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElNRU5TSU9OX09QRVJBVElPTl9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuVW5pdEltcGwgPGVtPlVuaXQ8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlVuaXRJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsI2dldFVuaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVU5JVCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5JVF9fQkFTRV9JTlNUQU5DRV9TUEVDSUZJQ0FUSU9OID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaW1lbnNpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTklUX19ESU1FTlNJT04gPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVuaXQ8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5JVF9GRUFUVVJFX0NPVU5UID0gMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5Vbml0PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5JVF9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5WYWx1ZVR5cGVJbXBsCisJICogPGVtPlZhbHVlIFR5cGU8L2VtPn0nIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlZhbHVlVHlwZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGwjZ2V0VmFsdWVUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFZBTFVFX1RZUEUgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgRGF0YSBUeXBlPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkFMVUVfVFlQRV9fQkFTRV9EQVRBX1RZUEUgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVuaXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWQUxVRV9UWVBFX19VTklUID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaW1lbnNpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWQUxVRV9UWVBFX19ESU1FTlNJT04gPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlZhbHVlIFR5cGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkFMVUVfVFlQRV9GRUFUVVJFX0NPVU5UID0gMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5WYWx1ZSBUeXBlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkFMVUVfVFlQRV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLk5lc3RlZENvbm5lY3RvckVuZEltcGwgPGVtPk5lc3RlZCBDb25uZWN0b3IgRW5kPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLk5lc3RlZENvbm5lY3RvckVuZEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGwjZ2V0TmVzdGVkQ29ubmVjdG9yRW5kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE5FU1RFRF9DT05ORUNUT1JfRU5EID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9wZXJ0eSBQYXRoPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBORVNURURfQ09OTkVDVE9SX0VORF9fUFJPUEVSVFlfUEFUSCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBDb25uZWN0b3IgRW5kPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTkVTVEVEX0NPTk5FQ1RPUl9FTkRfX0JBU0VfQ09OTkVDVE9SX0VORCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TmVzdGVkIENvbm5lY3RvciBFbmQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTkVTVEVEX0NPTk5FQ1RPUl9FTkRfRkVBVFVSRV9DT1VOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+TmVzdGVkIENvbm5lY3RvciBFbmQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBORVNURURfQ09OTkVDVE9SX0VORF9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlBhcnRpY2lwYW50UHJvcGVydHlJbXBsIDxlbT5QYXJ0aWNpcGFudCBQcm9wZXJ0eTwvZW0+fScKKwkgKiBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlBhcnRpY2lwYW50UHJvcGVydHlJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsI2dldFBhcnRpY2lwYW50UHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUEFSVElDSVBBTlRfUFJPUEVSVFkgPSA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUHJvcGVydHk8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQQVJUSUNJUEFOVF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5kPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFSVElDSVBBTlRfUFJPUEVSVFlfX0VORCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydGljaXBhbnQgUHJvcGVydHk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFSVElDSVBBTlRfUFJPUEVSVFlfRkVBVFVSRV9DT1VOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+UGFydGljaXBhbnQgUHJvcGVydHk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQQVJUSUNJUEFOVF9QUk9QRVJUWV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkNvbm5lY3RvclByb3BlcnR5SW1wbCA8ZW0+Q29ubmVjdG9yIFByb3BlcnR5PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkNvbm5lY3RvclByb3BlcnR5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbCNnZXRDb25uZWN0b3JQcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT05ORUNUT1JfUFJPUEVSVFkgPSA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUHJvcGVydHk8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05ORUNUT1JfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFkgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbm5lY3RvcjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTk5FQ1RPUl9QUk9QRVJUWV9fQ09OTkVDVE9SID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Db25uZWN0b3IgUHJvcGVydHk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OTkVDVE9SX1BST1BFUlRZX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkNvbm5lY3RvciBQcm9wZXJ0eTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTk5FQ1RPUl9QUk9QRVJUWV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJpbmRpbmdDb25uZWN0b3JJbXBsIDxlbT5CaW5kaW5nIENvbm5lY3RvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CaW5kaW5nQ29ubmVjdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbCNnZXRCaW5kaW5nQ29ubmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEJJTkRJTkdfQ09OTkVDVE9SID0gODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENvbm5lY3RvcjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEJJTkRJTkdfQ09OTkVDVE9SX19CQVNFX0NPTk5FQ1RPUiA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QmluZGluZyBDb25uZWN0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQklORElOR19DT05ORUNUT1JfRkVBVFVSRV9DT1VOVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+QmluZGluZyBDb25uZWN0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBCSU5ESU5HX0NPTk5FQ1RPUl9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlByb3BlcnR5U3BlY2lmaWNUeXBlSW1wbCA8ZW0+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvZW0+fScKKwkgKiBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlByb3BlcnR5U3BlY2lmaWNUeXBlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbCNnZXRQcm9wZXJ0eVNwZWNpZmljVHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQUk9QRVJUWV9TUEVDSUZJQ19UWVBFID0gOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzaWZpZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9QRVJUWV9TUEVDSUZJQ19UWVBFX19CQVNFX0NMQVNTSUZJRVIgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlByb3BlcnR5IFNwZWNpZmljIFR5cGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5Qcm9wZXJ0eSBTcGVjaWZpYyBUeXBlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJpbmRpbmdDb25uZWN0b3IKKwkgKiA8ZW0+QmluZGluZyBDb25uZWN0b3I8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QmluZGluZyBDb25uZWN0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CaW5kaW5nQ29ubmVjdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRCaW5kaW5nQ29ubmVjdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJpbmRpbmdDb25uZWN0b3IjZ2V0QmFzZV9Db25uZWN0b3IgPGVtPkJhc2UgQ29ubmVjdG9yPC9lbT59ICcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgQ29ubmVjdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmluZGluZ0Nvbm5lY3RvciNnZXRCYXNlX0Nvbm5lY3RvcigpCisJICogQHNlZSAjZ2V0QmluZGluZ0Nvbm5lY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0QmluZGluZ0Nvbm5lY3Rvcl9CYXNlX0Nvbm5lY3RvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrIDxlbT5CbG9jazwvZW0+fScuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5CbG9jazwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRCbG9jaygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9jayNnZXRCYXNlX0NsYXNzIDxlbT5CYXNlIENsYXNzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBDbGFzczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrI2dldEJhc2VfQ2xhc3MoKQorCSAqIEBzZWUgI2dldEJsb2NrKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRCbG9ja19CYXNlX0NsYXNzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrI2lzRW5jYXBzdWxhdGVkIDxlbT5JcyBFbmNhcHN1bGF0ZWQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JcyBFbmNhcHN1bGF0ZWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9jayNpc0VuY2Fwc3VsYXRlZCgpCisJICogQHNlZSAjZ2V0QmxvY2soKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEJsb2NrX0lzRW5jYXBzdWxhdGVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlCbG9ja3NGYWN0b3J5IGdldEJsb2Nrc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Db25uZWN0b3JQcm9wZXJ0eQorCSAqIDxlbT5Db25uZWN0b3IgUHJvcGVydHk8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q29ubmVjdG9yIFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQ29ubmVjdG9yUHJvcGVydHkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbm5lY3RvclByb3BlcnR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkNvbm5lY3RvclByb3BlcnR5I2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQ29ubmVjdG9yUHJvcGVydHkjZ2V0QmFzZV9Qcm9wZXJ0eSgpCisJICogQHNlZSAjZ2V0Q29ubmVjdG9yUHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldENvbm5lY3RvclByb3BlcnR5X0Jhc2VfUHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQ29ubmVjdG9yUHJvcGVydHkjZ2V0Q29ubmVjdG9yIDxlbT5Db25uZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Db25uZWN0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Db25uZWN0b3JQcm9wZXJ0eSNnZXRDb25uZWN0b3IoKQorCSAqIEBzZWUgI2dldENvbm5lY3RvclByb3BlcnR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRDb25uZWN0b3JQcm9wZXJ0eV9Db25uZWN0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbiA8ZW0+RGltZW5zaW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRpbWVuc2lvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGltZW5zaW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbiNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbgorCSAqIDxlbT5CYXNlIEluc3RhbmNlIFNwZWNpZmljYXRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbiNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigpCisJICogQHNlZSAjZ2V0RGltZW5zaW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXREaW1lbnNpb25fQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpc3RyaWJ1dGVkUHJvcGVydHkgPGVtPkRpc3RyaWJ1dGVkIFByb3BlcnR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGlzdHJpYnV0ZWQgUHJvcGVydHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaXN0cmlidXRlZFByb3BlcnR5CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREaXN0cmlidXRlZFByb3BlcnR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpc3RyaWJ1dGVkUHJvcGVydHkjZ2V0QmFzZV9Qcm9wZXJ0eSA8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+fSAnLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuRGlzdHJpYnV0ZWRQcm9wZXJ0eSNnZXRCYXNlX1Byb3BlcnR5KCkKKwkgKiBAc2VlICNnZXREaXN0cmlidXRlZFByb3BlcnR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXREaXN0cmlidXRlZFByb3BlcnR5X0Jhc2VfUHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZCA8ZW0+TmVzdGVkIENvbm5lY3RvciBFbmQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OZXN0ZWQgQ29ubmVjdG9yIEVuZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TmVzdGVkQ29ubmVjdG9yRW5kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5OZXN0ZWRDb25uZWN0b3JFbmQjZ2V0QmFzZV9Db25uZWN0b3JFbmQKKwkgKiA8ZW0+QmFzZSBDb25uZWN0b3IgRW5kPC9lbT59Jy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBDb25uZWN0b3IgRW5kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuTmVzdGVkQ29ubmVjdG9yRW5kI2dldEJhc2VfQ29ubmVjdG9yRW5kKCkKKwkgKiBAc2VlICNnZXROZXN0ZWRDb25uZWN0b3JFbmQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE5lc3RlZENvbm5lY3RvckVuZF9CYXNlX0Nvbm5lY3RvckVuZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZCNnZXRQcm9wZXJ0eVBhdGgKKwkgKiA8ZW0+UHJvcGVydHkgUGF0aDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+UHJvcGVydHkgUGF0aDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZCNnZXRQcm9wZXJ0eVBhdGgoKQorCSAqIEBzZWUgI2dldE5lc3RlZENvbm5lY3RvckVuZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TmVzdGVkQ29ubmVjdG9yRW5kX1Byb3BlcnR5UGF0aCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eSA8ZW0+UGFydGljaXBhbnQgUHJvcGVydHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QYXJ0aWNpcGFudCBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlBhcnRpY2lwYW50UHJvcGVydHkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBhcnRpY2lwYW50UHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eSNnZXRCYXNlX1Byb3BlcnR5IDxlbT5CYXNlIFByb3BlcnR5PC9lbT59ICcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5QYXJ0aWNpcGFudFByb3BlcnR5I2dldEJhc2VfUHJvcGVydHkoKQorCSAqIEBzZWUgI2dldFBhcnRpY2lwYW50UHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFBhcnRpY2lwYW50UHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5QYXJ0aWNpcGFudFByb3BlcnR5I2dldEVuZCA8ZW0+RW5kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RW5kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eSNnZXRFbmQoKQorCSAqIEBzZWUgI2dldFBhcnRpY2lwYW50UHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFBhcnRpY2lwYW50UHJvcGVydHlfRW5kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZSA8ZW0+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlByb3BlcnR5IFNwZWNpZmljIFR5cGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UHJvcGVydHlTcGVjaWZpY1R5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUHJvcGVydHlTcGVjaWZpY1R5cGUjZ2V0QmFzZV9DbGFzc2lmaWVyCisJICogPGVtPkJhc2UgQ2xhc3NpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgQ2xhc3NpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlByb3BlcnR5U3BlY2lmaWNUeXBlI2dldEJhc2VfQ2xhc3NpZmllcigpCisJICogQHNlZSAjZ2V0UHJvcGVydHlTcGVjaWZpY1R5cGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFByb3BlcnR5U3BlY2lmaWNUeXBlX0Jhc2VfQ2xhc3NpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlVuaXQgPGVtPlVuaXQ8L2VtPn0nLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VW5pdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlVuaXQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFVuaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdCNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbgorCSAqIDxlbT5CYXNlIEluc3RhbmNlIFNwZWNpZmljYXRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlVuaXQjZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKQorCSAqIEBzZWUgI2dldFVuaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVuaXRfQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdCNnZXREaW1lbnNpb24gPGVtPkRpbWVuc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkRpbWVuc2lvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlVuaXQjZ2V0RGltZW5zaW9uKCkKKwkgKiBAc2VlICNnZXRVbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRVbml0X0RpbWVuc2lvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVmFsdWVUeXBlIDxlbT5WYWx1ZSBUeXBlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlZhbHVlIFR5cGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5WYWx1ZVR5cGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFZhbHVlVHlwZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5WYWx1ZVR5cGUjZ2V0QmFzZV9EYXRhVHlwZSA8ZW0+QmFzZSBEYXRhIFR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIERhdGEgVHlwZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZSNnZXRCYXNlX0RhdGFUeXBlKCkKKwkgKiBAc2VlICNnZXRWYWx1ZVR5cGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFZhbHVlVHlwZV9CYXNlX0RhdGFUeXBlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZSNnZXREaW1lbnNpb24gPGVtPkRpbWVuc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkRpbWVuc2lvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZSNnZXREaW1lbnNpb24oKQorCSAqIEBzZWUgI2dldFZhbHVlVHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VmFsdWVUeXBlX0RpbWVuc2lvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5WYWx1ZVR5cGUjZ2V0VW5pdCA8ZW0+VW5pdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+VW5pdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZSNnZXRVbml0KCkKKwkgKiBAc2VlICNnZXRWYWx1ZVR5cGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFZhbHVlVHlwZV9Vbml0KCk7CisKK30gLy8gQmxvY2tzUGFja2FnZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Nvbm5lY3RvclByb3BlcnR5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvQ29ubmVjdG9yUHJvcGVydHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTYwYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Nvbm5lY3RvclByb3BlcnR5LmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2NrczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkNvbm5lY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+Q29ubmVjdG9yIFByb3BlcnR5PC9iPjwvZW0+ICcuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Db25uZWN0b3JQcm9wZXJ0eSNnZXRCYXNlX1Byb3BlcnR5IDxlbT5CYXNlIFByb3BlcnR5PC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQ29ubmVjdG9yUHJvcGVydHkjZ2V0Q29ubmVjdG9yIDxlbT5Db25uZWN0b3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0Q29ubmVjdG9yUHJvcGVydHkoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29ubmVjdG9yUHJvcGVydHkgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgUHJvcGVydHk8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9Qcm9wZXJ0eShQcm9wZXJ0eSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0Q29ubmVjdG9yUHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJvcGVydHkgZ2V0QmFzZV9Qcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Q29ubmVjdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db25uZWN0b3I8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q29ubmVjdG9yPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRDb25uZWN0b3IoQ29ubmVjdG9yKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRDb25uZWN0b3JQcm9wZXJ0eV9Db25uZWN0b3IoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbm5lY3RvciBnZXRDb25uZWN0b3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkNvbm5lY3RvclByb3BlcnR5I2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfUHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfUHJvcGVydHkoUHJvcGVydHkgdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkNvbm5lY3RvclByb3BlcnR5I2dldENvbm5lY3RvcgorCSAqIDxlbT5Db25uZWN0b3I8L2VtPn0nIHJlZmVyZW5jZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Db25uZWN0b3I8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldENvbm5lY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q29ubmVjdG9yKENvbm5lY3RvciB2YWx1ZSk7CisKK30gLy8gQ29ubmVjdG9yUHJvcGVydHkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9EaW1lbnNpb24uamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9EaW1lbnNpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjk1MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0RpbWVuc2lvbi5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbnN0YW5jZVNwZWNpZmljYXRpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkRpbWVuc2lvbjwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaW1lbnNpb24jZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gPGVtPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXREaW1lbnNpb24oKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGltZW5zaW9uIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIEluc3RhbmNlIFNwZWNpZmljYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEluc3RhbmNlIFNwZWNpZmljYXRpb248L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKEluc3RhbmNlU3BlY2lmaWNhdGlvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0RGltZW5zaW9uX0Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnN0YW5jZVNwZWNpZmljYXRpb24gZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbiNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiA8ZW0+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9lbT59JworCSAqIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKEluc3RhbmNlU3BlY2lmaWNhdGlvbiB2YWx1ZSk7CisKK30gLy8gRGltZW5zaW9uCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvRGlzdHJpYnV0ZWRQcm9wZXJ0eS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Rpc3RyaWJ1dGVkUHJvcGVydHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjliOWVmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL0Rpc3RyaWJ1dGVkUHJvcGVydHkuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkRpc3RyaWJ1dGVkIFByb3BlcnR5PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpc3RyaWJ1dGVkUHJvcGVydHkjZ2V0QmFzZV9Qcm9wZXJ0eSA8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXREaXN0cmlidXRlZFByb3BlcnR5KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIERpc3RyaWJ1dGVkUHJvcGVydHkgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgUHJvcGVydHk8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9Qcm9wZXJ0eShQcm9wZXJ0eSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0RGlzdHJpYnV0ZWRQcm9wZXJ0eV9CYXNlX1Byb3BlcnR5KCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQcm9wZXJ0eSBnZXRCYXNlX1Byb3BlcnR5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaXN0cmlidXRlZFByb3BlcnR5I2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfUHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfUHJvcGVydHkoUHJvcGVydHkgdmFsdWUpOworCit9IC8vIERpc3RyaWJ1dGVkUHJvcGVydHkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9OZXN0ZWRDb25uZWN0b3JFbmQuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9OZXN0ZWRDb25uZWN0b3JFbmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQ5N2NiCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL05lc3RlZENvbm5lY3RvckVuZC5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ29ubmVjdG9yRW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlByb3BlcnR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlR5cGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPk5lc3RlZCBDb25uZWN0b3IgRW5kPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZCNnZXRQcm9wZXJ0eVBhdGggPGVtPlByb3BlcnR5IFBhdGg8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5OZXN0ZWRDb25uZWN0b3JFbmQjZ2V0QmFzZV9Db25uZWN0b3JFbmQgPGVtPkJhc2UgQ29ubmVjdG9yIEVuZDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXROZXN0ZWRDb25uZWN0b3JFbmQoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTmVzdGVkQ29ubmVjdG9yRW5kIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIENvbm5lY3RvciBFbmQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgQ29ubmVjdG9yIEVuZDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIENvbm5lY3RvciBFbmQ8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfQ29ubmVjdG9yRW5kKENvbm5lY3RvckVuZCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0TmVzdGVkQ29ubmVjdG9yRW5kX0Jhc2VfQ29ubmVjdG9yRW5kKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb25uZWN0b3JFbmQgZ2V0QmFzZV9Db25uZWN0b3JFbmQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByb3BlcnR5IFBhdGg8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eX0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qcm9wZXJ0eSBQYXRoPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJvcGVydHkgUGF0aDwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0TmVzdGVkQ29ubmVjdG9yRW5kX1Byb3BlcnR5UGF0aCgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxQcm9wZXJ0eT4gZ2V0UHJvcGVydHlQYXRoKCk7CisKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eX0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicsIGFuZCAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGZyb20gdGhlICcgPGVtPjxiPlByb3BlcnR5IFBhdGg8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eX0gdG8gcmV0cmlldmUsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEBwYXJhbSB0eXBlCisJICogICAgICAgICAgICBUaGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLlByb3BlcnR5fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHJldHVybiBUaGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLlByb3BlcnR5fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JywgYW5kICc8ZW0+PGI+VHlwZTwvYj48L2VtPicsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEBzZWUgI2dldFByb3BlcnR5UGF0aCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCVByb3BlcnR5IGdldFByb3BlcnR5UGF0aChTdHJpbmcgbmFtZSwgVHlwZSB0eXBlKTsKKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLlByb3BlcnR5fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JywgYW5kICc8ZW0+PGI+VHlwZTwvYj48L2VtPicgZnJvbSB0aGUgJyA8ZW0+PGI+UHJvcGVydHkgUGF0aDwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBUaGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLlByb3BlcnR5fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHBhcmFtIHR5cGUKKwkgKiAgICAgICAgICAgIFRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHl9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcGFyYW0gaWdub3JlQ2FzZQorCSAqICAgICAgICAgICAgV2hldGhlciB0byBpZ25vcmUgY2FzZSBpbiB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30gY29tcGFyaXNvbnMuCisJICogQHBhcmFtIGVDbGFzcworCSAqICAgICAgICAgICAgVGhlIEVjb3JlIGNsYXNzIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHl9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcmV0dXJuIFRoZSBmaXJzdCB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHl9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLCBhbmQgJzxlbT48Yj5UeXBlPC9iPjwvZW0+Jywgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHNlZSAjZ2V0UHJvcGVydHlQYXRoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJvcGVydHkgZ2V0UHJvcGVydHlQYXRoKFN0cmluZyBuYW1lLCBUeXBlIHR5cGUsIGJvb2xlYW4gaWdub3JlQ2FzZSwgRUNsYXNzIGVDbGFzcyk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5OZXN0ZWRDb25uZWN0b3JFbmQjZ2V0QmFzZV9Db25uZWN0b3JFbmQgPGVtPkJhc2UgQ29ubmVjdG9yIEVuZDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDb25uZWN0b3IgRW5kPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0Nvbm5lY3RvckVuZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9Db25uZWN0b3JFbmQoQ29ubmVjdG9yRW5kIHZhbHVlKTsKKworfSAvLyBOZXN0ZWRDb25uZWN0b3JFbmQKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9QYXJ0aWNpcGFudFByb3BlcnR5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvUGFydGljaXBhbnRQcm9wZXJ0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODk5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvUGFydGljaXBhbnRQcm9wZXJ0eS5qYXZhCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UGFydGljaXBhbnQgUHJvcGVydHk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eSNnZXRCYXNlX1Byb3BlcnR5IDxlbT5CYXNlIFByb3BlcnR5PC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eSNnZXRFbmQgPGVtPkVuZDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRQYXJ0aWNpcGFudFByb3BlcnR5KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBhcnRpY2lwYW50UHJvcGVydHkgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgUHJvcGVydHk8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9Qcm9wZXJ0eShQcm9wZXJ0eSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0UGFydGljaXBhbnRQcm9wZXJ0eV9CYXNlX1Byb3BlcnR5KCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQcm9wZXJ0eSBnZXRCYXNlX1Byb3BlcnR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FbmQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVuZDwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FbmQ8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEVuZChQcm9wZXJ0eSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0UGFydGljaXBhbnRQcm9wZXJ0eV9FbmQoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVByb3BlcnR5IGdldEVuZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eSNnZXRCYXNlX1Byb3BlcnR5IDxlbT5CYXNlIFByb3BlcnR5PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIFByb3BlcnR5PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX1Byb3BlcnR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX1Byb3BlcnR5KFByb3BlcnR5IHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlBhcnRpY2lwYW50UHJvcGVydHkjZ2V0RW5kIDxlbT5FbmQ8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmQ8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEVuZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RW5kKFByb3BlcnR5IHZhbHVlKTsKKworfSAvLyBQYXJ0aWNpcGFudFByb3BlcnR5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvUHJvcGVydHlTcGVjaWZpY1R5cGUuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9Qcm9wZXJ0eVNwZWNpZmljVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNzVkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvUHJvcGVydHlTcGVjaWZpY1R5cGUuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3NpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZSNnZXRCYXNlX0NsYXNzaWZpZXIgPGVtPkJhc2UgQ2xhc3NpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRQcm9wZXJ0eVNwZWNpZmljVHlwZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVNwZWNpZmljVHlwZSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBDbGFzc2lmaWVyPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIENsYXNzaWZpZXI8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDbGFzc2lmaWVyPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0NsYXNzaWZpZXIoQ2xhc3NpZmllcikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0UHJvcGVydHlTcGVjaWZpY1R5cGVfQmFzZV9DbGFzc2lmaWVyKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDbGFzc2lmaWVyIGdldEJhc2VfQ2xhc3NpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUHJvcGVydHlTcGVjaWZpY1R5cGUjZ2V0QmFzZV9DbGFzc2lmaWVyIDxlbT5CYXNlIENsYXNzaWZpZXI8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgQ2xhc3NpZmllcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9DbGFzc2lmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0NsYXNzaWZpZXIoQ2xhc3NpZmllciB2YWx1ZSk7CisKK30gLy8gUHJvcGVydHlTcGVjaWZpY1R5cGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9Vbml0LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvVW5pdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzQ2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvVW5pdC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbnN0YW5jZVNwZWNpZmljYXRpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlVuaXQ8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdCNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiA8ZW0+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdCNnZXREaW1lbnNpb24gPGVtPkRpbWVuc2lvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRVbml0KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFVuaXQgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oSW5zdGFuY2VTcGVjaWZpY2F0aW9uKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRVbml0X0Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnN0YW5jZVNwZWNpZmljYXRpb24gZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpbWVuc2lvbjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGltZW5zaW9uPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpbWVuc2lvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0RGltZW5zaW9uKERpbWVuc2lvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0VW5pdF9EaW1lbnNpb24oKQorCSAqIEBtb2RlbCBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGltZW5zaW9uIGdldERpbWVuc2lvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdCNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiA8ZW0+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9lbT59JworCSAqIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgSW5zdGFuY2UgU3BlY2lmaWNhdGlvbjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKEluc3RhbmNlU3BlY2lmaWNhdGlvbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdCNnZXREaW1lbnNpb24KKwkgKiA8ZW0+RGltZW5zaW9uPC9lbT59JyByZWZlcmVuY2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGltZW5zaW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXREaW1lbnNpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERpbWVuc2lvbihEaW1lbnNpb24gdmFsdWUpOworCit9IC8vIFVuaXQKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9WYWx1ZVR5cGUuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9WYWx1ZVR5cGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQwNjk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL1ZhbHVlVHlwZS5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuRGF0YVR5cGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlZhbHVlIFR5cGU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVmFsdWVUeXBlI2dldEJhc2VfRGF0YVR5cGUgPGVtPkJhc2UgRGF0YSBUeXBlPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVmFsdWVUeXBlI2dldFVuaXQgPGVtPlVuaXQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5WYWx1ZVR5cGUjZ2V0RGltZW5zaW9uIDxlbT5EaW1lbnNpb248L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UjZ2V0VmFsdWVUeXBlKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFZhbHVlVHlwZSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBEYXRhIFR5cGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgRGF0YSBUeXBlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgRGF0YSBUeXBlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0RhdGFUeXBlKERhdGFUeXBlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRWYWx1ZVR5cGVfQmFzZV9EYXRhVHlwZSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGF0YVR5cGUgZ2V0QmFzZV9EYXRhVHlwZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGltZW5zaW9uPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EaW1lbnNpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGltZW5zaW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXREaW1lbnNpb24oRGltZW5zaW9uKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRWYWx1ZVR5cGVfRGltZW5zaW9uKCkKKwkgKiBAbW9kZWwgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCURpbWVuc2lvbiBnZXREaW1lbnNpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuaXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlVuaXQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VW5pdDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0VW5pdChVbml0KQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNnZXRWYWx1ZVR5cGVfVW5pdCgpCisJICogQG1vZGVsIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlVbml0IGdldFVuaXQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZSNnZXRCYXNlX0RhdGFUeXBlIDxlbT5CYXNlIERhdGEgVHlwZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBEYXRhIFR5cGU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfRGF0YVR5cGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfRGF0YVR5cGUoRGF0YVR5cGUgdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZSNnZXREaW1lbnNpb24KKwkgKiA8ZW0+RGltZW5zaW9uPC9lbT59JyByZWZlcmVuY2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGltZW5zaW9uPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXREaW1lbnNpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERpbWVuc2lvbihEaW1lbnNpb24gdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVmFsdWVUeXBlI2dldFVuaXQgPGVtPlVuaXQ8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Vbml0PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRVbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRVbml0KFVuaXQgdmFsdWUpOworCit9IC8vIFZhbHVlVHlwZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvQmluZGluZ0Nvbm5lY3RvckltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0JpbmRpbmdDb25uZWN0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmNzI4MwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0JpbmRpbmdDb25uZWN0b3JJbXBsLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJpbmRpbmdDb25uZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Db25uZWN0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5CaW5kaW5nIENvbm5lY3RvcjwvYj48L2VtPiAnLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmluZGluZ0Nvbm5lY3RvckltcGwjZ2V0QmFzZV9Db25uZWN0b3IgPGVtPkJhc2UgQ29ubmVjdG9yPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQmluZGluZ0Nvbm5lY3RvckltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgQmluZGluZ0Nvbm5lY3RvciB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0Nvbm5lY3RvcigpIDxlbT5CYXNlIENvbm5lY3RvcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX0Nvbm5lY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIENvbm5lY3RvciBiYXNlX0Nvbm5lY3RvcjsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBCaW5kaW5nQ29ubmVjdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29ubmVjdG9yIGJhc2ljR2V0QmFzZV9Db25uZWN0b3IoKSB7CisJCXJldHVybiBiYXNlX0Nvbm5lY3RvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5CSU5ESU5HX0NPTk5FQ1RPUl9fQkFTRV9DT05ORUNUT1I6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0Nvbm5lY3RvcigpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9Db25uZWN0b3IoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuQklORElOR19DT05ORUNUT1JfX0JBU0VfQ09OTkVDVE9SOgorCQkJcmV0dXJuIGJhc2VfQ29ubmVjdG9yICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5CSU5ESU5HX0NPTk5FQ1RPUl9fQkFTRV9DT05ORUNUT1I6CisJCQlzZXRCYXNlX0Nvbm5lY3RvcigoQ29ubmVjdG9yKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEJsb2Nrc1BhY2thZ2UuTGl0ZXJhbHMuQklORElOR19DT05ORUNUT1I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkJJTkRJTkdfQ09OTkVDVE9SX19CQVNFX0NPTk5FQ1RPUjoKKwkJCXNldEJhc2VfQ29ubmVjdG9yKChDb25uZWN0b3IpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb25uZWN0b3IgZ2V0QmFzZV9Db25uZWN0b3IoKSB7CisJCWlmIChiYXNlX0Nvbm5lY3RvciAhPSBudWxsICYmIGJhc2VfQ29ubmVjdG9yLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0Nvbm5lY3RvciA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfQ29ubmVjdG9yOworCQkJYmFzZV9Db25uZWN0b3IgPSAoQ29ubmVjdG9yKSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfQ29ubmVjdG9yKTsKKwkJCWlmIChiYXNlX0Nvbm5lY3RvciAhPSBvbGRCYXNlX0Nvbm5lY3RvcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQmxvY2tzUGFja2FnZS5CSU5ESU5HX0NPTk5FQ1RPUl9fQkFTRV9DT05ORUNUT1IsIG9sZEJhc2VfQ29ubmVjdG9yLCBiYXNlX0Nvbm5lY3RvcikpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9Db25uZWN0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9Db25uZWN0b3IoQ29ubmVjdG9yIG5ld0Jhc2VfQ29ubmVjdG9yKSB7CisJCUNvbm5lY3RvciBvbGRCYXNlX0Nvbm5lY3RvciA9IGJhc2VfQ29ubmVjdG9yOworCQliYXNlX0Nvbm5lY3RvciA9IG5ld0Jhc2VfQ29ubmVjdG9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuQklORElOR19DT05ORUNUT1JfX0JBU0VfQ09OTkVDVE9SLCBvbGRCYXNlX0Nvbm5lY3RvciwgYmFzZV9Db25uZWN0b3IpKTsKKwkJfQorCX0KKworfSAvLyBCaW5kaW5nQ29ubmVjdG9ySW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvQmxvY2tJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9CbG9ja0ltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE0ZTNlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvQmxvY2tJbXBsLmphdmEKQEAgLTAsMCArMSwyNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5CbG9jazwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja0ltcGwjaXNFbmNhcHN1bGF0ZWQgPGVtPklzIEVuY2Fwc3VsYXRlZDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tJbXBsI2dldEJhc2VfQ2xhc3MgPGVtPkJhc2UgQ2xhc3M8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBCbG9ja0ltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgQmxvY2sgeworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRW5jYXBzdWxhdGVkKCkgPGVtPklzIEVuY2Fwc3VsYXRlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNpc0VuY2Fwc3VsYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIElTX0VOQ0FQU1VMQVRFRF9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNFbmNhcHN1bGF0ZWQoKSA8ZW0+SXMgRW5jYXBzdWxhdGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2lzRW5jYXBzdWxhdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc0VuY2Fwc3VsYXRlZCA9IElTX0VOQ0FQU1VMQVRFRF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfQ2xhc3MoKSA8ZW0+QmFzZSBDbGFzczwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9DbGFzcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIGJhc2VfQ2xhc3M7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQmxvY2tJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBiYXNpY0dldEJhc2VfQ2xhc3MoKSB7CisJCXJldHVybiBiYXNlX0NsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkJMT0NLX19JU19FTkNBUFNVTEFURUQ6CisJCQlyZXR1cm4gaXNFbmNhcHN1bGF0ZWQoKTsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkJMT0NLX19CQVNFX0NMQVNTOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9DbGFzcygpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9DbGFzcygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5CTE9DS19fSVNfRU5DQVBTVUxBVEVEOgorCQkJcmV0dXJuIGlzRW5jYXBzdWxhdGVkICE9IElTX0VOQ0FQU1VMQVRFRF9FREVGQVVMVDsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkJMT0NLX19CQVNFX0NMQVNTOgorCQkJcmV0dXJuIGJhc2VfQ2xhc3MgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkJMT0NLX19JU19FTkNBUFNVTEFURUQ6CisJCQlzZXRJc0VuY2Fwc3VsYXRlZCgoQm9vbGVhbikgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuQkxPQ0tfX0JBU0VfQ0xBU1M6CisJCQlzZXRCYXNlX0NsYXNzKChvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcykgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBCbG9ja3NQYWNrYWdlLkxpdGVyYWxzLkJMT0NLOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNFbmNhcHN1bGF0ZWQoKSB7CisJCXJldHVybiBpc0VuY2Fwc3VsYXRlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuQkxPQ0tfX0lTX0VOQ0FQU1VMQVRFRDoKKwkJCXNldElzRW5jYXBzdWxhdGVkKElTX0VOQ0FQU1VMQVRFRF9FREVGQVVMVCk7CisJCQlyZXR1cm47CisJCWNhc2UgQmxvY2tzUGFja2FnZS5CTE9DS19fQkFTRV9DTEFTUzoKKwkJCXNldEJhc2VfQ2xhc3MoKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgZ2V0QmFzZV9DbGFzcygpIHsKKwkJaWYgKGJhc2VfQ2xhc3MgIT0gbnVsbCAmJiBiYXNlX0NsYXNzLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0NsYXNzID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9DbGFzczsKKwkJCWJhc2VfQ2xhc3MgPSAob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9DbGFzcyk7CisJCQlpZiAoYmFzZV9DbGFzcyAhPSBvbGRCYXNlX0NsYXNzKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBCbG9ja3NQYWNrYWdlLkJMT0NLX19CQVNFX0NMQVNTLCBvbGRCYXNlX0NsYXNzLCBiYXNlX0NsYXNzKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX0NsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfQ2xhc3Mob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgbmV3QmFzZV9DbGFzcykgeworCQlvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBvbGRCYXNlX0NsYXNzID0gYmFzZV9DbGFzczsKKwkJYmFzZV9DbGFzcyA9IG5ld0Jhc2VfQ2xhc3M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQmxvY2tzUGFja2FnZS5CTE9DS19fQkFTRV9DTEFTUywgb2xkQmFzZV9DbGFzcywgYmFzZV9DbGFzcykpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SXNFbmNhcHN1bGF0ZWQoYm9vbGVhbiBuZXdJc0VuY2Fwc3VsYXRlZCkgeworCQlib29sZWFuIG9sZElzRW5jYXBzdWxhdGVkID0gaXNFbmNhcHN1bGF0ZWQ7CisJCWlzRW5jYXBzdWxhdGVkID0gbmV3SXNFbmNhcHN1bGF0ZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQmxvY2tzUGFja2FnZS5CTE9DS19fSVNfRU5DQVBTVUxBVEVELCBvbGRJc0VuY2Fwc3VsYXRlZCwgaXNFbmNhcHN1bGF0ZWQpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSB7CisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKwkJfQorCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGlzRW5jYXBzdWxhdGVkOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChpc0VuY2Fwc3VsYXRlZCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBCbG9ja0ltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0Jsb2Nrc0ZhY3RvcnlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9CbG9ja3NGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmY2RjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9CbG9ja3NGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMjI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CaW5kaW5nQ29ubmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Db25uZWN0b3JQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaW1lbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuRGlzdHJpYnV0ZWRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5OZXN0ZWRDb25uZWN0b3JFbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Vbml0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBCbG9ja3NGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEJsb2Nrc0ZhY3RvcnkgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgQmxvY2tzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gQmxvY2tzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBCbG9ja3NGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlCbG9ja3NGYWN0b3J5IHRoZUJsb2Nrc0ZhY3RvcnkgPSAoQmxvY2tzRmFjdG9yeSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoQmxvY2tzUGFja2FnZS5lTlNfVVJJKTsKKwkJCWlmICh0aGVCbG9ja3NGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlQmxvY2tzRmFjdG9yeTsKKwkJCX0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBCbG9ja3NGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQmxvY2tzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkJMT0NLOgorCQkJcmV0dXJuIGNyZWF0ZUJsb2NrKCk7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ESVNUUklCVVRFRF9QUk9QRVJUWToKKwkJCXJldHVybiBjcmVhdGVEaXN0cmlidXRlZFByb3BlcnR5KCk7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ESU1FTlNJT046CisJCQlyZXR1cm4gY3JlYXRlRGltZW5zaW9uKCk7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5VTklUOgorCQkJcmV0dXJuIGNyZWF0ZVVuaXQoKTsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlZBTFVFX1RZUEU6CisJCQlyZXR1cm4gY3JlYXRlVmFsdWVUeXBlKCk7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ORVNURURfQ09OTkVDVE9SX0VORDoKKwkJCXJldHVybiBjcmVhdGVOZXN0ZWRDb25uZWN0b3JFbmQoKTsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlBBUlRJQ0lQQU5UX1BST1BFUlRZOgorCQkJcmV0dXJuIGNyZWF0ZVBhcnRpY2lwYW50UHJvcGVydHkoKTsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWToKKwkJCXJldHVybiBjcmVhdGVDb25uZWN0b3JQcm9wZXJ0eSgpOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuQklORElOR19DT05ORUNUT1I6CisJCQlyZXR1cm4gY3JlYXRlQmluZGluZ0Nvbm5lY3RvcigpOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRToKKwkJCXJldHVybiBjcmVhdGVQcm9wZXJ0eVNwZWNpZmljVHlwZSgpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCaW5kaW5nQ29ubmVjdG9yIGNyZWF0ZUJpbmRpbmdDb25uZWN0b3IoKSB7CisJCUJpbmRpbmdDb25uZWN0b3JJbXBsIGJpbmRpbmdDb25uZWN0b3IgPSBuZXcgQmluZGluZ0Nvbm5lY3RvckltcGwoKTsKKwkJcmV0dXJuIGJpbmRpbmdDb25uZWN0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJsb2NrIGNyZWF0ZUJsb2NrKCkgeworCQlCbG9ja0ltcGwgYmxvY2sgPSBuZXcgQmxvY2tJbXBsKCk7CisJCXJldHVybiBibG9jazsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29ubmVjdG9yUHJvcGVydHkgY3JlYXRlQ29ubmVjdG9yUHJvcGVydHkoKSB7CisJCUNvbm5lY3RvclByb3BlcnR5SW1wbCBjb25uZWN0b3JQcm9wZXJ0eSA9IG5ldyBDb25uZWN0b3JQcm9wZXJ0eUltcGwoKTsKKwkJcmV0dXJuIGNvbm5lY3RvclByb3BlcnR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaW1lbnNpb24gY3JlYXRlRGltZW5zaW9uKCkgeworCQlEaW1lbnNpb25JbXBsIGRpbWVuc2lvbiA9IG5ldyBEaW1lbnNpb25JbXBsKCk7CisJCXJldHVybiBkaW1lbnNpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc3RyaWJ1dGVkUHJvcGVydHkgY3JlYXRlRGlzdHJpYnV0ZWRQcm9wZXJ0eSgpIHsKKwkJRGlzdHJpYnV0ZWRQcm9wZXJ0eUltcGwgZGlzdHJpYnV0ZWRQcm9wZXJ0eSA9IG5ldyBEaXN0cmlidXRlZFByb3BlcnR5SW1wbCgpOworCQlyZXR1cm4gZGlzdHJpYnV0ZWRQcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTmVzdGVkQ29ubmVjdG9yRW5kIGNyZWF0ZU5lc3RlZENvbm5lY3RvckVuZCgpIHsKKwkJTmVzdGVkQ29ubmVjdG9yRW5kSW1wbCBuZXN0ZWRDb25uZWN0b3JFbmQgPSBuZXcgTmVzdGVkQ29ubmVjdG9yRW5kSW1wbCgpOworCQlyZXR1cm4gbmVzdGVkQ29ubmVjdG9yRW5kOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQYXJ0aWNpcGFudFByb3BlcnR5IGNyZWF0ZVBhcnRpY2lwYW50UHJvcGVydHkoKSB7CisJCVBhcnRpY2lwYW50UHJvcGVydHlJbXBsIHBhcnRpY2lwYW50UHJvcGVydHkgPSBuZXcgUGFydGljaXBhbnRQcm9wZXJ0eUltcGwoKTsKKwkJcmV0dXJuIHBhcnRpY2lwYW50UHJvcGVydHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByb3BlcnR5U3BlY2lmaWNUeXBlIGNyZWF0ZVByb3BlcnR5U3BlY2lmaWNUeXBlKCkgeworCQlQcm9wZXJ0eVNwZWNpZmljVHlwZUltcGwgcHJvcGVydHlTcGVjaWZpY1R5cGUgPSBuZXcgUHJvcGVydHlTcGVjaWZpY1R5cGVJbXBsKCk7CisJCXJldHVybiBwcm9wZXJ0eVNwZWNpZmljVHlwZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVW5pdCBjcmVhdGVVbml0KCkgeworCQlVbml0SW1wbCB1bml0ID0gbmV3IFVuaXRJbXBsKCk7CisJCXJldHVybiB1bml0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWYWx1ZVR5cGUgY3JlYXRlVmFsdWVUeXBlKCkgeworCQlWYWx1ZVR5cGVJbXBsIHZhbHVlVHlwZSA9IG5ldyBWYWx1ZVR5cGVJbXBsKCk7CisJCXJldHVybiB2YWx1ZVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJsb2Nrc1BhY2thZ2UgZ2V0QmxvY2tzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChCbG9ja3NQYWNrYWdlKSBnZXRFUGFja2FnZSgpOworCX0KKworfSAvLyBCbG9ja3NGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvQmxvY2tzUGFja2FnZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0Jsb2Nrc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0MzlmYwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0Jsb2Nrc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw2MzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJpbmRpbmdDb25uZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkNvbm5lY3RvclByb3BlcnR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaXN0cmlidXRlZFByb3BlcnR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5QYXJ0aWNpcGFudFByb3BlcnR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlByb3BlcnR5U3BlY2lmaWNUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlVuaXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVmFsdWVUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLkludGVyYWN0aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuaW50ZXJuYWwuaW1wbC5JbnRlcmFjdGlvbnNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVybmFsLmltcGwuU3lzbWxQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLlN0YXRlbWFjaGluZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5pbnRlcm5hbC5pbXBsLlN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLlVzZWNhc2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLmludGVybmFsLmltcGwuVXNlY2FzZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlR5cGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5VTUxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEJsb2Nrc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgQmxvY2tzUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICoKKwkgKiA8cD4KKwkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEJsb2Nrc1BhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgQmxvY2tzUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHsKKwkJCXJldHVybiAoQmxvY2tzUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKTsKKwkJfQorCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJQmxvY2tzUGFja2FnZUltcGwgdGhlQmxvY2tzUGFja2FnZSA9IChCbG9ja3NQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEJsb2Nrc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEJsb2Nrc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlTeXNtbFBhY2thZ2VJbXBsIHRoZVN5c21sUGFja2FnZSA9IChTeXNtbFBhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU3lzbWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSA6IFN5c21sUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UgPSAoTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsZWxlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVBvcnRhbmRmbG93c1BhY2thZ2VJbXBsIHRoZVBvcnRhbmRmbG93c1BhY2thZ2UgPSAoUG9ydGFuZGZsb3dzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQb3J0YW5kZmxvd3NQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUG9ydGFuZGZsb3dzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQb3J0YW5kZmxvd3NQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBQb3J0YW5kZmxvd3NQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUNvbnN0cmFpbnRzUGFja2FnZUltcGwgdGhlQ29uc3RyYWludHNQYWNrYWdlID0gKENvbnN0cmFpbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb25zdHJhaW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29uc3RyYWludHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBDb25zdHJhaW50c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQWN0aXZpdGllc1BhY2thZ2VJbXBsIHRoZUFjdGl2aXRpZXNQYWNrYWdlID0gKEFjdGl2aXRpZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWN0aXZpdGllc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWN0aXZpdGllc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IEFjdGl2aXRpZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUFsbG9jYXRpb25zUGFja2FnZUltcGwgdGhlQWxsb2NhdGlvbnNQYWNrYWdlID0gKEFsbG9jYXRpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBbGxvY2F0aW9uc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBBbGxvY2F0aW9uc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBBbGxvY2F0aW9uc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgdGhlUmVxdWlyZW1lbnRzUGFja2FnZSA9IChSZXF1aXJlbWVudHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlcXVpcmVtZW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBSZXF1aXJlbWVudHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlcXVpcmVtZW50c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFJlcXVpcmVtZW50c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgdGhlSW50ZXJhY3Rpb25zUGFja2FnZSA9IChJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEludGVyYWN0aW9uc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEludGVyYWN0aW9uc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IEludGVyYWN0aW9uc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsIHRoZVN0YXRlbWFjaGluZXNQYWNrYWdlID0gKFN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UKKwkJCQkuZ2V0RVBhY2thZ2UoU3RhdGVtYWNoaW5lc1BhY2thZ2UuZU5TX1VSSSkgOiBTdGF0ZW1hY2hpbmVzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlVc2VjYXNlc1BhY2thZ2VJbXBsIHRoZVVzZWNhc2VzUGFja2FnZSA9IChVc2VjYXNlc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVXNlY2FzZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVXNlY2FzZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVzZWNhc2VzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogVXNlY2FzZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlQmxvY2tzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUG9ydGFuZGZsb3dzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBY3Rpdml0aWVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWxsb2NhdGlvbnNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVJbnRlcmFjdGlvbnNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVXNlY2FzZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlQmxvY2tzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN5c21sUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUG9ydGFuZGZsb3dzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFjdGl2aXRpZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWxsb2NhdGlvbnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUmVxdWlyZW1lbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUludGVyYWN0aW9uc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVVzZWNhc2VzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVCbG9ja3NQYWNrYWdlLmZyZWV6ZSgpOworCisKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChCbG9ja3NQYWNrYWdlLmVOU19VUkksIHRoZUJsb2Nrc1BhY2thZ2UpOworCQlyZXR1cm4gdGhlQmxvY2tzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBibG9ja0VDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkaXN0cmlidXRlZFByb3BlcnR5RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRpbWVuc2lvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB1bml0RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHZhbHVlVHlwZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBuZXN0ZWRDb25uZWN0b3JFbmRFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGFydGljaXBhbnRQcm9wZXJ0eUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBjb25uZWN0b3JQcm9wZXJ0eUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBiaW5kaW5nQ29ubmVjdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHByb3BlcnR5U3BlY2lmaWNUeXBlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZQorCSAqIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD4KKwkgKiBOb3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgQmxvY2tzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEJsb2Nrc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgeworCQkJcmV0dXJuOworCQl9CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWJsb2NrRUNsYXNzID0gY3JlYXRlRUNsYXNzKEJMT0NLKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShibG9ja0VDbGFzcywgQkxPQ0tfX0lTX0VOQ0FQU1VMQVRFRCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoYmxvY2tFQ2xhc3MsIEJMT0NLX19CQVNFX0NMQVNTKTsKKworCQlkaXN0cmlidXRlZFByb3BlcnR5RUNsYXNzID0gY3JlYXRlRUNsYXNzKERJU1RSSUJVVEVEX1BST1BFUlRZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShkaXN0cmlidXRlZFByb3BlcnR5RUNsYXNzLCBESVNUUklCVVRFRF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSk7CisKKwkJZGltZW5zaW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKERJTUVOU0lPTik7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZGltZW5zaW9uRUNsYXNzLCBESU1FTlNJT05fX0JBU0VfSU5TVEFOQ0VfU1BFQ0lGSUNBVElPTik7CisKKwkJdW5pdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhVTklUKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1bml0RUNsYXNzLCBVTklUX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT04pOworCQljcmVhdGVFUmVmZXJlbmNlKHVuaXRFQ2xhc3MsIFVOSVRfX0RJTUVOU0lPTik7CisKKwkJdmFsdWVUeXBlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFZBTFVFX1RZUEUpOworCQljcmVhdGVFUmVmZXJlbmNlKHZhbHVlVHlwZUVDbGFzcywgVkFMVUVfVFlQRV9fQkFTRV9EQVRBX1RZUEUpOworCQljcmVhdGVFUmVmZXJlbmNlKHZhbHVlVHlwZUVDbGFzcywgVkFMVUVfVFlQRV9fVU5JVCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodmFsdWVUeXBlRUNsYXNzLCBWQUxVRV9UWVBFX19ESU1FTlNJT04pOworCisJCW5lc3RlZENvbm5lY3RvckVuZEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhORVNURURfQ09OTkVDVE9SX0VORCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobmVzdGVkQ29ubmVjdG9yRW5kRUNsYXNzLCBORVNURURfQ09OTkVDVE9SX0VORF9fUFJPUEVSVFlfUEFUSCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobmVzdGVkQ29ubmVjdG9yRW5kRUNsYXNzLCBORVNURURfQ09OTkVDVE9SX0VORF9fQkFTRV9DT05ORUNUT1JfRU5EKTsKKworCQlwYXJ0aWNpcGFudFByb3BlcnR5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFBBUlRJQ0lQQU5UX1BST1BFUlRZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShwYXJ0aWNpcGFudFByb3BlcnR5RUNsYXNzLCBQQVJUSUNJUEFOVF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocGFydGljaXBhbnRQcm9wZXJ0eUVDbGFzcywgUEFSVElDSVBBTlRfUFJPUEVSVFlfX0VORCk7CisKKwkJY29ubmVjdG9yUHJvcGVydHlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQ09OTkVDVE9SX1BST1BFUlRZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShjb25uZWN0b3JQcm9wZXJ0eUVDbGFzcywgQ09OTkVDVE9SX1BST1BFUlRZX19CQVNFX1BST1BFUlRZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShjb25uZWN0b3JQcm9wZXJ0eUVDbGFzcywgQ09OTkVDVE9SX1BST1BFUlRZX19DT05ORUNUT1IpOworCisJCWJpbmRpbmdDb25uZWN0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQklORElOR19DT05ORUNUT1IpOworCQljcmVhdGVFUmVmZXJlbmNlKGJpbmRpbmdDb25uZWN0b3JFQ2xhc3MsIEJJTkRJTkdfQ09OTkVDVE9SX19CQVNFX0NPTk5FQ1RPUik7CisKKwkJcHJvcGVydHlTcGVjaWZpY1R5cGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocHJvcGVydHlTcGVjaWZpY1R5cGVFQ2xhc3MsIFBST1BFUlRZX1NQRUNJRklDX1RZUEVfX0JBU0VfQ0xBU1NJRklFUik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRCaW5kaW5nQ29ubmVjdG9yKCkgeworCQlyZXR1cm4gYmluZGluZ0Nvbm5lY3RvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRCaW5kaW5nQ29ubmVjdG9yX0Jhc2VfQ29ubmVjdG9yKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIGJpbmRpbmdDb25uZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEJsb2NrKCkgeworCQlyZXR1cm4gYmxvY2tFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0QmxvY2tfQmFzZV9DbGFzcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBibG9ja0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEJsb2NrX0lzRW5jYXBzdWxhdGVkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpIGJsb2NrRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJsb2Nrc0ZhY3RvcnkgZ2V0QmxvY2tzRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChCbG9ja3NGYWN0b3J5KSBnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRDb25uZWN0b3JQcm9wZXJ0eSgpIHsKKwkJcmV0dXJuIGNvbm5lY3RvclByb3BlcnR5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldENvbm5lY3RvclByb3BlcnR5X0Jhc2VfUHJvcGVydHkoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgY29ubmVjdG9yUHJvcGVydHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRDb25uZWN0b3JQcm9wZXJ0eV9Db25uZWN0b3IoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgY29ubmVjdG9yUHJvcGVydHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERpbWVuc2lvbigpIHsKKwkJcmV0dXJuIGRpbWVuc2lvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREaW1lbnNpb25fQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgZGltZW5zaW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREaXN0cmlidXRlZFByb3BlcnR5KCkgeworCQlyZXR1cm4gZGlzdHJpYnV0ZWRQcm9wZXJ0eUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREaXN0cmlidXRlZFByb3BlcnR5X0Jhc2VfUHJvcGVydHkoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgZGlzdHJpYnV0ZWRQcm9wZXJ0eUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TmVzdGVkQ29ubmVjdG9yRW5kKCkgeworCQlyZXR1cm4gbmVzdGVkQ29ubmVjdG9yRW5kRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE5lc3RlZENvbm5lY3RvckVuZF9CYXNlX0Nvbm5lY3RvckVuZCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBuZXN0ZWRDb25uZWN0b3JFbmRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXROZXN0ZWRDb25uZWN0b3JFbmRfUHJvcGVydHlQYXRoKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIG5lc3RlZENvbm5lY3RvckVuZEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGFydGljaXBhbnRQcm9wZXJ0eSgpIHsKKwkJcmV0dXJuIHBhcnRpY2lwYW50UHJvcGVydHlFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UGFydGljaXBhbnRQcm9wZXJ0eV9CYXNlX1Byb3BlcnR5KCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHBhcnRpY2lwYW50UHJvcGVydHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRQYXJ0aWNpcGFudFByb3BlcnR5X0VuZCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBwYXJ0aWNpcGFudFByb3BlcnR5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQcm9wZXJ0eVNwZWNpZmljVHlwZSgpIHsKKwkJcmV0dXJuIHByb3BlcnR5U3BlY2lmaWNUeXBlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFByb3BlcnR5U3BlY2lmaWNUeXBlX0Jhc2VfQ2xhc3NpZmllcigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBwcm9wZXJ0eVNwZWNpZmljVHlwZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VW5pdCgpIHsKKwkJcmV0dXJuIHVuaXRFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VW5pdF9CYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSB1bml0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VW5pdF9EaW1lbnNpb24oKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgdW5pdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VmFsdWVUeXBlKCkgeworCQlyZXR1cm4gdmFsdWVUeXBlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFZhbHVlVHlwZV9CYXNlX0RhdGFUeXBlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHZhbHVlVHlwZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFZhbHVlVHlwZV9EaW1lbnNpb24oKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgdmFsdWVUeXBlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VmFsdWVUeXBlX1VuaXQoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgdmFsdWVUeXBlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCVR5cGVzUGFja2FnZSB0aGVUeXBlc1BhY2thZ2UgPSAoVHlwZXNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSk7CisJCVVNTFBhY2thZ2UgdGhlVU1MUGFja2FnZSA9IChVTUxQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVTUxQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzLCBmZWF0dXJlcywgYW5kIG9wZXJhdGlvbnM7IGFkZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoYmxvY2tFQ2xhc3MsIEJsb2NrLmNsYXNzLCAiQmxvY2siLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldEJsb2NrX0lzRW5jYXBzdWxhdGVkKCksIHRoZVR5cGVzUGFja2FnZS5nZXRCb29sZWFuKCksICJpc0VuY2Fwc3VsYXRlZCIsIG51bGwsIDAsIDEsIEJsb2NrLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldEJsb2NrX0Jhc2VfQ2xhc3MoKSwgdGhlVU1MUGFja2FnZS5nZXRDbGFzc18oKSwgbnVsbCwgImJhc2VfQ2xhc3MiLCBudWxsLCAxLCAxLCBCbG9jay5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MoZGlzdHJpYnV0ZWRQcm9wZXJ0eUVDbGFzcywgRGlzdHJpYnV0ZWRQcm9wZXJ0eS5jbGFzcywgIkRpc3RyaWJ1dGVkUHJvcGVydHkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldERpc3RyaWJ1dGVkUHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpLCB0aGVVTUxQYWNrYWdlLmdldFByb3BlcnR5KCksIG51bGwsICJiYXNlX1Byb3BlcnR5IiwgbnVsbCwgMSwgMSwgRGlzdHJpYnV0ZWRQcm9wZXJ0eS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLAorCQkJCSFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhkaW1lbnNpb25FQ2xhc3MsIERpbWVuc2lvbi5jbGFzcywgIkRpbWVuc2lvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RGltZW5zaW9uX0Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCksIHRoZVVNTFBhY2thZ2UuZ2V0SW5zdGFuY2VTcGVjaWZpY2F0aW9uKCksIG51bGwsICJiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiIsIG51bGwsIDEsIDEsIERpbWVuc2lvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsCisJCQkJIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyh1bml0RUNsYXNzLCBVbml0LmNsYXNzLCAiVW5pdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VW5pdF9CYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigpLCB0aGVVTUxQYWNrYWdlLmdldEluc3RhbmNlU3BlY2lmaWNhdGlvbigpLCBudWxsLCAiYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24iLCBudWxsLCAxLCAxLCBVbml0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsCisJCQkJIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VW5pdF9EaW1lbnNpb24oKSwgdGhpcy5nZXREaW1lbnNpb24oKSwgbnVsbCwgImRpbWVuc2lvbiIsIG51bGwsIDAsIDEsIFVuaXQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHZhbHVlVHlwZUVDbGFzcywgVmFsdWVUeXBlLmNsYXNzLCAiVmFsdWVUeXBlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRWYWx1ZVR5cGVfQmFzZV9EYXRhVHlwZSgpLCB0aGVVTUxQYWNrYWdlLmdldERhdGFUeXBlKCksIG51bGwsICJiYXNlX0RhdGFUeXBlIiwgbnVsbCwgMSwgMSwgVmFsdWVUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELAorCQkJCSFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VmFsdWVUeXBlX1VuaXQoKSwgdGhpcy5nZXRVbml0KCksIG51bGwsICJ1bml0IiwgbnVsbCwgMCwgMSwgVmFsdWVUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFZhbHVlVHlwZV9EaW1lbnNpb24oKSwgdGhpcy5nZXREaW1lbnNpb24oKSwgbnVsbCwgImRpbWVuc2lvbiIsIG51bGwsIDAsIDEsIFZhbHVlVHlwZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MobmVzdGVkQ29ubmVjdG9yRW5kRUNsYXNzLCBOZXN0ZWRDb25uZWN0b3JFbmQuY2xhc3MsICJOZXN0ZWRDb25uZWN0b3JFbmQiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldE5lc3RlZENvbm5lY3RvckVuZF9Qcm9wZXJ0eVBhdGgoKSwgdGhlVU1MUGFja2FnZS5nZXRQcm9wZXJ0eSgpLCBudWxsLCAicHJvcGVydHlQYXRoIiwgbnVsbCwgMSwgLTEsIE5lc3RlZENvbm5lY3RvckVuZC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLAorCQkJCSFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TmVzdGVkQ29ubmVjdG9yRW5kX0Jhc2VfQ29ubmVjdG9yRW5kKCksIHRoZVVNTFBhY2thZ2UuZ2V0Q29ubmVjdG9yRW5kKCksIG51bGwsICJiYXNlX0Nvbm5lY3RvckVuZCIsIG51bGwsIDEsIDEsIE5lc3RlZENvbm5lY3RvckVuZC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLAorCQkJCSFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhwYXJ0aWNpcGFudFByb3BlcnR5RUNsYXNzLCBQYXJ0aWNpcGFudFByb3BlcnR5LmNsYXNzLCAiUGFydGljaXBhbnRQcm9wZXJ0eSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UGFydGljaXBhbnRQcm9wZXJ0eV9CYXNlX1Byb3BlcnR5KCksIHRoZVVNTFBhY2thZ2UuZ2V0UHJvcGVydHkoKSwgbnVsbCwgImJhc2VfUHJvcGVydHkiLCBudWxsLCAxLCAxLCBQYXJ0aWNpcGFudFByb3BlcnR5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsCisJCQkJIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UGFydGljaXBhbnRQcm9wZXJ0eV9FbmQoKSwgdGhlVU1MUGFja2FnZS5nZXRQcm9wZXJ0eSgpLCBudWxsLCAiZW5kIiwgbnVsbCwgMSwgMSwgUGFydGljaXBhbnRQcm9wZXJ0eS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhjb25uZWN0b3JQcm9wZXJ0eUVDbGFzcywgQ29ubmVjdG9yUHJvcGVydHkuY2xhc3MsICJDb25uZWN0b3JQcm9wZXJ0eSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Q29ubmVjdG9yUHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpLCB0aGVVTUxQYWNrYWdlLmdldFByb3BlcnR5KCksIG51bGwsICJiYXNlX1Byb3BlcnR5IiwgbnVsbCwgMSwgMSwgQ29ubmVjdG9yUHJvcGVydHkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwKKwkJCQkhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRDb25uZWN0b3JQcm9wZXJ0eV9Db25uZWN0b3IoKSwgdGhlVU1MUGFja2FnZS5nZXRDb25uZWN0b3IoKSwgbnVsbCwgImNvbm5lY3RvciIsIG51bGwsIDEsIDEsIENvbm5lY3RvclByb3BlcnR5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsCisJCQkJIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKGJpbmRpbmdDb25uZWN0b3JFQ2xhc3MsIEJpbmRpbmdDb25uZWN0b3IuY2xhc3MsICJCaW5kaW5nQ29ubmVjdG9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRCaW5kaW5nQ29ubmVjdG9yX0Jhc2VfQ29ubmVjdG9yKCksIHRoZVVNTFBhY2thZ2UuZ2V0Q29ubmVjdG9yKCksIG51bGwsICJiYXNlX0Nvbm5lY3RvciIsIG51bGwsIDEsIDEsIEJpbmRpbmdDb25uZWN0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwKKwkJCQkhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MocHJvcGVydHlTcGVjaWZpY1R5cGVFQ2xhc3MsIFByb3BlcnR5U3BlY2lmaWNUeXBlLmNsYXNzLCAiUHJvcGVydHlTcGVjaWZpY1R5cGUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldFByb3BlcnR5U3BlY2lmaWNUeXBlX0Jhc2VfQ2xhc3NpZmllcigpLCB0aGVVTUxQYWNrYWdlLmdldENsYXNzaWZpZXIoKSwgbnVsbCwgImJhc2VfQ2xhc3NpZmllciIsIG51bGwsIDEsIDEsIFByb3BlcnR5U3BlY2lmaWNUeXBlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsCisJCQkJIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwl9CisKK30gLy8gQmxvY2tzUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0Nvbm5lY3RvclByb3BlcnR5SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvQ29ubmVjdG9yUHJvcGVydHlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0ZmI1MQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0Nvbm5lY3RvclByb3BlcnR5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMjM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkNvbm5lY3RvclByb3BlcnR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkNvbm5lY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkNvbm5lY3RvciBQcm9wZXJ0eTwvYj48L2VtPiAnLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQ29ubmVjdG9yUHJvcGVydHlJbXBsI2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkNvbm5lY3RvclByb3BlcnR5SW1wbCNnZXRDb25uZWN0b3IgPGVtPkNvbm5lY3RvcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbm5lY3RvclByb3BlcnR5SW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBDb25uZWN0b3JQcm9wZXJ0eSB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX1Byb3BlcnR5KCkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9Qcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5IGJhc2VfUHJvcGVydHk7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb25uZWN0b3IoKSA8ZW0+Q29ubmVjdG9yPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRDb25uZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBDb25uZWN0b3IgY29ubmVjdG9yOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbm5lY3RvclByb3BlcnR5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvcGVydHkgYmFzaWNHZXRCYXNlX1Byb3BlcnR5KCkgeworCQlyZXR1cm4gYmFzZV9Qcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29ubmVjdG9yIGJhc2ljR2V0Q29ubmVjdG9yKCkgeworCQlyZXR1cm4gY29ubmVjdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWToKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfUHJvcGVydHkoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfUHJvcGVydHkoKTsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWV9fQ09OTkVDVE9SOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0Q29ubmVjdG9yKCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRDb25uZWN0b3IoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuQ09OTkVDVE9SX1BST1BFUlRZX19CQVNFX1BST1BFUlRZOgorCQkJcmV0dXJuIGJhc2VfUHJvcGVydHkgIT0gbnVsbDsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWV9fQ09OTkVDVE9SOgorCQkJcmV0dXJuIGNvbm5lY3RvciAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuQ09OTkVDVE9SX1BST1BFUlRZX19CQVNFX1BST1BFUlRZOgorCQkJc2V0QmFzZV9Qcm9wZXJ0eSgoUHJvcGVydHkpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWV9fQ09OTkVDVE9SOgorCQkJc2V0Q29ubmVjdG9yKChDb25uZWN0b3IpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQmxvY2tzUGFja2FnZS5MaXRlcmFscy5DT05ORUNUT1JfUFJPUEVSVFk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWToKKwkJCXNldEJhc2VfUHJvcGVydHkoKFByb3BlcnR5KSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWV9fQ09OTkVDVE9SOgorCQkJc2V0Q29ubmVjdG9yKChDb25uZWN0b3IpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcm9wZXJ0eSBnZXRCYXNlX1Byb3BlcnR5KCkgeworCQlpZiAoYmFzZV9Qcm9wZXJ0eSAhPSBudWxsICYmIGJhc2VfUHJvcGVydHkuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfUHJvcGVydHkgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX1Byb3BlcnR5OworCQkJYmFzZV9Qcm9wZXJ0eSA9IChQcm9wZXJ0eSkgZVJlc29sdmVQcm94eShvbGRCYXNlX1Byb3BlcnR5KTsKKwkJCWlmIChiYXNlX1Byb3BlcnR5ICE9IG9sZEJhc2VfUHJvcGVydHkpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEJsb2Nrc1BhY2thZ2UuQ09OTkVDVE9SX1BST1BFUlRZX19CQVNFX1BST1BFUlRZLCBvbGRCYXNlX1Byb3BlcnR5LCBiYXNlX1Byb3BlcnR5KSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1Byb3BlcnR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb25uZWN0b3IgZ2V0Q29ubmVjdG9yKCkgeworCQlpZiAoY29ubmVjdG9yICE9IG51bGwgJiYgY29ubmVjdG9yLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRDb25uZWN0b3IgPSAoSW50ZXJuYWxFT2JqZWN0KSBjb25uZWN0b3I7CisJCQljb25uZWN0b3IgPSAoQ29ubmVjdG9yKSBlUmVzb2x2ZVByb3h5KG9sZENvbm5lY3Rvcik7CisJCQlpZiAoY29ubmVjdG9yICE9IG9sZENvbm5lY3RvcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQmxvY2tzUGFja2FnZS5DT05ORUNUT1JfUFJPUEVSVFlfX0NPTk5FQ1RPUiwgb2xkQ29ubmVjdG9yLCBjb25uZWN0b3IpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGNvbm5lY3RvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX1Byb3BlcnR5KFByb3BlcnR5IG5ld0Jhc2VfUHJvcGVydHkpIHsKKwkJUHJvcGVydHkgb2xkQmFzZV9Qcm9wZXJ0eSA9IGJhc2VfUHJvcGVydHk7CisJCWJhc2VfUHJvcGVydHkgPSBuZXdCYXNlX1Byb3BlcnR5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuQ09OTkVDVE9SX1BST1BFUlRZX19CQVNFX1BST1BFUlRZLCBvbGRCYXNlX1Byb3BlcnR5LCBiYXNlX1Byb3BlcnR5KSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb25uZWN0b3IoQ29ubmVjdG9yIG5ld0Nvbm5lY3RvcikgeworCQlDb25uZWN0b3Igb2xkQ29ubmVjdG9yID0gY29ubmVjdG9yOworCQljb25uZWN0b3IgPSBuZXdDb25uZWN0b3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQmxvY2tzUGFja2FnZS5DT05ORUNUT1JfUFJPUEVSVFlfX0NPTk5FQ1RPUiwgb2xkQ29ubmVjdG9yLCBjb25uZWN0b3IpKTsKKwkJfQorCX0KKworfSAvLyBDb25uZWN0b3JQcm9wZXJ0eUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0RpbWVuc2lvbkltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0RpbWVuc2lvbkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNjNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvRGltZW5zaW9uSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbnN0YW5jZVNwZWNpZmljYXRpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5EaW1lbnNpb248L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuRGltZW5zaW9uSW1wbCNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiA8ZW0+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGltZW5zaW9uSW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBEaW1lbnNpb24geworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKSA8ZW0+QmFzZSBJbnN0YW5jZSBTcGVjaWZpY2F0aW9uPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5zdGFuY2VTcGVjaWZpY2F0aW9uIGJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpbWVuc2lvbkltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluc3RhbmNlU3BlY2lmaWNhdGlvbiBiYXNpY0dldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCkgeworCQlyZXR1cm4gYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuRElNRU5TSU9OX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT046CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuRElNRU5TSU9OX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT046CisJCQlyZXR1cm4gYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkRJTUVOU0lPTl9fQkFTRV9JTlNUQU5DRV9TUEVDSUZJQ0FUSU9OOgorCQkJc2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKEluc3RhbmNlU3BlY2lmaWNhdGlvbikgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBCbG9ja3NQYWNrYWdlLkxpdGVyYWxzLkRJTUVOU0lPTjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuRElNRU5TSU9OX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT046CisJCQlzZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigoSW5zdGFuY2VTcGVjaWZpY2F0aW9uKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW5zdGFuY2VTcGVjaWZpY2F0aW9uIGdldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCkgeworCQlpZiAoYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gIT0gbnVsbCAmJiBiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbi5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbjsKKwkJCWJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uID0gKEluc3RhbmNlU3BlY2lmaWNhdGlvbikgZVJlc29sdmVQcm94eShvbGRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbik7CisJCQlpZiAoYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gIT0gb2xkQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24pIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEJsb2Nrc1BhY2thZ2UuRElNRU5TSU9OX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT04sIG9sZEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uLCBiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbikpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oSW5zdGFuY2VTcGVjaWZpY2F0aW9uIG5ld0Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKSB7CisJCUluc3RhbmNlU3BlY2lmaWNhdGlvbiBvbGRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiA9IGJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uOworCQliYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiA9IG5ld0Jhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuRElNRU5TSU9OX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT04sIG9sZEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uLCBiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbikpOworCQl9CisJfQorCit9IC8vIERpbWVuc2lvbkltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL0Rpc3RyaWJ1dGVkUHJvcGVydHlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9EaXN0cmlidXRlZFByb3BlcnR5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3N2UxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9EaXN0cmlidXRlZFByb3BlcnR5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpc3RyaWJ1dGVkUHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5EaXN0cmlidXRlZCBQcm9wZXJ0eTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5EaXN0cmlidXRlZFByb3BlcnR5SW1wbCNnZXRCYXNlX1Byb3BlcnR5IDxlbT5CYXNlIFByb3BlcnR5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzdHJpYnV0ZWRQcm9wZXJ0eUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgRGlzdHJpYnV0ZWRQcm9wZXJ0eSB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX1Byb3BlcnR5KCkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9Qcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5IGJhc2VfUHJvcGVydHk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzdHJpYnV0ZWRQcm9wZXJ0eUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByb3BlcnR5IGJhc2ljR2V0QmFzZV9Qcm9wZXJ0eSgpIHsKKwkJcmV0dXJuIGJhc2VfUHJvcGVydHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuRElTVFJJQlVURURfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFk6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX1Byb3BlcnR5KCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX1Byb3BlcnR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkRJU1RSSUJVVEVEX1BST1BFUlRZX19CQVNFX1BST1BFUlRZOgorCQkJcmV0dXJuIGJhc2VfUHJvcGVydHkgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkRJU1RSSUJVVEVEX1BST1BFUlRZX19CQVNFX1BST1BFUlRZOgorCQkJc2V0QmFzZV9Qcm9wZXJ0eSgoUHJvcGVydHkpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQmxvY2tzUGFja2FnZS5MaXRlcmFscy5ESVNUUklCVVRFRF9QUk9QRVJUWTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuRElTVFJJQlVURURfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFk6CisJCQlzZXRCYXNlX1Byb3BlcnR5KChQcm9wZXJ0eSkgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByb3BlcnR5IGdldEJhc2VfUHJvcGVydHkoKSB7CisJCWlmIChiYXNlX1Byb3BlcnR5ICE9IG51bGwgJiYgYmFzZV9Qcm9wZXJ0eS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9Qcm9wZXJ0eSA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfUHJvcGVydHk7CisJCQliYXNlX1Byb3BlcnR5ID0gKFByb3BlcnR5KSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfUHJvcGVydHkpOworCQkJaWYgKGJhc2VfUHJvcGVydHkgIT0gb2xkQmFzZV9Qcm9wZXJ0eSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQmxvY2tzUGFja2FnZS5ESVNUUklCVVRFRF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSwgb2xkQmFzZV9Qcm9wZXJ0eSwgYmFzZV9Qcm9wZXJ0eSkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9Qcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX1Byb3BlcnR5KFByb3BlcnR5IG5ld0Jhc2VfUHJvcGVydHkpIHsKKwkJUHJvcGVydHkgb2xkQmFzZV9Qcm9wZXJ0eSA9IGJhc2VfUHJvcGVydHk7CisJCWJhc2VfUHJvcGVydHkgPSBuZXdCYXNlX1Byb3BlcnR5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuRElTVFJJQlVURURfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFksIG9sZEJhc2VfUHJvcGVydHksIGJhc2VfUHJvcGVydHkpKTsKKwkJfQorCX0KKworfSAvLyBEaXN0cmlidXRlZFByb3BlcnR5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvTmVzdGVkQ29ubmVjdG9yRW5kSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvTmVzdGVkQ29ubmVjdG9yRW5kSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjZlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9OZXN0ZWRDb25uZWN0b3JFbmRJbXBsLmphdmEKQEAgLTAsMCArMSwyNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Db25uZWN0b3JFbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuVHlwZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPk5lc3RlZCBDb25uZWN0b3IgRW5kPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLk5lc3RlZENvbm5lY3RvckVuZEltcGwjZ2V0UHJvcGVydHlQYXRoIDxlbT5Qcm9wZXJ0eSBQYXRoPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5OZXN0ZWRDb25uZWN0b3JFbmRJbXBsI2dldEJhc2VfQ29ubmVjdG9yRW5kIDxlbT5CYXNlIENvbm5lY3RvciBFbmQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOZXN0ZWRDb25uZWN0b3JFbmRJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIE5lc3RlZENvbm5lY3RvckVuZCB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcm9wZXJ0eVBhdGgoKSA8ZW0+UHJvcGVydHkgUGF0aDwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldFByb3BlcnR5UGF0aCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PFByb3BlcnR5PiBwcm9wZXJ0eVBhdGg7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0Nvbm5lY3RvckVuZCgpIDxlbT5CYXNlIENvbm5lY3RvciBFbmQ8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9Db25uZWN0b3JFbmQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBDb25uZWN0b3JFbmQgYmFzZV9Db25uZWN0b3JFbmQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTmVzdGVkQ29ubmVjdG9yRW5kSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29ubmVjdG9yRW5kIGJhc2ljR2V0QmFzZV9Db25uZWN0b3JFbmQoKSB7CisJCXJldHVybiBiYXNlX0Nvbm5lY3RvckVuZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ORVNURURfQ09OTkVDVE9SX0VORF9fUFJPUEVSVFlfUEFUSDoKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVBhdGgoKTsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLk5FU1RFRF9DT05ORUNUT1JfRU5EX19CQVNFX0NPTk5FQ1RPUl9FTkQ6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0Nvbm5lY3RvckVuZCgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9Db25uZWN0b3JFbmQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuTkVTVEVEX0NPTk5FQ1RPUl9FTkRfX1BST1BFUlRZX1BBVEg6CisJCQlyZXR1cm4gcHJvcGVydHlQYXRoICE9IG51bGwgJiYgIXByb3BlcnR5UGF0aC5pc0VtcHR5KCk7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ORVNURURfQ09OTkVDVE9SX0VORF9fQkFTRV9DT05ORUNUT1JfRU5EOgorCQkJcmV0dXJuIGJhc2VfQ29ubmVjdG9yRW5kICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ORVNURURfQ09OTkVDVE9SX0VORF9fUFJPUEVSVFlfUEFUSDoKKwkJCWdldFByb3BlcnR5UGF0aCgpLmNsZWFyKCk7CisJCQlnZXRQcm9wZXJ0eVBhdGgoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFByb3BlcnR5PikgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuTkVTVEVEX0NPTk5FQ1RPUl9FTkRfX0JBU0VfQ09OTkVDVE9SX0VORDoKKwkJCXNldEJhc2VfQ29ubmVjdG9yRW5kKChDb25uZWN0b3JFbmQpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQmxvY2tzUGFja2FnZS5MaXRlcmFscy5ORVNURURfQ09OTkVDVE9SX0VORDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuTkVTVEVEX0NPTk5FQ1RPUl9FTkRfX1BST1BFUlRZX1BBVEg6CisJCQlnZXRQcm9wZXJ0eVBhdGgoKS5jbGVhcigpOworCQkJcmV0dXJuOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuTkVTVEVEX0NPTk5FQ1RPUl9FTkRfX0JBU0VfQ09OTkVDVE9SX0VORDoKKwkJCXNldEJhc2VfQ29ubmVjdG9yRW5kKChDb25uZWN0b3JFbmQpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb25uZWN0b3JFbmQgZ2V0QmFzZV9Db25uZWN0b3JFbmQoKSB7CisJCWlmIChiYXNlX0Nvbm5lY3RvckVuZCAhPSBudWxsICYmIGJhc2VfQ29ubmVjdG9yRW5kLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0Nvbm5lY3RvckVuZCA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfQ29ubmVjdG9yRW5kOworCQkJYmFzZV9Db25uZWN0b3JFbmQgPSAoQ29ubmVjdG9yRW5kKSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfQ29ubmVjdG9yRW5kKTsKKwkJCWlmIChiYXNlX0Nvbm5lY3RvckVuZCAhPSBvbGRCYXNlX0Nvbm5lY3RvckVuZCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQmxvY2tzUGFja2FnZS5ORVNURURfQ09OTkVDVE9SX0VORF9fQkFTRV9DT05ORUNUT1JfRU5ELCBvbGRCYXNlX0Nvbm5lY3RvckVuZCwgYmFzZV9Db25uZWN0b3JFbmQpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfQ29ubmVjdG9yRW5kOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxQcm9wZXJ0eT4gZ2V0UHJvcGVydHlQYXRoKCkgeworCQlpZiAocHJvcGVydHlQYXRoID09IG51bGwpIHsKKwkJCXByb3BlcnR5UGF0aCA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8UHJvcGVydHk+KFByb3BlcnR5LmNsYXNzLCB0aGlzLCBCbG9ja3NQYWNrYWdlLk5FU1RFRF9DT05ORUNUT1JfRU5EX19QUk9QRVJUWV9QQVRIKTsKKwkJfQorCQlyZXR1cm4gcHJvcGVydHlQYXRoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5UGF0aChTdHJpbmcgbmFtZSwgVHlwZSB0eXBlKSB7CisJCXJldHVybiBnZXRQcm9wZXJ0eVBhdGgobmFtZSwgdHlwZSwgZmFsc2UsIG51bGwpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5UGF0aChTdHJpbmcgbmFtZSwgVHlwZSB0eXBlLCBib29sZWFuIGlnbm9yZUNhc2UsIEVDbGFzcyBlQ2xhc3MpIHsKKwkJcHJvcGVydHlQYXRoTG9vcDogZm9yIChQcm9wZXJ0eSBwcm9wZXJ0eVBhdGggOiBnZXRQcm9wZXJ0eVBhdGgoKSkgeworCQkJaWYgKGVDbGFzcyAhPSBudWxsICYmICFlQ2xhc3MuaXNJbnN0YW5jZShwcm9wZXJ0eVBhdGgpKSB7CisJCQkJY29udGludWUgcHJvcGVydHlQYXRoTG9vcDsKKwkJCX0KKwkJCWlmIChuYW1lICE9IG51bGwgJiYgIShpZ25vcmVDYXNlID8gbmFtZS5lcXVhbHNJZ25vcmVDYXNlKHByb3BlcnR5UGF0aC5nZXROYW1lKCkpIDogbmFtZS5lcXVhbHMocHJvcGVydHlQYXRoLmdldE5hbWUoKSkpKSB7CisJCQkJY29udGludWUgcHJvcGVydHlQYXRoTG9vcDsKKwkJCX0KKwkJCWlmICh0eXBlICE9IG51bGwgJiYgIXR5cGUuZXF1YWxzKHByb3BlcnR5UGF0aC5nZXRUeXBlKCkpKSB7CisJCQkJY29udGludWUgcHJvcGVydHlQYXRoTG9vcDsKKwkJCX0KKwkJCXJldHVybiBwcm9wZXJ0eVBhdGg7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9Db25uZWN0b3JFbmQoQ29ubmVjdG9yRW5kIG5ld0Jhc2VfQ29ubmVjdG9yRW5kKSB7CisJCUNvbm5lY3RvckVuZCBvbGRCYXNlX0Nvbm5lY3RvckVuZCA9IGJhc2VfQ29ubmVjdG9yRW5kOworCQliYXNlX0Nvbm5lY3RvckVuZCA9IG5ld0Jhc2VfQ29ubmVjdG9yRW5kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuTkVTVEVEX0NPTk5FQ1RPUl9FTkRfX0JBU0VfQ09OTkVDVE9SX0VORCwgb2xkQmFzZV9Db25uZWN0b3JFbmQsIGJhc2VfQ29ubmVjdG9yRW5kKSk7CisJCX0KKwl9CisKK30gLy8gTmVzdGVkQ29ubmVjdG9yRW5kSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvUGFydGljaXBhbnRQcm9wZXJ0eUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL1BhcnRpY2lwYW50UHJvcGVydHlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2ZWI1NAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL1BhcnRpY2lwYW50UHJvcGVydHlJbXBsLmphdmEKQEAgLTAsMCArMSwyMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlBhcnRpY2lwYW50IFByb3BlcnR5PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlBhcnRpY2lwYW50UHJvcGVydHlJbXBsI2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlBhcnRpY2lwYW50UHJvcGVydHlJbXBsI2dldEVuZCA8ZW0+RW5kPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGFydGljaXBhbnRQcm9wZXJ0eUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgUGFydGljaXBhbnRQcm9wZXJ0eSB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX1Byb3BlcnR5KCkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9Qcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5IGJhc2VfUHJvcGVydHk7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmQoKSA8ZW0+RW5kPC9lbT59JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRFbmQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eSBlbmQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGFydGljaXBhbnRQcm9wZXJ0eUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByb3BlcnR5IGJhc2ljR2V0QmFzZV9Qcm9wZXJ0eSgpIHsKKwkJcmV0dXJuIGJhc2VfUHJvcGVydHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByb3BlcnR5IGJhc2ljR2V0RW5kKCkgeworCQlyZXR1cm4gZW5kOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlBBUlRJQ0lQQU5UX1BST1BFUlRZX19CQVNFX1BST1BFUlRZOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9Qcm9wZXJ0eSgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9Qcm9wZXJ0eSgpOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuUEFSVElDSVBBTlRfUFJPUEVSVFlfX0VORDoKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEVuZCgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0RW5kKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlBBUlRJQ0lQQU5UX1BST1BFUlRZX19CQVNFX1BST1BFUlRZOgorCQkJcmV0dXJuIGJhc2VfUHJvcGVydHkgIT0gbnVsbDsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlBBUlRJQ0lQQU5UX1BST1BFUlRZX19FTkQ6CisJCQlyZXR1cm4gZW5kICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5QQVJUSUNJUEFOVF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWToKKwkJCXNldEJhc2VfUHJvcGVydHkoKFByb3BlcnR5KSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgQmxvY2tzUGFja2FnZS5QQVJUSUNJUEFOVF9QUk9QRVJUWV9fRU5EOgorCQkJc2V0RW5kKChQcm9wZXJ0eSkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBCbG9ja3NQYWNrYWdlLkxpdGVyYWxzLlBBUlRJQ0lQQU5UX1BST1BFUlRZOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5QQVJUSUNJUEFOVF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWToKKwkJCXNldEJhc2VfUHJvcGVydHkoKFByb3BlcnR5KSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlBBUlRJQ0lQQU5UX1BST1BFUlRZX19FTkQ6CisJCQlzZXRFbmQoKFByb3BlcnR5KSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvcGVydHkgZ2V0QmFzZV9Qcm9wZXJ0eSgpIHsKKwkJaWYgKGJhc2VfUHJvcGVydHkgIT0gbnVsbCAmJiBiYXNlX1Byb3BlcnR5LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX1Byb3BlcnR5ID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9Qcm9wZXJ0eTsKKwkJCWJhc2VfUHJvcGVydHkgPSAoUHJvcGVydHkpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9Qcm9wZXJ0eSk7CisJCQlpZiAoYmFzZV9Qcm9wZXJ0eSAhPSBvbGRCYXNlX1Byb3BlcnR5KSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBCbG9ja3NQYWNrYWdlLlBBUlRJQ0lQQU5UX1BST1BFUlRZX19CQVNFX1BST1BFUlRZLCBvbGRCYXNlX1Byb3BlcnR5LCBiYXNlX1Byb3BlcnR5KSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1Byb3BlcnR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcm9wZXJ0eSBnZXRFbmQoKSB7CisJCWlmIChlbmQgIT0gbnVsbCAmJiBlbmQuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEVuZCA9IChJbnRlcm5hbEVPYmplY3QpIGVuZDsKKwkJCWVuZCA9IChQcm9wZXJ0eSkgZVJlc29sdmVQcm94eShvbGRFbmQpOworCQkJaWYgKGVuZCAhPSBvbGRFbmQpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEJsb2Nrc1BhY2thZ2UuUEFSVElDSVBBTlRfUFJPUEVSVFlfX0VORCwgb2xkRW5kLCBlbmQpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGVuZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX1Byb3BlcnR5KFByb3BlcnR5IG5ld0Jhc2VfUHJvcGVydHkpIHsKKwkJUHJvcGVydHkgb2xkQmFzZV9Qcm9wZXJ0eSA9IGJhc2VfUHJvcGVydHk7CisJCWJhc2VfUHJvcGVydHkgPSBuZXdCYXNlX1Byb3BlcnR5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuUEFSVElDSVBBTlRfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFksIG9sZEJhc2VfUHJvcGVydHksIGJhc2VfUHJvcGVydHkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEVuZChQcm9wZXJ0eSBuZXdFbmQpIHsKKwkJUHJvcGVydHkgb2xkRW5kID0gZW5kOworCQllbmQgPSBuZXdFbmQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQmxvY2tzUGFja2FnZS5QQVJUSUNJUEFOVF9QUk9QRVJUWV9fRU5ELCBvbGRFbmQsIGVuZCkpOworCQl9CisJfQorCit9IC8vIFBhcnRpY2lwYW50UHJvcGVydHlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9Qcm9wZXJ0eVNwZWNpZmljVHlwZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL1Byb3BlcnR5U3BlY2lmaWNUeXBlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZTZiZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9Qcm9wZXJ0eVNwZWNpZmljVHlwZUltcGwuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzc2lmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5Qcm9wZXJ0eVNwZWNpZmljVHlwZUltcGwjZ2V0QmFzZV9DbGFzc2lmaWVyIDxlbT5CYXNlIENsYXNzaWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9wZXJ0eVNwZWNpZmljVHlwZUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgUHJvcGVydHlTcGVjaWZpY1R5cGUgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9DbGFzc2lmaWVyKCkgPGVtPkJhc2UgQ2xhc3NpZmllcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX0NsYXNzaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBDbGFzc2lmaWVyIGJhc2VfQ2xhc3NpZmllcjsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNwZWNpZmljVHlwZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENsYXNzaWZpZXIgYmFzaWNHZXRCYXNlX0NsYXNzaWZpZXIoKSB7CisJCXJldHVybiBiYXNlX0NsYXNzaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9fQkFTRV9DTEFTU0lGSUVSOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9DbGFzc2lmaWVyKCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX0NsYXNzaWZpZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9fQkFTRV9DTEFTU0lGSUVSOgorCQkJcmV0dXJuIGJhc2VfQ2xhc3NpZmllciAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9fQkFTRV9DTEFTU0lGSUVSOgorCQkJc2V0QmFzZV9DbGFzc2lmaWVyKChDbGFzc2lmaWVyKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEJsb2Nrc1BhY2thZ2UuTGl0ZXJhbHMuUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9fQkFTRV9DTEFTU0lGSUVSOgorCQkJc2V0QmFzZV9DbGFzc2lmaWVyKChDbGFzc2lmaWVyKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ2xhc3NpZmllciBnZXRCYXNlX0NsYXNzaWZpZXIoKSB7CisJCWlmIChiYXNlX0NsYXNzaWZpZXIgIT0gbnVsbCAmJiBiYXNlX0NsYXNzaWZpZXIuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfQ2xhc3NpZmllciA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfQ2xhc3NpZmllcjsKKwkJCWJhc2VfQ2xhc3NpZmllciA9IChDbGFzc2lmaWVyKSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfQ2xhc3NpZmllcik7CisJCQlpZiAoYmFzZV9DbGFzc2lmaWVyICE9IG9sZEJhc2VfQ2xhc3NpZmllcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQmxvY2tzUGFja2FnZS5QUk9QRVJUWV9TUEVDSUZJQ19UWVBFX19CQVNFX0NMQVNTSUZJRVIsIG9sZEJhc2VfQ2xhc3NpZmllciwgYmFzZV9DbGFzc2lmaWVyKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX0NsYXNzaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9DbGFzc2lmaWVyKENsYXNzaWZpZXIgbmV3QmFzZV9DbGFzc2lmaWVyKSB7CisJCUNsYXNzaWZpZXIgb2xkQmFzZV9DbGFzc2lmaWVyID0gYmFzZV9DbGFzc2lmaWVyOworCQliYXNlX0NsYXNzaWZpZXIgPSBuZXdCYXNlX0NsYXNzaWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQmxvY2tzUGFja2FnZS5QUk9QRVJUWV9TUEVDSUZJQ19UWVBFX19CQVNFX0NMQVNTSUZJRVIsIG9sZEJhc2VfQ2xhc3NpZmllciwgYmFzZV9DbGFzc2lmaWVyKSk7CisJCX0KKwl9CisKK30gLy8gUHJvcGVydHlTcGVjaWZpY1R5cGVJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvaW50ZXJuYWwvaW1wbC9Vbml0SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvVW5pdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWU1YzFhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvVW5pdEltcGwuamF2YQpAQCAtMCwwICsxLDIzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaW1lbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbnN0YW5jZVNwZWNpZmljYXRpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5Vbml0PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlVuaXRJbXBsI2dldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uIDxlbT5CYXNlIEluc3RhbmNlIFNwZWNpZmljYXRpb248L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLlVuaXRJbXBsI2dldERpbWVuc2lvbiA8ZW0+RGltZW5zaW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVW5pdEltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgVW5pdCB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigpIDxlbT5CYXNlIEluc3RhbmNlIFNwZWNpZmljYXRpb248L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJbnN0YW5jZVNwZWNpZmljYXRpb24gYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb247CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaW1lbnNpb24oKSA8ZW0+RGltZW5zaW9uPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXREaW1lbnNpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBEaW1lbnNpb24gZGltZW5zaW9uOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVuaXRJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnN0YW5jZVNwZWNpZmljYXRpb24gYmFzaWNHZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigpIHsKKwkJcmV0dXJuIGJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaW1lbnNpb24gYmFzaWNHZXREaW1lbnNpb24oKSB7CisJCXJldHVybiBkaW1lbnNpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuVU5JVF9fQkFTRV9JTlNUQU5DRV9TUEVDSUZJQ0FUSU9OOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKCk7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5VTklUX19ESU1FTlNJT046CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXREaW1lbnNpb24oKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldERpbWVuc2lvbigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5VTklUX19CQVNFX0lOU1RBTkNFX1NQRUNJRklDQVRJT046CisJCQlyZXR1cm4gYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gIT0gbnVsbDsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlVOSVRfX0RJTUVOU0lPTjoKKwkJCXJldHVybiBkaW1lbnNpb24gIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlVOSVRfX0JBU0VfSU5TVEFOQ0VfU1BFQ0lGSUNBVElPTjoKKwkJCXNldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKChJbnN0YW5jZVNwZWNpZmljYXRpb24pIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlVOSVRfX0RJTUVOU0lPTjoKKwkJCXNldERpbWVuc2lvbigoRGltZW5zaW9uKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEJsb2Nrc1BhY2thZ2UuTGl0ZXJhbHMuVU5JVDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuVU5JVF9fQkFTRV9JTlNUQU5DRV9TUEVDSUZJQ0FUSU9OOgorCQkJc2V0QmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24oKEluc3RhbmNlU3BlY2lmaWNhdGlvbikgbnVsbCk7CisJCQlyZXR1cm47CisJCWNhc2UgQmxvY2tzUGFja2FnZS5VTklUX19ESU1FTlNJT046CisJCQlzZXREaW1lbnNpb24oKERpbWVuc2lvbikgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluc3RhbmNlU3BlY2lmaWNhdGlvbiBnZXRCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbigpIHsKKwkJaWYgKGJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uICE9IG51bGwgJiYgYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24uZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb247CisJCQliYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbiA9IChJbnN0YW5jZVNwZWNpZmljYXRpb24pIGVSZXNvbHZlUHJveHkob2xkQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24pOworCQkJaWYgKGJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uICE9IG9sZEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBCbG9ja3NQYWNrYWdlLlVOSVRfX0JBU0VfSU5TVEFOQ0VfU1BFQ0lGSUNBVElPTiwgb2xkQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24sIGJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGltZW5zaW9uIGdldERpbWVuc2lvbigpIHsKKwkJaWYgKGRpbWVuc2lvbiAhPSBudWxsICYmIGRpbWVuc2lvbi5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRGltZW5zaW9uID0gKEludGVybmFsRU9iamVjdCkgZGltZW5zaW9uOworCQkJZGltZW5zaW9uID0gKERpbWVuc2lvbikgZVJlc29sdmVQcm94eShvbGREaW1lbnNpb24pOworCQkJaWYgKGRpbWVuc2lvbiAhPSBvbGREaW1lbnNpb24pIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEJsb2Nrc1BhY2thZ2UuVU5JVF9fRElNRU5TSU9OLCBvbGREaW1lbnNpb24sIGRpbWVuc2lvbikpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gZGltZW5zaW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKEluc3RhbmNlU3BlY2lmaWNhdGlvbiBuZXdCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbikgeworCQlJbnN0YW5jZVNwZWNpZmljYXRpb24gb2xkQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gPSBiYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbjsKKwkJYmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24gPSBuZXdCYXNlX0luc3RhbmNlU3BlY2lmaWNhdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBCbG9ja3NQYWNrYWdlLlVOSVRfX0JBU0VfSU5TVEFOQ0VfU1BFQ0lGSUNBVElPTiwgb2xkQmFzZV9JbnN0YW5jZVNwZWNpZmljYXRpb24sIGJhc2VfSW5zdGFuY2VTcGVjaWZpY2F0aW9uKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaW1lbnNpb24oRGltZW5zaW9uIG5ld0RpbWVuc2lvbikgeworCQlEaW1lbnNpb24gb2xkRGltZW5zaW9uID0gZGltZW5zaW9uOworCQlkaW1lbnNpb24gPSBuZXdEaW1lbnNpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQmxvY2tzUGFja2FnZS5VTklUX19ESU1FTlNJT04sIG9sZERpbWVuc2lvbiwgZGltZW5zaW9uKSk7CisJCX0KKwl9CisKK30gLy8gVW5pdEltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL1ZhbHVlVHlwZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy9pbnRlcm5hbC9pbXBsL1ZhbHVlVHlwZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjRkZDExCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL2ludGVybmFsL2ltcGwvVmFsdWVUeXBlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Vbml0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5EYXRhVHlwZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlZhbHVlIFR5cGU8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuVmFsdWVUeXBlSW1wbCNnZXRCYXNlX0RhdGFUeXBlIDxlbT5CYXNlIERhdGEgVHlwZTwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuVmFsdWVUeXBlSW1wbCNnZXRVbml0IDxlbT5Vbml0PC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5WYWx1ZVR5cGVJbXBsI2dldERpbWVuc2lvbiA8ZW0+RGltZW5zaW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVmFsdWVUeXBlSW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBWYWx1ZVR5cGUgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9EYXRhVHlwZSgpIDxlbT5CYXNlIERhdGEgVHlwZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX0RhdGFUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGF0YVR5cGUgYmFzZV9EYXRhVHlwZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVuaXQoKSA8ZW0+VW5pdDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0VW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVuaXQgdW5pdDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpbWVuc2lvbigpIDxlbT5EaW1lbnNpb248L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldERpbWVuc2lvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERpbWVuc2lvbiBkaW1lbnNpb247CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmFsdWVUeXBlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGF0YVR5cGUgYmFzaWNHZXRCYXNlX0RhdGFUeXBlKCkgeworCQlyZXR1cm4gYmFzZV9EYXRhVHlwZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGltZW5zaW9uIGJhc2ljR2V0RGltZW5zaW9uKCkgeworCQlyZXR1cm4gZGltZW5zaW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVbml0IGJhc2ljR2V0VW5pdCgpIHsKKwkJcmV0dXJuIHVuaXQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fQkFTRV9EQVRBX1RZUEU6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0RhdGFUeXBlKCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX0RhdGFUeXBlKCk7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5WQUxVRV9UWVBFX19VTklUOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0VW5pdCgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0VW5pdCgpOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fRElNRU5TSU9OOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0RGltZW5zaW9uKCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXREaW1lbnNpb24oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fQkFTRV9EQVRBX1RZUEU6CisJCQlyZXR1cm4gYmFzZV9EYXRhVHlwZSAhPSBudWxsOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fVU5JVDoKKwkJCXJldHVybiB1bml0ICE9IG51bGw7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5WQUxVRV9UWVBFX19ESU1FTlNJT046CisJCQlyZXR1cm4gZGltZW5zaW9uICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5WQUxVRV9UWVBFX19CQVNFX0RBVEFfVFlQRToKKwkJCXNldEJhc2VfRGF0YVR5cGUoKERhdGFUeXBlKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgQmxvY2tzUGFja2FnZS5WQUxVRV9UWVBFX19VTklUOgorCQkJc2V0VW5pdCgoVW5pdCkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fRElNRU5TSU9OOgorCQkJc2V0RGltZW5zaW9uKChEaW1lbnNpb24pIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQmxvY2tzUGFja2FnZS5MaXRlcmFscy5WQUxVRV9UWVBFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQmxvY2tzUGFja2FnZS5WQUxVRV9UWVBFX19CQVNFX0RBVEFfVFlQRToKKwkJCXNldEJhc2VfRGF0YVR5cGUoKERhdGFUeXBlKSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlZBTFVFX1RZUEVfX1VOSVQ6CisJCQlzZXRVbml0KChVbml0KSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlZBTFVFX1RZUEVfX0RJTUVOU0lPTjoKKwkJCXNldERpbWVuc2lvbigoRGltZW5zaW9uKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGF0YVR5cGUgZ2V0QmFzZV9EYXRhVHlwZSgpIHsKKwkJaWYgKGJhc2VfRGF0YVR5cGUgIT0gbnVsbCAmJiBiYXNlX0RhdGFUeXBlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0RhdGFUeXBlID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9EYXRhVHlwZTsKKwkJCWJhc2VfRGF0YVR5cGUgPSAoRGF0YVR5cGUpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9EYXRhVHlwZSk7CisJCQlpZiAoYmFzZV9EYXRhVHlwZSAhPSBvbGRCYXNlX0RhdGFUeXBlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBCbG9ja3NQYWNrYWdlLlZBTFVFX1RZUEVfX0JBU0VfREFUQV9UWVBFLCBvbGRCYXNlX0RhdGFUeXBlLCBiYXNlX0RhdGFUeXBlKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX0RhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaW1lbnNpb24gZ2V0RGltZW5zaW9uKCkgeworCQlpZiAoZGltZW5zaW9uICE9IG51bGwgJiYgZGltZW5zaW9uLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGREaW1lbnNpb24gPSAoSW50ZXJuYWxFT2JqZWN0KSBkaW1lbnNpb247CisJCQlkaW1lbnNpb24gPSAoRGltZW5zaW9uKSBlUmVzb2x2ZVByb3h5KG9sZERpbWVuc2lvbik7CisJCQlpZiAoZGltZW5zaW9uICE9IG9sZERpbWVuc2lvbikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQmxvY2tzUGFja2FnZS5WQUxVRV9UWVBFX19ESU1FTlNJT04sIG9sZERpbWVuc2lvbiwgZGltZW5zaW9uKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBkaW1lbnNpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVuaXQgZ2V0VW5pdCgpIHsKKwkJaWYgKHVuaXQgIT0gbnVsbCAmJiB1bml0LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRVbml0ID0gKEludGVybmFsRU9iamVjdCkgdW5pdDsKKwkJCXVuaXQgPSAoVW5pdCkgZVJlc29sdmVQcm94eShvbGRVbml0KTsKKwkJCWlmICh1bml0ICE9IG9sZFVuaXQpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fVU5JVCwgb2xkVW5pdCwgdW5pdCkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gdW5pdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0RhdGFUeXBlKERhdGFUeXBlIG5ld0Jhc2VfRGF0YVR5cGUpIHsKKwkJRGF0YVR5cGUgb2xkQmFzZV9EYXRhVHlwZSA9IGJhc2VfRGF0YVR5cGU7CisJCWJhc2VfRGF0YVR5cGUgPSBuZXdCYXNlX0RhdGFUeXBlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fQkFTRV9EQVRBX1RZUEUsIG9sZEJhc2VfRGF0YVR5cGUsIGJhc2VfRGF0YVR5cGUpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERpbWVuc2lvbihEaW1lbnNpb24gbmV3RGltZW5zaW9uKSB7CisJCURpbWVuc2lvbiBvbGREaW1lbnNpb24gPSBkaW1lbnNpb247CisJCWRpbWVuc2lvbiA9IG5ld0RpbWVuc2lvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBCbG9ja3NQYWNrYWdlLlZBTFVFX1RZUEVfX0RJTUVOU0lPTiwgb2xkRGltZW5zaW9uLCBkaW1lbnNpb24pKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVuaXQoVW5pdCBuZXdVbml0KSB7CisJCVVuaXQgb2xkVW5pdCA9IHVuaXQ7CisJCXVuaXQgPSBuZXdVbml0OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRV9fVU5JVCwgb2xkVW5pdCwgdW5pdCkpOworCQl9CisJfQorCit9IC8vIFZhbHVlVHlwZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy91dGlsL0Jsb2Nrc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvdXRpbC9CbG9ja3NBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDNiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvdXRpbC9CbG9ja3NBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJpbmRpbmdDb25uZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Db25uZWN0b3JQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaW1lbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuRGlzdHJpYnV0ZWRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5OZXN0ZWRDb25uZWN0b3JFbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Vbml0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcworICogYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEJsb2Nrc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEJsb2Nrc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBCbG9ja3NTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPSBuZXcgQmxvY2tzU3dpdGNoPEFkYXB0ZXI+KCkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlQmxvY2soQmxvY2sgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQmxvY2tBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZURpc3RyaWJ1dGVkUHJvcGVydHkoRGlzdHJpYnV0ZWRQcm9wZXJ0eSBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVEaXN0cmlidXRlZFByb3BlcnR5QWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VEaW1lbnNpb24oRGltZW5zaW9uIG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZURpbWVuc2lvbkFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlVW5pdChVbml0IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVVuaXRBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZVZhbHVlVHlwZShWYWx1ZVR5cGUgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlVmFsdWVUeXBlQWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VOZXN0ZWRDb25uZWN0b3JFbmQoTmVzdGVkQ29ubmVjdG9yRW5kIG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZU5lc3RlZENvbm5lY3RvckVuZEFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlUGFydGljaXBhbnRQcm9wZXJ0eShQYXJ0aWNpcGFudFByb3BlcnR5IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVBhcnRpY2lwYW50UHJvcGVydHlBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZUNvbm5lY3RvclByb3BlcnR5KENvbm5lY3RvclByb3BlcnR5IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZUNvbm5lY3RvclByb3BlcnR5QWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VCaW5kaW5nQ29ubmVjdG9yKEJpbmRpbmdDb25uZWN0b3Igb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQmluZGluZ0Nvbm5lY3RvckFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJvcGVydHlTcGVjaWZpY1R5cGUoUHJvcGVydHlTcGVjaWZpY1R5cGUgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlUHJvcGVydHlTcGVjaWZpY1R5cGVBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQl9CisJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCbG9ja3NBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBCbG9ja3NQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB0YXJnZXQKKwkgKiAgICAgICAgICAgIHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCkgdGFyZ2V0KTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJpbmRpbmdDb25uZWN0b3IgPGVtPkJpbmRpbmcgQ29ubmVjdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmluZGluZ0Nvbm5lY3RvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVCaW5kaW5nQ29ubmVjdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2sgPGVtPkJsb2NrPC9lbT59Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UKKwkgKiBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJsb2NrQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Db25uZWN0b3JQcm9wZXJ0eSA8ZW0+Q29ubmVjdG9yIFByb3BlcnR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQ29ubmVjdG9yUHJvcGVydHkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29ubmVjdG9yUHJvcGVydHlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbiA8ZW0+RGltZW5zaW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpbWVuc2lvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaW1lbnNpb25BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkRpc3RyaWJ1dGVkUHJvcGVydHkgPGVtPkRpc3RyaWJ1dGVkIFByb3BlcnR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuRGlzdHJpYnV0ZWRQcm9wZXJ0eQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXN0cmlidXRlZFByb3BlcnR5QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMKKwkgKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuTmVzdGVkQ29ubmVjdG9yRW5kIDxlbT5OZXN0ZWQgQ29ubmVjdG9yIEVuZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0CisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MKKwkgKiB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLk5lc3RlZENvbm5lY3RvckVuZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOZXN0ZWRDb25uZWN0b3JFbmRBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlBhcnRpY2lwYW50UHJvcGVydHkgPGVtPlBhcnRpY2lwYW50IFByb3BlcnR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQYXJ0aWNpcGFudFByb3BlcnR5QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZSA8ZW0+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0CisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MKKwkgKiB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlByb3BlcnR5U3BlY2lmaWNUeXBlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVByb3BlcnR5U3BlY2lmaWNUeXBlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuVW5pdCA8ZW0+VW5pdDwvZW0+fScuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlCisJICogY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Vbml0CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVVuaXRBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZSA8ZW0+VmFsdWUgVHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5WYWx1ZVR5cGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVmFsdWVUeXBlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZgorCSAqIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZQorCSAqIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdCkgb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCit9IC8vIEJsb2Nrc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvdXRpbC9CbG9ja3NSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvdXRpbC9CbG9ja3NSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjOTA4ZAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy91dGlsL0Jsb2Nrc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MudXRpbC5CbG9ja3NSZXNvdXJjZUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEJsb2Nrc1Jlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBSZXNvdXJjZUZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQmxvY2tzUmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7CisJCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBCbG9ja3NSZXNvdXJjZUltcGwodXJpKTsKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBCb29sZWFuLlRSVUUpOworCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOworCisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOworCisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCit9IC8vIEJsb2Nrc1Jlc291cmNlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy91dGlsL0Jsb2Nrc1Jlc291cmNlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL3V0aWwvQmxvY2tzUmVzb3VyY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFjNzllZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy91dGlsL0Jsb2Nrc1Jlc291cmNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UmVzb3VyY2UgPC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLnV0aWwuQmxvY2tzUmVzb3VyY2VGYWN0b3J5SW1wbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQmxvY2tzUmVzb3VyY2VJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VJbXBsIHsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdXJpCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBuZXcgcmVzb3VyY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCbG9ja3NSZXNvdXJjZUltcGwoVVJJIHVyaSkgeworCQlzdXBlcih1cmkpOworCX0KKworfSAvLyBCbG9ja3NSZXNvdXJjZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy91dGlsL0Jsb2Nrc1N3aXRjaC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvYmxvY2tzL3V0aWwvQmxvY2tzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjY2E4YwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy91dGlsL0Jsb2Nrc1N3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMzQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuU3dpdGNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJpbmRpbmdDb25uZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Db25uZWN0b3JQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5EaW1lbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuRGlzdHJpYnV0ZWRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5OZXN0ZWRDb25uZWN0b3JFbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuUGFydGljaXBhbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Qcm9wZXJ0eVNwZWNpZmljVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5Vbml0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLlZhbHVlVHlwZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UKKyAqIGhpZXJhcmNoeS4gSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfSB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdCBhbmQgcHJvY2VlZGluZyB1cCB0aGUKKyAqIGluaGVyaXRhbmNlIGhpZXJhcmNoeSB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwgd2hpY2ggaXMgdGhlCisgKiByZXN1bHQgb2YgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBCbG9ja3NTd2l0Y2g8VD4gZXh0ZW5kcyBTd2l0Y2g8VD4geworCisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBCbG9ja3NQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCbG9ja3NTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQmxvY2tzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVja3Mgd2hldGhlciB0aGlzIGlzIGEgc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbWV0ZXIgZVBhY2thZ2UgdGhlIHBhY2thZ2UgaW4gcXVlc3Rpb24uCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgaXMgYSBzd2l0Y2ggZm9yIHRoZSBnaXZlbiBwYWNrYWdlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1N3aXRjaEZvcihFUGFja2FnZSBlUGFja2FnZSkgeworCQlyZXR1cm4gZVBhY2thZ2UgPT0gbW9kZWxQYWNrYWdlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgQ29ubmVjdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24KKwkgKiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJpbmRpbmcgQ29ubmVjdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQmluZGluZ0Nvbm5lY3RvcihCaW5kaW5nQ29ubmVjdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CbG9jazwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5CbG9jazwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZUJsb2NrKEJsb2NrIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db25uZWN0b3IgUHJvcGVydHk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbgorCSAqIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29ubmVjdG9yIFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQ29ubmVjdG9yUHJvcGVydHkoQ29ubmVjdG9yUHJvcGVydHkgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpbWVuc2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaW1lbnNpb248L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VEaW1lbnNpb24oRGltZW5zaW9uIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXN0cmlidXRlZCBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUKKwkgKiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXN0cmlidXRlZCBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZURpc3RyaWJ1dGVkUHJvcGVydHkoRGlzdHJpYnV0ZWRQcm9wZXJ0eSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmVzdGVkIENvbm5lY3RvciBFbmQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlCisJICogdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmVzdGVkIENvbm5lY3RvciBFbmQ8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VOZXN0ZWRDb25uZWN0b3JFbmQoTmVzdGVkQ29ubmVjdG9yRW5kIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0aWNpcGFudCBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUKKwkgKiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0aWNpcGFudCBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVBhcnRpY2lwYW50UHJvcGVydHkoUGFydGljaXBhbnRQcm9wZXJ0eSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UHJvcGVydHkgU3BlY2lmaWMgVHlwZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUKKwkgKiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qcm9wZXJ0eSBTcGVjaWZpYyBUeXBlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlUHJvcGVydHlTcGVjaWZpY1R5cGUoUHJvcGVydHlTcGVjaWZpY1R5cGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnIDxlbT5Vbml0PC9lbT4nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJyA8ZW0+VW5pdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVVuaXQoVW5pdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VmFsdWUgVHlwZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5WYWx1ZSBUeXBlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlVmFsdWVUeXBlKFZhbHVlVHlwZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMKKwkgKiB0aGUgbGFzdCBjYXNlIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQljYXNlIEJsb2Nrc1BhY2thZ2UuQkxPQ0s6IHsKKwkJCUJsb2NrIGJsb2NrID0gKEJsb2NrKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlQmxvY2soYmxvY2spOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ESVNUUklCVVRFRF9QUk9QRVJUWTogeworCQkJRGlzdHJpYnV0ZWRQcm9wZXJ0eSBkaXN0cmlidXRlZFByb3BlcnR5ID0gKERpc3RyaWJ1dGVkUHJvcGVydHkpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VEaXN0cmlidXRlZFByb3BlcnR5KGRpc3RyaWJ1dGVkUHJvcGVydHkpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgQmxvY2tzUGFja2FnZS5ESU1FTlNJT046IHsKKwkJCURpbWVuc2lvbiBkaW1lbnNpb24gPSAoRGltZW5zaW9uKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlRGltZW5zaW9uKGRpbWVuc2lvbik7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlVOSVQ6IHsKKwkJCVVuaXQgdW5pdCA9IChVbml0KSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlVW5pdCh1bml0KTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIEJsb2Nrc1BhY2thZ2UuVkFMVUVfVFlQRTogeworCQkJVmFsdWVUeXBlIHZhbHVlVHlwZSA9IChWYWx1ZVR5cGUpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VWYWx1ZVR5cGUodmFsdWVUeXBlKTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIEJsb2Nrc1BhY2thZ2UuTkVTVEVEX0NPTk5FQ1RPUl9FTkQ6IHsKKwkJCU5lc3RlZENvbm5lY3RvckVuZCBuZXN0ZWRDb25uZWN0b3JFbmQgPSAoTmVzdGVkQ29ubmVjdG9yRW5kKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlTmVzdGVkQ29ubmVjdG9yRW5kKG5lc3RlZENvbm5lY3RvckVuZCk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlBBUlRJQ0lQQU5UX1BST1BFUlRZOiB7CisJCQlQYXJ0aWNpcGFudFByb3BlcnR5IHBhcnRpY2lwYW50UHJvcGVydHkgPSAoUGFydGljaXBhbnRQcm9wZXJ0eSkgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZVBhcnRpY2lwYW50UHJvcGVydHkocGFydGljaXBhbnRQcm9wZXJ0eSk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkNPTk5FQ1RPUl9QUk9QRVJUWTogeworCQkJQ29ubmVjdG9yUHJvcGVydHkgY29ubmVjdG9yUHJvcGVydHkgPSAoQ29ubmVjdG9yUHJvcGVydHkpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VDb25uZWN0b3JQcm9wZXJ0eShjb25uZWN0b3JQcm9wZXJ0eSk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBCbG9ja3NQYWNrYWdlLkJJTkRJTkdfQ09OTkVDVE9SOiB7CisJCQlCaW5kaW5nQ29ubmVjdG9yIGJpbmRpbmdDb25uZWN0b3IgPSAoQmluZGluZ0Nvbm5lY3RvcikgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZUJpbmRpbmdDb25uZWN0b3IoYmluZGluZ0Nvbm5lY3Rvcik7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBCbG9ja3NQYWNrYWdlLlBST1BFUlRZX1NQRUNJRklDX1RZUEU6IHsKKwkJCVByb3BlcnR5U3BlY2lmaWNUeXBlIHByb3BlcnR5U3BlY2lmaWNUeXBlID0gKFByb3BlcnR5U3BlY2lmaWNUeXBlKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlUHJvcGVydHlTcGVjaWZpY1R5cGUocHJvcGVydHlTcGVjaWZpY1R5cGUpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKK30gLy8gQmxvY2tzU3dpdGNoCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvdXRpbC9CbG9ja3NYTUxQcm9jZXNzb3IuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2Jsb2Nrcy91dGlsL0Jsb2Nrc1hNTFByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjExMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9ibG9ja3MvdXRpbC9CbG9ja3NYTUxQcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLnV0aWwuWE1MUHJvY2Vzc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXIgbWV0aG9kcyB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIFhNTCBkb2N1bWVudHMKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEJsb2Nrc1hNTFByb2Nlc3NvciBleHRlbmRzIFhNTFByb2Nlc3NvciB7CisKKwkvKioKKwkgKiBQdWJsaWMgY29uc3RydWN0b3IgdG8gaW5zdGFudGlhdGUgdGhlIGhlbHBlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCbG9ja3NYTUxQcm9jZXNzb3IoKSB7CisJCXN1cGVyKChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRSkpOworCQlCbG9ja3NQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwl9CisKKwkvKioKKwkgKiBSZWdpc3RlciBmb3IgIioiIGFuZCAieG1sIiBmaWxlIGV4dGVuc2lvbnMgdGhlIEJsb2Nrc1Jlc291cmNlRmFjdG9yeUltcGwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgUmVzb3VyY2UuRmFjdG9yeT4gZ2V0UmVnaXN0cmF0aW9ucygpIHsKKwkJaWYgKHJlZ2lzdHJhdGlvbnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UmVnaXN0cmF0aW9ucygpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoWE1MX0VYVEVOU0lPTiwgbmV3IEJsb2Nrc1Jlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChTVEFSX0VYVEVOU0lPTiwgbmV3IEJsb2Nrc1Jlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCX0KKwkJcmV0dXJuIHJlZ2lzdHJhdGlvbnM7CisJfQorCit9IC8vIEJsb2Nrc1hNTFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvY29uc3RyYWludHMvQ29uc3RyYWludEJsb2NrLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9Db25zdHJhaW50QmxvY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc1ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvY29uc3RyYWludHMvQ29uc3RyYWludEJsb2NrLmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzOworCitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2s7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkNvbnN0cmFpbnQgQmxvY2s8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZSNnZXRDb25zdHJhaW50QmxvY2soKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29uc3RyYWludEJsb2NrIGV4dGVuZHMgQmxvY2sgeworfSAvLyBDb25zdHJhaW50QmxvY2sKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL0NvbnN0cmFpbnRQcm9wZXJ0eS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvY29uc3RyYWludHMvQ29uc3RyYWludFByb3BlcnR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxZTlhNQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL0NvbnN0cmFpbnRQcm9wZXJ0eS5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlByb3BlcnR5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5Db25zdHJhaW50IFByb3BlcnR5PC9iPjwvZW0+ICcuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRQcm9wZXJ0eSNnZXRCYXNlX1Byb3BlcnR5IDxlbT5CYXNlIFByb3BlcnR5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZSNnZXRDb25zdHJhaW50UHJvcGVydHkoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29uc3RyYWludFByb3BlcnR5IGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIFByb3BlcnR5PC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIFByb3BlcnR5PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfUHJvcGVydHkoUHJvcGVydHkpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZSNnZXRDb25zdHJhaW50UHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJvcGVydHkgZ2V0QmFzZV9Qcm9wZXJ0eSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50UHJvcGVydHkjZ2V0QmFzZV9Qcm9wZXJ0eSA8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9Qcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9Qcm9wZXJ0eShQcm9wZXJ0eSB2YWx1ZSk7CisKK30gLy8gQ29uc3RyYWludFByb3BlcnR5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9Db25zdHJhaW50c0ZhY3RvcnkuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL0NvbnN0cmFpbnRzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjliYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9Db25zdHJhaW50c0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0IHByb3ZpZGVzIGEKKyAqIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbnN0cmFpbnRzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb25zdHJhaW50c0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db25zdHJhaW50IEJsb2NrPC9lbT4nLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db25zdHJhaW50IEJsb2NrPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb25zdHJhaW50QmxvY2sgY3JlYXRlQ29uc3RyYWludEJsb2NrKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbnN0cmFpbnQgUHJvcGVydHk8L2VtPicuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbnN0cmFpbnQgUHJvcGVydHk8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbnN0cmFpbnRQcm9wZXJ0eSBjcmVhdGVDb25zdHJhaW50UHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb25zdHJhaW50c1BhY2thZ2UgZ2V0Q29uc3RyYWludHNQYWNrYWdlKCk7CisKK30gLy8gQ29uc3RyYWludHNGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9Db25zdHJhaW50c1BhY2thZ2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL0NvbnN0cmFpbnRzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDY4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9Db25zdHJhaW50c1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDI1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgY29udGFpbnMKKyAqIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50c0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbnN0cmFpbnRzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdAorCSAqIHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludEJsb2NrSW1wbCA8ZW0+Q29uc3RyYWludCBCbG9jazwvZW0+fScKKwkJICogY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50QmxvY2tJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRzUGFja2FnZUltcGwjZ2V0Q29uc3RyYWludEJsb2NrKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENPTlNUUkFJTlRfQkxPQ0sgPSBlSU5TVEFOQ0UuZ2V0Q29uc3RyYWludEJsb2NrKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludFByb3BlcnR5SW1wbAorCQkgKiA8ZW0+Q29uc3RyYWludCBQcm9wZXJ0eTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50UHJvcGVydHlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRzUGFja2FnZUltcGwjZ2V0Q29uc3RyYWludFByb3BlcnR5KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENPTlNUUkFJTlRfUFJPUEVSVFkgPSBlSU5TVEFOQ0UuZ2V0Q29uc3RyYWludFByb3BlcnR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIFByb3BlcnR5PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgQ09OU1RSQUlOVF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSA9IGVJTlNUQU5DRS5nZXRDb25zdHJhaW50UHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpOworCisJfQorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiY29uc3RyYWludHMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvQ29uc3RyYWludHMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAiQ29uc3RyYWludHMiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbnN0cmFpbnRzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludHNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50QmxvY2tJbXBsIDxlbT5Db25zdHJhaW50IEJsb2NrPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludEJsb2NrSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRzUGFja2FnZUltcGwjZ2V0Q29uc3RyYWludEJsb2NrKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENPTlNUUkFJTlRfQkxPQ0sgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklzIEVuY2Fwc3VsYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTlNUUkFJTlRfQkxPQ0tfX0lTX0VOQ0FQU1VMQVRFRCA9IEJsb2Nrc1BhY2thZ2UuQkxPQ0tfX0lTX0VOQ0FQU1VMQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OU1RSQUlOVF9CTE9DS19fQkFTRV9DTEFTUyA9IEJsb2Nrc1BhY2thZ2UuQkxPQ0tfX0JBU0VfQ0xBU1M7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29uc3RyYWludCBCbG9jazwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05TVFJBSU5UX0JMT0NLX0ZFQVRVUkVfQ09VTlQgPSBCbG9ja3NQYWNrYWdlLkJMT0NLX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkNvbnN0cmFpbnQgQmxvY2s8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05TVFJBSU5UX0JMT0NLX09QRVJBVElPTl9DT1VOVCA9IEJsb2Nrc1BhY2thZ2UuQkxPQ0tfT1BFUkFUSU9OX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRQcm9wZXJ0eUltcGwgPGVtPkNvbnN0cmFpbnQgUHJvcGVydHk8L2VtPn0nCisJICogY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRQcm9wZXJ0eUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50c1BhY2thZ2VJbXBsI2dldENvbnN0cmFpbnRQcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT05TVFJBSU5UX1BST1BFUlRZID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIFByb3BlcnR5PC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OU1RSQUlOVF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29uc3RyYWludCBQcm9wZXJ0eTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05TVFJBSU5UX1BST1BFUlRZX0ZFQVRVUkVfQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkNvbnN0cmFpbnQgUHJvcGVydHk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05TVFJBSU5UX1BST1BFUlRZX09QRVJBVElPTl9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50QmxvY2sKKwkgKiA8ZW0+Q29uc3RyYWludCBCbG9jazwvZW0+fScuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Db25zdHJhaW50IEJsb2NrPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50QmxvY2sKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbnN0cmFpbnRCbG9jaygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50UHJvcGVydHkgPGVtPkNvbnN0cmFpbnQgUHJvcGVydHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Db25zdHJhaW50IFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50UHJvcGVydHkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbnN0cmFpbnRQcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRQcm9wZXJ0eSNnZXRCYXNlX1Byb3BlcnR5CisJICogPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50UHJvcGVydHkjZ2V0QmFzZV9Qcm9wZXJ0eSgpCisJICogQHNlZSAjZ2V0Q29uc3RyYWludFByb3BlcnR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRDb25zdHJhaW50UHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQ29uc3RyYWludHNGYWN0b3J5IGdldENvbnN0cmFpbnRzRmFjdG9yeSgpOworCit9IC8vIENvbnN0cmFpbnRzUGFja2FnZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvY29uc3RyYWludHMvaW50ZXJuYWwvaW1wbC9Db25zdHJhaW50QmxvY2tJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9pbnRlcm5hbC9pbXBsL0NvbnN0cmFpbnRCbG9ja0ltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjIyNTFiCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvY29uc3RyYWludHMvaW50ZXJuYWwvaW1wbC9Db25zdHJhaW50QmxvY2tJbXBsLmphdmEKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludEJsb2NrOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+Q29uc3RyYWludCBCbG9jazwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29uc3RyYWludEJsb2NrSW1wbCBleHRlbmRzIEJsb2NrSW1wbCBpbXBsZW1lbnRzIENvbnN0cmFpbnRCbG9jayB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29uc3RyYWludEJsb2NrSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENvbnN0cmFpbnRzUGFja2FnZS5MaXRlcmFscy5DT05TVFJBSU5UX0JMT0NLOworCX0KKworfSAvLyBDb25zdHJhaW50QmxvY2tJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9pbnRlcm5hbC9pbXBsL0NvbnN0cmFpbnRQcm9wZXJ0eUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL2ludGVybmFsL2ltcGwvQ29uc3RyYWludFByb3BlcnR5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYzExZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9pbnRlcm5hbC9pbXBsL0NvbnN0cmFpbnRQcm9wZXJ0eUltcGwuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkNvbnN0cmFpbnQgUHJvcGVydHk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50UHJvcGVydHlJbXBsI2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb25zdHJhaW50UHJvcGVydHlJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIENvbnN0cmFpbnRQcm9wZXJ0eSB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX1Byb3BlcnR5KCkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9Qcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5IGJhc2VfUHJvcGVydHk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29uc3RyYWludFByb3BlcnR5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvcGVydHkgYmFzaWNHZXRCYXNlX1Byb3BlcnR5KCkgeworCQlyZXR1cm4gYmFzZV9Qcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQ29uc3RyYWludHNQYWNrYWdlLkNPTlNUUkFJTlRfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFk6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX1Byb3BlcnR5KCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX1Byb3BlcnR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBDb25zdHJhaW50c1BhY2thZ2UuQ09OU1RSQUlOVF9QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWToKKwkJCXJldHVybiBiYXNlX1Byb3BlcnR5ICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgQ29uc3RyYWludHNQYWNrYWdlLkNPTlNUUkFJTlRfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFk6CisJCQlzZXRCYXNlX1Byb3BlcnR5KChQcm9wZXJ0eSkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBDb25zdHJhaW50c1BhY2thZ2UuTGl0ZXJhbHMuQ09OU1RSQUlOVF9QUk9QRVJUWTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIENvbnN0cmFpbnRzUGFja2FnZS5DT05TVFJBSU5UX1BST1BFUlRZX19CQVNFX1BST1BFUlRZOgorCQkJc2V0QmFzZV9Qcm9wZXJ0eSgoUHJvcGVydHkpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcm9wZXJ0eSBnZXRCYXNlX1Byb3BlcnR5KCkgeworCQlpZiAoYmFzZV9Qcm9wZXJ0eSAhPSBudWxsICYmIGJhc2VfUHJvcGVydHkuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfUHJvcGVydHkgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX1Byb3BlcnR5OworCQkJYmFzZV9Qcm9wZXJ0eSA9IChQcm9wZXJ0eSkgZVJlc29sdmVQcm94eShvbGRCYXNlX1Byb3BlcnR5KTsKKwkJCWlmIChiYXNlX1Byb3BlcnR5ICE9IG9sZEJhc2VfUHJvcGVydHkpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIENvbnN0cmFpbnRzUGFja2FnZS5DT05TVFJBSU5UX1BST1BFUlRZX19CQVNFX1BST1BFUlRZLCBvbGRCYXNlX1Byb3BlcnR5LCBiYXNlX1Byb3BlcnR5KSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1Byb3BlcnR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfUHJvcGVydHkoUHJvcGVydHkgbmV3QmFzZV9Qcm9wZXJ0eSkgeworCQlQcm9wZXJ0eSBvbGRCYXNlX1Byb3BlcnR5ID0gYmFzZV9Qcm9wZXJ0eTsKKwkJYmFzZV9Qcm9wZXJ0eSA9IG5ld0Jhc2VfUHJvcGVydHk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29uc3RyYWludHNQYWNrYWdlLkNPTlNUUkFJTlRfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFksIG9sZEJhc2VfUHJvcGVydHksIGJhc2VfUHJvcGVydHkpKTsKKwkJfQorCX0KKworfSAvLyBDb25zdHJhaW50UHJvcGVydHlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9pbnRlcm5hbC9pbXBsL0NvbnN0cmFpbnRzRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL2ludGVybmFsL2ltcGwvQ29uc3RyYWludHNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjhjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy9pbnRlcm5hbC9pbXBsL0NvbnN0cmFpbnRzRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRCbG9jazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb25zdHJhaW50c0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgQ29uc3RyYWludHNGYWN0b3J5IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIENvbnN0cmFpbnRzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gQ29uc3RyYWludHNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIENvbnN0cmFpbnRzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJQ29uc3RyYWludHNGYWN0b3J5IHRoZUNvbnN0cmFpbnRzRmFjdG9yeSA9IChDb25zdHJhaW50c0ZhY3RvcnkpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKTsKKwkJCWlmICh0aGVDb25zdHJhaW50c0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVDb25zdHJhaW50c0ZhY3Rvcnk7CisJCQl9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgQ29uc3RyYWludHNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29uc3RyYWludHNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQljYXNlIENvbnN0cmFpbnRzUGFja2FnZS5DT05TVFJBSU5UX0JMT0NLOgorCQkJcmV0dXJuIGNyZWF0ZUNvbnN0cmFpbnRCbG9jaygpOworCQljYXNlIENvbnN0cmFpbnRzUGFja2FnZS5DT05TVFJBSU5UX1BST1BFUlRZOgorCQkJcmV0dXJuIGNyZWF0ZUNvbnN0cmFpbnRQcm9wZXJ0eSgpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb25zdHJhaW50QmxvY2sgY3JlYXRlQ29uc3RyYWludEJsb2NrKCkgeworCQlDb25zdHJhaW50QmxvY2tJbXBsIGNvbnN0cmFpbnRCbG9jayA9IG5ldyBDb25zdHJhaW50QmxvY2tJbXBsKCk7CisJCXJldHVybiBjb25zdHJhaW50QmxvY2s7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbnN0cmFpbnRQcm9wZXJ0eSBjcmVhdGVDb25zdHJhaW50UHJvcGVydHkoKSB7CisJCUNvbnN0cmFpbnRQcm9wZXJ0eUltcGwgY29uc3RyYWludFByb3BlcnR5ID0gbmV3IENvbnN0cmFpbnRQcm9wZXJ0eUltcGwoKTsKKwkJcmV0dXJuIGNvbnN0cmFpbnRQcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29uc3RyYWludHNQYWNrYWdlIGdldENvbnN0cmFpbnRzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChDb25zdHJhaW50c1BhY2thZ2UpIGdldEVQYWNrYWdlKCk7CisJfQorCit9IC8vIENvbnN0cmFpbnRzRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL2ludGVybmFsL2ltcGwvQ29uc3RyYWludHNQYWNrYWdlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvY29uc3RyYWludHMvaW50ZXJuYWwvaW1wbC9Db25zdHJhaW50c1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZjZkNQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL2ludGVybmFsL2ltcGwvQ29uc3RyYWludHNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRCbG9jazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGwuSW50ZXJhY3Rpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcm5hbC5pbXBsLlN5c21sUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLk1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuUG9ydGFuZGZsb3dzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5TdGF0ZW1hY2hpbmVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuaW50ZXJuYWwuaW1wbC5TdGF0ZW1hY2hpbmVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5pbnRlcm5hbC5pbXBsLlVzZWNhc2VzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuVU1MUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb25zdHJhaW50c1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgQ29uc3RyYWludHNQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgQ29uc3RyYWludHNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIENvbnN0cmFpbnRzUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHsKKwkJCXJldHVybiAoQ29uc3RyYWludHNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSk7CisJCX0KKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUNvbnN0cmFpbnRzUGFja2FnZUltcGwgdGhlQ29uc3RyYWludHNQYWNrYWdlID0gKENvbnN0cmFpbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBDb25zdHJhaW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IENvbnN0cmFpbnRzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCVN5c21sUGFja2FnZUltcGwgdGhlU3lzbWxQYWNrYWdlID0gKFN5c21sUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTeXNtbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTeXNtbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpIDogU3lzbWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCB0aGVNb2RlbGVsZW1lbnRzUGFja2FnZSA9IChNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKE1vZGVsZWxlbWVudHNQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxlbGVtZW50c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQmxvY2tzUGFja2FnZUltcGwgdGhlQmxvY2tzUGFja2FnZSA9IChCbG9ja3NQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEJsb2Nrc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBCbG9ja3NQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEJsb2Nrc1BhY2thZ2UuZU5TX1VSSSkgOiBCbG9ja3NQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVBvcnRhbmRmbG93c1BhY2thZ2VJbXBsIHRoZVBvcnRhbmRmbG93c1BhY2thZ2UgPSAoUG9ydGFuZGZsb3dzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQb3J0YW5kZmxvd3NQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUG9ydGFuZGZsb3dzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQb3J0YW5kZmxvd3NQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBQb3J0YW5kZmxvd3NQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUFjdGl2aXRpZXNQYWNrYWdlSW1wbCB0aGVBY3Rpdml0aWVzUGFja2FnZSA9IChBY3Rpdml0aWVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFjdGl2aXRpZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBBY3Rpdml0aWVzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBbGxvY2F0aW9uc1BhY2thZ2VJbXBsIHRoZUFsbG9jYXRpb25zUGFja2FnZSA9IChBbGxvY2F0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWxsb2NhdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUludGVyYWN0aW9uc1BhY2thZ2VJbXBsIHRoZUludGVyYWN0aW9uc1BhY2thZ2UgPSAoSW50ZXJhY3Rpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBJbnRlcmFjdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpIDogU3RhdGVtYWNoaW5lc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVXNlY2FzZXNQYWNrYWdlSW1wbCB0aGVVc2VjYXNlc1BhY2thZ2UgPSAoVXNlY2FzZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVzZWNhc2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVzZWNhc2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFVzZWNhc2VzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQmxvY2tzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUG9ydGFuZGZsb3dzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUmVxdWlyZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVVzZWNhc2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN5c21sUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQmxvY2tzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBY3Rpdml0aWVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVJbnRlcmFjdGlvbnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmZyZWV6ZSgpOworCisKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSwgdGhlQ29uc3RyYWludHNQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUNvbnN0cmFpbnRzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBjb25zdHJhaW50QmxvY2tFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY29uc3RyYWludFByb3BlcnR5RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZQorCSAqIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD4KKwkgKiBOb3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50c1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIENvbnN0cmFpbnRzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIENvbnN0cmFpbnRzRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJY29uc3RyYWludEJsb2NrRUNsYXNzID0gY3JlYXRlRUNsYXNzKENPTlNUUkFJTlRfQkxPQ0spOworCisJCWNvbnN0cmFpbnRQcm9wZXJ0eUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT05TVFJBSU5UX1BST1BFUlRZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShjb25zdHJhaW50UHJvcGVydHlFQ2xhc3MsIENPTlNUUkFJTlRfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29uc3RyYWludEJsb2NrKCkgeworCQlyZXR1cm4gY29uc3RyYWludEJsb2NrRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29uc3RyYWludFByb3BlcnR5KCkgeworCQlyZXR1cm4gY29uc3RyYWludFByb3BlcnR5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldENvbnN0cmFpbnRQcm9wZXJ0eV9CYXNlX1Byb3BlcnR5KCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIGNvbnN0cmFpbnRQcm9wZXJ0eUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb25zdHJhaW50c0ZhY3RvcnkgZ2V0Q29uc3RyYWludHNGYWN0b3J5KCkgeworCQlyZXR1cm4gKENvbnN0cmFpbnRzRmFjdG9yeSkgZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlCbG9ja3NQYWNrYWdlIHRoZUJsb2Nrc1BhY2thZ2UgPSAoQmxvY2tzUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKTsKKwkJVU1MUGFja2FnZSB0aGVVTUxQYWNrYWdlID0gKFVNTFBhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVNTFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJY29uc3RyYWludEJsb2NrRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUJsb2Nrc1BhY2thZ2UuZ2V0QmxvY2soKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzLCBmZWF0dXJlcywgYW5kIG9wZXJhdGlvbnM7IGFkZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoY29uc3RyYWludEJsb2NrRUNsYXNzLCBDb25zdHJhaW50QmxvY2suY2xhc3MsICJDb25zdHJhaW50QmxvY2siLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhjb25zdHJhaW50UHJvcGVydHlFQ2xhc3MsIENvbnN0cmFpbnRQcm9wZXJ0eS5jbGFzcywgIkNvbnN0cmFpbnRQcm9wZXJ0eSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Q29uc3RyYWludFByb3BlcnR5X0Jhc2VfUHJvcGVydHkoKSwgdGhlVU1MUGFja2FnZS5nZXRQcm9wZXJ0eSgpLCBudWxsLCAiYmFzZV9Qcm9wZXJ0eSIsIG51bGwsIDEsIDEsIENvbnN0cmFpbnRQcm9wZXJ0eS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLAorCQkJCSFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJfQorCit9IC8vIENvbnN0cmFpbnRzUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL3V0aWwvQ29uc3RyYWludHNBZGFwdGVyRmFjdG9yeS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvY29uc3RyYWludHMvdXRpbC9Db25zdHJhaW50c0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0YzgwMgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL3V0aWwvQ29uc3RyYWludHNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50QmxvY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50UHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50c1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgcHJvdmlkZXMKKyAqIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29uc3RyYWludHNBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBDb25zdHJhaW50c1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb25zdHJhaW50c1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9IG5ldyBDb25zdHJhaW50c1N3aXRjaDxBZGFwdGVyPigpIHsKKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZUNvbnN0cmFpbnRCbG9jayhDb25zdHJhaW50QmxvY2sgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQ29uc3RyYWludEJsb2NrQWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VDb25zdHJhaW50UHJvcGVydHkoQ29uc3RyYWludFByb3BlcnR5IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZUNvbnN0cmFpbnRQcm9wZXJ0eUFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlQmxvY2soQmxvY2sgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQmxvY2tBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQl9CisJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb25zdHJhaW50c0FkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IENvbnN0cmFpbnRzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdGFyZ2V0CisJICogICAgICAgICAgICB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpIHRhcmdldCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2sgPGVtPkJsb2NrPC9lbT59Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UKKwkgKiBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJsb2NrQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRCbG9jayA8ZW0+Q29uc3RyYWludCBCbG9jazwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0CisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MKKwkgKiB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludEJsb2NrCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbnN0cmFpbnRCbG9ja0FkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50UHJvcGVydHkgPGVtPkNvbnN0cmFpbnQgUHJvcGVydHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdAorCSAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzCisJICogdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRQcm9wZXJ0eQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb25zdHJhaW50UHJvcGVydHlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZgorCSAqIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZQorCSAqIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdCkgb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCit9IC8vIENvbnN0cmFpbnRzQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL3V0aWwvQ29uc3RyYWludHNSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZmQ4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiBwYWNrYWdlLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMudXRpbC5Db25zdHJhaW50c1Jlc291cmNlSW1wbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29uc3RyYWludHNSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgUmVzb3VyY2VGYWN0b3J5SW1wbCB7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbnN0cmFpbnRzUmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7CisJCVhNTFJlc291cmNlIHJlc3VsdCA9IG5ldyBDb25zdHJhaW50c1Jlc291cmNlSW1wbCh1cmkpOworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIEJvb2xlYW4uVFJVRSk7CisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgQm9vbGVhbi5UUlVFKTsKKworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKK30gLy8gQ29uc3RyYWludHNSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzUmVzb3VyY2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzUmVzb3VyY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhZWVhMwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL3V0aWwvQ29uc3RyYWludHNSZXNvdXJjZUltcGwuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UmVzb3VyY2UgPC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMudXRpbC5Db25zdHJhaW50c1Jlc291cmNlRmFjdG9yeUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbnN0cmFpbnRzUmVzb3VyY2VJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VJbXBsIHsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdXJpCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBuZXcgcmVzb3VyY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb25zdHJhaW50c1Jlc291cmNlSW1wbChVUkkgdXJpKSB7CisJCXN1cGVyKHVyaSk7CisJfQorCit9IC8vIENvbnN0cmFpbnRzUmVzb3VyY2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzU3dpdGNoLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhZTNjMQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL3V0aWwvQ29uc3RyYWludHNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuU3dpdGNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2NrOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludEJsb2NrOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludFByb3BlcnR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZQorICogaGllcmFyY2h5LiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9IHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0IGFuZCBwcm9jZWVkaW5nIHVwIHRoZQorICogaW5oZXJpdGFuY2UgaGllcmFyY2h5IHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLCB3aGljaCBpcyB0aGUKKyAqIHJlc3VsdCBvZiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludHNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb25zdHJhaW50c1N3aXRjaDxUPiBleHRlbmRzIFN3aXRjaDxUPiB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIENvbnN0cmFpbnRzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29uc3RyYWludHNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQ29uc3RyYWludHNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrcyB3aGV0aGVyIHRoaXMgaXMgYSBzd2l0Y2ggZm9yIHRoZSBnaXZlbiBwYWNrYWdlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtZXRlciBlUGFja2FnZSB0aGUgcGFja2FnZSBpbiBxdWVzdGlvbi4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBpcyBhIHN3aXRjaCBmb3IgdGhlIGdpdmVuIHBhY2thZ2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGlzU3dpdGNoRm9yKEVQYWNrYWdlIGVQYWNrYWdlKSB7CisJCXJldHVybiBlUGFja2FnZSA9PSBtb2RlbFBhY2thZ2U7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmxvY2s8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisJICogbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QmxvY2s8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VCbG9jayhCbG9jayBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29uc3RyYWludCBCbG9jazwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uCisJICogcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db25zdHJhaW50IEJsb2NrPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQ29uc3RyYWludEJsb2NrKENvbnN0cmFpbnRCbG9jayBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29uc3RyYWludCBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUKKwkgKiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db25zdHJhaW50IFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQ29uc3RyYWludFByb3BlcnR5KENvbnN0cmFpbnRQcm9wZXJ0eSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMKKwkgKiB0aGUgbGFzdCBjYXNlIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQljYXNlIENvbnN0cmFpbnRzUGFja2FnZS5DT05TVFJBSU5UX0JMT0NLOiB7CisJCQlDb25zdHJhaW50QmxvY2sgY29uc3RyYWludEJsb2NrID0gKENvbnN0cmFpbnRCbG9jaykgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZUNvbnN0cmFpbnRCbG9jayhjb25zdHJhaW50QmxvY2spOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gY2FzZUJsb2NrKGNvbnN0cmFpbnRCbG9jayk7CisJCQl9CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBDb25zdHJhaW50c1BhY2thZ2UuQ09OU1RSQUlOVF9QUk9QRVJUWTogeworCQkJQ29uc3RyYWludFByb3BlcnR5IGNvbnN0cmFpbnRQcm9wZXJ0eSA9IChDb25zdHJhaW50UHJvcGVydHkpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VDb25zdHJhaW50UHJvcGVydHkoY29uc3RyYWludFByb3BlcnR5KTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQlkZWZhdWx0OgorCQkJcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCit9IC8vIENvbnN0cmFpbnRzU3dpdGNoCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzWE1MUHJvY2Vzc29yLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9jb25zdHJhaW50cy91dGlsL0NvbnN0cmFpbnRzWE1MUHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2NTU1OAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2NvbnN0cmFpbnRzL3V0aWwvQ29uc3RyYWludHNYTUxQcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkudXRpbC5YTUxQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50c1BhY2thZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXIgbWV0aG9kcyB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIFhNTCBkb2N1bWVudHMKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbnN0cmFpbnRzWE1MUHJvY2Vzc29yIGV4dGVuZHMgWE1MUHJvY2Vzc29yIHsKKworCS8qKgorCSAqIFB1YmxpYyBjb25zdHJ1Y3RvciB0byBpbnN0YW50aWF0ZSB0aGUgaGVscGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbnN0cmFpbnRzWE1MUHJvY2Vzc29yKCkgeworCQlzdXBlcigoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UpKTsKKwkJQ29uc3RyYWludHNQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwl9CisKKwkvKioKKwkgKiBSZWdpc3RlciBmb3IgIioiIGFuZCAieG1sIiBmaWxlIGV4dGVuc2lvbnMgdGhlIENvbnN0cmFpbnRzUmVzb3VyY2VGYWN0b3J5SW1wbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE1hcDxTdHJpbmcsIFJlc291cmNlLkZhY3Rvcnk+IGdldFJlZ2lzdHJhdGlvbnMoKSB7CisJCWlmIChyZWdpc3RyYXRpb25zID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFJlZ2lzdHJhdGlvbnMoKTsKKwkJCXJlZ2lzdHJhdGlvbnMucHV0KFhNTF9FWFRFTlNJT04sIG5ldyBDb25zdHJhaW50c1Jlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChTVEFSX0VYVEVOU0lPTiwgbmV3IENvbnN0cmFpbnRzUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJfQorCQlyZXR1cm4gcmVnaXN0cmF0aW9uczsKKwl9CisKK30gLy8gQ29uc3RyYWludHNYTUxQcm9jZXNzb3IKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2ludGVyYWN0aW9ucy9JbnRlcmFjdGlvbnNGYWN0b3J5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvSW50ZXJhY3Rpb25zRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYmNlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvSW50ZXJhY3Rpb25zRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0IHByb3ZpZGVzIGEKKyAqIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZXJhY3Rpb25zRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnRlcmFjdGlvbnNGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGwuSW50ZXJhY3Rpb25zRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUludGVyYWN0aW9uc1BhY2thZ2UgZ2V0SW50ZXJhY3Rpb25zUGFja2FnZSgpOworCit9IC8vIEludGVyYWN0aW9uc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2ludGVyYWN0aW9ucy9JbnRlcmFjdGlvbnNQYWNrYWdlLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvSW50ZXJhY3Rpb25zUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NmU2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvSW50ZXJhY3Rpb25zUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuIEl0IGNvbnRhaW5zCisgKiBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLkludGVyYWN0aW9uc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEludGVyYWN0aW9uc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQKKwkgKiByZXByZXNlbnQKKwkgKiA8dWw+CisJICogPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RHVtbXk8L2VtPicgZGF0YSB0eXBlLiA8IS0tCisJCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuaW50ZXJuYWwuaW1wbC5JbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCNnZXREdW1teSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVEYXRhVHlwZSBEVU1NWSA9IGVJTlNUQU5DRS5nZXREdW1teSgpOworCisJfQorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiaW50ZXJhY3Rpb25zIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML0ludGVyYWN0aW9ucyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJJbnRlcmFjdGlvbnMiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUludGVyYWN0aW9uc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuaW50ZXJuYWwuaW1wbC5JbnRlcmFjdGlvbnNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPkR1bW15PC9lbT4nIGRhdGEgdHlwZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgamF2YS5sYW5nLlN0cmluZworCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuaW50ZXJuYWwuaW1wbC5JbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCNnZXREdW1teSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBEVU1NWSA9IDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YS5sYW5nLlN0cmluZyA8ZW0+RHVtbXk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPkR1bW15PC9lbT4nLgorCSAqIEBzZWUgamF2YS5sYW5nLlN0cmluZworCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0RHVtbXkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUludGVyYWN0aW9uc0ZhY3RvcnkgZ2V0SW50ZXJhY3Rpb25zRmFjdG9yeSgpOworCit9IC8vIEludGVyYWN0aW9uc1BhY2thZ2UKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2ludGVyYWN0aW9ucy9pbnRlcm5hbC9pbXBsL0ludGVyYWN0aW9uc0ZhY3RvcnlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvaW50ZXJuYWwvaW1wbC9JbnRlcmFjdGlvbnNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjMxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvaW50ZXJuYWwvaW1wbC9JbnRlcmFjdGlvbnNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLkludGVyYWN0aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuSW50ZXJhY3Rpb25zUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcmFjdGlvbnNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEludGVyYWN0aW9uc0ZhY3RvcnkgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgSW50ZXJhY3Rpb25zUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gSW50ZXJhY3Rpb25zUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbnRlcmFjdGlvbnNGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlJbnRlcmFjdGlvbnNGYWN0b3J5IHRoZUludGVyYWN0aW9uc0ZhY3RvcnkgPSAoSW50ZXJhY3Rpb25zRmFjdG9yeSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKTsKKwkJCWlmICh0aGVJbnRlcmFjdGlvbnNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlSW50ZXJhY3Rpb25zRmFjdG9yeTsKKwkJCX0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBJbnRlcmFjdGlvbnNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJhY3Rpb25zRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0RHVtbXlUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlyZXR1cm4gc3VwZXIuY29udmVydFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBJbnRlcmFjdGlvbnNQYWNrYWdlLkRVTU1ZOgorCQkJcmV0dXJuIGNvbnZlcnREdW1teVRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNyZWF0ZUR1bW15RnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiAoU3RyaW5nKSBzdXBlci5jcmVhdGVGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQljYXNlIEludGVyYWN0aW9uc1BhY2thZ2UuRFVNTVk6CisJCQlyZXR1cm4gY3JlYXRlRHVtbXlGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJhY3Rpb25zUGFja2FnZSBnZXRJbnRlcmFjdGlvbnNQYWNrYWdlKCkgeworCQlyZXR1cm4gKEludGVyYWN0aW9uc1BhY2thZ2UpIGdldEVQYWNrYWdlKCk7CisJfQorCit9IC8vIEludGVyYWN0aW9uc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvaW50ZXJuYWwvaW1wbC9JbnRlcmFjdGlvbnNQYWNrYWdlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJhY3Rpb25zL2ludGVybmFsL2ltcGwvSW50ZXJhY3Rpb25zUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzJlOGFiCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJhY3Rpb25zL2ludGVybmFsL2ltcGwvSW50ZXJhY3Rpb25zUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDIzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuU3lzbWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5BY3Rpdml0aWVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLkludGVyYWN0aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuSW50ZXJhY3Rpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVybmFsLmltcGwuU3lzbWxQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLlN0YXRlbWFjaGluZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5pbnRlcm5hbC5pbXBsLlN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLlVzZWNhc2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLmludGVybmFsLmltcGwuVXNlY2FzZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEludGVyYWN0aW9uc1BhY2thZ2UgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqCisJICogPHA+CisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBJbnRlcmFjdGlvbnNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW50ZXJhY3Rpb25zUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHsKKwkJCXJldHVybiAoSW50ZXJhY3Rpb25zUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKTsKKwkJfQorCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgdGhlSW50ZXJhY3Rpb25zUGFja2FnZSA9IChJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEludGVyYWN0aW9uc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEludGVyYWN0aW9uc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlTeXNtbFBhY2thZ2VJbXBsIHRoZVN5c21sUGFja2FnZSA9IChTeXNtbFBhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU3lzbWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSA6IFN5c21sUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UgPSAoTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsZWxlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUJsb2Nrc1BhY2thZ2VJbXBsIHRoZUJsb2Nrc1BhY2thZ2UgPSAoQmxvY2tzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQmxvY2tzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIDogQmxvY2tzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCB0aGVQb3J0YW5kZmxvd3NQYWNrYWdlID0gKFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogUG9ydGFuZGZsb3dzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlDb25zdHJhaW50c1BhY2thZ2VJbXBsIHRoZUNvbnN0cmFpbnRzUGFja2FnZSA9IChDb25zdHJhaW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29uc3RyYWludHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29uc3RyYWludHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQ29uc3RyYWludHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUFjdGl2aXRpZXNQYWNrYWdlSW1wbCB0aGVBY3Rpdml0aWVzUGFja2FnZSA9IChBY3Rpdml0aWVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFjdGl2aXRpZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBBY3Rpdml0aWVzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBbGxvY2F0aW9uc1BhY2thZ2VJbXBsIHRoZUFsbG9jYXRpb25zUGFja2FnZSA9IChBbGxvY2F0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWxsb2NhdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpIDogU3RhdGVtYWNoaW5lc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVXNlY2FzZXNQYWNrYWdlSW1wbCB0aGVVc2VjYXNlc1BhY2thZ2UgPSAoVXNlY2FzZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVzZWNhc2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVzZWNhc2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFVzZWNhc2VzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUludGVyYWN0aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN5c21sUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUJsb2Nrc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUmVxdWlyZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVVzZWNhc2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUludGVyYWN0aW9uc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTeXNtbFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUJsb2Nrc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBbGxvY2F0aW9uc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5mcmVlemUoKTsKKworCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJLCB0aGVJbnRlcmFjdGlvbnNQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUludGVyYWN0aW9uc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRGF0YVR5cGUgZHVtbXlFRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlCisJICogcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPgorCSAqIE5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwgaWYgb25lIGFscmVhZHkgZXhpc3RzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgSW50ZXJhY3Rpb25zRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgZGF0YSB0eXBlcworCQlkdW1teUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShEVU1NWSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXREdW1teSgpIHsKKwkJcmV0dXJuIGR1bW15RURhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcmFjdGlvbnNGYWN0b3J5IGdldEludGVyYWN0aW9uc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoSW50ZXJhY3Rpb25zRmFjdG9yeSkgZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBkYXRhIHR5cGVzCisJCWluaXRFRGF0YVR5cGUoZHVtbXlFRGF0YVR5cGUsIFN0cmluZy5jbGFzcywgIkR1bW15IiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwl9CisKK30gLy8gSW50ZXJhY3Rpb25zUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2ludGVyYWN0aW9ucy91dGlsL0ludGVyYWN0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2ludGVyYWN0aW9ucy91dGlsL0ludGVyYWN0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjEwNTFjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJhY3Rpb25zL3V0aWwvSW50ZXJhY3Rpb25zUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlRmFjdG9yeUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMudXRpbC5JbnRlcmFjdGlvbnNSZXNvdXJjZUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVyYWN0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBSZXNvdXJjZUZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJhY3Rpb25zUmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7CisJCVJlc291cmNlIHJlc3VsdCA9IG5ldyBJbnRlcmFjdGlvbnNSZXNvdXJjZUltcGwodXJpKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKK30gLy8gSW50ZXJhY3Rpb25zUmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJhY3Rpb25zL3V0aWwvSW50ZXJhY3Rpb25zUmVzb3VyY2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvdXRpbC9JbnRlcmFjdGlvbnNSZXNvdXJjZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjI4NWU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJhY3Rpb25zL3V0aWwvSW50ZXJhY3Rpb25zUmVzb3VyY2VJbXBsLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMudXRpbC5JbnRlcmFjdGlvbnNSZXNvdXJjZUZhY3RvcnlJbXBsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcmFjdGlvbnNSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVyYWN0aW9uc1Jlc291cmNlSW1wbChVUkkgdXJpKSB7CisJCXN1cGVyKHVyaSk7CisJfQorCit9IC8vIEludGVyYWN0aW9uc1Jlc291cmNlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJhY3Rpb25zL3V0aWwvSW50ZXJhY3Rpb25zWE1MUHJvY2Vzc29yLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcmFjdGlvbnMvdXRpbC9JbnRlcmFjdGlvbnNYTUxQcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWU2NGYyCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJhY3Rpb25zL3V0aWwvSW50ZXJhY3Rpb25zWE1MUHJvY2Vzc29yLmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy51dGlsOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS51dGlsLlhNTFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVyIG1ldGhvZHMgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBYTUwgZG9jdW1lbnRzCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcmFjdGlvbnNYTUxQcm9jZXNzb3IgZXh0ZW5kcyBYTUxQcm9jZXNzb3IgeworCisJLyoqCisJICogUHVibGljIGNvbnN0cnVjdG9yIHRvIGluc3RhbnRpYXRlIHRoZSBoZWxwZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJhY3Rpb25zWE1MUHJvY2Vzc29yKCkgeworCQlzdXBlcigoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UpKTsKKwkJSW50ZXJhY3Rpb25zUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJfQorCisJLyoqCisJICogUmVnaXN0ZXIgZm9yICIqIiBhbmQgInhtbCIgZmlsZSBleHRlbnNpb25zIHRoZSBJbnRlcmFjdGlvbnNSZXNvdXJjZUZhY3RvcnlJbXBsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgUmVzb3VyY2UuRmFjdG9yeT4gZ2V0UmVnaXN0cmF0aW9ucygpIHsKKwkJaWYgKHJlZ2lzdHJhdGlvbnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UmVnaXN0cmF0aW9ucygpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoWE1MX0VYVEVOU0lPTiwgbmV3IEludGVyYWN0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChTVEFSX0VYVEVOU0lPTiwgbmV3IEludGVyYWN0aW9uc1Jlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCX0KKwkJcmV0dXJuIHJlZ2lzdHJhdGlvbnM7CisJfQorCit9IC8vIEludGVyYWN0aW9uc1hNTFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJuYWwvaW1wbC9TeXNtbEZhY3RvcnlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9pbnRlcm5hbC9pbXBsL1N5c21sRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGY3NGRiCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJuYWwvaW1wbC9TeXNtbEZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTeXNtbEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgU3lzbWxGYWN0b3J5IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN5c21sUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gU3lzbWxQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN5c21sRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJU3lzbWxGYWN0b3J5IHRoZVN5c21sRmFjdG9yeSA9IChTeXNtbEZhY3RvcnkpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KFN5c21sUGFja2FnZS5lTlNfVVJJKTsKKwkJCWlmICh0aGVTeXNtbEZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVTeXNtbEZhY3Rvcnk7CisJCQl9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgU3lzbWxGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3lzbWxGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnREdW1teVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQljYXNlIFN5c21sUGFja2FnZS5EVU1NWToKKwkJCXJldHVybiBjb252ZXJ0RHVtbXlUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjcmVhdGVEdW1teUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gKFN0cmluZykgc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBTeXNtbFBhY2thZ2UuRFVNTVk6CisJCQlyZXR1cm4gY3JlYXRlRHVtbXlGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3lzbWxQYWNrYWdlIGdldFN5c21sUGFja2FnZSgpIHsKKwkJcmV0dXJuIChTeXNtbFBhY2thZ2UpIGdldEVQYWNrYWdlKCk7CisJfQorCit9IC8vIFN5c21sRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2ludGVybmFsL2ltcGwvU3lzbWxQYWNrYWdlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvaW50ZXJuYWwvaW1wbC9TeXNtbFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlYzJiMAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL2ludGVybmFsL2ltcGwvU3lzbWxQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGwuSW50ZXJhY3Rpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLk1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuUG9ydGFuZGZsb3dzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5TdGF0ZW1hY2hpbmVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuaW50ZXJuYWwuaW1wbC5TdGF0ZW1hY2hpbmVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5pbnRlcm5hbC5pbXBsLlVzZWNhc2VzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3lzbWxQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFN5c21sUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICoKKwkgKiA8cD4KKwkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFN5c21sUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4gQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTeXNtbFBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSB7CisJCQlyZXR1cm4gKFN5c21sUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpOworCQl9CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlTeXNtbFBhY2thZ2VJbXBsIHRoZVN5c21sUGFja2FnZSA9IChTeXNtbFBhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgU3lzbWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBTeXNtbFBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UgPSAoTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsZWxlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUJsb2Nrc1BhY2thZ2VJbXBsIHRoZUJsb2Nrc1BhY2thZ2UgPSAoQmxvY2tzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQmxvY2tzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIDogQmxvY2tzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCB0aGVQb3J0YW5kZmxvd3NQYWNrYWdlID0gKFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogUG9ydGFuZGZsb3dzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlDb25zdHJhaW50c1BhY2thZ2VJbXBsIHRoZUNvbnN0cmFpbnRzUGFja2FnZSA9IChDb25zdHJhaW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29uc3RyYWludHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29uc3RyYWludHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQ29uc3RyYWludHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUFjdGl2aXRpZXNQYWNrYWdlSW1wbCB0aGVBY3Rpdml0aWVzUGFja2FnZSA9IChBY3Rpdml0aWVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFjdGl2aXRpZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBBY3Rpdml0aWVzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBbGxvY2F0aW9uc1BhY2thZ2VJbXBsIHRoZUFsbG9jYXRpb25zUGFja2FnZSA9IChBbGxvY2F0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWxsb2NhdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUludGVyYWN0aW9uc1BhY2thZ2VJbXBsIHRoZUludGVyYWN0aW9uc1BhY2thZ2UgPSAoSW50ZXJhY3Rpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBJbnRlcmFjdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpIDogU3RhdGVtYWNoaW5lc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVXNlY2FzZXNQYWNrYWdlSW1wbCB0aGVVc2VjYXNlc1BhY2thZ2UgPSAoVXNlY2FzZXNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVzZWNhc2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFVzZWNhc2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFVzZWNhc2VzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVN5c21sUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUJsb2Nrc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUmVxdWlyZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVVzZWNhc2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZVN5c21sUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQmxvY2tzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb25zdHJhaW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBY3Rpdml0aWVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVJbnRlcmFjdGlvbnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlU3lzbWxQYWNrYWdlLmZyZWV6ZSgpOworCisKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChTeXNtbFBhY2thZ2UuZU5TX1VSSSwgdGhlU3lzbWxQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVN5c21sUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSBkdW1teUVEYXRhVHlwZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUKKwkgKiBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+CisJICogTm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLCBpZiBvbmUgYWxyZWFkeSBleGlzdHMuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuU3lzbWxQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBTeXNtbFBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBTeXNtbEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgeworCQkJcmV0dXJuOworCQl9CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGRhdGEgdHlwZXMKKwkJZHVtbXlFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoRFVNTVkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRGF0YVR5cGUgZ2V0RHVtbXkoKSB7CisJCXJldHVybiBkdW1teUVEYXRhVHlwZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3lzbWxGYWN0b3J5IGdldFN5c21sRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChTeXNtbEZhY3RvcnkpIGdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgeworCQkJcmV0dXJuOworCQl9CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJTW9kZWxlbGVtZW50c1BhY2thZ2UgdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UgPSAoTW9kZWxlbGVtZW50c1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsZWxlbWVudHNQYWNrYWdlLmVOU19VUkkpOworCQlCbG9ja3NQYWNrYWdlIHRoZUJsb2Nrc1BhY2thZ2UgPSAoQmxvY2tzUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKTsKKwkJUG9ydGFuZGZsb3dzUGFja2FnZSB0aGVQb3J0YW5kZmxvd3NQYWNrYWdlID0gKFBvcnRhbmRmbG93c1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSk7CisJCUNvbnN0cmFpbnRzUGFja2FnZSB0aGVDb25zdHJhaW50c1BhY2thZ2UgPSAoQ29uc3RyYWludHNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSk7CisJCUFjdGl2aXRpZXNQYWNrYWdlIHRoZUFjdGl2aXRpZXNQYWNrYWdlID0gKEFjdGl2aXRpZXNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKTsKKwkJQWxsb2NhdGlvbnNQYWNrYWdlIHRoZUFsbG9jYXRpb25zUGFja2FnZSA9IChBbGxvY2F0aW9uc1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKTsKKwkJUmVxdWlyZW1lbnRzUGFja2FnZSB0aGVSZXF1aXJlbWVudHNQYWNrYWdlID0gKFJlcXVpcmVtZW50c1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlcXVpcmVtZW50c1BhY2thZ2UuZU5TX1VSSSk7CisJCUludGVyYWN0aW9uc1BhY2thZ2UgdGhlSW50ZXJhY3Rpb25zUGFja2FnZSA9IChJbnRlcmFjdGlvbnNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpOworCQlTdGF0ZW1hY2hpbmVzUGFja2FnZSB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhdGVtYWNoaW5lc1BhY2thZ2UuZU5TX1VSSSk7CisJCVVzZWNhc2VzUGFja2FnZSB0aGVVc2VjYXNlc1BhY2thZ2UgPSAoVXNlY2FzZXNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQWRkIHN1YnBhY2thZ2VzCisJCWdldEVTdWJwYWNrYWdlcygpLmFkZCh0aGVNb2RlbGVsZW1lbnRzUGFja2FnZSk7CisJCWdldEVTdWJwYWNrYWdlcygpLmFkZCh0aGVCbG9ja3NQYWNrYWdlKTsKKwkJZ2V0RVN1YnBhY2thZ2VzKCkuYWRkKHRoZVBvcnRhbmRmbG93c1BhY2thZ2UpOworCQlnZXRFU3VicGFja2FnZXMoKS5hZGQodGhlQ29uc3RyYWludHNQYWNrYWdlKTsKKwkJZ2V0RVN1YnBhY2thZ2VzKCkuYWRkKHRoZUFjdGl2aXRpZXNQYWNrYWdlKTsKKwkJZ2V0RVN1YnBhY2thZ2VzKCkuYWRkKHRoZUFsbG9jYXRpb25zUGFja2FnZSk7CisJCWdldEVTdWJwYWNrYWdlcygpLmFkZCh0aGVSZXF1aXJlbWVudHNQYWNrYWdlKTsKKwkJZ2V0RVN1YnBhY2thZ2VzKCkuYWRkKHRoZUludGVyYWN0aW9uc1BhY2thZ2UpOworCQlnZXRFU3VicGFja2FnZXMoKS5hZGQodGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UpOworCQlnZXRFU3VicGFja2FnZXMoKS5hZGQodGhlVXNlY2FzZXNQYWNrYWdlKTsKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZShkdW1teUVEYXRhVHlwZSwgU3RyaW5nLmNsYXNzLCAiRHVtbXkiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy8gU3lzbWxQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9Db25mb3JtLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL0NvbmZvcm0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2MwOGNhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9Db25mb3JtLmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5EZXBlbmRlbmN5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5Db25mb3JtPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Db25mb3JtI2dldEJhc2VfRGVwZW5kZW5jeSA8ZW0+QmFzZSBEZXBlbmRlbmN5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UjZ2V0Q29uZm9ybSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBDb25mb3JtIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIERlcGVuZGVuY3k8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgRGVwZW5kZW5jeTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIERlcGVuZGVuY3k8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfRGVwZW5kZW5jeShEZXBlbmRlbmN5KQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlI2dldENvbmZvcm1fQmFzZV9EZXBlbmRlbmN5KCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZXBlbmRlbmN5IGdldEJhc2VfRGVwZW5kZW5jeSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm0jZ2V0QmFzZV9EZXBlbmRlbmN5IDxlbT5CYXNlIERlcGVuZGVuY3k8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgRGVwZW5kZW5jeTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9EZXBlbmRlbmN5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0RlcGVuZGVuY3koRGVwZW5kZW5jeSB2YWx1ZSk7CisKK30gLy8gQ29uZm9ybQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9Nb2RlbGVsZW1lbnRzRmFjdG9yeS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9Nb2RlbGVsZW1lbnRzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMmY4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL01vZGVsZWxlbWVudHNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0IHByb3ZpZGVzIGEKKyAqIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNb2RlbGVsZW1lbnRzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RlbGVsZW1lbnRzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db25mb3JtPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbmZvcm08L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbmZvcm0gY3JlYXRlQ29uZm9ybSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qcm9ibGVtPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlByb2JsZW08L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVByb2JsZW0gY3JlYXRlUHJvYmxlbSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SYXRpb25hbGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmF0aW9uYWxlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSYXRpb25hbGUgY3JlYXRlUmF0aW9uYWxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlZpZXc8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VmlldzwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVmlldyBjcmVhdGVWaWV3KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlZpZXcgUG9pbnQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VmlldyBQb2ludDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVmlld1BvaW50IGNyZWF0ZVZpZXdQb2ludCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1vZGVsZWxlbWVudHNQYWNrYWdlIGdldE1vZGVsZWxlbWVudHNQYWNrYWdlKCk7CisKK30gLy8gTW9kZWxlbGVtZW50c0ZhY3RvcnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvTW9kZWxlbGVtZW50c1BhY2thZ2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvTW9kZWxlbGVtZW50c1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWYzMDNmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9Nb2RlbGVsZW1lbnRzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsNjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBjb250YWlucworICogYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogPGxpPmVhY2ggZW51bSw8L2xpPgorICogPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+IDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPiBUaGUgc3VwcGxpZXIvdGFyZ2V0IG11c3QgYmUgYW4KKyAqIGVsZW1lbnQgc3RlcmVvdHlwZWQgYnkgPDxWaWV3UG9pbnQ+PiBUaGUgY2xpZW50L3NvdXJjZSBtdXN0IGJlIGFuIGVsZW1lbnQKKyAqIHN0ZXJlb3R5cGVkIGJ5IDw8Vmlldz4+IDwhLS0gZW5kLW1vZGVsLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTW9kZWxlbGVtZW50c1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQKKwkgKiByZXByZXNlbnQKKwkgKiA8dWw+CisJICogPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLkNvbmZvcm1JbXBsCisJCSAqIDxlbT5Db25mb3JtPC9lbT59JyBjbGFzcy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkJICogLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuQ29uZm9ybUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwjZ2V0Q29uZm9ybSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT05GT1JNID0gZUlOU1RBTkNFLmdldENvbmZvcm0oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgRGVwZW5kZW5jeTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIENPTkZPUk1fX0JBU0VfREVQRU5ERU5DWSA9IGVJTlNUQU5DRS5nZXRDb25mb3JtX0Jhc2VfRGVwZW5kZW5jeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuVmlld0ltcGwgPGVtPlZpZXc8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5WaWV3SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLk1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCNnZXRWaWV3KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFZJRVcgPSBlSU5TVEFOQ0UuZ2V0VmlldygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmlldyBQb2ludDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFZJRVdfX1ZJRVdfUE9JTlQgPSBlSU5TVEFOQ0UuZ2V0Vmlld19WaWV3UG9pbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUGFja2FnZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFZJRVdfX0JBU0VfUEFDS0FHRSA9IGVJTlNUQU5DRS5nZXRWaWV3X0Jhc2VfUGFja2FnZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuVmlld1BvaW50SW1wbCA8ZW0+VmlldyBQb2ludDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlZpZXdQb2ludEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwjZ2V0Vmlld1BvaW50KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFZJRVdfUE9JTlQgPSBlSU5TVEFOQ0UuZ2V0Vmlld1BvaW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVklFV19QT0lOVF9fQkFTRV9DTEFTUyA9IGVJTlNUQU5DRS5nZXRWaWV3UG9pbnRfQmFzZV9DbGFzcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3Rha2UgSG9sZGVyczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVklFV19QT0lOVF9fU1RBS0VfSE9MREVSUyA9IGVJTlNUQU5DRS5nZXRWaWV3UG9pbnRfU3Rha2VIb2xkZXJzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QdXJwb3NlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVklFV19QT0lOVF9fUFVSUE9TRSA9IGVJTlNUQU5DRS5nZXRWaWV3UG9pbnRfUHVycG9zZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q29uY2VybnM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFZJRVdfUE9JTlRfX0NPTkNFUk5TID0gZUlOU1RBTkNFLmdldFZpZXdQb2ludF9Db25jZXJucygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TGFuZ3VhZ2VzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBWSUVXX1BPSU5UX19MQU5HVUFHRVMgPSBlSU5TVEFOQ0UuZ2V0Vmlld1BvaW50X0xhbmd1YWdlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWV0aG9kczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVklFV19QT0lOVF9fTUVUSE9EUyA9IGVJTlNUQU5DRS5nZXRWaWV3UG9pbnRfTWV0aG9kcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlJhdGlvbmFsZUltcGwKKwkJICogPGVtPlJhdGlvbmFsZTwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlJhdGlvbmFsZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwjZ2V0UmF0aW9uYWxlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJBVElPTkFMRSA9IGVJTlNUQU5DRS5nZXRSYXRpb25hbGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQ29tbWVudDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFJBVElPTkFMRV9fQkFTRV9DT01NRU5UID0gZUlOU1RBTkNFLmdldFJhdGlvbmFsZV9CYXNlX0NvbW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Qcm9ibGVtSW1wbAorCQkgKiA8ZW0+UHJvYmxlbTwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlByb2JsZW1JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsI2dldFByb2JsZW0oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUFJPQkxFTSA9IGVJTlNUQU5DRS5nZXRQcm9ibGVtKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIENvbW1lbnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQUk9CTEVNX19CQVNFX0NPTU1FTlQgPSBlSU5TVEFOQ0UuZ2V0UHJvYmxlbV9CYXNlX0NvbW1lbnQoKTsKKworCX0KKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gIm1vZGVsZWxlbWVudHMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvTW9kZWxFbGVtZW50cyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJNb2RlbEVsZW1lbnRzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RlbGVsZW1lbnRzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Db25mb3JtSW1wbCA8ZW0+Q29uZm9ybTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLkNvbmZvcm1JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwjZ2V0Q29uZm9ybSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT05GT1JNID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIERlcGVuZGVuY3k8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05GT1JNX19CQVNFX0RFUEVOREVOQ1kgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbmZvcm08L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09ORk9STV9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5Db25mb3JtPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09ORk9STV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5WaWV3SW1wbCA8ZW0+VmlldzwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlZpZXdJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwjZ2V0VmlldygpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBWSUVXID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WaWV3IFBvaW50PC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVklFV19fVklFV19QT0lOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQYWNrYWdlPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVklFV19fQkFTRV9QQUNLQUdFID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5WaWV3PC9lbT4nIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZJRVdfRkVBVFVSRV9DT1VOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+VmlldzwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZJRVdfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlZpZXdQb2ludEltcGwKKwkgKiA8ZW0+VmlldyBQb2ludDwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlZpZXdQb2ludEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLk1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCNnZXRWaWV3UG9pbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVklFV19QT0lOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBDbGFzczwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZJRVdfUE9JTlRfX0JBU0VfQ0xBU1MgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0YWtlIEhvbGRlcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZJRVdfUE9JTlRfX1NUQUtFX0hPTERFUlMgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlB1cnBvc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWSUVXX1BPSU5UX19QVVJQT1NFID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db25jZXJuczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVklFV19QT0lOVF9fQ09OQ0VSTlMgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhbmd1YWdlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVklFV19QT0lOVF9fTEFOR1VBR0VTID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZXRob2RzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWSUVXX1BPSU5UX19NRVRIT0RTID0gNTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5WaWV3IFBvaW50PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZJRVdfUE9JTlRfRkVBVFVSRV9DT1VOVCA9IDY7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+VmlldyBQb2ludDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZJRVdfUE9JTlRfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuUmF0aW9uYWxlSW1wbCA8ZW0+UmF0aW9uYWxlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuUmF0aW9uYWxlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsI2dldFJhdGlvbmFsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSQVRJT05BTEUgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQ29tbWVudDwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJBVElPTkFMRV9fQkFTRV9DT01NRU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SYXRpb25hbGU8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFUSU9OQUxFX0ZFQVRVUkVfQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPlJhdGlvbmFsZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJBVElPTkFMRV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Qcm9ibGVtSW1wbCA8ZW0+UHJvYmxlbTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlByb2JsZW1JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwjZ2V0UHJvYmxlbSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQUk9CTEVNID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENvbW1lbnQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUk9CTEVNX19CQVNFX0NPTU1FTlQgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlByb2JsZW08L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPQkxFTV9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5Qcm9ibGVtPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJPQkxFTV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm0gPGVtPkNvbmZvcm08L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Db25mb3JtPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm0KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbmZvcm0oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm0jZ2V0QmFzZV9EZXBlbmRlbmN5IDxlbT5CYXNlIERlcGVuZGVuY3k8L2VtPn0gJy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBEZXBlbmRlbmN5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm0jZ2V0QmFzZV9EZXBlbmRlbmN5KCkKKwkgKiBAc2VlICNnZXRDb25mb3JtKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRDb25mb3JtX0Jhc2VfRGVwZW5kZW5jeSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kZWxlbGVtZW50c0ZhY3RvcnkgZ2V0TW9kZWxlbGVtZW50c0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Qcm9ibGVtIDxlbT5Qcm9ibGVtPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UHJvYmxlbTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Qcm9ibGVtCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQcm9ibGVtKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Qcm9ibGVtI2dldEJhc2VfQ29tbWVudCA8ZW0+QmFzZSBDb21tZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBDb21tZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlByb2JsZW0jZ2V0QmFzZV9Db21tZW50KCkKKwkgKiBAc2VlICNnZXRQcm9ibGVtKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRQcm9ibGVtX0Jhc2VfQ29tbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlJhdGlvbmFsZSA8ZW0+UmF0aW9uYWxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJhdGlvbmFsZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5SYXRpb25hbGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFJhdGlvbmFsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuUmF0aW9uYWxlI2dldEJhc2VfQ29tbWVudCA8ZW0+QmFzZSBDb21tZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBDb21tZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlJhdGlvbmFsZSNnZXRCYXNlX0NvbW1lbnQoKQorCSAqIEBzZWUgI2dldFJhdGlvbmFsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmF0aW9uYWxlX0Jhc2VfQ29tbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3IDxlbT5WaWV3PC9lbT59Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlZpZXc8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlldworCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VmlldygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlldyNnZXRCYXNlX1BhY2thZ2UgPGVtPkJhc2UgUGFja2FnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgUGFja2FnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3I2dldEJhc2VfUGFja2FnZSgpCisJICogQHNlZSAjZ2V0VmlldygpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0Vmlld19CYXNlX1BhY2thZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXcjZ2V0Vmlld1BvaW50IDxlbT5WaWV3IFBvaW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+VmlldyBQb2ludDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3I2dldFZpZXdQb2ludCgpCisJICogQHNlZSAjZ2V0VmlldygpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0Vmlld19WaWV3UG9pbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3UG9pbnQgPGVtPlZpZXcgUG9pbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VmlldyBQb2ludDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3UG9pbnQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFZpZXdQb2ludCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50I2dldEJhc2VfQ2xhc3MgPGVtPkJhc2UgQ2xhc3M8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIENsYXNzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRCYXNlX0NsYXNzKCkKKwkgKiBAc2VlICNnZXRWaWV3UG9pbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFZpZXdQb2ludF9CYXNlX0NsYXNzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRDb25jZXJucyA8ZW0+Q29uY2VybnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkNvbmNlcm5zPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRDb25jZXJucygpCisJICogQHNlZSAjZ2V0Vmlld1BvaW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRWaWV3UG9pbnRfQ29uY2VybnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50I2dldExhbmd1YWdlcyA8ZW0+TGFuZ3VhZ2VzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5MYW5ndWFnZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50I2dldExhbmd1YWdlcygpCisJICogQHNlZSAjZ2V0Vmlld1BvaW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRWaWV3UG9pbnRfTGFuZ3VhZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRNZXRob2RzIDxlbT5NZXRob2RzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NZXRob2RzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRNZXRob2RzKCkKKwkgKiBAc2VlICNnZXRWaWV3UG9pbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFZpZXdQb2ludF9NZXRob2RzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3UG9pbnQjZ2V0UHVycG9zZSA8ZW0+UHVycG9zZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlB1cnBvc2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50I2dldFB1cnBvc2UoKQorCSAqIEBzZWUgI2dldFZpZXdQb2ludCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Vmlld1BvaW50X1B1cnBvc2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50I2dldFN0YWtlSG9sZGVycworCSAqIDxlbT5TdGFrZSBIb2xkZXJzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5TdGFrZSBIb2xkZXJzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRTdGFrZUhvbGRlcnMoKQorCSAqIEBzZWUgI2dldFZpZXdQb2ludCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Vmlld1BvaW50X1N0YWtlSG9sZGVycygpOworCit9IC8vIE1vZGVsZWxlbWVudHNQYWNrYWdlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL1Byb2JsZW0uamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvUHJvYmxlbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDFiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL1Byb2JsZW0uamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkNvbW1lbnQ7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlByb2JsZW08L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlByb2JsZW0jZ2V0QmFzZV9Db21tZW50IDxlbT5CYXNlIENvbW1lbnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZSNnZXRQcm9ibGVtKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFByb2JsZW0gZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgQ29tbWVudDwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBDb21tZW50PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgQ29tbWVudDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9Db21tZW50KENvbW1lbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UjZ2V0UHJvYmxlbV9CYXNlX0NvbW1lbnQoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1lbnQgZ2V0QmFzZV9Db21tZW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuUHJvYmxlbSNnZXRCYXNlX0NvbW1lbnQgPGVtPkJhc2UgQ29tbWVudDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDb21tZW50PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0NvbW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfQ29tbWVudChDb21tZW50IHZhbHVlKTsKKworfSAvLyBQcm9ibGVtCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL1JhdGlvbmFsZS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9SYXRpb25hbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzNhZThmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9SYXRpb25hbGUuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkNvbW1lbnQ7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlJhdGlvbmFsZTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuUmF0aW9uYWxlI2dldEJhc2VfQ29tbWVudCA8ZW0+QmFzZSBDb21tZW50PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UjZ2V0UmF0aW9uYWxlKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJhdGlvbmFsZSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBDb21tZW50PC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIENvbW1lbnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDb21tZW50PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0NvbW1lbnQoQ29tbWVudCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZSNnZXRSYXRpb25hbGVfQmFzZV9Db21tZW50KCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb21tZW50IGdldEJhc2VfQ29tbWVudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlJhdGlvbmFsZSNnZXRCYXNlX0NvbW1lbnQgPGVtPkJhc2UgQ29tbWVudDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDb21tZW50PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0NvbW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfQ29tbWVudChDb21tZW50IHZhbHVlKTsKKworfSAvLyBSYXRpb25hbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvVmlldy5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9WaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiMTMzMgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvVmlldy5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlZpZXc8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXcjZ2V0Vmlld1BvaW50IDxlbT5WaWV3IFBvaW50PC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXcjZ2V0QmFzZV9QYWNrYWdlIDxlbT5CYXNlIFBhY2thZ2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZSNnZXRWaWV3KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFZpZXcgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgUGFja2FnZTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBQYWNrYWdlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUGFja2FnZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9QYWNrYWdlKG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2UpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UjZ2V0Vmlld19CYXNlX1BhY2thZ2UoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCW9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2UgZ2V0QmFzZV9QYWNrYWdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WaWV3IFBvaW50PC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WaWV3IFBvaW50PC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZpZXcgUG9pbnQ8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlI2dldFZpZXdfVmlld1BvaW50KCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICogICAgICAgIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVmlld1BvaW50IGdldFZpZXdQb2ludCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXcjZ2V0QmFzZV9QYWNrYWdlIDxlbT5CYXNlIFBhY2thZ2U8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUGFja2FnZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9QYWNrYWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX1BhY2thZ2Uob3JnLmVjbGlwc2UudW1sMi51bWwuUGFja2FnZSB2YWx1ZSk7CisKK30gLy8gVmlldwpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9WaWV3UG9pbnQuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvVmlld1BvaW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiZjI5MgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvVmlld1BvaW50LmphdmEKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5WaWV3IFBvaW50PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3UG9pbnQjZ2V0QmFzZV9DbGFzcyA8ZW0+QmFzZSBDbGFzczwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3UG9pbnQjZ2V0U3Rha2VIb2xkZXJzIDxlbT5TdGFrZSBIb2xkZXJzPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRQdXJwb3NlIDxlbT5QdXJwb3NlPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRDb25jZXJucyA8ZW0+Q29uY2VybnM8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50I2dldExhbmd1YWdlcyA8ZW0+TGFuZ3VhZ2VzPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludCNnZXRNZXRob2RzIDxlbT5NZXRob2RzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UjZ2V0Vmlld1BvaW50KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFZpZXdQb2ludCBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBDbGFzczwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBDbGFzczwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIENsYXNzPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0NsYXNzKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlI2dldFZpZXdQb2ludF9CYXNlX0NsYXNzKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBnZXRCYXNlX0NsYXNzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Db25jZXJuczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db25jZXJuczwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvbmNlcm5zPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlI2dldFZpZXdQb2ludF9Db25jZXJucygpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlN0cmluZyIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PFN0cmluZz4gZ2V0Q29uY2VybnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxhbmd1YWdlczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5MYW5ndWFnZXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5MYW5ndWFnZXM8L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UjZ2V0Vmlld1BvaW50X0xhbmd1YWdlcygpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS51bWwyLnR5cGVzLlN0cmluZyIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PFN0cmluZz4gZ2V0TGFuZ3VhZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NZXRob2RzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1ldGhvZHM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NZXRob2RzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlI2dldFZpZXdQb2ludF9NZXRob2RzKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgZGF0YVR5cGU9Im9yZy5lY2xpcHNlLnVtbDIudHlwZXMuU3RyaW5nIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8U3RyaW5nPiBnZXRNZXRob2RzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QdXJwb3NlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QdXJwb3NlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlB1cnBvc2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFB1cnBvc2UoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlI2dldFZpZXdQb2ludF9QdXJwb3NlKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRQdXJwb3NlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TdGFrZSBIb2xkZXJzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TdGFrZSBIb2xkZXJzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3Rha2UgSG9sZGVyczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZSNnZXRWaWV3UG9pbnRfU3Rha2VIb2xkZXJzKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PFN0cmluZz4gZ2V0U3Rha2VIb2xkZXJzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50I2dldEJhc2VfQ2xhc3MgPGVtPkJhc2UgQ2xhc3M8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgQ2xhc3M8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfQ2xhc3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfQ2xhc3Mob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3UG9pbnQjZ2V0UHVycG9zZQorCSAqIDxlbT5QdXJwb3NlPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHVycG9zZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UHVycG9zZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UHVycG9zZShTdHJpbmcgdmFsdWUpOworCit9IC8vIFZpZXdQb2ludApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9pbnRlcm5hbC9pbXBsL0NvbmZvcm1JbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvQ29uZm9ybUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWU5OGE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9pbnRlcm5hbC9pbXBsL0NvbmZvcm1JbXBsLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuQ29uZm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuRGVwZW5kZW5jeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkNvbmZvcm08L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLkNvbmZvcm1JbXBsI2dldEJhc2VfRGVwZW5kZW5jeSA8ZW0+QmFzZSBEZXBlbmRlbmN5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29uZm9ybUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgQ29uZm9ybSB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0RlcGVuZGVuY3koKSA8ZW0+QmFzZSBEZXBlbmRlbmN5PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfRGVwZW5kZW5jeSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERlcGVuZGVuY3kgYmFzZV9EZXBlbmRlbmN5OworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbmZvcm1JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZXBlbmRlbmN5IGJhc2ljR2V0QmFzZV9EZXBlbmRlbmN5KCkgeworCQlyZXR1cm4gYmFzZV9EZXBlbmRlbmN5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5DT05GT1JNX19CQVNFX0RFUEVOREVOQ1k6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0RlcGVuZGVuY3koKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfRGVwZW5kZW5jeSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuQ09ORk9STV9fQkFTRV9ERVBFTkRFTkNZOgorCQkJcmV0dXJuIGJhc2VfRGVwZW5kZW5jeSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLkNPTkZPUk1fX0JBU0VfREVQRU5ERU5DWToKKwkJCXNldEJhc2VfRGVwZW5kZW5jeSgoRGVwZW5kZW5jeSkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RlbGVsZW1lbnRzUGFja2FnZS5MaXRlcmFscy5DT05GT1JNOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuQ09ORk9STV9fQkFTRV9ERVBFTkRFTkNZOgorCQkJc2V0QmFzZV9EZXBlbmRlbmN5KChEZXBlbmRlbmN5KSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVwZW5kZW5jeSBnZXRCYXNlX0RlcGVuZGVuY3koKSB7CisJCWlmIChiYXNlX0RlcGVuZGVuY3kgIT0gbnVsbCAmJiBiYXNlX0RlcGVuZGVuY3kuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfRGVwZW5kZW5jeSA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfRGVwZW5kZW5jeTsKKwkJCWJhc2VfRGVwZW5kZW5jeSA9IChEZXBlbmRlbmN5KSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfRGVwZW5kZW5jeSk7CisJCQlpZiAoYmFzZV9EZXBlbmRlbmN5ICE9IG9sZEJhc2VfRGVwZW5kZW5jeSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTW9kZWxlbGVtZW50c1BhY2thZ2UuQ09ORk9STV9fQkFTRV9ERVBFTkRFTkNZLCBvbGRCYXNlX0RlcGVuZGVuY3ksIGJhc2VfRGVwZW5kZW5jeSkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9EZXBlbmRlbmN5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfRGVwZW5kZW5jeShEZXBlbmRlbmN5IG5ld0Jhc2VfRGVwZW5kZW5jeSkgeworCQlEZXBlbmRlbmN5IG9sZEJhc2VfRGVwZW5kZW5jeSA9IGJhc2VfRGVwZW5kZW5jeTsKKwkJYmFzZV9EZXBlbmRlbmN5ID0gbmV3QmFzZV9EZXBlbmRlbmN5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGVsZWxlbWVudHNQYWNrYWdlLkNPTkZPUk1fX0JBU0VfREVQRU5ERU5DWSwgb2xkQmFzZV9EZXBlbmRlbmN5LCBiYXNlX0RlcGVuZGVuY3kpKTsKKwkJfQorCX0KKworfSAvLyBDb25mb3JtSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9pbnRlcm5hbC9pbXBsL01vZGVsZWxlbWVudHNGYWN0b3J5SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9pbnRlcm5hbC9pbXBsL01vZGVsZWxlbWVudHNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYmZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvTW9kZWxlbGVtZW50c0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuQ29uZm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Qcm9ibGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5SYXRpb25hbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbGVsZW1lbnRzRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBNb2RlbGVsZW1lbnRzRmFjdG9yeSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBNb2RlbGVsZW1lbnRzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gTW9kZWxlbGVtZW50c1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTW9kZWxlbGVtZW50c0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCU1vZGVsZWxlbWVudHNGYWN0b3J5IHRoZU1vZGVsZWxlbWVudHNGYWN0b3J5ID0gKE1vZGVsZWxlbWVudHNGYWN0b3J5KSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKTsKKwkJCWlmICh0aGVNb2RlbGVsZW1lbnRzRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZU1vZGVsZWxlbWVudHNGYWN0b3J5OworCQkJfQorCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IE1vZGVsZWxlbWVudHNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxlbGVtZW50c0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuQ09ORk9STToKKwkJCXJldHVybiBjcmVhdGVDb25mb3JtKCk7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFVzoKKwkJCXJldHVybiBjcmVhdGVWaWV3KCk7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVDoKKwkJCXJldHVybiBjcmVhdGVWaWV3UG9pbnQoKTsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5SQVRJT05BTEU6CisJCQlyZXR1cm4gY3JlYXRlUmF0aW9uYWxlKCk7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuUFJPQkxFTToKKwkJCXJldHVybiBjcmVhdGVQcm9ibGVtKCk7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbmZvcm0gY3JlYXRlQ29uZm9ybSgpIHsKKwkJQ29uZm9ybUltcGwgY29uZm9ybSA9IG5ldyBDb25mb3JtSW1wbCgpOworCQlyZXR1cm4gY29uZm9ybTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvYmxlbSBjcmVhdGVQcm9ibGVtKCkgeworCQlQcm9ibGVtSW1wbCBwcm9ibGVtID0gbmV3IFByb2JsZW1JbXBsKCk7CisJCXJldHVybiBwcm9ibGVtOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSYXRpb25hbGUgY3JlYXRlUmF0aW9uYWxlKCkgeworCQlSYXRpb25hbGVJbXBsIHJhdGlvbmFsZSA9IG5ldyBSYXRpb25hbGVJbXBsKCk7CisJCXJldHVybiByYXRpb25hbGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXcgY3JlYXRlVmlldygpIHsKKwkJVmlld0ltcGwgdmlldyA9IG5ldyBWaWV3SW1wbCgpOworCQlyZXR1cm4gdmlldzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld1BvaW50IGNyZWF0ZVZpZXdQb2ludCgpIHsKKwkJVmlld1BvaW50SW1wbCB2aWV3UG9pbnQgPSBuZXcgVmlld1BvaW50SW1wbCgpOworCQlyZXR1cm4gdmlld1BvaW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbGVsZW1lbnRzUGFja2FnZSBnZXRNb2RlbGVsZW1lbnRzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChNb2RlbGVsZW1lbnRzUGFja2FnZSkgZ2V0RVBhY2thZ2UoKTsKKwl9CisKK30gLy8gTW9kZWxlbGVtZW50c0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkMDMxZAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvaW50ZXJuYWwvaW1wbC9Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDQ1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGwuSW50ZXJhY3Rpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcm5hbC5pbXBsLlN5c21sUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuUHJvYmxlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuUmF0aW9uYWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5WaWV3UG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLlBvcnRhbmRmbG93c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuU3RhdGVtYWNoaW5lc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLmludGVybmFsLmltcGwuU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuVXNlY2FzZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuaW50ZXJuYWwuaW1wbC5Vc2VjYXNlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudHlwZXMuVHlwZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlVNTFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgTW9kZWxlbGVtZW50c1BhY2thZ2UgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqCisJICogPHA+CisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBNb2RlbGVsZW1lbnRzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4gQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGVsZWxlbWVudHNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgeworCQkJcmV0dXJuIChNb2RlbGVsZW1lbnRzUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSk7CisJCX0KKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCU1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCB0aGVNb2RlbGVsZW1lbnRzUGFja2FnZSA9IChNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlTeXNtbFBhY2thZ2VJbXBsIHRoZVN5c21sUGFja2FnZSA9IChTeXNtbFBhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU3lzbWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSA6IFN5c21sUGFja2FnZS5lSU5TVEFOQ0UpOworCQlCbG9ja3NQYWNrYWdlSW1wbCB0aGVCbG9ja3NQYWNrYWdlID0gKEJsb2Nrc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEJsb2Nrc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSA6IEJsb2Nrc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUG9ydGFuZGZsb3dzUGFja2FnZUltcGwgdGhlUG9ydGFuZGZsb3dzUGFja2FnZSA9IChQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFBvcnRhbmRmbG93c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQ29uc3RyYWludHNQYWNrYWdlSW1wbCB0aGVDb25zdHJhaW50c1BhY2thZ2UgPSAoQ29uc3RyYWludHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbnN0cmFpbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IENvbnN0cmFpbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBY3Rpdml0aWVzUGFja2FnZUltcGwgdGhlQWN0aXZpdGllc1BhY2thZ2UgPSAoQWN0aXZpdGllc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWN0aXZpdGllc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBBY3Rpdml0aWVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWN0aXZpdGllc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCB0aGVBbGxvY2F0aW9uc1BhY2thZ2UgPSAoQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFsbG9jYXRpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBbGxvY2F0aW9uc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IEFsbG9jYXRpb25zUGFja2FnZS5lSU5TVEFOQ0UpOworCQlSZXF1aXJlbWVudHNQYWNrYWdlSW1wbCB0aGVSZXF1aXJlbWVudHNQYWNrYWdlID0gKFJlcXVpcmVtZW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVxdWlyZW1lbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJlcXVpcmVtZW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVxdWlyZW1lbnRzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogUmVxdWlyZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCB0aGVJbnRlcmFjdGlvbnNQYWNrYWdlID0gKEludGVyYWN0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEludGVyYWN0aW9uc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogSW50ZXJhY3Rpb25zUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwgdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UgPSAoU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhdGVtYWNoaW5lc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSA6IFN0YXRlbWFjaGluZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVVzZWNhc2VzUGFja2FnZUltcGwgdGhlVXNlY2FzZXNQYWNrYWdlID0gKFVzZWNhc2VzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVc2VjYXNlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVXNlY2FzZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBVc2VjYXNlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVCbG9ja3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb25zdHJhaW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFjdGl2aXRpZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBbGxvY2F0aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUludGVyYWN0aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN5c21sUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUJsb2Nrc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBbGxvY2F0aW9uc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVXNlY2FzZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmZyZWV6ZSgpOworCisKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJLCB0aGVNb2RlbGVsZW1lbnRzUGFja2FnZSk7CisJCXJldHVybiB0aGVNb2RlbGVsZW1lbnRzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBjb25mb3JtRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHZpZXdFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgdmlld1BvaW50RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHJhdGlvbmFsZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwcm9ibGVtRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZQorCSAqIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD4KKwkgKiBOb3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIE1vZGVsZWxlbWVudHNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQljb25mb3JtRUNsYXNzID0gY3JlYXRlRUNsYXNzKENPTkZPUk0pOworCQljcmVhdGVFUmVmZXJlbmNlKGNvbmZvcm1FQ2xhc3MsIENPTkZPUk1fX0JBU0VfREVQRU5ERU5DWSk7CisKKwkJdmlld0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhWSUVXKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh2aWV3RUNsYXNzLCBWSUVXX19WSUVXX1BPSU5UKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh2aWV3RUNsYXNzLCBWSUVXX19CQVNFX1BBQ0tBR0UpOworCisJCXZpZXdQb2ludEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhWSUVXX1BPSU5UKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh2aWV3UG9pbnRFQ2xhc3MsIFZJRVdfUE9JTlRfX0JBU0VfQ0xBU1MpOworCQljcmVhdGVFQXR0cmlidXRlKHZpZXdQb2ludEVDbGFzcywgVklFV19QT0lOVF9fU1RBS0VfSE9MREVSUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodmlld1BvaW50RUNsYXNzLCBWSUVXX1BPSU5UX19QVVJQT1NFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh2aWV3UG9pbnRFQ2xhc3MsIFZJRVdfUE9JTlRfX0NPTkNFUk5TKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh2aWV3UG9pbnRFQ2xhc3MsIFZJRVdfUE9JTlRfX0xBTkdVQUdFUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodmlld1BvaW50RUNsYXNzLCBWSUVXX1BPSU5UX19NRVRIT0RTKTsKKworCQlyYXRpb25hbGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkFUSU9OQUxFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyYXRpb25hbGVFQ2xhc3MsIFJBVElPTkFMRV9fQkFTRV9DT01NRU5UKTsKKworCQlwcm9ibGVtRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBST0JMRU0pOworCQljcmVhdGVFUmVmZXJlbmNlKHByb2JsZW1FQ2xhc3MsIFBST0JMRU1fX0JBU0VfQ09NTUVOVCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRDb25mb3JtKCkgeworCQlyZXR1cm4gY29uZm9ybUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRDb25mb3JtX0Jhc2VfRGVwZW5kZW5jeSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBjb25mb3JtRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsZWxlbWVudHNGYWN0b3J5IGdldE1vZGVsZWxlbWVudHNGYWN0b3J5KCkgeworCQlyZXR1cm4gKE1vZGVsZWxlbWVudHNGYWN0b3J5KSBnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQcm9ibGVtKCkgeworCQlyZXR1cm4gcHJvYmxlbUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRQcm9ibGVtX0Jhc2VfQ29tbWVudCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSBwcm9ibGVtRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSYXRpb25hbGUoKSB7CisJCXJldHVybiByYXRpb25hbGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UmF0aW9uYWxlX0Jhc2VfQ29tbWVudCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByYXRpb25hbGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFZpZXcoKSB7CisJCXJldHVybiB2aWV3RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFZpZXdfQmFzZV9QYWNrYWdlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHZpZXdFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRWaWV3X1ZpZXdQb2ludCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSB2aWV3RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRWaWV3UG9pbnQoKSB7CisJCXJldHVybiB2aWV3UG9pbnRFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0Vmlld1BvaW50X0Jhc2VfQ2xhc3MoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgdmlld1BvaW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Vmlld1BvaW50X0NvbmNlcm5zKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpIHZpZXdQb2ludEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFZpZXdQb2ludF9MYW5ndWFnZXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSkgdmlld1BvaW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Vmlld1BvaW50X01ldGhvZHMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSkgdmlld1BvaW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Vmlld1BvaW50X1B1cnBvc2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSkgdmlld1BvaW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Vmlld1BvaW50X1N0YWtlSG9sZGVycygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKSB2aWV3UG9pbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgeworCQkJcmV0dXJuOworCQl9CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJVU1MUGFja2FnZSB0aGVVTUxQYWNrYWdlID0gKFVNTFBhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVNTFBhY2thZ2UuZU5TX1VSSSk7CisJCVR5cGVzUGFja2FnZSB0aGVUeXBlc1BhY2thZ2UgPSAoVHlwZXNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMsIGZlYXR1cmVzLCBhbmQgb3BlcmF0aW9uczsgYWRkIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhjb25mb3JtRUNsYXNzLCBDb25mb3JtLmNsYXNzLCAiQ29uZm9ybSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Q29uZm9ybV9CYXNlX0RlcGVuZGVuY3koKSwgdGhlVU1MUGFja2FnZS5nZXREZXBlbmRlbmN5KCksIG51bGwsICJiYXNlX0RlcGVuZGVuY3kiLCBudWxsLCAxLCAxLCBDb25mb3JtLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELAorCQkJCSFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHZpZXdFQ2xhc3MsIFZpZXcuY2xhc3MsICJWaWV3IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRWaWV3X1ZpZXdQb2ludCgpLCB0aGlzLmdldFZpZXdQb2ludCgpLCBudWxsLCAidmlld1BvaW50IiwgbnVsbCwgMSwgMSwgVmlldy5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Vmlld19CYXNlX1BhY2thZ2UoKSwgdGhlVU1MUGFja2FnZS5nZXRQYWNrYWdlKCksIG51bGwsICJiYXNlX1BhY2thZ2UiLCBudWxsLCAxLCAxLCBWaWV3LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyh2aWV3UG9pbnRFQ2xhc3MsIFZpZXdQb2ludC5jbGFzcywgIlZpZXdQb2ludCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Vmlld1BvaW50X0Jhc2VfQ2xhc3MoKSwgdGhlVU1MUGFja2FnZS5nZXRDbGFzc18oKSwgbnVsbCwgImJhc2VfQ2xhc3MiLCBudWxsLCAxLCAxLCBWaWV3UG9pbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Vmlld1BvaW50X1N0YWtlSG9sZGVycygpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJzdGFrZUhvbGRlcnMiLCBudWxsLCAwLCAtMSwgVmlld1BvaW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFZpZXdQb2ludF9QdXJwb3NlKCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgInB1cnBvc2UiLCBudWxsLCAwLCAxLCBWaWV3UG9pbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Vmlld1BvaW50X0NvbmNlcm5zKCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgImNvbmNlcm5zIiwgbnVsbCwgMCwgLTEsIFZpZXdQb2ludC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRWaWV3UG9pbnRfTGFuZ3VhZ2VzKCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgImxhbmd1YWdlcyIsIG51bGwsIDAsIC0xLCBWaWV3UG9pbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Vmlld1BvaW50X01ldGhvZHMoKSwgdGhlVHlwZXNQYWNrYWdlLmdldFN0cmluZygpLCAibWV0aG9kcyIsIG51bGwsIDAsIC0xLCBWaWV3UG9pbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHJhdGlvbmFsZUVDbGFzcywgUmF0aW9uYWxlLmNsYXNzLCAiUmF0aW9uYWxlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRSYXRpb25hbGVfQmFzZV9Db21tZW50KCksIHRoZVVNTFBhY2thZ2UuZ2V0Q29tbWVudCgpLCBudWxsLCAiYmFzZV9Db21tZW50IiwgbnVsbCwgMSwgMSwgUmF0aW9uYWxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELAorCQkJCSFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHByb2JsZW1FQ2xhc3MsIFByb2JsZW0uY2xhc3MsICJQcm9ibGVtIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRQcm9ibGVtX0Jhc2VfQ29tbWVudCgpLCB0aGVVTUxQYWNrYWdlLmdldENvbW1lbnQoKSwgbnVsbCwgImJhc2VfQ29tbWVudCIsIG51bGwsIDEsIDEsIFByb2JsZW0uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwl9CisKK30gLy8gTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvUHJvYmxlbUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvaW50ZXJuYWwvaW1wbC9Qcm9ibGVtSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmY0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvUHJvYmxlbUltcGwuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuUHJvYmxlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Db21tZW50OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UHJvYmxlbTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuUHJvYmxlbUltcGwjZ2V0QmFzZV9Db21tZW50IDxlbT5CYXNlIENvbW1lbnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9ibGVtSW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBQcm9ibGVtIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJhc2VfQ29tbWVudCgpIDxlbT5CYXNlIENvbW1lbnQ8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfQ29tbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIENvbW1lbnQgYmFzZV9Db21tZW50OworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb2JsZW1JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tZW50IGJhc2ljR2V0QmFzZV9Db21tZW50KCkgeworCQlyZXR1cm4gYmFzZV9Db21tZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5QUk9CTEVNX19CQVNFX0NPTU1FTlQ6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0NvbW1lbnQoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfQ29tbWVudCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuUFJPQkxFTV9fQkFTRV9DT01NRU5UOgorCQkJcmV0dXJuIGJhc2VfQ29tbWVudCAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlBST0JMRU1fX0JBU0VfQ09NTUVOVDoKKwkJCXNldEJhc2VfQ29tbWVudCgoQ29tbWVudCkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RlbGVsZW1lbnRzUGFja2FnZS5MaXRlcmFscy5QUk9CTEVNOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuUFJPQkxFTV9fQkFTRV9DT01NRU5UOgorCQkJc2V0QmFzZV9Db21tZW50KChDb21tZW50KSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbWVudCBnZXRCYXNlX0NvbW1lbnQoKSB7CisJCWlmIChiYXNlX0NvbW1lbnQgIT0gbnVsbCAmJiBiYXNlX0NvbW1lbnQuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfQ29tbWVudCA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfQ29tbWVudDsKKwkJCWJhc2VfQ29tbWVudCA9IChDb21tZW50KSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfQ29tbWVudCk7CisJCQlpZiAoYmFzZV9Db21tZW50ICE9IG9sZEJhc2VfQ29tbWVudCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTW9kZWxlbGVtZW50c1BhY2thZ2UuUFJPQkxFTV9fQkFTRV9DT01NRU5ULCBvbGRCYXNlX0NvbW1lbnQsIGJhc2VfQ29tbWVudCkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9Db21tZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfQ29tbWVudChDb21tZW50IG5ld0Jhc2VfQ29tbWVudCkgeworCQlDb21tZW50IG9sZEJhc2VfQ29tbWVudCA9IGJhc2VfQ29tbWVudDsKKwkJYmFzZV9Db21tZW50ID0gbmV3QmFzZV9Db21tZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGVsZWxlbWVudHNQYWNrYWdlLlBST0JMRU1fX0JBU0VfQ09NTUVOVCwgb2xkQmFzZV9Db21tZW50LCBiYXNlX0NvbW1lbnQpKTsKKwkJfQorCX0KKworfSAvLyBQcm9ibGVtSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9pbnRlcm5hbC9pbXBsL1JhdGlvbmFsZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvaW50ZXJuYWwvaW1wbC9SYXRpb25hbGVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5ZjYyYwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvaW50ZXJuYWwvaW1wbC9SYXRpb25hbGVJbXBsLmphdmEKQEAgLTAsMCArMSwxNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlJhdGlvbmFsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Db21tZW50OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UmF0aW9uYWxlPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5SYXRpb25hbGVJbXBsI2dldEJhc2VfQ29tbWVudCA8ZW0+QmFzZSBDb21tZW50PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmF0aW9uYWxlSW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBSYXRpb25hbGUgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9Db21tZW50KCkgPGVtPkJhc2UgQ29tbWVudDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9Db21tZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tbWVudCBiYXNlX0NvbW1lbnQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmF0aW9uYWxlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbWVudCBiYXNpY0dldEJhc2VfQ29tbWVudCgpIHsKKwkJcmV0dXJuIGJhc2VfQ29tbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuUkFUSU9OQUxFX19CQVNFX0NPTU1FTlQ6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0NvbW1lbnQoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfQ29tbWVudCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuUkFUSU9OQUxFX19CQVNFX0NPTU1FTlQ6CisJCQlyZXR1cm4gYmFzZV9Db21tZW50ICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuUkFUSU9OQUxFX19CQVNFX0NPTU1FTlQ6CisJCQlzZXRCYXNlX0NvbW1lbnQoKENvbW1lbnQpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kZWxlbGVtZW50c1BhY2thZ2UuTGl0ZXJhbHMuUkFUSU9OQUxFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuUkFUSU9OQUxFX19CQVNFX0NPTU1FTlQ6CisJCQlzZXRCYXNlX0NvbW1lbnQoKENvbW1lbnQpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tZW50IGdldEJhc2VfQ29tbWVudCgpIHsKKwkJaWYgKGJhc2VfQ29tbWVudCAhPSBudWxsICYmIGJhc2VfQ29tbWVudC5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9Db21tZW50ID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9Db21tZW50OworCQkJYmFzZV9Db21tZW50ID0gKENvbW1lbnQpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9Db21tZW50KTsKKwkJCWlmIChiYXNlX0NvbW1lbnQgIT0gb2xkQmFzZV9Db21tZW50KSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBNb2RlbGVsZW1lbnRzUGFja2FnZS5SQVRJT05BTEVfX0JBU0VfQ09NTUVOVCwgb2xkQmFzZV9Db21tZW50LCBiYXNlX0NvbW1lbnQpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfQ29tbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0NvbW1lbnQoQ29tbWVudCBuZXdCYXNlX0NvbW1lbnQpIHsKKwkJQ29tbWVudCBvbGRCYXNlX0NvbW1lbnQgPSBiYXNlX0NvbW1lbnQ7CisJCWJhc2VfQ29tbWVudCA9IG5ld0Jhc2VfQ29tbWVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RlbGVsZW1lbnRzUGFja2FnZS5SQVRJT05BTEVfX0JBU0VfQ09NTUVOVCwgb2xkQmFzZV9Db21tZW50LCBiYXNlX0NvbW1lbnQpKTsKKwkJfQorCX0KKworfSAvLyBSYXRpb25hbGVJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvVmlld0ltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvaW50ZXJuYWwvaW1wbC9WaWV3SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NWI0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvVmlld0ltcGwuamF2YQpAQCAtMCwwICsxLDIzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Db25mb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkRlcGVuZGVuY3k7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC51dGlsLlVNTFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5WaWV3PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5WaWV3SW1wbCNnZXRWaWV3UG9pbnQgPGVtPlZpZXcgUG9pbnQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5WaWV3SW1wbCNnZXRCYXNlX1BhY2thZ2UgPGVtPkJhc2UgUGFja2FnZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFZpZXdJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIFZpZXcgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9QYWNrYWdlKCkgPGVtPkJhc2UgUGFja2FnZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9QYWNrYWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgb3JnLmVjbGlwc2UudW1sMi51bWwuUGFja2FnZSBiYXNlX1BhY2thZ2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld0ltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2UgYmFzaWNHZXRCYXNlX1BhY2thZ2UoKSB7CisJCXJldHVybiBiYXNlX1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBWaWV3UG9pbnQgYmFzaWNHZXRWaWV3UG9pbnQoKSB7CisJCS8vIFZpZXdQb2ludCBpcyByZWxhdGVkIHRvIFZpZXcgdmlhIGEgQ29uZm9ybSBkZXBlbmRlbmN5CisJCVZpZXdQb2ludCB2aWV3UG9pbnQgPSBudWxsOworCQlDb25mb3JtIGNvbmZvcm0gPSBudWxsOworCisJCWlmIChnZXRCYXNlX1BhY2thZ2UoKSAhPSBudWxsKSB7CisJCQkvLyBGaW5kIENvbmZvcm0gbGluaworCQkJSXRlcmF0b3I8RGVwZW5kZW5jeT4gaXREZXAgPSBnZXRCYXNlX1BhY2thZ2UoKS5nZXRDbGllbnREZXBlbmRlbmNpZXMoKS5pdGVyYXRvcigpOworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSAmJiAoY29uZm9ybSA9PSBudWxsKSkgeworCQkJCURlcGVuZGVuY3kgY3VycmVudERlcGVuZGVuY3kgPSBpdERlcC5uZXh0KCk7CisJCQkJY29uZm9ybSA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGN1cnJlbnREZXBlbmRlbmN5LCBDb25mb3JtLmNsYXNzKTsKKwkJCX0KKworCQkJLy8gRmluZCBWaWV3UG9pbnQKKwkJCWlmIChjb25mb3JtICE9IG51bGwpIHsKKwkJCQlJdGVyYXRvcjxFbGVtZW50PiBpdEVsdCA9IGNvbmZvcm0uZ2V0QmFzZV9EZXBlbmRlbmN5KCkuZ2V0VGFyZ2V0cygpLml0ZXJhdG9yKCk7CisJCQkJd2hpbGUgKGl0RWx0Lmhhc05leHQoKSkgeworCQkJCQlFbGVtZW50IGN1cnJlbnRFbHQgPSBpdEVsdC5uZXh0KCk7CisJCQkJCXZpZXdQb2ludCA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGN1cnJlbnRFbHQsIFZpZXdQb2ludC5jbGFzcyk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiB2aWV3UG9pbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfX1ZJRVdfUE9JTlQ6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRWaWV3UG9pbnQoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldFZpZXdQb2ludCgpOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfX0JBU0VfUEFDS0FHRToKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfUGFja2FnZSgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9QYWNrYWdlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX19WSUVXX1BPSU5UOgorCQkJcmV0dXJuIGJhc2ljR2V0Vmlld1BvaW50KCkgIT0gbnVsbDsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX19CQVNFX1BBQ0tBR0U6CisJCQlyZXR1cm4gYmFzZV9QYWNrYWdlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19fQkFTRV9QQUNLQUdFOgorCQkJc2V0QmFzZV9QYWNrYWdlKChvcmcuZWNsaXBzZS51bWwyLnVtbC5QYWNrYWdlKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGVsZWxlbWVudHNQYWNrYWdlLkxpdGVyYWxzLlZJRVc7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX19CQVNFX1BBQ0tBR0U6CisJCQlzZXRCYXNlX1BhY2thZ2UoKG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2UpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBvcmcuZWNsaXBzZS51bWwyLnVtbC5QYWNrYWdlIGdldEJhc2VfUGFja2FnZSgpIHsKKwkJaWYgKGJhc2VfUGFja2FnZSAhPSBudWxsICYmIGJhc2VfUGFja2FnZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9QYWNrYWdlID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9QYWNrYWdlOworCQkJYmFzZV9QYWNrYWdlID0gKG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2UpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9QYWNrYWdlKTsKKwkJCWlmIChiYXNlX1BhY2thZ2UgIT0gb2xkQmFzZV9QYWNrYWdlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX19CQVNFX1BBQ0tBR0UsIG9sZEJhc2VfUGFja2FnZSwgYmFzZV9QYWNrYWdlKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdQb2ludCBnZXRWaWV3UG9pbnQoKSB7CisJCVZpZXdQb2ludCB2aWV3UG9pbnQgPSBiYXNpY0dldFZpZXdQb2ludCgpOworCQlyZXR1cm4gdmlld1BvaW50ICE9IG51bGwgJiYgdmlld1BvaW50LmVJc1Byb3h5KCkgPyAoVmlld1BvaW50KSBlUmVzb2x2ZVByb3h5KChJbnRlcm5hbEVPYmplY3QpIHZpZXdQb2ludCkgOiB2aWV3UG9pbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9QYWNrYWdlKG9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2UgbmV3QmFzZV9QYWNrYWdlKSB7CisJCW9yZy5lY2xpcHNlLnVtbDIudW1sLlBhY2thZ2Ugb2xkQmFzZV9QYWNrYWdlID0gYmFzZV9QYWNrYWdlOworCQliYXNlX1BhY2thZ2UgPSBuZXdCYXNlX1BhY2thZ2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19fQkFTRV9QQUNLQUdFLCBvbGRCYXNlX1BhY2thZ2UsIGJhc2VfUGFja2FnZSkpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZpZXdQb2ludChWaWV3UG9pbnQgbmV3Vmlld1BvaW50KSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBzZXQgdGhlICdWaWV3IFBvaW50JyByZWZlcmVuY2UKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKworCQkvLyBUaGUgZXhjZXB0aW9uIG1ha2VzIHRoZSBtb2RlbCBvcGVuaW5nIHRvIGZhaWwuLi4KKwkJLy8gdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCit9IC8vIFZpZXdJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL2ludGVybmFsL2ltcGwvVmlld1BvaW50SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9pbnRlcm5hbC9pbXBsL1ZpZXdQb2ludEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTFkYzRjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy9pbnRlcm5hbC9pbXBsL1ZpZXdQb2ludEltcGwuamF2YQpAQCAtMCwwICsxLDM4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZUVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+VmlldyBQb2ludDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuVmlld1BvaW50SW1wbCNnZXRCYXNlX0NsYXNzIDxlbT5CYXNlIENsYXNzPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuVmlld1BvaW50SW1wbCNnZXRTdGFrZUhvbGRlcnMgPGVtPlN0YWtlIEhvbGRlcnM8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5WaWV3UG9pbnRJbXBsI2dldFB1cnBvc2UgPGVtPlB1cnBvc2U8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5WaWV3UG9pbnRJbXBsI2dldENvbmNlcm5zIDxlbT5Db25jZXJuczwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLlZpZXdQb2ludEltcGwjZ2V0TGFuZ3VhZ2VzIDxlbT5MYW5ndWFnZXM8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5WaWV3UG9pbnRJbXBsI2dldE1ldGhvZHMgPGVtPk1ldGhvZHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWaWV3UG9pbnRJbXBsIGV4dGVuZHMgTWluaW1hbEVPYmplY3RJbXBsLkNvbnRhaW5lciBpbXBsZW1lbnRzIFZpZXdQb2ludCB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0NsYXNzKCkgPGVtPkJhc2UgQ2xhc3M8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfQ2xhc3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBiYXNlX0NsYXNzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3Rha2VIb2xkZXJzKCkgPGVtPlN0YWtlIEhvbGRlcnM8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRTdGFrZUhvbGRlcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxTdHJpbmc+IHN0YWtlSG9sZGVyczsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQdXJwb3NlKCkgPGVtPlB1cnBvc2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldFB1cnBvc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBVUlBPU0VfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHVycG9zZSgpIDxlbT5QdXJwb3NlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRQdXJwb3NlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHB1cnBvc2UgPSBQVVJQT1NFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q29uY2VybnMoKSA8ZW0+Q29uY2VybnM8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0Q29uY2VybnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxTdHJpbmc+IGNvbmNlcm5zOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFuZ3VhZ2VzKCkgPGVtPkxhbmd1YWdlczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRMYW5ndWFnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxTdHJpbmc+IGxhbmd1YWdlczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1ldGhvZHMoKSA8ZW0+TWV0aG9kczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRNZXRob2RzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8U3RyaW5nPiBtZXRob2RzOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdQb2ludEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIGJhc2ljR2V0QmFzZV9DbGFzcygpIHsKKwkJcmV0dXJuIGJhc2VfQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0JBU0VfQ0xBU1M6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0NsYXNzKCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX0NsYXNzKCk7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fU1RBS0VfSE9MREVSUzoKKwkJCXJldHVybiBnZXRTdGFrZUhvbGRlcnMoKTsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19QVVJQT1NFOgorCQkJcmV0dXJuIGdldFB1cnBvc2UoKTsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19DT05DRVJOUzoKKwkJCXJldHVybiBnZXRDb25jZXJucygpOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0xBTkdVQUdFUzoKKwkJCXJldHVybiBnZXRMYW5ndWFnZXMoKTsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19NRVRIT0RTOgorCQkJcmV0dXJuIGdldE1ldGhvZHMoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0JBU0VfQ0xBU1M6CisJCQlyZXR1cm4gYmFzZV9DbGFzcyAhPSBudWxsOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX1NUQUtFX0hPTERFUlM6CisJCQlyZXR1cm4gc3Rha2VIb2xkZXJzICE9IG51bGwgJiYgIXN0YWtlSG9sZGVycy5pc0VtcHR5KCk7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fUFVSUE9TRToKKwkJCXJldHVybiBQVVJQT1NFX0VERUZBVUxUID09IG51bGwgPyBwdXJwb3NlICE9IG51bGwgOiAhUFVSUE9TRV9FREVGQVVMVC5lcXVhbHMocHVycG9zZSk7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fQ09OQ0VSTlM6CisJCQlyZXR1cm4gY29uY2VybnMgIT0gbnVsbCAmJiAhY29uY2VybnMuaXNFbXB0eSgpOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0xBTkdVQUdFUzoKKwkJCXJldHVybiBsYW5ndWFnZXMgIT0gbnVsbCAmJiAhbGFuZ3VhZ2VzLmlzRW1wdHkoKTsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19NRVRIT0RTOgorCQkJcmV0dXJuIG1ldGhvZHMgIT0gbnVsbCAmJiAhbWV0aG9kcy5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fQkFTRV9DTEFTUzoKKwkJCXNldEJhc2VfQ2xhc3MoKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fU1RBS0VfSE9MREVSUzoKKwkJCWdldFN0YWtlSG9sZGVycygpLmNsZWFyKCk7CisJCQlnZXRTdGFrZUhvbGRlcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFN0cmluZz4pIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19QVVJQT1NFOgorCQkJc2V0UHVycG9zZSgoU3RyaW5nKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fQ09OQ0VSTlM6CisJCQlnZXRDb25jZXJucygpLmNsZWFyKCk7CisJCQlnZXRDb25jZXJucygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgU3RyaW5nPikgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0xBTkdVQUdFUzoKKwkJCWdldExhbmd1YWdlcygpLmNsZWFyKCk7CisJCQlnZXRMYW5ndWFnZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFN0cmluZz4pIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19NRVRIT0RTOgorCQkJZ2V0TWV0aG9kcygpLmNsZWFyKCk7CisJCQlnZXRNZXRob2RzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTdHJpbmc+KSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGVsZWxlbWVudHNQYWNrYWdlLkxpdGVyYWxzLlZJRVdfUE9JTlQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19CQVNFX0NMQVNTOgorCQkJc2V0QmFzZV9DbGFzcygob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MpIG51bGwpOworCQkJcmV0dXJuOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX1NUQUtFX0hPTERFUlM6CisJCQlnZXRTdGFrZUhvbGRlcnMoKS5jbGVhcigpOworCQkJcmV0dXJuOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX1BVUlBPU0U6CisJCQlzZXRQdXJwb3NlKFBVUlBPU0VfRURFRkFVTFQpOworCQkJcmV0dXJuOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0NPTkNFUk5TOgorCQkJZ2V0Q29uY2VybnMoKS5jbGVhcigpOworCQkJcmV0dXJuOworCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0xBTkdVQUdFUzoKKwkJCWdldExhbmd1YWdlcygpLmNsZWFyKCk7CisJCQlyZXR1cm47CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fTUVUSE9EUzoKKwkJCWdldE1ldGhvZHMoKS5jbGVhcigpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBnZXRCYXNlX0NsYXNzKCkgeworCQlpZiAoYmFzZV9DbGFzcyAhPSBudWxsICYmIGJhc2VfQ2xhc3MuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfQ2xhc3MgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX0NsYXNzOworCQkJYmFzZV9DbGFzcyA9IChvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcykgZVJlc29sdmVQcm94eShvbGRCYXNlX0NsYXNzKTsKKwkJCWlmIChiYXNlX0NsYXNzICE9IG9sZEJhc2VfQ2xhc3MpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX0JBU0VfQ0xBU1MsIG9sZEJhc2VfQ2xhc3MsIGJhc2VfQ2xhc3MpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PFN0cmluZz4gZ2V0Q29uY2VybnMoKSB7CisJCWlmIChjb25jZXJucyA9PSBudWxsKSB7CisJCQljb25jZXJucyA9IG5ldyBFRGF0YVR5cGVFTGlzdDxTdHJpbmc+KFN0cmluZy5jbGFzcywgdGhpcywgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fQ09OQ0VSTlMpOworCQl9CisJCXJldHVybiBjb25jZXJuczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8U3RyaW5nPiBnZXRMYW5ndWFnZXMoKSB7CisJCWlmIChsYW5ndWFnZXMgPT0gbnVsbCkgeworCQkJbGFuZ3VhZ2VzID0gbmV3IEVEYXRhVHlwZUVMaXN0PFN0cmluZz4oU3RyaW5nLmNsYXNzLCB0aGlzLCBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19MQU5HVUFHRVMpOworCQl9CisJCXJldHVybiBsYW5ndWFnZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PFN0cmluZz4gZ2V0TWV0aG9kcygpIHsKKwkJaWYgKG1ldGhvZHMgPT0gbnVsbCkgeworCQkJbWV0aG9kcyA9IG5ldyBFRGF0YVR5cGVFTGlzdDxTdHJpbmc+KFN0cmluZy5jbGFzcywgdGhpcywgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fTUVUSE9EUyk7CisJCX0KKwkJcmV0dXJuIG1ldGhvZHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQdXJwb3NlKCkgeworCQlyZXR1cm4gcHVycG9zZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8U3RyaW5nPiBnZXRTdGFrZUhvbGRlcnMoKSB7CisJCWlmIChzdGFrZUhvbGRlcnMgPT0gbnVsbCkgeworCQkJc3Rha2VIb2xkZXJzID0gbmV3IEVEYXRhVHlwZUVMaXN0PFN0cmluZz4oU3RyaW5nLmNsYXNzLCB0aGlzLCBNb2RlbGVsZW1lbnRzUGFja2FnZS5WSUVXX1BPSU5UX19TVEFLRV9IT0xERVJTKTsKKwkJfQorCQlyZXR1cm4gc3Rha2VIb2xkZXJzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfQ2xhc3Mob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgbmV3QmFzZV9DbGFzcykgeworCQlvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcyBvbGRCYXNlX0NsYXNzID0gYmFzZV9DbGFzczsKKwkJYmFzZV9DbGFzcyA9IG5ld0Jhc2VfQ2xhc3M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVF9fQkFTRV9DTEFTUywgb2xkQmFzZV9DbGFzcywgYmFzZV9DbGFzcykpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHVycG9zZShTdHJpbmcgbmV3UHVycG9zZSkgeworCQlTdHJpbmcgb2xkUHVycG9zZSA9IHB1cnBvc2U7CisJCXB1cnBvc2UgPSBuZXdQdXJwb3NlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGVsZWxlbWVudHNQYWNrYWdlLlZJRVdfUE9JTlRfX1BVUlBPU0UsIG9sZFB1cnBvc2UsIHB1cnBvc2UpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSB7CisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKwkJfQorCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHN0YWtlSG9sZGVyczogIik7CisJCXJlc3VsdC5hcHBlbmQoc3Rha2VIb2xkZXJzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBwdXJwb3NlOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChwdXJwb3NlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBjb25jZXJuczogIik7CisJCXJlc3VsdC5hcHBlbmQoY29uY2VybnMpOworCQlyZXN1bHQuYXBwZW5kKCIsIGxhbmd1YWdlczogIik7CisJCXJlc3VsdC5hcHBlbmQobGFuZ3VhZ2VzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtZXRob2RzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChtZXRob2RzKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vIFZpZXdQb2ludEltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvdXRpbC9Nb2RlbGVsZW1lbnRzQWRhcHRlckZhY3RvcnkuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvdXRpbC9Nb2RlbGVsZW1lbnRzQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2U2ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy91dGlsL01vZGVsZWxlbWVudHNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuQ29uZm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlByb2JsZW07CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlJhdGlvbmFsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0IHByb3ZpZGVzCisgKiBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbGVsZW1lbnRzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTW9kZWxlbGVtZW50c1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNb2RlbGVsZW1lbnRzU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0gbmV3IE1vZGVsZWxlbWVudHNTd2l0Y2g8QWRhcHRlcj4oKSB7CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VDb25mb3JtKENvbmZvcm0gb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQ29uZm9ybUFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlVmlldyhWaWV3IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVZpZXdBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZVZpZXdQb2ludChWaWV3UG9pbnQgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlVmlld1BvaW50QWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VSYXRpb25hbGUoUmF0aW9uYWxlIG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVJhdGlvbmFsZUFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJvYmxlbShQcm9ibGVtIG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVByb2JsZW1BZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQl9CisJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbGVsZW1lbnRzQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTW9kZWxlbGVtZW50c1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHRhcmdldAorCSAqICAgICAgICAgICAgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KSB0YXJnZXQpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm0gPGVtPkNvbmZvcm08L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbworCSAqIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbgorCSAqIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuQ29uZm9ybQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb25mb3JtQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMKKwkgKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlByb2JsZW0gPGVtPlByb2JsZW08L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbworCSAqIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbgorCSAqIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuUHJvYmxlbQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQcm9ibGVtQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlJhdGlvbmFsZQorCSAqIDxlbT5SYXRpb25hbGU8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKwkgKiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEKKwkgKiBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlJhdGlvbmFsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSYXRpb25hbGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlldyA8ZW0+VmlldzwvZW0+fScuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlCisJICogY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlldworCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVWaWV3QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuVmlld1BvaW50IDxlbT5WaWV3IFBvaW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVWaWV3UG9pbnRBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmCisJICogdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlCisJICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KSBvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKK30gLy8gTW9kZWxlbGVtZW50c0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL3V0aWwvTW9kZWxlbGVtZW50c1Jlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvdXRpbC9Nb2RlbGVsZW1lbnRzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTllY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL3V0aWwvTW9kZWxlbGVtZW50c1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSBGYWN0b3J5PC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlCisgKiBwYWNrYWdlLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy51dGlsLk1vZGVsZWxlbWVudHNSZXNvdXJjZUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsZWxlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgUmVzb3VyY2VGYWN0b3J5SW1wbCB7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsZWxlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKKwkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IE1vZGVsZWxlbWVudHNSZXNvdXJjZUltcGwodXJpKTsKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRVhURU5ERURfTUVUQV9EQVRBLCBCb29sZWFuLlRSVUUpOworCQlyZXN1bHQuZ2V0RGVmYXVsdExvYWRPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fU0NIRU1BX0xPQ0FUSU9OLCBCb29sZWFuLlRSVUUpOworCisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9FTkNPREVEX0FUVFJJQlVURV9TVFlMRSwgQm9vbGVhbi5UUlVFKTsKKwkJcmVzdWx0LmdldERlZmF1bHRTYXZlT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOworCisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1VTRV9MRVhJQ0FMX0hBTkRMRVIsIEJvb2xlYW4uVFJVRSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCit9IC8vIE1vZGVsZWxlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL3V0aWwvTW9kZWxlbGVtZW50c1Jlc291cmNlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy91dGlsL01vZGVsZWxlbWVudHNSZXNvdXJjZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGZmMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy91dGlsL01vZGVsZWxlbWVudHNSZXNvdXJjZUltcGwuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLnV0aWwuTW9kZWxlbGVtZW50c1Jlc291cmNlRmFjdG9yeUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsZWxlbWVudHNSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsZWxlbWVudHNSZXNvdXJjZUltcGwoVVJJIHVyaSkgeworCQlzdXBlcih1cmkpOworCX0KKworfSAvLyBNb2RlbGVsZW1lbnRzUmVzb3VyY2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL3V0aWwvTW9kZWxlbGVtZW50c1N3aXRjaC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy91dGlsL01vZGVsZWxlbWVudHNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWYwMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvbW9kZWxlbGVtZW50cy91dGlsL01vZGVsZWxlbWVudHNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDIyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5Td2l0Y2g7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLkNvbmZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Qcm9ibGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5SYXRpb25hbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLlZpZXdQb2ludDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UKKyAqIGhpZXJhcmNoeS4gSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfSB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdCBhbmQgcHJvY2VlZGluZyB1cCB0aGUKKyAqIGluaGVyaXRhbmNlIGhpZXJhcmNoeSB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwgd2hpY2ggaXMgdGhlCisgKiByZXN1bHQgb2YgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsZWxlbWVudHNTd2l0Y2g8VD4gZXh0ZW5kcyBTd2l0Y2g8VD4geworCisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBNb2RlbGVsZW1lbnRzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxlbGVtZW50c1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBNb2RlbGVsZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVja3Mgd2hldGhlciB0aGlzIGlzIGEgc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbWV0ZXIgZVBhY2thZ2UgdGhlIHBhY2thZ2UgaW4gcXVlc3Rpb24uCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgaXMgYSBzd2l0Y2ggZm9yIHRoZSBnaXZlbiBwYWNrYWdlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1N3aXRjaEZvcihFUGFja2FnZSBlUGFja2FnZSkgeworCQlyZXR1cm4gZVBhY2thZ2UgPT0gbW9kZWxQYWNrYWdlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbmZvcm08L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisJICogbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29uZm9ybTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZUNvbmZvcm0oQ29uZm9ybSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UHJvYmxlbTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qcm9ibGVtPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlUHJvYmxlbShQcm9ibGVtIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SYXRpb25hbGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisJICogbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmF0aW9uYWxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlUmF0aW9uYWxlKFJhdGlvbmFsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICcgPGVtPlZpZXc8L2VtPicuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnIDxlbT5WaWV3PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlVmlldyhWaWV3IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5WaWV3IFBvaW50PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlZpZXcgUG9pbnQ8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VWaWV3UG9pbnQoVmlld1BvaW50IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcworCSAqIHRoZSBsYXN0IGNhc2UgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgVCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuQ09ORk9STTogeworCQkJQ29uZm9ybSBjb25mb3JtID0gKENvbmZvcm0pIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VDb25mb3JtKGNvbmZvcm0pOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFVzogeworCQkJVmlldyB2aWV3ID0gKFZpZXcpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VWaWV3KHZpZXcpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgTW9kZWxlbGVtZW50c1BhY2thZ2UuVklFV19QT0lOVDogeworCQkJVmlld1BvaW50IHZpZXdQb2ludCA9IChWaWV3UG9pbnQpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VWaWV3UG9pbnQodmlld1BvaW50KTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlJBVElPTkFMRTogeworCQkJUmF0aW9uYWxlIHJhdGlvbmFsZSA9IChSYXRpb25hbGUpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VSYXRpb25hbGUocmF0aW9uYWxlKTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIE1vZGVsZWxlbWVudHNQYWNrYWdlLlBST0JMRU06IHsKKwkJCVByb2JsZW0gcHJvYmxlbSA9IChQcm9ibGVtKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlUHJvYmxlbShwcm9ibGVtKTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQlkZWZhdWx0OgorCQkJcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCit9IC8vIE1vZGVsZWxlbWVudHNTd2l0Y2gKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL21vZGVsZWxlbWVudHMvdXRpbC9Nb2RlbGVsZW1lbnRzWE1MUHJvY2Vzc29yLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL3V0aWwvTW9kZWxlbGVtZW50c1hNTFByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYmJmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9tb2RlbGVsZW1lbnRzL3V0aWwvTW9kZWxlbGVtZW50c1hNTFByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLnV0aWwuWE1MUHJvY2Vzc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGhlbHBlciBtZXRob2RzIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgWE1MIGRvY3VtZW50cworICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxlbGVtZW50c1hNTFByb2Nlc3NvciBleHRlbmRzIFhNTFByb2Nlc3NvciB7CisKKwkvKioKKwkgKiBQdWJsaWMgY29uc3RydWN0b3IgdG8gaW5zdGFudGlhdGUgdGhlIGhlbHBlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbGVsZW1lbnRzWE1MUHJvY2Vzc29yKCkgeworCQlzdXBlcigoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UpKTsKKwkJTW9kZWxlbGVtZW50c1BhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCX0KKworCS8qKgorCSAqIFJlZ2lzdGVyIGZvciAiKiIgYW5kICJ4bWwiIGZpbGUgZXh0ZW5zaW9ucyB0aGUgTW9kZWxlbGVtZW50c1Jlc291cmNlRmFjdG9yeUltcGwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBSZXNvdXJjZS5GYWN0b3J5PiBnZXRSZWdpc3RyYXRpb25zKCkgeworCQlpZiAocmVnaXN0cmF0aW9ucyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRSZWdpc3RyYXRpb25zKCk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChYTUxfRVhURU5TSU9OLCBuZXcgTW9kZWxlbGVtZW50c1Jlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChTVEFSX0VYVEVOU0lPTiwgbmV3IE1vZGVsZWxlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQl9CisJCXJldHVybiByZWdpc3RyYXRpb25zOworCX0KKworfSAvLyBNb2RlbGVsZW1lbnRzWE1MUHJvY2Vzc29yCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvRmxvd0RpcmVjdGlvbi5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL0Zsb3dEaXJlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTZjNGE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL0Zsb3dEaXJlY3Rpb24uamF2YQpAQCAtMCwwICsxLDI0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93czsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVudW1lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGl0ZXJhbHMgb2YgdGhlIGVudW1lcmF0aW9uICcgPGVtPjxiPkZsb3cgRGlyZWN0aW9uPC9iPjwvZW0+JywgYW5kIHV0aWxpdHkgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoCisgKiB0aGVtLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlI2dldEZsb3dEaXJlY3Rpb24oKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBlbnVtIEZsb3dEaXJlY3Rpb24gaW1wbGVtZW50cyBFbnVtZXJhdG9yIHsKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5JbjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI0lOX1ZBTFVFCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJSU4oMCwgImluIiwgImluIiksCisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5PdXQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNPVVRfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlPVVQoMSwgIm91dCIsICJvdXQiKSwKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPklub3V0PC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjSU5PVVRfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlJTk9VVCgyLCAiaW5vdXQiLCAiaW5vdXQiKTsKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkluPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5JbjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNJTgorCSAqIEBtb2RlbCBuYW1lPSJpbiIKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTl9WQUxVRSA9IDA7CisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5PdXQ8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPk91dDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNPVVQKKwkgKiBAbW9kZWwgbmFtZT0ib3V0IgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9VVF9WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5Jbm91dDwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mICc8ZW0+PGI+SW5vdXQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjSU5PVVQKKwkgKiBAbW9kZWwgbmFtZT0iaW5vdXQiCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5PVVRfVkFMVUUgPSAyOworCisJLyoqCisJICogQW4gYXJyYXkgb2YgYWxsIHRoZSAnPGVtPjxiPkZsb3cgRGlyZWN0aW9uPC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBGbG93RGlyZWN0aW9uW10gVkFMVUVTX0FSUkFZID0gbmV3IEZsb3dEaXJlY3Rpb25bXSB7IElOLCBPVVQsIElOT1VULCB9OworCisJLyoqCisJICogQSBwdWJsaWMgcmVhZC1vbmx5IGxpc3Qgb2YgYWxsIHRoZSAnPGVtPjxiPkZsb3cgRGlyZWN0aW9uPC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8Rmxvd0RpcmVjdGlvbj4gVkFMVUVTID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KFZBTFVFU19BUlJBWSkpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5GbG93IERpcmVjdGlvbjwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgaW50ZWdlciB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEZsb3dEaXJlY3Rpb24gZ2V0KGludCB2YWx1ZSkgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgSU5fVkFMVUU6CisJCQlyZXR1cm4gSU47CisJCWNhc2UgT1VUX1ZBTFVFOgorCQkJcmV0dXJuIE9VVDsKKwkJY2FzZSBJTk9VVF9WQUxVRToKKwkJCXJldHVybiBJTk9VVDsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPkZsb3cgRGlyZWN0aW9uPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRmxvd0RpcmVjdGlvbiBnZXQoU3RyaW5nIGxpdGVyYWwpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsKKwkJCUZsb3dEaXJlY3Rpb24gcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOworCQkJaWYgKHJlc3VsdC50b1N0cmluZygpLmVxdWFscyhsaXRlcmFsKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5GbG93IERpcmVjdGlvbjwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEZsb3dEaXJlY3Rpb24gZ2V0QnlOYW1lKFN0cmluZyBuYW1lKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKSB7CisJCQlGbG93RGlyZWN0aW9uIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbGl0ZXJhbDsKKworCS8qKgorCSAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRmxvd0RpcmVjdGlvbihpbnQgdmFsdWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgbGl0ZXJhbCkgeworCQl0aGlzLnZhbHVlID0gdmFsdWU7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMubGl0ZXJhbCA9IGxpdGVyYWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRMaXRlcmFsKCkgeworCQlyZXR1cm4gbGl0ZXJhbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiBuYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0VmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBsaXRlcmFsIHZhbHVlIG9mIHRoZSBlbnVtZXJhdG9yLCB3aGljaCBpcyBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBsaXRlcmFsOworCX0KKworfSAvLyBGbG93RGlyZWN0aW9uCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvRmxvd1BvcnQuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9GbG93UG9ydC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjdkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvRmxvd1BvcnQuamF2YQpAQCAtMCwwICsxLDE1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlBvcnQ7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkZsb3cgUG9ydDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UG9ydCNnZXRCYXNlX1BvcnQgPGVtPkJhc2UgUG9ydDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0I2lzQXRvbWljIDxlbT5JcyBBdG9taWM8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UG9ydCNpc0Nvbmp1Z2F0ZWQgPGVtPklzIENvbmp1Z2F0ZWQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UG9ydCNnZXREaXJlY3Rpb24gPGVtPkRpcmVjdGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZSNnZXRGbG93UG9ydCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBGbG93UG9ydCBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBQb3J0PC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIFBvcnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBQb3J0PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX1BvcnQoUG9ydCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UjZ2V0Rmxvd1BvcnRfQmFzZV9Qb3J0KCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQb3J0IGdldEJhc2VfUG9ydCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGlyZWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imlub3V0IjwvY29kZT4uCisJICogVGhlIGxpdGVyYWxzIGFyZSBmcm9tIHRoZSBlbnVtZXJhdGlvbiB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd0RpcmVjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EaXJlY3Rpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlyZWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24KKwkgKiBAc2VlICNzZXREaXJlY3Rpb24oRmxvd0RpcmVjdGlvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UjZ2V0Rmxvd1BvcnRfRGlyZWN0aW9uKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaW5vdXQiIHVuaXF1ZT0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRmxvd0RpcmVjdGlvbiBnZXREaXJlY3Rpb24oKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiIgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbWFnZSBnZXRJY29uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQjZ2V0QmFzZV9Qb3J0CisJICogPGVtPkJhc2UgUG9ydDwvZW0+fScgcmVmZXJlbmNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUG9ydDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9Qb3J0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX1BvcnQoUG9ydCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JcyBBdG9taWM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iZmFsc2UiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklzIEF0b21pYzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JcyBBdG9taWM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZSNnZXRGbG93UG9ydF9Jc0F0b21pYygpCisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIiB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UudW1sMi50eXBlcy5Cb29sZWFuIiByZXF1aXJlZD0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKiAgICAgICAgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzQXRvbWljKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JcyBDb25qdWdhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JcyBDb25qdWdhdGVkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklzIENvbmp1Z2F0ZWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElzQ29uanVnYXRlZChib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZSNnZXRGbG93UG9ydF9Jc0Nvbmp1Z2F0ZWQoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiBkYXRhVHlwZT0ib3JnLmVjbGlwc2UudW1sMi50eXBlcy5Cb29sZWFuIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc0Nvbmp1Z2F0ZWQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UG9ydCNnZXREaXJlY3Rpb24KKwkgKiA8ZW0+RGlyZWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlyZWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24KKwkgKiBAc2VlICNnZXREaXJlY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERpcmVjdGlvbihGbG93RGlyZWN0aW9uIHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0I2lzQ29uanVnYXRlZCA8ZW0+SXMgQ29uanVnYXRlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SXMgQ29uanVnYXRlZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNDb25qdWdhdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJc0Nvbmp1Z2F0ZWQoYm9vbGVhbiB2YWx1ZSk7CisKK30gLy8gRmxvd1BvcnQKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHkuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9GbG93UHJvcGVydHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjFkNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL0Zsb3dQcm9wZXJ0eS5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkZsb3cgUHJvcGVydHk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5I2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHkjZ2V0RGlyZWN0aW9uIDxlbT5EaXJlY3Rpb248L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UjZ2V0Rmxvd1Byb3BlcnR5KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEZsb3dQcm9wZXJ0eSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBQcm9wZXJ0eTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIFByb3BlcnR5PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX1Byb3BlcnR5KFByb3BlcnR5KQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZSNnZXRGbG93UHJvcGVydHlfQmFzZV9Qcm9wZXJ0eSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJvcGVydHkgZ2V0QmFzZV9Qcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGlyZWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imlub3V0IjwvY29kZT4uCisJICogVGhlIGxpdGVyYWxzIGFyZSBmcm9tIHRoZSBlbnVtZXJhdGlvbiB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd0RpcmVjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EaXJlY3Rpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlyZWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24KKwkgKiBAc2VlICNzZXREaXJlY3Rpb24oRmxvd0RpcmVjdGlvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UjZ2V0Rmxvd1Byb3BlcnR5X0RpcmVjdGlvbigpCisJICogQG1vZGVsIGRlZmF1bHQ9Imlub3V0IiB1bmlxdWU9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUZsb3dEaXJlY3Rpb24gZ2V0RGlyZWN0aW9uKCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW1hZ2UgZ2V0SWNvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5I2dldEJhc2VfUHJvcGVydHkgPGVtPkJhc2UgUHJvcGVydHk8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJhc2UgUHJvcGVydHk8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfUHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfUHJvcGVydHkoUHJvcGVydHkgdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQcm9wZXJ0eSNnZXREaXJlY3Rpb24KKwkgKiA8ZW0+RGlyZWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlyZWN0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24KKwkgKiBAc2VlICNnZXREaXJlY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERpcmVjdGlvbihGbG93RGlyZWN0aW9uIHZhbHVlKTsKKworfSAvLyBGbG93UHJvcGVydHkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9GbG93U3BlY2lmaWNhdGlvbi5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL0Zsb3dTcGVjaWZpY2F0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1NTE4MQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9GbG93U3BlY2lmaWNhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbnRlcmZhY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkZsb3cgU3BlY2lmaWNhdGlvbjwvYj48L2VtPiAnLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb24jZ2V0QmFzZV9JbnRlcmZhY2UgPGVtPkJhc2UgSW50ZXJmYWNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlI2dldEZsb3dTcGVjaWZpY2F0aW9uKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEZsb3dTcGVjaWZpY2F0aW9uIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIEludGVyZmFjZTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBJbnRlcmZhY2U8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBJbnRlcmZhY2U8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfSW50ZXJmYWNlKEludGVyZmFjZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UjZ2V0Rmxvd1NwZWNpZmljYXRpb25fQmFzZV9JbnRlcmZhY2UoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUludGVyZmFjZSBnZXRCYXNlX0ludGVyZmFjZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb24jZ2V0QmFzZV9JbnRlcmZhY2UgPGVtPkJhc2UgSW50ZXJmYWNlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEludGVyZmFjZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0QmFzZV9JbnRlcmZhY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VfSW50ZXJmYWNlKEludGVyZmFjZSB2YWx1ZSk7CisKK30gLy8gRmxvd1NwZWNpZmljYXRpb24KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9JdGVtRmxvdy5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL0l0ZW1GbG93LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiMDJmOAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9JdGVtRmxvdy5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbmZvcm1hdGlvbkZsb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUHJvcGVydHk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkl0ZW0gRmxvdzwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5JdGVtRmxvdyNnZXRCYXNlX0luZm9ybWF0aW9uRmxvdyA8ZW0+QmFzZSBJbmZvcm1hdGlvbiBGbG93PC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuSXRlbUZsb3cjZ2V0SXRlbVByb3BlcnR5IDxlbT5JdGVtIFByb3BlcnR5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlI2dldEl0ZW1GbG93KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEl0ZW1GbG93IGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIEluZm9ybWF0aW9uIEZsb3c8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgSW5mb3JtYXRpb24gRmxvdzwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEluZm9ybWF0aW9uIEZsb3c8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfSW5mb3JtYXRpb25GbG93KEluZm9ybWF0aW9uRmxvdykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UjZ2V0SXRlbUZsb3dfQmFzZV9JbmZvcm1hdGlvbkZsb3coKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUluZm9ybWF0aW9uRmxvdyBnZXRCYXNlX0luZm9ybWF0aW9uRmxvdygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SXRlbSBQcm9wZXJ0eTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SXRlbSBQcm9wZXJ0eTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JdGVtIFByb3BlcnR5PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRJdGVtUHJvcGVydHkoUHJvcGVydHkpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlI2dldEl0ZW1GbG93X0l0ZW1Qcm9wZXJ0eSgpCisJICogQG1vZGVsIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQcm9wZXJ0eSBnZXRJdGVtUHJvcGVydHkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkl0ZW1GbG93I2dldEJhc2VfSW5mb3JtYXRpb25GbG93IDxlbT5CYXNlIEluZm9ybWF0aW9uIEZsb3c8L2VtPn0nCisJICogcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBJbmZvcm1hdGlvbiBGbG93PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0luZm9ybWF0aW9uRmxvdygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9JbmZvcm1hdGlvbkZsb3coSW5mb3JtYXRpb25GbG93IHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkl0ZW1GbG93I2dldEl0ZW1Qcm9wZXJ0eSA8ZW0+SXRlbSBQcm9wZXJ0eTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SXRlbSBQcm9wZXJ0eTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0SXRlbVByb3BlcnR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJdGVtUHJvcGVydHkoUHJvcGVydHkgdmFsdWUpOworCit9IC8vIEl0ZW1GbG93CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvUG9ydGFuZGZsb3dzRmFjdG9yeS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL1BvcnRhbmRmbG93c0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmI2ZDlhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL1BvcnRhbmRmbG93c0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcyBhCisgKiBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcnRhbmRmbG93c0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUG9ydGFuZGZsb3dzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLlBvcnRhbmRmbG93c0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmxvdyBQb3J0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZsb3cgUG9ydDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRmxvd1BvcnQgY3JlYXRlRmxvd1BvcnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmxvdyBQcm9wZXJ0eTwvZW0+Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmxvdyBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRmxvd1Byb3BlcnR5IGNyZWF0ZUZsb3dQcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GbG93IFNwZWNpZmljYXRpb248L2VtPicuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkZsb3cgU3BlY2lmaWNhdGlvbjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRmxvd1NwZWNpZmljYXRpb24gY3JlYXRlRmxvd1NwZWNpZmljYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SXRlbSBGbG93PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkl0ZW0gRmxvdzwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSXRlbUZsb3cgY3JlYXRlSXRlbUZsb3coKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQb3J0YW5kZmxvd3NQYWNrYWdlIGdldFBvcnRhbmRmbG93c1BhY2thZ2UoKTsKKworfSAvLyBQb3J0YW5kZmxvd3NGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvUG9ydGFuZGZsb3dzUGFja2FnZS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL1BvcnRhbmRmbG93c1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhiOGFkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL1BvcnRhbmRmbG93c1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDY1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgY29udGFpbnMKKyAqIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUG9ydGFuZGZsb3dzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdAorCSAqIHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5GbG93UG9ydEltcGwKKwkJICogPGVtPkZsb3cgUG9ydDwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuRmxvd1BvcnRJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCNnZXRGbG93UG9ydCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBGTE9XX1BPUlQgPSBlSU5TVEFOQ0UuZ2V0Rmxvd1BvcnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUG9ydDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEZMT1dfUE9SVF9fQkFTRV9QT1JUID0gZUlOU1RBTkNFLmdldEZsb3dQb3J0X0Jhc2VfUG9ydCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SXMgQXRvbWljPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRkxPV19QT1JUX19JU19BVE9NSUMgPSBlSU5TVEFOQ0UuZ2V0Rmxvd1BvcnRfSXNBdG9taWMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklzIENvbmp1Z2F0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGTE9XX1BPUlRfX0lTX0NPTkpVR0FURUQgPSBlSU5TVEFOQ0UuZ2V0Rmxvd1BvcnRfSXNDb25qdWdhdGVkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXJlY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGTE9XX1BPUlRfX0RJUkVDVElPTiA9IGVJTlNUQU5DRS5nZXRGbG93UG9ydF9EaXJlY3Rpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdldCBJY29uPC9iPjwvZW0+JyBvcGVyYXRpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFT3BlcmF0aW9uIEZMT1dfUE9SVF9fX0dFVF9JQ09OID0gZUlOU1RBTkNFLmdldEZsb3dQb3J0X19HZXRJY29uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dQcm9wZXJ0eUltcGwgPGVtPkZsb3cgUHJvcGVydHk8L2VtPn0nCisJCSAqIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dQcm9wZXJ0eUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLlBvcnRhbmRmbG93c1BhY2thZ2VJbXBsI2dldEZsb3dQcm9wZXJ0eSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBGTE9XX1BST1BFUlRZID0gZUlOU1RBTkNFLmdldEZsb3dQcm9wZXJ0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQcm9wZXJ0eTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEZMT1dfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFkgPSBlSU5TVEFOQ0UuZ2V0Rmxvd1Byb3BlcnR5X0Jhc2VfUHJvcGVydHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRpcmVjdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZMT1dfUFJPUEVSVFlfX0RJUkVDVElPTiA9IGVJTlNUQU5DRS5nZXRGbG93UHJvcGVydHlfRGlyZWN0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5HZXQgSWNvbjwvYj48L2VtPicgb3BlcmF0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRU9wZXJhdGlvbiBGTE9XX1BST1BFUlRZX19fR0VUX0lDT04gPSBlSU5TVEFOQ0UuZ2V0Rmxvd1Byb3BlcnR5X19HZXRJY29uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dTcGVjaWZpY2F0aW9uSW1wbAorCQkgKiA8ZW0+RmxvdyBTcGVjaWZpY2F0aW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCQkgKiBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5GbG93U3BlY2lmaWNhdGlvbkltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLlBvcnRhbmRmbG93c1BhY2thZ2VJbXBsI2dldEZsb3dTcGVjaWZpY2F0aW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEZMT1dfU1BFQ0lGSUNBVElPTiA9IGVJTlNUQU5DRS5nZXRGbG93U3BlY2lmaWNhdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBJbnRlcmZhY2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBGTE9XX1NQRUNJRklDQVRJT05fX0JBU0VfSU5URVJGQUNFID0gZUlOU1RBTkNFLmdldEZsb3dTcGVjaWZpY2F0aW9uX0Jhc2VfSW50ZXJmYWNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5JdGVtRmxvd0ltcGwKKwkJICogPGVtPkl0ZW0gRmxvdzwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuSXRlbUZsb3dJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCNnZXRJdGVtRmxvdygpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJVEVNX0ZMT1cgPSBlSU5TVEFOQ0UuZ2V0SXRlbUZsb3coKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnIDxlbT48Yj5CYXNlIEluZm9ybWF0aW9uIEZsb3c8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLiA8IS0tCisJCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJVEVNX0ZMT1dfX0JBU0VfSU5GT1JNQVRJT05fRkxPVyA9IGVJTlNUQU5DRS5nZXRJdGVtRmxvd19CYXNlX0luZm9ybWF0aW9uRmxvdygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SXRlbSBQcm9wZXJ0eTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElURU1fRkxPV19fSVRFTV9QUk9QRVJUWSA9IGVJTlNUQU5DRS5nZXRJdGVtRmxvd19JdGVtUHJvcGVydHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24gPGVtPkZsb3cgRGlyZWN0aW9uPC9lbT59JyBlbnVtLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93RGlyZWN0aW9uCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCNnZXRGbG93RGlyZWN0aW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUVudW0gRkxPV19ESVJFQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0Rmxvd0RpcmVjdGlvbigpOworCisJfQorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAicG9ydGFuZGZsb3dzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1BvcnRBbmRGbG93cyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJQb3J0QW5kRmxvd3MiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCVBvcnRhbmRmbG93c1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuRmxvd1BvcnRJbXBsIDxlbT5GbG93IFBvcnQ8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dQb3J0SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCNnZXRGbG93UG9ydCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBGTE9XX1BPUlQgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgUG9ydDwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZMT1dfUE9SVF9fQkFTRV9QT1JUID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JcyBBdG9taWM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGTE9XX1BPUlRfX0lTX0FUT01JQyA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SXMgQ29uanVnYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZMT1dfUE9SVF9fSVNfQ09OSlVHQVRFRCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlyZWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRkxPV19QT1JUX19ESVJFQ1RJT04gPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkZsb3cgUG9ydDwvZW0+JyBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGTE9XX1BPUlRfRkVBVFVSRV9DT1VOVCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgb3BlcmF0aW9uIGlkIGZvciB0aGUgJzxlbT5HZXQgSWNvbjwvZW0+JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGTE9XX1BPUlRfX19HRVRfSUNPTiA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+RmxvdyBQb3J0PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRkxPV19QT1JUX09QRVJBVElPTl9DT1VOVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dQcm9wZXJ0eUltcGwKKwkgKiA8ZW0+RmxvdyBQcm9wZXJ0eTwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuRmxvd1Byb3BlcnR5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCNnZXRGbG93UHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRkxPV19QUk9QRVJUWSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBQcm9wZXJ0eTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZMT1dfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFkgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpcmVjdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZMT1dfUFJPUEVSVFlfX0RJUkVDVElPTiA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RmxvdyBQcm9wZXJ0eTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGTE9XX1BST1BFUlRZX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIG9wZXJhdGlvbiBpZCBmb3IgdGhlICc8ZW0+R2V0IEljb248L2VtPicgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRkxPV19QUk9QRVJUWV9fX0dFVF9JQ09OID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5GbG93IFByb3BlcnR5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRkxPV19QUk9QRVJUWV9PUEVSQVRJT05fQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dTcGVjaWZpY2F0aW9uSW1wbCA8ZW0+RmxvdyBTcGVjaWZpY2F0aW9uPC9lbT59JworCSAqIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuRmxvd1NwZWNpZmljYXRpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLlBvcnRhbmRmbG93c1BhY2thZ2VJbXBsI2dldEZsb3dTcGVjaWZpY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEZMT1dfU1BFQ0lGSUNBVElPTiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBJbnRlcmZhY2U8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGTE9XX1NQRUNJRklDQVRJT05fX0JBU0VfSU5URVJGQUNFID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GbG93IFNwZWNpZmljYXRpb248L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRkxPV19TUEVDSUZJQ0FUSU9OX0ZFQVRVUkVfQ09VTlQgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkZsb3cgU3BlY2lmaWNhdGlvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZMT1dfU1BFQ0lGSUNBVElPTl9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkl0ZW1GbG93SW1wbCA8ZW0+SXRlbSBGbG93PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5JdGVtRmxvd0ltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuUG9ydGFuZGZsb3dzUGFja2FnZUltcGwjZ2V0SXRlbUZsb3coKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSVRFTV9GTE9XID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIEluZm9ybWF0aW9uIEZsb3c8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJVEVNX0ZMT1dfX0JBU0VfSU5GT1JNQVRJT05fRkxPVyA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SXRlbSBQcm9wZXJ0eTwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElURU1fRkxPV19fSVRFTV9QUk9QRVJUWSA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SXRlbSBGbG93PC9lbT4nIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElURU1fRkxPV19GRUFUVVJFX0NPVU5UID0gMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5JdGVtIEZsb3c8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJVEVNX0ZMT1dfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24KKwkgKiA8ZW0+RmxvdyBEaXJlY3Rpb248L2VtPn0nIGVudW0uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuUG9ydGFuZGZsb3dzUGFja2FnZUltcGwjZ2V0Rmxvd0RpcmVjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBGTE9XX0RJUkVDVElPTiA9IDQ7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZW51bSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb24gPGVtPkZsb3cgRGlyZWN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBlbnVtICc8ZW0+RmxvdyBEaXJlY3Rpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93RGlyZWN0aW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVFbnVtIGdldEZsb3dEaXJlY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0IDxlbT5GbG93IFBvcnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RmxvdyBQb3J0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEZsb3dQb3J0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0I2dldEJhc2VfUG9ydCA8ZW0+QmFzZSBQb3J0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBQb3J0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQjZ2V0QmFzZV9Qb3J0KCkKKwkgKiBAc2VlICNnZXRGbG93UG9ydCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0Rmxvd1BvcnRfQmFzZV9Qb3J0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0I2dldERpcmVjdGlvbiA8ZW0+RGlyZWN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlyZWN0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQjZ2V0RGlyZWN0aW9uKCkKKwkgKiBAc2VlICNnZXRGbG93UG9ydCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Rmxvd1BvcnRfRGlyZWN0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQjZ2V0SWNvbigpIDxlbT5HZXQgSWNvbjwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlICc8ZW0+R2V0IEljb248L2VtPicgb3BlcmF0aW9uLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQjZ2V0SWNvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVPcGVyYXRpb24gZ2V0Rmxvd1BvcnRfX0dldEljb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQjaXNBdG9taWMgPGVtPklzIEF0b21pYzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPklzIEF0b21pYzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0I2lzQXRvbWljKCkKKwkgKiBAc2VlICNnZXRGbG93UG9ydCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Rmxvd1BvcnRfSXNBdG9taWMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQjaXNDb25qdWdhdGVkIDxlbT5JcyBDb25qdWdhdGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SXMgQ29uanVnYXRlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0I2lzQ29uanVnYXRlZCgpCisJICogQHNlZSAjZ2V0Rmxvd1BvcnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZsb3dQb3J0X0lzQ29uanVnYXRlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5IDxlbT5GbG93IFByb3BlcnR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZsb3cgUHJvcGVydHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEZsb3dQcm9wZXJ0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHkjZ2V0QmFzZV9Qcm9wZXJ0eSA8ZW0+QmFzZSBQcm9wZXJ0eTwvZW0+fSAnLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFByb3BlcnR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5I2dldEJhc2VfUHJvcGVydHkoKQorCSAqIEBzZWUgI2dldEZsb3dQcm9wZXJ0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0Rmxvd1Byb3BlcnR5X0Jhc2VfUHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5I2dldERpcmVjdGlvbiA8ZW0+RGlyZWN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGlyZWN0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5I2dldERpcmVjdGlvbigpCisJICogQHNlZSAjZ2V0Rmxvd1Byb3BlcnR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRGbG93UHJvcGVydHlfRGlyZWN0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5I2dldEljb24oKSA8ZW0+R2V0IEljb248L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSAnPGVtPkdldCBJY29uPC9lbT4nIG9wZXJhdGlvbi4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQcm9wZXJ0eSNnZXRJY29uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRU9wZXJhdGlvbiBnZXRGbG93UHJvcGVydHlfX0dldEljb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93U3BlY2lmaWNhdGlvbgorCSAqIDxlbT5GbG93IFNwZWNpZmljYXRpb248L2VtPn0gJy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZsb3cgU3BlY2lmaWNhdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dTcGVjaWZpY2F0aW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRGbG93U3BlY2lmaWNhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93U3BlY2lmaWNhdGlvbiNnZXRCYXNlX0ludGVyZmFjZQorCSAqIDxlbT5CYXNlIEludGVyZmFjZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgSW50ZXJmYWNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb24jZ2V0QmFzZV9JbnRlcmZhY2UoKQorCSAqIEBzZWUgI2dldEZsb3dTcGVjaWZpY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRGbG93U3BlY2lmaWNhdGlvbl9CYXNlX0ludGVyZmFjZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuSXRlbUZsb3cgPGVtPkl0ZW0gRmxvdzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JdGVtIEZsb3c8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5JdGVtRmxvdworCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SXRlbUZsb3coKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuSXRlbUZsb3cjZ2V0QmFzZV9JbmZvcm1hdGlvbkZsb3cKKwkgKiA8ZW0+QmFzZSBJbmZvcm1hdGlvbiBGbG93PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIEluZm9ybWF0aW9uIEZsb3c8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5JdGVtRmxvdyNnZXRCYXNlX0luZm9ybWF0aW9uRmxvdygpCisJICogQHNlZSAjZ2V0SXRlbUZsb3coKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEl0ZW1GbG93X0Jhc2VfSW5mb3JtYXRpb25GbG93KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkl0ZW1GbG93I2dldEl0ZW1Qcm9wZXJ0eSA8ZW0+SXRlbSBQcm9wZXJ0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkl0ZW0gUHJvcGVydHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5JdGVtRmxvdyNnZXRJdGVtUHJvcGVydHkoKQorCSAqIEBzZWUgI2dldEl0ZW1GbG93KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRJdGVtRmxvd19JdGVtUHJvcGVydHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBvcnRhbmRmbG93c0ZhY3RvcnkgZ2V0UG9ydGFuZGZsb3dzRmFjdG9yeSgpOworCit9IC8vIFBvcnRhbmRmbG93c1BhY2thZ2UKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL0Zsb3dQb3J0SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL2ludGVybmFsL2ltcGwvRmxvd1BvcnRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2YzEzYwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL0Zsb3dQb3J0SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dEaXJlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbnRlcmZhY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuUG9ydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5TdGVyZW90eXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwudXRpbC5VTUxVdGlsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+RmxvdyBQb3J0PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dQb3J0SW1wbCNnZXRCYXNlX1BvcnQgPGVtPkJhc2UgUG9ydDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuRmxvd1BvcnRJbXBsI2lzQXRvbWljIDxlbT5JcyBBdG9taWM8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dQb3J0SW1wbCNpc0Nvbmp1Z2F0ZWQgPGVtPklzIENvbmp1Z2F0ZWQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dQb3J0SW1wbCNnZXREaXJlY3Rpb24gPGVtPkRpcmVjdGlvbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZsb3dQb3J0SW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBGbG93UG9ydCB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX1BvcnQoKSA8ZW0+QmFzZSBQb3J0PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX1BvcnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQb3J0IGJhc2VfUG9ydDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0F0b21pYygpIDxlbT5JcyBBdG9taWM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2lzQXRvbWljKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gSVNfQVRPTUlDX0VERUZBVUxUID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNDb25qdWdhdGVkKCkgPGVtPklzIENvbmp1Z2F0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjaXNDb25qdWdhdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gSVNfQ09OSlVHQVRFRF9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNDb25qdWdhdGVkKCkgPGVtPklzIENvbmp1Z2F0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2lzQ29uanVnYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNDb25qdWdhdGVkID0gSVNfQ09OSlVHQVRFRF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXJlY3Rpb24oKSA8ZW0+RGlyZWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXREaXJlY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgRmxvd0RpcmVjdGlvbiBESVJFQ1RJT05fRURFRkFVTFQgPSBGbG93RGlyZWN0aW9uLklOT1VUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlyZWN0aW9uKCkgPGVtPkRpcmVjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0RGlyZWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRmxvd0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBESVJFQ1RJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRmxvd1BvcnRJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3J0IGJhc2ljR2V0QmFzZV9Qb3J0KCkgeworCQlyZXR1cm4gYmFzZV9Qb3J0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fQkFTRV9QT1JUOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9Qb3J0KCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX1BvcnQoKTsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fSVNfQVRPTUlDOgorCQkJcmV0dXJuIGlzQXRvbWljKCk7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BPUlRfX0lTX0NPTkpVR0FURUQ6CisJCQlyZXR1cm4gaXNDb25qdWdhdGVkKCk7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BPUlRfX0RJUkVDVElPTjoKKwkJCXJldHVybiBnZXREaXJlY3Rpb24oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QT1JUX19CQVNFX1BPUlQ6CisJCQlyZXR1cm4gYmFzZV9Qb3J0ICE9IG51bGw7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BPUlRfX0lTX0FUT01JQzoKKwkJCXJldHVybiBpc0F0b21pYygpICE9IElTX0FUT01JQ19FREVGQVVMVDsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fSVNfQ09OSlVHQVRFRDoKKwkJCXJldHVybiBpc0Nvbmp1Z2F0ZWQgIT0gSVNfQ09OSlVHQVRFRF9FREVGQVVMVDsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fRElSRUNUSU9OOgorCQkJcmV0dXJuIGRpcmVjdGlvbiAhPSBESVJFQ1RJT05fRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlSW52b2tlKGludCBvcGVyYXRpb25JRCwgRUxpc3Q8Pz4gYXJndW1lbnRzKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiB7CisJCXN3aXRjaCAob3BlcmF0aW9uSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fX0dFVF9JQ09OOgorCQkJcmV0dXJuIGdldEljb24oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludm9rZShvcGVyYXRpb25JRCwgYXJndW1lbnRzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QT1JUX19CQVNFX1BPUlQ6CisJCQlzZXRCYXNlX1BvcnQoKFBvcnQpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fSVNfQ09OSlVHQVRFRDoKKwkJCXNldElzQ29uanVnYXRlZCgoQm9vbGVhbikgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QT1JUX19ESVJFQ1RJT046CisJCQlzZXREaXJlY3Rpb24oKEZsb3dEaXJlY3Rpb24pIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUG9ydGFuZGZsb3dzUGFja2FnZS5MaXRlcmFscy5GTE9XX1BPUlQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fQkFTRV9QT1JUOgorCQkJc2V0QmFzZV9Qb3J0KChQb3J0KSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fSVNfQ09OSlVHQVRFRDoKKwkJCXNldElzQ29uanVnYXRlZChJU19DT05KVUdBVEVEX0VERUZBVUxUKTsKKwkJCXJldHVybjsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fRElSRUNUSU9OOgorCQkJc2V0RGlyZWN0aW9uKERJUkVDVElPTl9FREVGQVVMVCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcnQgZ2V0QmFzZV9Qb3J0KCkgeworCQlpZiAoYmFzZV9Qb3J0ICE9IG51bGwgJiYgYmFzZV9Qb3J0LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX1BvcnQgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX1BvcnQ7CisJCQliYXNlX1BvcnQgPSAoUG9ydCkgZVJlc29sdmVQcm94eShvbGRCYXNlX1BvcnQpOworCQkJaWYgKGJhc2VfUG9ydCAhPSBvbGRCYXNlX1BvcnQpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QT1JUX19CQVNFX1BPUlQsIG9sZEJhc2VfUG9ydCwgYmFzZV9Qb3J0KSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX1BvcnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZsb3dEaXJlY3Rpb24gZ2V0RGlyZWN0aW9uKCkgeworCQlyZXR1cm4gZGlyZWN0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEltYWdlcyByZWdpc3RlcmVkIGluIFByb2ZpbGUgYXJlIDogMCAtIEZsb3dQb3J0CisJICogKGRlZmF1bHQsIHNpbWlsYXIgdG8gSU5PVVQpIDEgLSBGbG93UG9ydCBJTiAyIC0gRmxvd1BvcnQgT1VUIDMgLSBGbG93UG9ydAorCSAqIElOT1VUIDQgLSBGbG93UG9ydCBOQSAoTm9uIEF0b21pYykgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJY29uKCkgeworCisJCUltYWdlIEltYWdlTm90Rm91bmQgPSBudWxsOworCisJCWlmIChnZXRCYXNlX1BvcnQoKSAhPSBudWxsKSB7CisKKwkJCVN0ZXJlb3R5cGUgc3QgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGUodGhpcyk7CisKKwkJCUltYWdlIGltYWdlID0gc3QuZ2V0SWNvbnMoKS5nZXQoMCk7CisKKwkJCWlmIChpc0F0b21pYygpKSB7CisJCQkJaWYgKGdldERpcmVjdGlvbigpID09IEZsb3dEaXJlY3Rpb24uSU4pIHsKKwkJCQkJaW1hZ2UgPSBzdC5nZXRJY29ucygpLmdldCgxKTsKKwkJCQl9IGVsc2UgaWYgKGdldERpcmVjdGlvbigpID09IEZsb3dEaXJlY3Rpb24uT1VUKSB7CisJCQkJCWltYWdlID0gc3QuZ2V0SWNvbnMoKS5nZXQoMik7CisJCQkJfSBlbHNlIGlmIChnZXREaXJlY3Rpb24oKSA9PSBGbG93RGlyZWN0aW9uLklOT1VUKSB7CisJCQkJCWltYWdlID0gc3QuZ2V0SWNvbnMoKS5nZXQoMyk7CisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCWltYWdlID0gc3QuZ2V0SWNvbnMoKS5nZXQoNCk7CisJCQl9CisKKwkJCXJldHVybiBpbWFnZTsKKworCQl9IGVsc2UgeworCQkJcmV0dXJuIEltYWdlTm90Rm91bmQ7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX1BvcnQoUG9ydCBuZXdCYXNlX1BvcnQpIHsKKwkJUG9ydCBvbGRCYXNlX1BvcnQgPSBiYXNlX1BvcnQ7CisJCWJhc2VfUG9ydCA9IG5ld0Jhc2VfUG9ydDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fQkFTRV9QT1JULCBvbGRCYXNlX1BvcnQsIGJhc2VfUG9ydCkpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGJvb2xlYW4gaXNBdG9taWMoKSB7CisJCS8vIFRoZSBGbG93UG9ydCBpcyBBdG9taWMgaWYgaXQgaXMgbm90IHR5cGVkIGJ5IGEgRmxvd1NwZWNpZmljYXRpb24KKwkJQm9vbGVhbiBpc0F0b21pYyA9IHRydWU7CisJCUZsb3dTcGVjaWZpY2F0aW9uIGZsb3dTcGVjID0gbnVsbDsKKworCQlpZiAoZ2V0QmFzZV9Qb3J0KCkgIT0gbnVsbCkgeworCQkJLy8gRmluZCBGbG93UG9ydCB0eXBlCisJCQlUeXBlIHR5cGUgPSBnZXRCYXNlX1BvcnQoKS5nZXRUeXBlKCk7CisJCQlpZiAoKHR5cGUgIT0gbnVsbCkgJiYgKHR5cGUgaW5zdGFuY2VvZiBJbnRlcmZhY2UpKSB7CisJCQkJZmxvd1NwZWMgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbih0eXBlLCBGbG93U3BlY2lmaWNhdGlvbi5jbGFzcyk7CisJCQl9CisKKwkJCWlmIChmbG93U3BlYyAhPSBudWxsKSB7CisJCQkJaXNBdG9taWMgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gaXNBdG9taWM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0Nvbmp1Z2F0ZWQoKSB7CisJCXJldHVybiBpc0Nvbmp1Z2F0ZWQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RGlyZWN0aW9uKEZsb3dEaXJlY3Rpb24gbmV3RGlyZWN0aW9uKSB7CisJCUZsb3dEaXJlY3Rpb24gb2xkRGlyZWN0aW9uID0gZGlyZWN0aW9uOworCQlkaXJlY3Rpb24gPSBuZXdEaXJlY3Rpb24gPT0gbnVsbCA/IERJUkVDVElPTl9FREVGQVVMVCA6IG5ld0RpcmVjdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUE9SVF9fRElSRUNUSU9OLCBvbGREaXJlY3Rpb24sIGRpcmVjdGlvbikpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldElzQXRvbWljKGJvb2xlYW4gbmV3SXNBdG9taWMpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgJ0lzIEF0b21pYycgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCS8vIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElzQ29uanVnYXRlZChib29sZWFuIG5ld0lzQ29uanVnYXRlZCkgeworCQlib29sZWFuIG9sZElzQ29uanVnYXRlZCA9IGlzQ29uanVnYXRlZDsKKwkJaXNDb25qdWdhdGVkID0gbmV3SXNDb25qdWdhdGVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QT1JUX19JU19DT05KVUdBVEVELCBvbGRJc0Nvbmp1Z2F0ZWQsIGlzQ29uanVnYXRlZCkpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHsKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCQl9CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaXNDb25qdWdhdGVkOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChpc0Nvbmp1Z2F0ZWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIGRpcmVjdGlvbjogIik7CisJCXJlc3VsdC5hcHBlbmQoZGlyZWN0aW9uKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vIEZsb3dQb3J0SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL2ludGVybmFsL2ltcGwvRmxvd1Byb3BlcnR5SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL2ludGVybmFsL2ltcGwvRmxvd1Byb3BlcnR5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTY2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvaW50ZXJuYWwvaW1wbC9GbG93UHJvcGVydHlJbXBsLmphdmEKQEAgLTAsMCArMSwyOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd0RpcmVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5TdGVyZW90eXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLnV0aWwuVU1MVXRpbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkZsb3cgUHJvcGVydHk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuRmxvd1Byb3BlcnR5SW1wbCNnZXRCYXNlX1Byb3BlcnR5IDxlbT5CYXNlIFByb3BlcnR5PC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5GbG93UHJvcGVydHlJbXBsI2dldERpcmVjdGlvbiA8ZW0+RGlyZWN0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRmxvd1Byb3BlcnR5SW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBGbG93UHJvcGVydHkgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9Qcm9wZXJ0eSgpIDxlbT5CYXNlIFByb3BlcnR5PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfUHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eSBiYXNlX1Byb3BlcnR5OworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpcmVjdGlvbigpIDxlbT5EaXJlY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldERpcmVjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBGbG93RGlyZWN0aW9uIERJUkVDVElPTl9FREVGQVVMVCA9IEZsb3dEaXJlY3Rpb24uSU5PVVQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXJlY3Rpb24oKSA8ZW0+RGlyZWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXREaXJlY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBGbG93RGlyZWN0aW9uIGRpcmVjdGlvbiA9IERJUkVDVElPTl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBGbG93UHJvcGVydHlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcm9wZXJ0eSBiYXNpY0dldEJhc2VfUHJvcGVydHkoKSB7CisJCXJldHVybiBiYXNlX1Byb3BlcnR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFk6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX1Byb3BlcnR5KCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX1Byb3BlcnR5KCk7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BST1BFUlRZX19ESVJFQ1RJT046CisJCQlyZXR1cm4gZ2V0RGlyZWN0aW9uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFk6CisJCQlyZXR1cm4gYmFzZV9Qcm9wZXJ0eSAhPSBudWxsOworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QUk9QRVJUWV9fRElSRUNUSU9OOgorCQkJcmV0dXJuIGRpcmVjdGlvbiAhPSBESVJFQ1RJT05fRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlSW52b2tlKGludCBvcGVyYXRpb25JRCwgRUxpc3Q8Pz4gYXJndW1lbnRzKSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiB7CisJCXN3aXRjaCAob3BlcmF0aW9uSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUFJPUEVSVFlfX19HRVRfSUNPTjoKKwkJCXJldHVybiBnZXRJY29uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZva2Uob3BlcmF0aW9uSUQsIGFyZ3VtZW50cyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFk6CisJCQlzZXRCYXNlX1Byb3BlcnR5KChQcm9wZXJ0eSkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QUk9QRVJUWV9fRElSRUNUSU9OOgorCQkJc2V0RGlyZWN0aW9uKChGbG93RGlyZWN0aW9uKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFBvcnRhbmRmbG93c1BhY2thZ2UuTGl0ZXJhbHMuRkxPV19QUk9QRVJUWTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWToKKwkJCXNldEJhc2VfUHJvcGVydHkoKFByb3BlcnR5KSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUFJPUEVSVFlfX0RJUkVDVElPTjoKKwkJCXNldERpcmVjdGlvbihESVJFQ1RJT05fRURFRkFVTFQpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcm9wZXJ0eSBnZXRCYXNlX1Byb3BlcnR5KCkgeworCQlpZiAoYmFzZV9Qcm9wZXJ0eSAhPSBudWxsICYmIGJhc2VfUHJvcGVydHkuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfUHJvcGVydHkgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX1Byb3BlcnR5OworCQkJYmFzZV9Qcm9wZXJ0eSA9IChQcm9wZXJ0eSkgZVJlc29sdmVQcm94eShvbGRCYXNlX1Byb3BlcnR5KTsKKwkJCWlmIChiYXNlX1Byb3BlcnR5ICE9IG9sZEJhc2VfUHJvcGVydHkpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSwgb2xkQmFzZV9Qcm9wZXJ0eSwgYmFzZV9Qcm9wZXJ0eSkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9Qcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmxvd0RpcmVjdGlvbiBnZXREaXJlY3Rpb24oKSB7CisJCXJldHVybiBkaXJlY3Rpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gSW1hZ2VzIHJlZ2lzdGVyZWQgaW4gUHJvZmlsZSBhcmUgOiAwIC0gRmxvd1BvcnQKKwkgKiAoZGVmYXVsdCwgc2ltaWxhciB0byBJTk9VVCkgMSAtIEZsb3dQb3J0IElOIDIgLSBGbG93UG9ydCBPVVQgMyAtIEZsb3dQb3J0CisJICogSU5PVVQgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJY29uKCkgeworCisJCUltYWdlIEltYWdlTm90Rm91bmQgPSBudWxsOworCisJCWlmIChnZXRCYXNlX1Byb3BlcnR5KCkgIT0gbnVsbCkgeworCQkJU3RlcmVvdHlwZSBzdCA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZSh0aGlzKTsKKworCQkJSW1hZ2UgaW1hZ2UgPSBzdC5nZXRJY29ucygpLmdldCgwKTsKKworCQkJaWYgKGdldERpcmVjdGlvbigpID09IEZsb3dEaXJlY3Rpb24uSU4pIHsKKwkJCQlpbWFnZSA9IHN0LmdldEljb25zKCkuZ2V0KDEpOworCQkJfSBlbHNlIGlmIChnZXREaXJlY3Rpb24oKSA9PSBGbG93RGlyZWN0aW9uLk9VVCkgeworCQkJCWltYWdlID0gc3QuZ2V0SWNvbnMoKS5nZXQoMik7CisJCQl9IGVsc2UgaWYgKGdldERpcmVjdGlvbigpID09IEZsb3dEaXJlY3Rpb24uSU5PVVQpIHsKKwkJCQlpbWFnZSA9IHN0LmdldEljb25zKCkuZ2V0KDMpOworCQkJfQorCisJCQlyZXR1cm4gaW1hZ2U7CisKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBJbWFnZU5vdEZvdW5kOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmFzZV9Qcm9wZXJ0eShQcm9wZXJ0eSBuZXdCYXNlX1Byb3BlcnR5KSB7CisJCVByb3BlcnR5IG9sZEJhc2VfUHJvcGVydHkgPSBiYXNlX1Byb3BlcnR5OworCQliYXNlX1Byb3BlcnR5ID0gbmV3QmFzZV9Qcm9wZXJ0eTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfUFJPUEVSVFlfX0JBU0VfUFJPUEVSVFksIG9sZEJhc2VfUHJvcGVydHksIGJhc2VfUHJvcGVydHkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERpcmVjdGlvbihGbG93RGlyZWN0aW9uIG5ld0RpcmVjdGlvbikgeworCQlGbG93RGlyZWN0aW9uIG9sZERpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwkJZGlyZWN0aW9uID0gbmV3RGlyZWN0aW9uID09IG51bGwgPyBESVJFQ1RJT05fRURFRkFVTFQgOiBuZXdEaXJlY3Rpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BST1BFUlRZX19ESVJFQ1RJT04sIG9sZERpcmVjdGlvbiwgZGlyZWN0aW9uKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgeworCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisJCX0KKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChkaXJlY3Rpb246ICIpOworCQlyZXN1bHQuYXBwZW5kKGRpcmVjdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBGbG93UHJvcGVydHlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvaW50ZXJuYWwvaW1wbC9GbG93U3BlY2lmaWNhdGlvbkltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL0Zsb3dTcGVjaWZpY2F0aW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTcyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvaW50ZXJuYWwvaW1wbC9GbG93U3BlY2lmaWNhdGlvbkltcGwuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5JbnRlcmZhY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5GbG93IFNwZWNpZmljYXRpb248L2I+PC9lbT4gJy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5pbnRlcm5hbC5pbXBsLkZsb3dTcGVjaWZpY2F0aW9uSW1wbCNnZXRCYXNlX0ludGVyZmFjZSA8ZW0+QmFzZSBJbnRlcmZhY2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGbG93U3BlY2lmaWNhdGlvbkltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgRmxvd1NwZWNpZmljYXRpb24geworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9JbnRlcmZhY2UoKSA8ZW0+QmFzZSBJbnRlcmZhY2U8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9JbnRlcmZhY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcmZhY2UgYmFzZV9JbnRlcmZhY2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRmxvd1NwZWNpZmljYXRpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcmZhY2UgYmFzaWNHZXRCYXNlX0ludGVyZmFjZSgpIHsKKwkJcmV0dXJuIGJhc2VfSW50ZXJmYWNlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfU1BFQ0lGSUNBVElPTl9fQkFTRV9JTlRFUkZBQ0U6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0ludGVyZmFjZSgpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9JbnRlcmZhY2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19TUEVDSUZJQ0FUSU9OX19CQVNFX0lOVEVSRkFDRToKKwkJCXJldHVybiBiYXNlX0ludGVyZmFjZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19TUEVDSUZJQ0FUSU9OX19CQVNFX0lOVEVSRkFDRToKKwkJCXNldEJhc2VfSW50ZXJmYWNlKChJbnRlcmZhY2UpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUG9ydGFuZGZsb3dzUGFja2FnZS5MaXRlcmFscy5GTE9XX1NQRUNJRklDQVRJT047CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfU1BFQ0lGSUNBVElPTl9fQkFTRV9JTlRFUkZBQ0U6CisJCQlzZXRCYXNlX0ludGVyZmFjZSgoSW50ZXJmYWNlKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJmYWNlIGdldEJhc2VfSW50ZXJmYWNlKCkgeworCQlpZiAoYmFzZV9JbnRlcmZhY2UgIT0gbnVsbCAmJiBiYXNlX0ludGVyZmFjZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9JbnRlcmZhY2UgPSAoSW50ZXJuYWxFT2JqZWN0KSBiYXNlX0ludGVyZmFjZTsKKwkJCWJhc2VfSW50ZXJmYWNlID0gKEludGVyZmFjZSkgZVJlc29sdmVQcm94eShvbGRCYXNlX0ludGVyZmFjZSk7CisJCQlpZiAoYmFzZV9JbnRlcmZhY2UgIT0gb2xkQmFzZV9JbnRlcmZhY2UpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19TUEVDSUZJQ0FUSU9OX19CQVNFX0lOVEVSRkFDRSwgb2xkQmFzZV9JbnRlcmZhY2UsIGJhc2VfSW50ZXJmYWNlKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX0ludGVyZmFjZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0ludGVyZmFjZShJbnRlcmZhY2UgbmV3QmFzZV9JbnRlcmZhY2UpIHsKKwkJSW50ZXJmYWNlIG9sZEJhc2VfSW50ZXJmYWNlID0gYmFzZV9JbnRlcmZhY2U7CisJCWJhc2VfSW50ZXJmYWNlID0gbmV3QmFzZV9JbnRlcmZhY2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1NQRUNJRklDQVRJT05fX0JBU0VfSU5URVJGQUNFLCBvbGRCYXNlX0ludGVyZmFjZSwgYmFzZV9JbnRlcmZhY2UpKTsKKwkJfQorCX0KKworfSAvLyBGbG93U3BlY2lmaWNhdGlvbkltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL0l0ZW1GbG93SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL2ludGVybmFsL2ltcGwvSXRlbUZsb3dJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNjQxMwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL0l0ZW1GbG93SW1wbC5qYXZhCkBAIC0wLDAgKzEsMjM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5JdGVtRmxvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkluZm9ybWF0aW9uRmxvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5Qcm9wZXJ0eTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkl0ZW0gRmxvdzwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5JdGVtRmxvd0ltcGwjZ2V0QmFzZV9JbmZvcm1hdGlvbkZsb3cgPGVtPkJhc2UgSW5mb3JtYXRpb24gRmxvdzwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuSXRlbUZsb3dJbXBsI2dldEl0ZW1Qcm9wZXJ0eSA8ZW0+SXRlbSBQcm9wZXJ0eTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEl0ZW1GbG93SW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBJdGVtRmxvdyB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlX0luZm9ybWF0aW9uRmxvdygpIDxlbT5CYXNlIEluZm9ybWF0aW9uIEZsb3c8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9JbmZvcm1hdGlvbkZsb3coKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJbmZvcm1hdGlvbkZsb3cgYmFzZV9JbmZvcm1hdGlvbkZsb3c7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJdGVtUHJvcGVydHkoKSA8ZW0+SXRlbSBQcm9wZXJ0eTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRJdGVtUHJvcGVydHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eSBpdGVtUHJvcGVydHk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSXRlbUZsb3dJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbmZvcm1hdGlvbkZsb3cgYmFzaWNHZXRCYXNlX0luZm9ybWF0aW9uRmxvdygpIHsKKwkJcmV0dXJuIGJhc2VfSW5mb3JtYXRpb25GbG93OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcm9wZXJ0eSBiYXNpY0dldEl0ZW1Qcm9wZXJ0eSgpIHsKKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5JVEVNX0ZMT1dfX0JBU0VfSU5GT1JNQVRJT05fRkxPVzoKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfSW5mb3JtYXRpb25GbG93KCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX0luZm9ybWF0aW9uRmxvdygpOworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuSVRFTV9GTE9XX19JVEVNX1BST1BFUlRZOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0SXRlbVByb3BlcnR5KCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRJdGVtUHJvcGVydHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuSVRFTV9GTE9XX19CQVNFX0lORk9STUFUSU9OX0ZMT1c6CisJCQlyZXR1cm4gYmFzZV9JbmZvcm1hdGlvbkZsb3cgIT0gbnVsbDsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLklURU1fRkxPV19fSVRFTV9QUk9QRVJUWToKKwkJCXJldHVybiBpdGVtUHJvcGVydHkgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLklURU1fRkxPV19fQkFTRV9JTkZPUk1BVElPTl9GTE9XOgorCQkJc2V0QmFzZV9JbmZvcm1hdGlvbkZsb3coKEluZm9ybWF0aW9uRmxvdykgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuSVRFTV9GTE9XX19JVEVNX1BST1BFUlRZOgorCQkJc2V0SXRlbVByb3BlcnR5KChQcm9wZXJ0eSkgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQb3J0YW5kZmxvd3NQYWNrYWdlLkxpdGVyYWxzLklURU1fRkxPVzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuSVRFTV9GTE9XX19CQVNFX0lORk9STUFUSU9OX0ZMT1c6CisJCQlzZXRCYXNlX0luZm9ybWF0aW9uRmxvdygoSW5mb3JtYXRpb25GbG93KSBudWxsKTsKKwkJCXJldHVybjsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLklURU1fRkxPV19fSVRFTV9QUk9QRVJUWToKKwkJCXNldEl0ZW1Qcm9wZXJ0eSgoUHJvcGVydHkpIG51bGwpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbmZvcm1hdGlvbkZsb3cgZ2V0QmFzZV9JbmZvcm1hdGlvbkZsb3coKSB7CisJCWlmIChiYXNlX0luZm9ybWF0aW9uRmxvdyAhPSBudWxsICYmIGJhc2VfSW5mb3JtYXRpb25GbG93LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0luZm9ybWF0aW9uRmxvdyA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfSW5mb3JtYXRpb25GbG93OworCQkJYmFzZV9JbmZvcm1hdGlvbkZsb3cgPSAoSW5mb3JtYXRpb25GbG93KSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfSW5mb3JtYXRpb25GbG93KTsKKwkJCWlmIChiYXNlX0luZm9ybWF0aW9uRmxvdyAhPSBvbGRCYXNlX0luZm9ybWF0aW9uRmxvdykgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgUG9ydGFuZGZsb3dzUGFja2FnZS5JVEVNX0ZMT1dfX0JBU0VfSU5GT1JNQVRJT05fRkxPVywgb2xkQmFzZV9JbmZvcm1hdGlvbkZsb3csIGJhc2VfSW5mb3JtYXRpb25GbG93KSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX0luZm9ybWF0aW9uRmxvdzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJvcGVydHkgZ2V0SXRlbVByb3BlcnR5KCkgeworCQlpZiAoaXRlbVByb3BlcnR5ICE9IG51bGwgJiYgaXRlbVByb3BlcnR5LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRJdGVtUHJvcGVydHkgPSAoSW50ZXJuYWxFT2JqZWN0KSBpdGVtUHJvcGVydHk7CisJCQlpdGVtUHJvcGVydHkgPSAoUHJvcGVydHkpIGVSZXNvbHZlUHJveHkob2xkSXRlbVByb3BlcnR5KTsKKwkJCWlmIChpdGVtUHJvcGVydHkgIT0gb2xkSXRlbVByb3BlcnR5KSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBQb3J0YW5kZmxvd3NQYWNrYWdlLklURU1fRkxPV19fSVRFTV9QUk9QRVJUWSwgb2xkSXRlbVByb3BlcnR5LCBpdGVtUHJvcGVydHkpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0luZm9ybWF0aW9uRmxvdyhJbmZvcm1hdGlvbkZsb3cgbmV3QmFzZV9JbmZvcm1hdGlvbkZsb3cpIHsKKwkJSW5mb3JtYXRpb25GbG93IG9sZEJhc2VfSW5mb3JtYXRpb25GbG93ID0gYmFzZV9JbmZvcm1hdGlvbkZsb3c7CisJCWJhc2VfSW5mb3JtYXRpb25GbG93ID0gbmV3QmFzZV9JbmZvcm1hdGlvbkZsb3c7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUG9ydGFuZGZsb3dzUGFja2FnZS5JVEVNX0ZMT1dfX0JBU0VfSU5GT1JNQVRJT05fRkxPVywgb2xkQmFzZV9JbmZvcm1hdGlvbkZsb3csIGJhc2VfSW5mb3JtYXRpb25GbG93KSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJdGVtUHJvcGVydHkoUHJvcGVydHkgbmV3SXRlbVByb3BlcnR5KSB7CisJCVByb3BlcnR5IG9sZEl0ZW1Qcm9wZXJ0eSA9IGl0ZW1Qcm9wZXJ0eTsKKwkJaXRlbVByb3BlcnR5ID0gbmV3SXRlbVByb3BlcnR5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFBvcnRhbmRmbG93c1BhY2thZ2UuSVRFTV9GTE9XX19JVEVNX1BST1BFUlRZLCBvbGRJdGVtUHJvcGVydHksIGl0ZW1Qcm9wZXJ0eSkpOworCQl9CisJfQorCit9IC8vIEl0ZW1GbG93SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL2ludGVybmFsL2ltcGwvUG9ydGFuZGZsb3dzRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL1BvcnRhbmRmbG93c0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlZWFlNAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL1BvcnRhbmRmbG93c0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwyMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd0RpcmVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UG9ydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuSXRlbUZsb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcnRhbmRmbG93c0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgUG9ydGFuZGZsb3dzRmFjdG9yeSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBQb3J0YW5kZmxvd3NQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBQb3J0YW5kZmxvd3NQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFBvcnRhbmRmbG93c0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVBvcnRhbmRmbG93c0ZhY3RvcnkgdGhlUG9ydGFuZGZsb3dzRmFjdG9yeSA9IChQb3J0YW5kZmxvd3NGYWN0b3J5KSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeShQb3J0YW5kZmxvd3NQYWNrYWdlLmVOU19VUkkpOworCQkJaWYgKHRoZVBvcnRhbmRmbG93c0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVQb3J0YW5kZmxvd3NGYWN0b3J5OworCQkJfQorCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFBvcnRhbmRmbG93c0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3J0YW5kZmxvd3NGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRGbG93RGlyZWN0aW9uVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBQb3J0YW5kZmxvd3NQYWNrYWdlLkZMT1dfRElSRUNUSU9OOgorCQkJcmV0dXJuIGNvbnZlcnRGbG93RGlyZWN0aW9uVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19QT1JUOgorCQkJcmV0dXJuIGNyZWF0ZUZsb3dQb3J0KCk7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BST1BFUlRZOgorCQkJcmV0dXJuIGNyZWF0ZUZsb3dQcm9wZXJ0eSgpOworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19TUEVDSUZJQ0FUSU9OOgorCQkJcmV0dXJuIGNyZWF0ZUZsb3dTcGVjaWZpY2F0aW9uKCk7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5JVEVNX0ZMT1c6CisJCQlyZXR1cm4gY3JlYXRlSXRlbUZsb3coKTsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmxvd0RpcmVjdGlvbiBjcmVhdGVGbG93RGlyZWN0aW9uRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCUZsb3dEaXJlY3Rpb24gcmVzdWx0ID0gRmxvd0RpcmVjdGlvbi5nZXQoaW5pdGlhbFZhbHVlKTsKKwkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgdmFsdWUgJyIgKyBpbml0aWFsVmFsdWUgKyAiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIG9mICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIik7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmxvd1BvcnQgY3JlYXRlRmxvd1BvcnQoKSB7CisJCUZsb3dQb3J0SW1wbCBmbG93UG9ydCA9IG5ldyBGbG93UG9ydEltcGwoKTsKKwkJcmV0dXJuIGZsb3dQb3J0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGbG93UHJvcGVydHkgY3JlYXRlRmxvd1Byb3BlcnR5KCkgeworCQlGbG93UHJvcGVydHlJbXBsIGZsb3dQcm9wZXJ0eSA9IG5ldyBGbG93UHJvcGVydHlJbXBsKCk7CisJCXJldHVybiBmbG93UHJvcGVydHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZsb3dTcGVjaWZpY2F0aW9uIGNyZWF0ZUZsb3dTcGVjaWZpY2F0aW9uKCkgeworCQlGbG93U3BlY2lmaWNhdGlvbkltcGwgZmxvd1NwZWNpZmljYXRpb24gPSBuZXcgRmxvd1NwZWNpZmljYXRpb25JbXBsKCk7CisJCXJldHVybiBmbG93U3BlY2lmaWNhdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQljYXNlIFBvcnRhbmRmbG93c1BhY2thZ2UuRkxPV19ESVJFQ1RJT046CisJCQlyZXR1cm4gY3JlYXRlRmxvd0RpcmVjdGlvbkZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJdGVtRmxvdyBjcmVhdGVJdGVtRmxvdygpIHsKKwkJSXRlbUZsb3dJbXBsIGl0ZW1GbG93ID0gbmV3IEl0ZW1GbG93SW1wbCgpOworCQlyZXR1cm4gaXRlbUZsb3c7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcnRhbmRmbG93c1BhY2thZ2UgZ2V0UG9ydGFuZGZsb3dzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChQb3J0YW5kZmxvd3NQYWNrYWdlKSBnZXRFUGFja2FnZSgpOworCX0KKworfSAvLyBQb3J0YW5kZmxvd3NGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL2ludGVybmFsL2ltcGwvUG9ydGFuZGZsb3dzUGFja2FnZUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL1BvcnRhbmRmbG93c1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjMDIxNgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy9pbnRlcm5hbC9pbXBsL1BvcnRhbmRmbG93c1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw0NjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5TeXNtbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLkFjdGl2aXRpZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5pbnRlcm5hbC5pbXBsLkFjdGl2aXRpZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLkFsbG9jYXRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFsbG9jYXRpb25zLmludGVybmFsLmltcGwuQWxsb2NhdGlvbnNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5CbG9ja3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLmludGVybmFsLmltcGwuQmxvY2tzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5Db25zdHJhaW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5jb25zdHJhaW50cy5pbnRlcm5hbC5pbXBsLkNvbnN0cmFpbnRzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuSW50ZXJhY3Rpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5pbnRlcm5hbC5pbXBsLkludGVyYWN0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJuYWwuaW1wbC5TeXNtbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5Nb2RlbGVsZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuaW50ZXJuYWwuaW1wbC5Nb2RlbGVsZW1lbnRzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd0RpcmVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UG9ydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuSXRlbUZsb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuU3RhdGVtYWNoaW5lc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLmludGVybmFsLmltcGwuU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuVXNlY2FzZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuaW50ZXJuYWwuaW1wbC5Vc2VjYXNlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudHlwZXMuVHlwZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlVNTFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9ydGFuZGZsb3dzUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBQb3J0YW5kZmxvd3NQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgUG9ydGFuZGZsb3dzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4gQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFBvcnRhbmRmbG93c1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSB7CisJCQlyZXR1cm4gKFBvcnRhbmRmbG93c1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSk7CisJCX0KKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCVBvcnRhbmRmbG93c1BhY2thZ2VJbXBsIHRoZVBvcnRhbmRmbG93c1BhY2thZ2UgPSAoUG9ydGFuZGZsb3dzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJU3lzbWxQYWNrYWdlSW1wbCB0aGVTeXNtbFBhY2thZ2UgPSAoU3lzbWxQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN5c21sUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTeXNtbFBhY2thZ2UuZU5TX1VSSSkgOiBTeXNtbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsIHRoZU1vZGVsZWxlbWVudHNQYWNrYWdlID0gKE1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsZWxlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UKKwkJCQkuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbGVsZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlCbG9ja3NQYWNrYWdlSW1wbCB0aGVCbG9ja3NQYWNrYWdlID0gKEJsb2Nrc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEJsb2Nrc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSA6IEJsb2Nrc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQ29uc3RyYWludHNQYWNrYWdlSW1wbCB0aGVDb25zdHJhaW50c1BhY2thZ2UgPSAoQ29uc3RyYWludHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbnN0cmFpbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IENvbnN0cmFpbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBY3Rpdml0aWVzUGFja2FnZUltcGwgdGhlQWN0aXZpdGllc1BhY2thZ2UgPSAoQWN0aXZpdGllc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWN0aXZpdGllc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBBY3Rpdml0aWVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWN0aXZpdGllc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCB0aGVBbGxvY2F0aW9uc1BhY2thZ2UgPSAoQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFsbG9jYXRpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBbGxvY2F0aW9uc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IEFsbG9jYXRpb25zUGFja2FnZS5lSU5TVEFOQ0UpOworCQlSZXF1aXJlbWVudHNQYWNrYWdlSW1wbCB0aGVSZXF1aXJlbWVudHNQYWNrYWdlID0gKFJlcXVpcmVtZW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVxdWlyZW1lbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFJlcXVpcmVtZW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUmVxdWlyZW1lbnRzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogUmVxdWlyZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCB0aGVJbnRlcmFjdGlvbnNQYWNrYWdlID0gKEludGVyYWN0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEludGVyYWN0aW9uc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogSW50ZXJhY3Rpb25zUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwgdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UgPSAoU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhdGVtYWNoaW5lc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSA6IFN0YXRlbWFjaGluZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVVzZWNhc2VzUGFja2FnZUltcGwgdGhlVXNlY2FzZXNQYWNrYWdlID0gKFVzZWNhc2VzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVc2VjYXNlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVXNlY2FzZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBVc2VjYXNlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTeXNtbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVCbG9ja3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb25zdHJhaW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFjdGl2aXRpZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBbGxvY2F0aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUludGVyYWN0aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVCbG9ja3NQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBbGxvY2F0aW9uc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVXNlY2FzZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuZnJlZXplKCk7CisKKworCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSwgdGhlUG9ydGFuZGZsb3dzUGFja2FnZSk7CisJCXJldHVybiB0aGVQb3J0YW5kZmxvd3NQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGZsb3dQb3J0RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGZsb3dQcm9wZXJ0eUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBmbG93U3BlY2lmaWNhdGlvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpdGVtRmxvd0VDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVFbnVtIGZsb3dEaXJlY3Rpb25FRW51bSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUKKwkgKiBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+CisJICogTm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLCBpZiBvbmUgYWxyZWFkeSBleGlzdHMuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBQb3J0YW5kZmxvd3NGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlmbG93UG9ydEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhGTE9XX1BPUlQpOworCQljcmVhdGVFUmVmZXJlbmNlKGZsb3dQb3J0RUNsYXNzLCBGTE9XX1BPUlRfX0JBU0VfUE9SVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZmxvd1BvcnRFQ2xhc3MsIEZMT1dfUE9SVF9fSVNfQVRPTUlDKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmbG93UG9ydEVDbGFzcywgRkxPV19QT1JUX19JU19DT05KVUdBVEVEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmbG93UG9ydEVDbGFzcywgRkxPV19QT1JUX19ESVJFQ1RJT04pOworCQljcmVhdGVFT3BlcmF0aW9uKGZsb3dQb3J0RUNsYXNzLCBGTE9XX1BPUlRfX19HRVRfSUNPTik7CisKKwkJZmxvd1Byb3BlcnR5RUNsYXNzID0gY3JlYXRlRUNsYXNzKEZMT1dfUFJPUEVSVFkpOworCQljcmVhdGVFUmVmZXJlbmNlKGZsb3dQcm9wZXJ0eUVDbGFzcywgRkxPV19QUk9QRVJUWV9fQkFTRV9QUk9QRVJUWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZmxvd1Byb3BlcnR5RUNsYXNzLCBGTE9XX1BST1BFUlRZX19ESVJFQ1RJT04pOworCQljcmVhdGVFT3BlcmF0aW9uKGZsb3dQcm9wZXJ0eUVDbGFzcywgRkxPV19QUk9QRVJUWV9fX0dFVF9JQ09OKTsKKworCQlmbG93U3BlY2lmaWNhdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhGTE9XX1NQRUNJRklDQVRJT04pOworCQljcmVhdGVFUmVmZXJlbmNlKGZsb3dTcGVjaWZpY2F0aW9uRUNsYXNzLCBGTE9XX1NQRUNJRklDQVRJT05fX0JBU0VfSU5URVJGQUNFKTsKKworCQlpdGVtRmxvd0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJVEVNX0ZMT1cpOworCQljcmVhdGVFUmVmZXJlbmNlKGl0ZW1GbG93RUNsYXNzLCBJVEVNX0ZMT1dfX0JBU0VfSU5GT1JNQVRJT05fRkxPVyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaXRlbUZsb3dFQ2xhc3MsIElURU1fRkxPV19fSVRFTV9QUk9QRVJUWSk7CisKKwkJLy8gQ3JlYXRlIGVudW1zCisJCWZsb3dEaXJlY3Rpb25FRW51bSA9IGNyZWF0ZUVFbnVtKEZMT1dfRElSRUNUSU9OKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUVudW0gZ2V0Rmxvd0RpcmVjdGlvbigpIHsKKwkJcmV0dXJuIGZsb3dEaXJlY3Rpb25FRW51bTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEZsb3dQb3J0KCkgeworCQlyZXR1cm4gZmxvd1BvcnRFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0Rmxvd1BvcnRfQmFzZV9Qb3J0KCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIGZsb3dQb3J0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rmxvd1BvcnRfRGlyZWN0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpIGZsb3dQb3J0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU9wZXJhdGlvbiBnZXRGbG93UG9ydF9fR2V0SWNvbigpIHsKKwkJcmV0dXJuIGZsb3dQb3J0RUNsYXNzLmdldEVPcGVyYXRpb25zKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEZsb3dQb3J0X0lzQXRvbWljKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpIGZsb3dQb3J0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rmxvd1BvcnRfSXNDb25qdWdhdGVkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpIGZsb3dQb3J0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRGbG93UHJvcGVydHkoKSB7CisJCXJldHVybiBmbG93UHJvcGVydHlFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0Rmxvd1Byb3BlcnR5X0Jhc2VfUHJvcGVydHkoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgZmxvd1Byb3BlcnR5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rmxvd1Byb3BlcnR5X0RpcmVjdGlvbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKSBmbG93UHJvcGVydHlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFT3BlcmF0aW9uIGdldEZsb3dQcm9wZXJ0eV9fR2V0SWNvbigpIHsKKwkJcmV0dXJuIGZsb3dQcm9wZXJ0eUVDbGFzcy5nZXRFT3BlcmF0aW9ucygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEZsb3dTcGVjaWZpY2F0aW9uKCkgeworCQlyZXR1cm4gZmxvd1NwZWNpZmljYXRpb25FQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0Rmxvd1NwZWNpZmljYXRpb25fQmFzZV9JbnRlcmZhY2UoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgZmxvd1NwZWNpZmljYXRpb25FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEl0ZW1GbG93KCkgeworCQlyZXR1cm4gaXRlbUZsb3dFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SXRlbUZsb3dfQmFzZV9JbmZvcm1hdGlvbkZsb3coKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgaXRlbUZsb3dFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJdGVtRmxvd19JdGVtUHJvcGVydHkoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgaXRlbUZsb3dFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9ydGFuZGZsb3dzRmFjdG9yeSBnZXRQb3J0YW5kZmxvd3NGYWN0b3J5KCkgeworCQlyZXR1cm4gKFBvcnRhbmRmbG93c0ZhY3RvcnkpIGdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgeworCQkJcmV0dXJuOworCQl9CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJVU1MUGFja2FnZSB0aGVVTUxQYWNrYWdlID0gKFVNTFBhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFVNTFBhY2thZ2UuZU5TX1VSSSk7CisJCVR5cGVzUGFja2FnZSB0aGVUeXBlc1BhY2thZ2UgPSAoVHlwZXNQYWNrYWdlKSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMsIGZlYXR1cmVzLCBhbmQgb3BlcmF0aW9uczsgYWRkIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhmbG93UG9ydEVDbGFzcywgRmxvd1BvcnQuY2xhc3MsICJGbG93UG9ydCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Rmxvd1BvcnRfQmFzZV9Qb3J0KCksIHRoZVVNTFBhY2thZ2UuZ2V0UG9ydCgpLCBudWxsLCAiYmFzZV9Qb3J0IiwgbnVsbCwgMSwgMSwgRmxvd1BvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rmxvd1BvcnRfSXNBdG9taWMoKSwgdGhlVHlwZXNQYWNrYWdlLmdldEJvb2xlYW4oKSwgImlzQXRvbWljIiwgImZhbHNlIiwgMSwgMSwgRmxvd1BvcnQuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldEZsb3dQb3J0X0lzQ29uanVnYXRlZCgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0Qm9vbGVhbigpLCAiaXNDb25qdWdhdGVkIiwgbnVsbCwgMCwgMSwgRmxvd1BvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rmxvd1BvcnRfRGlyZWN0aW9uKCksIHRoaXMuZ2V0Rmxvd0RpcmVjdGlvbigpLCAiZGlyZWN0aW9uIiwgImlub3V0IiwgMSwgMSwgRmxvd1BvcnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RU9wZXJhdGlvbihnZXRGbG93UG9ydF9fR2V0SWNvbigpLCB0aGVVTUxQYWNrYWdlLmdldEltYWdlKCksICJnZXRJY29uIiwgMSwgMSwgSVNfVU5JUVVFLCAhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhmbG93UHJvcGVydHlFQ2xhc3MsIEZsb3dQcm9wZXJ0eS5jbGFzcywgIkZsb3dQcm9wZXJ0eSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0Rmxvd1Byb3BlcnR5X0Jhc2VfUHJvcGVydHkoKSwgdGhlVU1MUGFja2FnZS5nZXRQcm9wZXJ0eSgpLCBudWxsLCAiYmFzZV9Qcm9wZXJ0eSIsIG51bGwsIDEsIDEsIEZsb3dQcm9wZXJ0eS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldEZsb3dQcm9wZXJ0eV9EaXJlY3Rpb24oKSwgdGhpcy5nZXRGbG93RGlyZWN0aW9uKCksICJkaXJlY3Rpb24iLCAiaW5vdXQiLCAxLCAxLCBGbG93UHJvcGVydHkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RU9wZXJhdGlvbihnZXRGbG93UHJvcGVydHlfX0dldEljb24oKSwgdGhlVU1MUGFja2FnZS5nZXRJbWFnZSgpLCAiZ2V0SWNvbiIsIDEsIDEsIElTX1VOSVFVRSwgIUlTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MoZmxvd1NwZWNpZmljYXRpb25FQ2xhc3MsIEZsb3dTcGVjaWZpY2F0aW9uLmNsYXNzLCAiRmxvd1NwZWNpZmljYXRpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldEZsb3dTcGVjaWZpY2F0aW9uX0Jhc2VfSW50ZXJmYWNlKCksIHRoZVVNTFBhY2thZ2UuZ2V0SW50ZXJmYWNlKCksIG51bGwsICJiYXNlX0ludGVyZmFjZSIsIG51bGwsIDEsIDEsIEZsb3dTcGVjaWZpY2F0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsCisJCQkJIUlTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKGl0ZW1GbG93RUNsYXNzLCBJdGVtRmxvdy5jbGFzcywgIkl0ZW1GbG93IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRJdGVtRmxvd19CYXNlX0luZm9ybWF0aW9uRmxvdygpLCB0aGVVTUxQYWNrYWdlLmdldEluZm9ybWF0aW9uRmxvdygpLCBudWxsLCAiYmFzZV9JbmZvcm1hdGlvbkZsb3ciLCBudWxsLCAxLCAxLCBJdGVtRmxvdy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLAorCQkJCSFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldEl0ZW1GbG93X0l0ZW1Qcm9wZXJ0eSgpLCB0aGVVTUxQYWNrYWdlLmdldFByb3BlcnR5KCksIG51bGwsICJpdGVtUHJvcGVydHkiLCBudWxsLCAwLCAxLCBJdGVtRmxvdy5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBlbnVtcyBhbmQgYWRkIGVudW0gbGl0ZXJhbHMKKwkJaW5pdEVFbnVtKGZsb3dEaXJlY3Rpb25FRW51bSwgRmxvd0RpcmVjdGlvbi5jbGFzcywgIkZsb3dEaXJlY3Rpb24iKTsKKwkJYWRkRUVudW1MaXRlcmFsKGZsb3dEaXJlY3Rpb25FRW51bSwgRmxvd0RpcmVjdGlvbi5JTik7CisJCWFkZEVFbnVtTGl0ZXJhbChmbG93RGlyZWN0aW9uRUVudW0sIEZsb3dEaXJlY3Rpb24uT1VUKTsKKwkJYWRkRUVudW1MaXRlcmFsKGZsb3dEaXJlY3Rpb25FRW51bSwgRmxvd0RpcmVjdGlvbi5JTk9VVCk7CisJfQorCit9IC8vIFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvdXRpbC9Qb3J0YW5kZmxvd3NBZGFwdGVyRmFjdG9yeS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL3V0aWwvUG9ydGFuZGZsb3dzQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjAyYmUxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL3V0aWwvUG9ydGFuZGZsb3dzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UG9ydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuSXRlbUZsb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcworICogYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcnRhbmRmbG93c0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFBvcnRhbmRmbG93c1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3J0YW5kZmxvd3NTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPSBuZXcgUG9ydGFuZGZsb3dzU3dpdGNoPEFkYXB0ZXI+KCkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlRmxvd1BvcnQoRmxvd1BvcnQgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlRmxvd1BvcnRBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZUZsb3dQcm9wZXJ0eShGbG93UHJvcGVydHkgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlRmxvd1Byb3BlcnR5QWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VGbG93U3BlY2lmaWNhdGlvbihGbG93U3BlY2lmaWNhdGlvbiBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVGbG93U3BlY2lmaWNhdGlvbkFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlSXRlbUZsb3coSXRlbUZsb3cgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlSXRlbUZsb3dBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQl9CisJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3J0YW5kZmxvd3NBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBQb3J0YW5kZmxvd3NQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB0YXJnZXQKKwkgKiAgICAgICAgICAgIHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCkgdGFyZ2V0KTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQKKwkgKiA8ZW0+RmxvdyBQb3J0PC9lbT59Jy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisJICogcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhCisJICogY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dQb3J0CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUZsb3dQb3J0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHkgPGVtPkZsb3cgUHJvcGVydHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdAorCSAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzCisJICogdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93UHJvcGVydHkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRmxvd1Byb3BlcnR5QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5GbG93U3BlY2lmaWNhdGlvbiA8ZW0+RmxvdyBTcGVjaWZpY2F0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1NwZWNpZmljYXRpb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRmxvd1NwZWNpZmljYXRpb25BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5JdGVtRmxvdworCSAqIDxlbT5JdGVtIEZsb3c8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKwkgKiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEKKwkgKiBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuSXRlbUZsb3cKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSXRlbUZsb3dBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmCisJICogdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlCisJICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KSBvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKK30gLy8gUG9ydGFuZGZsb3dzQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy91dGlsL1BvcnRhbmRmbG93c1Jlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy91dGlsL1BvcnRhbmRmbG93c1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDU1NTBjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL3V0aWwvUG9ydGFuZGZsb3dzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZQorICogcGFja2FnZS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy51dGlsLlBvcnRhbmRmbG93c1Jlc291cmNlSW1wbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9ydGFuZGZsb3dzUmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFJlc291cmNlRmFjdG9yeUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3J0YW5kZmxvd3NSZXNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKKwkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFBvcnRhbmRmbG93c1Jlc291cmNlSW1wbCh1cmkpOworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIEJvb2xlYW4uVFJVRSk7CisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgQm9vbGVhbi5UUlVFKTsKKworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKK30gLy8gUG9ydGFuZGZsb3dzUmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL3V0aWwvUG9ydGFuZGZsb3dzUmVzb3VyY2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvdXRpbC9Qb3J0YW5kZmxvd3NSZXNvdXJjZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjBkNTkxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL3V0aWwvUG9ydGFuZGZsb3dzUmVzb3VyY2VJbXBsLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MudXRpbC5Qb3J0YW5kZmxvd3NSZXNvdXJjZUZhY3RvcnlJbXBsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3J0YW5kZmxvd3NSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcnRhbmRmbG93c1Jlc291cmNlSW1wbChVUkkgdXJpKSB7CisJCXN1cGVyKHVyaSk7CisJfQorCit9IC8vIFBvcnRhbmRmbG93c1Jlc291cmNlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL3V0aWwvUG9ydGFuZGZsb3dzU3dpdGNoLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvdXRpbC9Qb3J0YW5kZmxvd3NTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzIwZjkzCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcG9ydGFuZGZsb3dzL3V0aWwvUG9ydGFuZGZsb3dzU3dpdGNoLmphdmEKQEAgLTAsMCArMSwyMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5Td2l0Y2g7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1BvcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuRmxvd1Byb3BlcnR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkZsb3dTcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLkl0ZW1GbG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlCisgKiBoaWVyYXJjaHkuIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0gdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QgYW5kIHByb2NlZWRpbmcgdXAgdGhlCisgKiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZQorICogcmVzdWx0IG9mIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuUG9ydGFuZGZsb3dzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9ydGFuZGZsb3dzU3dpdGNoPFQ+IGV4dGVuZHMgU3dpdGNoPFQ+IHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgUG9ydGFuZGZsb3dzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9ydGFuZGZsb3dzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFBvcnRhbmRmbG93c1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2tzIHdoZXRoZXIgdGhpcyBpcyBhIHN3aXRjaCBmb3IgdGhlIGdpdmVuIHBhY2thZ2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW1ldGVyIGVQYWNrYWdlIHRoZSBwYWNrYWdlIGluIHF1ZXN0aW9uLgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGlzIGEgc3dpdGNoIGZvciB0aGUgZ2l2ZW4gcGFja2FnZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNTd2l0Y2hGb3IoRVBhY2thZ2UgZVBhY2thZ2UpIHsKKwkJcmV0dXJuIGVQYWNrYWdlID09IG1vZGVsUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GbG93IFBvcnQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisJICogbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmxvdyBQb3J0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlRmxvd1BvcnQoRmxvd1BvcnQgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkZsb3cgUHJvcGVydHk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbgorCSAqIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmxvdyBQcm9wZXJ0eTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZUZsb3dQcm9wZXJ0eShGbG93UHJvcGVydHkgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkZsb3cgU3BlY2lmaWNhdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uCisJICogcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GbG93IFNwZWNpZmljYXRpb248L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VGbG93U3BlY2lmaWNhdGlvbihGbG93U3BlY2lmaWNhdGlvbiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SXRlbSBGbG93PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkl0ZW0gRmxvdzwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZUl0ZW1GbG93KEl0ZW1GbG93IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcworCSAqIHRoZSBsYXN0IGNhc2UgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgVCBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BPUlQ6IHsKKwkJCUZsb3dQb3J0IGZsb3dQb3J0ID0gKEZsb3dQb3J0KSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlRmxvd1BvcnQoZmxvd1BvcnQpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1BST1BFUlRZOiB7CisJCQlGbG93UHJvcGVydHkgZmxvd1Byb3BlcnR5ID0gKEZsb3dQcm9wZXJ0eSkgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZUZsb3dQcm9wZXJ0eShmbG93UHJvcGVydHkpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5GTE9XX1NQRUNJRklDQVRJT046IHsKKwkJCUZsb3dTcGVjaWZpY2F0aW9uIGZsb3dTcGVjaWZpY2F0aW9uID0gKEZsb3dTcGVjaWZpY2F0aW9uKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlRmxvd1NwZWNpZmljYXRpb24oZmxvd1NwZWNpZmljYXRpb24pOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgUG9ydGFuZGZsb3dzUGFja2FnZS5JVEVNX0ZMT1c6IHsKKwkJCUl0ZW1GbG93IGl0ZW1GbG93ID0gKEl0ZW1GbG93KSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlSXRlbUZsb3coaXRlbUZsb3cpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKK30gLy8gUG9ydGFuZGZsb3dzU3dpdGNoCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvdXRpbC9Qb3J0YW5kZmxvd3NYTUxQcm9jZXNzb3IuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3BvcnRhbmRmbG93cy91dGlsL1BvcnRhbmRmbG93c1hNTFByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDFmMWYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9wb3J0YW5kZmxvd3MvdXRpbC9Qb3J0YW5kZmxvd3NYTUxQcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLnV0aWwuWE1MUHJvY2Vzc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXIgbWV0aG9kcyB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIFhNTCBkb2N1bWVudHMKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcnRhbmRmbG93c1hNTFByb2Nlc3NvciBleHRlbmRzIFhNTFByb2Nlc3NvciB7CisKKwkvKioKKwkgKiBQdWJsaWMgY29uc3RydWN0b3IgdG8gaW5zdGFudGlhdGUgdGhlIGhlbHBlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3J0YW5kZmxvd3NYTUxQcm9jZXNzb3IoKSB7CisJCXN1cGVyKChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRSkpOworCQlQb3J0YW5kZmxvd3NQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwl9CisKKwkvKioKKwkgKiBSZWdpc3RlciBmb3IgIioiIGFuZCAieG1sIiBmaWxlIGV4dGVuc2lvbnMgdGhlIFBvcnRhbmRmbG93c1Jlc291cmNlRmFjdG9yeUltcGwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBSZXNvdXJjZS5GYWN0b3J5PiBnZXRSZWdpc3RyYXRpb25zKCkgeworCQlpZiAocmVnaXN0cmF0aW9ucyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRSZWdpc3RyYXRpb25zKCk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChYTUxfRVhURU5TSU9OLCBuZXcgUG9ydGFuZGZsb3dzUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJCXJlZ2lzdHJhdGlvbnMucHV0KFNUQVJfRVhURU5TSU9OLCBuZXcgUG9ydGFuZGZsb3dzUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJfQorCQlyZXR1cm4gcmVnaXN0cmF0aW9uczsKKwl9CisKK30gLy8gUG9ydGFuZGZsb3dzWE1MUHJvY2Vzc29yCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvQ29weS5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL0NvcHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2IzZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL0NvcHkuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkNvcHk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2dldENvcHkoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29weSBleHRlbmRzIG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQuVHJhY2UgeworfSAvLyBDb3B5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvRGVyaXZlUmVxdC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL0Rlcml2ZVJlcXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGZiNzkxCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL0Rlcml2ZVJlcXQuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkRlcml2ZSBSZXF0PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXREZXJpdmVSZXF0KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIERlcml2ZVJlcXQgZXh0ZW5kcyBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlRyYWNlIHsKK30gLy8gRGVyaXZlUmVxdApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODI3ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50LmphdmEKQEAgLTAsMCArMSwzNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnQ7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlJlcXVpcmVtZW50PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldFRleHQgPGVtPlRleHQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRJZCA8ZW0+SWQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXREZXJpdmVkIDxlbT5EZXJpdmVkPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0RGVyaXZlZEZyb20gPGVtPkRlcml2ZWQgRnJvbTwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldFNhdGlzZmllZEJ5IDxlbT5TYXRpc2ZpZWQgQnk8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRSZWZpbmVkQnkgPGVtPlJlZmluZWQgQnk8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRUcmFjZWRUbyA8ZW0+VHJhY2VkIFRvPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0VmVyaWZpZWRCeSA8ZW0+VmVyaWZpZWQgQnk8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRNYXN0ZXIgPGVtPk1hc3RlcjwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldEJhc2VfQ2xhc3MgPGVtPkJhc2UgQ2xhc3M8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0UmVxdWlyZW1lbnQoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVxdWlyZW1lbnQgZXh0ZW5kcyBFT2JqZWN0IHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgQ2xhc3M8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgQ2xhc3M8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBDbGFzczwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZV9DbGFzcyhvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0UmVxdWlyZW1lbnRfQmFzZV9DbGFzcygpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgZ2V0QmFzZV9DbGFzcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVyaXZlZDwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuIFRoZQorCSAqIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50fS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlcml2ZWQ8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZXJpdmVkPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRSZXF1aXJlbWVudF9EZXJpdmVkKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCisJICogICAgICAgIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxSZXF1aXJlbWVudD4gZ2V0RGVyaXZlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVyaXZlZCBGcm9tPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnR9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVyaXZlZCBGcm9tPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVyaXZlZCBGcm9tPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRSZXF1aXJlbWVudF9EZXJpdmVkRnJvbSgpCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgorCSAqICAgICAgICBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8UmVxdWlyZW1lbnQ+IGdldERlcml2ZWRGcm9tKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElkKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0UmVxdWlyZW1lbnRfSWQoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIiByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRJZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWFzdGVyPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NYXN0ZXI8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWFzdGVyPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0UmVxdWlyZW1lbnRfTWFzdGVyKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCisJICogICAgICAgIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZXF1aXJlbWVudCBnZXRNYXN0ZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJlZmluZWQgQnk8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LiBUaGUKKwkgKiBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVmaW5lZCBCeTwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZmluZWQgQnk8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2dldFJlcXVpcmVtZW50X1JlZmluZWRCeSgpCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgorCSAqICAgICAgICBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8TmFtZWRFbGVtZW50PiBnZXRSZWZpbmVkQnkoKTsKKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgZnJvbSB0aGUgJzxlbT48Yj5SZWZpbmVkIEJ5PC9iPjwvZW0+JworCSAqIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcmV0dXJuIFRoZSBmaXJzdCB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jywgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHNlZSAjZ2V0UmVmaW5lZEJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTmFtZWRFbGVtZW50IGdldFJlZmluZWRCeShTdHJpbmcgbmFtZSk7CisKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGZyb20gdGhlICc8ZW0+PGI+UmVmaW5lZCBCeTwvYj48L2VtPicKKwkgKiByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIFRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHBhcmFtIGlnbm9yZUNhc2UKKwkgKiAgICAgICAgICAgIFdoZXRoZXIgdG8gaWdub3JlIGNhc2UgaW4ge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9IGNvbXBhcmlzb25zLgorCSAqIEBwYXJhbSBlQ2xhc3MKKwkgKiAgICAgICAgICAgIFRoZSBFY29yZSBjbGFzcyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gdG8gcmV0cmlldmUsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEByZXR1cm4gVGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAc2VlICNnZXRSZWZpbmVkQnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlOYW1lZEVsZW1lbnQgZ2V0UmVmaW5lZEJ5KFN0cmluZyBuYW1lLCBib29sZWFuIGlnbm9yZUNhc2UsIEVDbGFzcyBlQ2xhc3MpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2F0aXNmaWVkIEJ5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNhdGlzZmllZCBCeTwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNhdGlzZmllZCBCeTwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0UmVxdWlyZW1lbnRfU2F0aXNmaWVkQnkoKQorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PE5hbWVkRWxlbWVudD4gZ2V0U2F0aXNmaWVkQnkoKTsKKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgZnJvbSB0aGUgJzxlbT48Yj5TYXRpc2ZpZWQgQnk8L2I+PC9lbT4nCisJICogcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBUaGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gdG8gcmV0cmlldmUsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEByZXR1cm4gVGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAc2VlICNnZXRTYXRpc2ZpZWRCeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCU5hbWVkRWxlbWVudCBnZXRTYXRpc2ZpZWRCeShTdHJpbmcgbmFtZSk7CisKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGZyb20gdGhlICc8ZW0+PGI+U2F0aXNmaWVkIEJ5PC9iPjwvZW0+JworCSAqIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcGFyYW0gaWdub3JlQ2FzZQorCSAqICAgICAgICAgICAgV2hldGhlciB0byBpZ25vcmUgY2FzZSBpbiB7QGxpbmsgamF2YS5sYW5nLlN0cmluZ30gY29tcGFyaXNvbnMuCisJICogQHBhcmFtIGVDbGFzcworCSAqICAgICAgICAgICAgVGhlIEVjb3JlIGNsYXNzIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHJldHVybiBUaGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEBzZWUgI2dldFNhdGlzZmllZEJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTmFtZWRFbGVtZW50IGdldFNhdGlzZmllZEJ5KFN0cmluZyBuYW1lLCBib29sZWFuIGlnbm9yZUNhc2UsIEVDbGFzcyBlQ2xhc3MpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGV4dDwvYj48L2VtPicgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGV4dDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UZXh0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUZXh0KFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0UmVxdWlyZW1lbnRfVGV4dCgpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFRleHQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRyYWNlZCBUbzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuIFRoZQorCSAqIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UcmFjZWQgVG88L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFjZWQgVG88L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2dldFJlcXVpcmVtZW50X1RyYWNlZFRvKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCisJICogICAgICAgIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxOYW1lZEVsZW1lbnQ+IGdldFRyYWNlZFRvKCk7CisKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGZyb20gdGhlICc8ZW0+PGI+VHJhY2VkIFRvPC9iPjwvZW0+JworCSAqIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcmV0dXJuIFRoZSBmaXJzdCB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jywgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHNlZSAjZ2V0VHJhY2VkVG8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlOYW1lZEVsZW1lbnQgZ2V0VHJhY2VkVG8oU3RyaW5nIG5hbWUpOworCisJLyoqCisJICogUmV0cmlldmVzIHRoZSBmaXJzdCB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBmcm9tIHRoZSAnPGVtPjxiPlRyYWNlZCBUbzwvYj48L2VtPicKKwkgKiByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIFRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHBhcmFtIGlnbm9yZUNhc2UKKwkgKiAgICAgICAgICAgIFdoZXRoZXIgdG8gaWdub3JlIGNhc2UgaW4ge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9IGNvbXBhcmlzb25zLgorCSAqIEBwYXJhbSBlQ2xhc3MKKwkgKiAgICAgICAgICAgIFRoZSBFY29yZSBjbGFzcyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gdG8gcmV0cmlldmUsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEByZXR1cm4gVGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAc2VlICNnZXRUcmFjZWRUbygpCisJICogQGdlbmVyYXRlZAorCSAqLworCU5hbWVkRWxlbWVudCBnZXRUcmFjZWRUbyhTdHJpbmcgbmFtZSwgYm9vbGVhbiBpZ25vcmVDYXNlLCBFQ2xhc3MgZUNsYXNzKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlcmlmaWVkIEJ5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlcmlmaWVkIEJ5PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVyaWZpZWQgQnk8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2dldFJlcXVpcmVtZW50X1ZlcmlmaWVkQnkoKQorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PE5hbWVkRWxlbWVudD4gZ2V0VmVyaWZpZWRCeSgpOworCisJLyoqCisJICogUmV0cmlldmVzIHRoZSBmaXJzdCB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBmcm9tIHRoZSAnPGVtPjxiPlZlcmlmaWVkIEJ5PC9iPjwvZW0+JworCSAqIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgVGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHRvIHJldHJpZXZlLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAcmV0dXJuIFRoZSBmaXJzdCB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB3aXRoIHRoZSBzcGVjaWZpZWQgJzxlbT48Yj5OYW1lPC9iPjwvZW0+Jywgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHNlZSAjZ2V0VmVyaWZpZWRCeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCU5hbWVkRWxlbWVudCBnZXRWZXJpZmllZEJ5KFN0cmluZyBuYW1lKTsKKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgZmlyc3Qge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gd2l0aCB0aGUgc3BlY2lmaWVkICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgZnJvbSB0aGUgJzxlbT48Yj5WZXJpZmllZCBCeTwvYj48L2VtPicKKwkgKiByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIFRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50fSB0byByZXRyaWV2ZSwgb3IgPGNvZGU+bnVsbDwvY29kZT4uCisJICogQHBhcmFtIGlnbm9yZUNhc2UKKwkgKiAgICAgICAgICAgIFdoZXRoZXIgdG8gaWdub3JlIGNhc2UgaW4ge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9IGNvbXBhcmlzb25zLgorCSAqIEBwYXJhbSBlQ2xhc3MKKwkgKiAgICAgICAgICAgIFRoZSBFY29yZSBjbGFzcyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudH0gdG8gcmV0cmlldmUsIG9yIDxjb2RlPm51bGw8L2NvZGU+LgorCSAqIEByZXR1cm4gVGhlIGZpcnN0IHtAbGluayBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnR9IHdpdGggdGhlIHNwZWNpZmllZCAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nLCBvciA8Y29kZT5udWxsPC9jb2RlPi4KKwkgKiBAc2VlICNnZXRWZXJpZmllZEJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTmFtZWRFbGVtZW50IGdldFZlcmlmaWVkQnkoU3RyaW5nIG5hbWUsIGJvb2xlYW4gaWdub3JlQ2FzZSwgRUNsYXNzIGVDbGFzcyk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRCYXNlX0NsYXNzIDxlbT5CYXNlIENsYXNzPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIENsYXNzPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0NsYXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0NsYXNzKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldElkIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SWQoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldFRleHQgPGVtPlRleHQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UZXh0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUZXh0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUZXh0KFN0cmluZyB2YWx1ZSk7CisKK30gLy8gUmVxdWlyZW1lbnQKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudFJlbGF0ZWQuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudFJlbGF0ZWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI0NDZlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50UmVsYXRlZC5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+UmVxdWlyZW1lbnQgUmVsYXRlZDwvYj48L2VtPiAnLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkI2dldEJhc2VfTmFtZWRFbGVtZW50IDxlbT5CYXNlIE5hbWVkIEVsZW1lbnQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQjZ2V0VHJhY2VkRnJvbSA8ZW0+VHJhY2VkIEZyb208L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQjZ2V0U2F0aXNmaWVzIDxlbT5TYXRpc2ZpZXM8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQjZ2V0UmVmaW5lcyA8ZW0+UmVmaW5lczwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZCNnZXRWZXJpZmllcyA8ZW0+VmVyaWZpZXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0UmVxdWlyZW1lbnRSZWxhdGVkKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlcXVpcmVtZW50UmVsYXRlZCBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBOYW1lZCBFbGVtZW50PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5CYXNlIE5hbWVkIEVsZW1lbnQ8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBOYW1lZCBFbGVtZW50PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX05hbWVkRWxlbWVudChOYW1lZEVsZW1lbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2dldFJlcXVpcmVtZW50UmVsYXRlZF9CYXNlX05hbWVkRWxlbWVudCgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIiBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTmFtZWRFbGVtZW50IGdldEJhc2VfTmFtZWRFbGVtZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWZpbmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4gVGhlCisJICogbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnR9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVmaW5lczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJlZmluZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2dldFJlcXVpcmVtZW50UmVsYXRlZF9SZWZpbmVzKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCisJICogICAgICAgIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxSZXF1aXJlbWVudD4gZ2V0UmVmaW5lcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2F0aXNmaWVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4gVGhlCisJICogbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnR9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2F0aXNmaWVzPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2F0aXNmaWVzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRSZXF1aXJlbWVudFJlbGF0ZWRfU2F0aXNmaWVzKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCisJICogICAgICAgIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxSZXF1aXJlbWVudD4gZ2V0U2F0aXNmaWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UcmFjZWQgRnJvbTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50fS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRyYWNlZCBGcm9tPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHJhY2VkIEZyb208L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2dldFJlcXVpcmVtZW50UmVsYXRlZF9UcmFjZWRGcm9tKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIGRlcml2ZWQ9InRydWUiCisJICogICAgICAgIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxSZXF1aXJlbWVudD4gZ2V0VHJhY2VkRnJvbSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVyaWZpZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LiBUaGUKKwkgKiBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudH0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZXJpZmllczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlcmlmaWVzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRSZXF1aXJlbWVudFJlbGF0ZWRfVmVyaWZpZXMoKQorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgZGVyaXZlZD0idHJ1ZSIKKwkgKiAgICAgICAgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PFJlcXVpcmVtZW50PiBnZXRWZXJpZmllcygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkI2dldEJhc2VfTmFtZWRFbGVtZW50IDxlbT5CYXNlIE5hbWVkIEVsZW1lbnQ8L2VtPn0nCisJICogcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBOYW1lZCBFbGVtZW50PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX05hbWVkRWxlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QmFzZV9OYW1lZEVsZW1lbnQoTmFtZWRFbGVtZW50IHZhbHVlKTsKKworfSAvLyBSZXF1aXJlbWVudFJlbGF0ZWQKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHNGYWN0b3J5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTczYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcyBhCisgKiBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlcXVpcmVtZW50c0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUmVxdWlyZW1lbnRzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29weTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db3B5PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb3B5IGNyZWF0ZUNvcHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVyaXZlIFJlcXQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVyaXZlIFJlcXQ8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURlcml2ZVJlcXQgY3JlYXRlRGVyaXZlUmVxdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZXF1aXJlbWVudDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZXF1aXJlbWVudDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUmVxdWlyZW1lbnQgY3JlYXRlUmVxdWlyZW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVxdWlyZW1lbnQgUmVsYXRlZDwvZW0+Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVxdWlyZW1lbnQgUmVsYXRlZDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUmVxdWlyZW1lbnRSZWxhdGVkIGNyZWF0ZVJlcXVpcmVtZW50UmVsYXRlZCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TYXRpc2Z5PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNhdGlzZnk8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNhdGlzZnkgY3JlYXRlU2F0aXNmeSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IENhc2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBDYXNlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0Q2FzZSBjcmVhdGVUZXN0Q2FzZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5WZXJpZnk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VmVyaWZ5PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlWZXJpZnkgY3JlYXRlVmVyaWZ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUmVxdWlyZW1lbnRzUGFja2FnZSBnZXRSZXF1aXJlbWVudHNQYWNrYWdlKCk7CisKK30gLy8gUmVxdWlyZW1lbnRzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50c1BhY2thZ2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjMjBjZgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw5OTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgY29udGFpbnMKKyAqIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVxdWlyZW1lbnRzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdAorCSAqIHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLkRlcml2ZVJlcXRJbXBsIDxlbT5EZXJpdmUgUmVxdDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuRGVyaXZlUmVxdEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsI2dldERlcml2ZVJlcXQoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVSSVZFX1JFUVQgPSBlSU5TVEFOQ0UuZ2V0RGVyaXZlUmVxdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuVmVyaWZ5SW1wbAorCQkgKiA8ZW0+VmVyaWZ5PC9lbT59JyBjbGFzcy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkJICogLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5WZXJpZnlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbCNnZXRWZXJpZnkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVkVSSUZZID0gZUlOU1RBTkNFLmdldFZlcmlmeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5Db3B5SW1wbCA8ZW0+Q29weTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuQ29weUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsI2dldENvcHkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgQ09QWSA9IGVJTlNUQU5DRS5nZXRDb3B5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5TYXRpc2Z5SW1wbAorCQkgKiA8ZW0+U2F0aXNmeTwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuU2F0aXNmeUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsI2dldFNhdGlzZnkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0FUSVNGWSA9IGVJTlNUQU5DRS5nZXRTYXRpc2Z5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5UZXN0Q2FzZUltcGwKKwkJICogPGVtPlRlc3QgQ2FzZTwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJCSAqIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuVGVzdENhc2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbCNnZXRUZXN0Q2FzZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUX0NBU0UgPSBlSU5TVEFOQ0UuZ2V0VGVzdENhc2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQmVoYXZpb3I8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBURVNUX0NBU0VfX0JBU0VfQkVIQVZJT1IgPSBlSU5TVEFOQ0UuZ2V0VGVzdENhc2VfQmFzZV9CZWhhdmlvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBPcGVyYXRpb248L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBURVNUX0NBU0VfX0JBU0VfT1BFUkFUSU9OID0gZUlOU1RBTkNFLmdldFRlc3RDYXNlX0Jhc2VfT3BlcmF0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WZXJpZmllczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVEVTVF9DQVNFX19WRVJJRklFUyA9IGVJTlNUQU5DRS5nZXRUZXN0Q2FzZV9WZXJpZmllcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudEltcGwgPGVtPlJlcXVpcmVtZW50PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCQkgKiBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsI2dldFJlcXVpcmVtZW50KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJFUVVJUkVNRU5UID0gZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUkVRVUlSRU1FTlRfX1RFWFQgPSBlSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRfVGV4dCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBSRVFVSVJFTUVOVF9fSUQgPSBlSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRfSWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlcml2ZWQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFJFUVVJUkVNRU5UX19ERVJJVkVEID0gZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50X0Rlcml2ZWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlcml2ZWQgRnJvbTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUkVRVUlSRU1FTlRfX0RFUklWRURfRlJPTSA9IGVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudF9EZXJpdmVkRnJvbSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2F0aXNmaWVkIEJ5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSRVFVSVJFTUVOVF9fU0FUSVNGSUVEX0JZID0gZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50X1NhdGlzZmllZEJ5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZWZpbmVkIEJ5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSRVFVSVJFTUVOVF9fUkVGSU5FRF9CWSA9IGVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudF9SZWZpbmVkQnkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYWNlZCBUbzwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUkVRVUlSRU1FTlRfX1RSQUNFRF9UTyA9IGVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudF9UcmFjZWRUbygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVyaWZpZWQgQnk8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFJFUVVJUkVNRU5UX19WRVJJRklFRF9CWSA9IGVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudF9WZXJpZmllZEJ5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NYXN0ZXI8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSRVFVSVJFTUVOVF9fTUFTVEVSID0gZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50X01hc3RlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBDbGFzczwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFJFUVVJUkVNRU5UX19CQVNFX0NMQVNTID0gZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50X0Jhc2VfQ2xhc3MoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRSZWxhdGVkSW1wbAorCQkgKiA8ZW0+UmVxdWlyZW1lbnQgUmVsYXRlZDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkJICogZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRSZWxhdGVkSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGwjZ2V0UmVxdWlyZW1lbnRSZWxhdGVkKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJFUVVJUkVNRU5UX1JFTEFURUQgPSBlSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRSZWxhdGVkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIE5hbWVkIEVsZW1lbnQ8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSRVFVSVJFTUVOVF9SRUxBVEVEX19CQVNFX05BTUVEX0VMRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRSZWxhdGVkX0Jhc2VfTmFtZWRFbGVtZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFjZWQgRnJvbTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUkVRVUlSRU1FTlRfUkVMQVRFRF9fVFJBQ0VEX0ZST00gPSBlSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRSZWxhdGVkX1RyYWNlZEZyb20oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNhdGlzZmllczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUkVRVUlSRU1FTlRfUkVMQVRFRF9fU0FUSVNGSUVTID0gZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50UmVsYXRlZF9TYXRpc2ZpZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlZmluZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFJFUVVJUkVNRU5UX1JFTEFURURfX1JFRklORVMgPSBlSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRSZWxhdGVkX1JlZmluZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlcmlmaWVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSRVFVSVJFTUVOVF9SRUxBVEVEX19WRVJJRklFUyA9IGVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudFJlbGF0ZWRfVmVyaWZpZXMoKTsKKworCX0KKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gInJlcXVpcmVtZW50cyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy8wLjcuMC9TeXNNTC9SZXF1aXJlbWVudHMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAiUmVxdWlyZW1lbnRzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZXF1aXJlbWVudHNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5EZXJpdmVSZXF0SW1wbAorCSAqIDxlbT5EZXJpdmUgUmVxdDwvZW0+fScgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuRGVyaXZlUmVxdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGwjZ2V0RGVyaXZlUmVxdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBERVJJVkVfUkVRVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBBYnN0cmFjdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFUklWRV9SRVFUX19CQVNFX0FCU1RSQUNUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlRSQUNFX19CQVNFX0FCU1RSQUNUSU9OOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRlcml2ZSBSZXF0PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFUklWRV9SRVFUX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuVFJBQ0VfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+RGVyaXZlIFJlcXQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVJJVkVfUkVRVF9PUEVSQVRJT05fQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuVFJBQ0VfT1BFUkFUSU9OX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5WZXJpZnlJbXBsIDxlbT5WZXJpZnk8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlZlcmlmeUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGwjZ2V0VmVyaWZ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFZFUklGWSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmFzZSBBYnN0cmFjdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFUklGWV9fQkFTRV9BQlNUUkFDVElPTiA9IFN0YW5kYXJkUGFja2FnZS5UUkFDRV9fQkFTRV9BQlNUUkFDVElPTjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5WZXJpZnk8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVSSUZZX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuVFJBQ0VfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+VmVyaWZ5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVSSUZZX09QRVJBVElPTl9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5UUkFDRV9PUEVSQVRJT05fQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLkNvcHlJbXBsIDxlbT5Db3B5PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5Db3B5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbCNnZXRDb3B5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENPUFkgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQWJzdHJhY3Rpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT1BZX19CQVNFX0FCU1RSQUNUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlRSQUNFX19CQVNFX0FCU1RSQUNUSU9OOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvcHk8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09QWV9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlRSQUNFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPkNvcHk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT1BZX09QRVJBVElPTl9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5UUkFDRV9PUEVSQVRJT05fQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlNhdGlzZnlJbXBsIDxlbT5TYXRpc2Z5PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5TYXRpc2Z5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbCNnZXRTYXRpc2Z5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNBVElTRlkgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgQWJzdHJhY3Rpb248L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTQVRJU0ZZX19CQVNFX0FCU1RSQUNUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlRSQUNFX19CQVNFX0FCU1RSQUNUSU9OOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNhdGlzZnk8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0FUSVNGWV9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlRSQUNFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPlNhdGlzZnk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTQVRJU0ZZX09QRVJBVElPTl9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5UUkFDRV9PUEVSQVRJT05fQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlRlc3RDYXNlSW1wbCA8ZW0+VGVzdCBDYXNlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5UZXN0Q2FzZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGwjZ2V0VGVzdENhc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9DQVNFID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIEJlaGF2aW9yPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9DQVNFX19CQVNFX0JFSEFWSU9SID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIE9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfQ0FTRV9fQkFTRV9PUEVSQVRJT04gPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlcmlmaWVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0NBU0VfX1ZFUklGSUVTID0gMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IENhc2U8L2VtPicgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9DQVNFX0ZFQVRVUkVfQ09VTlQgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBvcGVyYXRpb25zIG9mIHRoZSAnPGVtPlRlc3QgQ2FzZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfQ0FTRV9PUEVSQVRJT05fQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudEltcGwKKwkgKiA8ZW0+UmVxdWlyZW1lbnQ8L2VtPn0nIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudHNQYWNrYWdlSW1wbCNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSRVFVSVJFTUVOVCA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGV4dDwvYj48L2VtPicgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX19URVhUID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZDwvYj48L2VtPicgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX19JRCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVyaXZlZDwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVRVUlSRU1FTlRfX0RFUklWRUQgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlcml2ZWQgRnJvbTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVRVUlSRU1FTlRfX0RFUklWRURfRlJPTSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2F0aXNmaWVkIEJ5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRVFVSVJFTUVOVF9fU0FUSVNGSUVEX0JZID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZpbmVkIEJ5PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRVFVSVJFTUVOVF9fUkVGSU5FRF9CWSA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhY2VkIFRvPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRVFVSVJFTUVOVF9fVFJBQ0VEX1RPID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZXJpZmllZCBCeTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVRVUlSRU1FTlRfX1ZFUklGSUVEX0JZID0gNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NYXN0ZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRVFVSVJFTUVOVF9fTUFTVEVSID0gODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIENsYXNzPC9iPjwvZW0+JyByZWZlcmVuY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVRVUlSRU1FTlRfX0JBU0VfQ0xBU1MgPSA5OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJlcXVpcmVtZW50PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX0ZFQVRVUkVfQ09VTlQgPSAxMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBvZiB0aGUgJzxlbT5SZXF1aXJlbWVudDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX09QRVJBVElPTl9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRSZWxhdGVkSW1wbCA8ZW0+UmVxdWlyZW1lbnQgUmVsYXRlZDwvZW0+fScKKwkgKiBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50UmVsYXRlZEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRzUGFja2FnZUltcGwjZ2V0UmVxdWlyZW1lbnRSZWxhdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX1JFTEFURUQgPSA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJhc2UgTmFtZWQgRWxlbWVudDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX1JFTEFURURfX0JBU0VfTkFNRURfRUxFTUVOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhY2VkIEZyb208L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX1JFTEFURURfX1RSQUNFRF9GUk9NID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TYXRpc2ZpZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX1JFTEFURURfX1NBVElTRklFUyA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmaW5lczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVRVUlSRU1FTlRfUkVMQVRFRF9fUkVGSU5FUyA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVyaWZpZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX1JFTEFURURfX1ZFUklGSUVTID0gNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SZXF1aXJlbWVudCBSZWxhdGVkPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX1JFTEFURURfRkVBVFVSRV9DT1VOVCA9IDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgb2YgdGhlICc8ZW0+UmVxdWlyZW1lbnQgUmVsYXRlZDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFUVVJUkVNRU5UX1JFTEFURURfT1BFUkFUSU9OX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5Db3B5IDxlbT5Db3B5PC9lbT59Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvcHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5Db3B5CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRDb3B5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5EZXJpdmVSZXF0IDxlbT5EZXJpdmUgUmVxdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZXJpdmUgUmVxdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLkRlcml2ZVJlcXQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERlcml2ZVJlcXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50IDxlbT5SZXF1aXJlbWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SZXF1aXJlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSZXF1aXJlbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRCYXNlX0NsYXNzIDxlbT5CYXNlIENsYXNzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBDbGFzczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldEJhc2VfQ2xhc3MoKQorCSAqIEBzZWUgI2dldFJlcXVpcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRSZXF1aXJlbWVudF9CYXNlX0NsYXNzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0RGVyaXZlZCA8ZW0+RGVyaXZlZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+RGVyaXZlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldERlcml2ZWQoKQorCSAqIEBzZWUgI2dldFJlcXVpcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRSZXF1aXJlbWVudF9EZXJpdmVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0RGVyaXZlZEZyb20gPGVtPkRlcml2ZWQgRnJvbTwvZW0+fSAnLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkRlcml2ZWQgRnJvbTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldERlcml2ZWRGcm9tKCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfRGVyaXZlZEZyb20oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0SWQgPGVtPklkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRJZCgpCisJICogQHNlZSAjZ2V0UmVxdWlyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFJlcXVpcmVtZW50X0lkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldE1hc3RlciA8ZW0+TWFzdGVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+TWFzdGVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0TWFzdGVyKCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfTWFzdGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0UmVmaW5lZEJ5IDxlbT5SZWZpbmVkIEJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5SZWZpbmVkIEJ5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0UmVmaW5lZEJ5KCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfUmVmaW5lZEJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0U2F0aXNmaWVkQnkgPGVtPlNhdGlzZmllZCBCeTwvZW0+fSAnLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPlNhdGlzZmllZCBCeTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldFNhdGlzZmllZEJ5KCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfU2F0aXNmaWVkQnkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQjZ2V0VGV4dCA8ZW0+VGV4dDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRleHQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRUZXh0KCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UmVxdWlyZW1lbnRfVGV4dCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldFRyYWNlZFRvIDxlbT5UcmFjZWQgVG88L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPlRyYWNlZCBUbzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50I2dldFRyYWNlZFRvKCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfVHJhY2VkVG8oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRWZXJpZmllZEJ5IDxlbT5WZXJpZmllZCBCeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+VmVyaWZpZWQgQnk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCNnZXRWZXJpZmllZEJ5KCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfVmVyaWZpZWRCeSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICcge0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZAorCSAqIDxlbT5SZXF1aXJlbWVudCBSZWxhdGVkPC9lbT59Jy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJlcXVpcmVtZW50IFJlbGF0ZWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFJlcXVpcmVtZW50UmVsYXRlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJyB7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkI2dldEJhc2VfTmFtZWRFbGVtZW50CisJICogPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+fScuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgTmFtZWQgRWxlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZCNnZXRCYXNlX05hbWVkRWxlbWVudCgpCisJICogQHNlZSAjZ2V0UmVxdWlyZW1lbnRSZWxhdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRSZXF1aXJlbWVudFJlbGF0ZWRfQmFzZV9OYW1lZEVsZW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQjZ2V0UmVmaW5lcyA8ZW0+UmVmaW5lczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+UmVmaW5lczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZCNnZXRSZWZpbmVzKCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudFJlbGF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50UmVsYXRlZF9SZWZpbmVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkI2dldFNhdGlzZmllcworCSAqIDxlbT5TYXRpc2ZpZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPlNhdGlzZmllczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZCNnZXRTYXRpc2ZpZXMoKQorCSAqIEBzZWUgI2dldFJlcXVpcmVtZW50UmVsYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRSZWxhdGVkX1NhdGlzZmllcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZCNnZXRUcmFjZWRGcm9tCisJICogPGVtPlRyYWNlZCBGcm9tPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5UcmFjZWQgRnJvbTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZCNnZXRUcmFjZWRGcm9tKCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudFJlbGF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50UmVsYXRlZF9UcmFjZWRGcm9tKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkI2dldFZlcmlmaWVzIDxlbT5WZXJpZmllczwvZW0+fSAnLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPlZlcmlmaWVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkI2dldFZlcmlmaWVzKCkKKwkgKiBAc2VlICNnZXRSZXF1aXJlbWVudFJlbGF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50UmVsYXRlZF9WZXJpZmllcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUmVxdWlyZW1lbnRzRmFjdG9yeSBnZXRSZXF1aXJlbWVudHNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5TYXRpc2Z5IDxlbT5TYXRpc2Z5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNhdGlzZnk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5TYXRpc2Z5CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTYXRpc2Z5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5UZXN0Q2FzZSA8ZW0+VGVzdCBDYXNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgQ2FzZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0Q2FzZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5UZXN0Q2FzZSNnZXRCYXNlX0JlaGF2aW9yIDxlbT5CYXNlIEJlaGF2aW9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlI2dldEJhc2VfQmVoYXZpb3IoKQorCSAqIEBzZWUgI2dldFRlc3RDYXNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRUZXN0Q2FzZV9CYXNlX0JlaGF2aW9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlI2dldEJhc2VfT3BlcmF0aW9uIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkJhc2UgT3BlcmF0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVGVzdENhc2UjZ2V0QmFzZV9PcGVyYXRpb24oKQorCSAqIEBzZWUgI2dldFRlc3RDYXNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRUZXN0Q2FzZV9CYXNlX09wZXJhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlI2dldFZlcmlmaWVzIDxlbT5WZXJpZmllczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+VmVyaWZpZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5UZXN0Q2FzZSNnZXRWZXJpZmllcygpCisJICogQHNlZSAjZ2V0VGVzdENhc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRlc3RDYXNlX1ZlcmlmaWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5WZXJpZnkgPGVtPlZlcmlmeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5WZXJpZnk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5WZXJpZnkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFZlcmlmeSgpOworCit9IC8vIFJlcXVpcmVtZW50c1BhY2thZ2UKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9TYXRpc2Z5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvU2F0aXNmeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvU2F0aXNmeS5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHM7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+U2F0aXNmeTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0U2F0aXNmeSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTYXRpc2Z5IGV4dGVuZHMgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5UcmFjZSB7CisKK30gLy8gU2F0aXNmeQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL1Rlc3RDYXNlLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmJmN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL1Rlc3RDYXNlLmphdmEKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuQmVoYXZpb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuT3BlcmF0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5UZXN0IENhc2U8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVGVzdENhc2UjZ2V0QmFzZV9CZWhhdmlvciA8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlI2dldEJhc2VfT3BlcmF0aW9uIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlI2dldFZlcmlmaWVzIDxlbT5WZXJpZmllczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRUZXN0Q2FzZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0Q2FzZSBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QmFzZSBCZWhhdmlvcjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBCZWhhdmlvcjwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEJlaGF2aW9yPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRCYXNlX0JlaGF2aW9yKEJlaGF2aW9yKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRUZXN0Q2FzZV9CYXNlX0JlaGF2aW9yKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiIG9yZGVyZWQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlCZWhhdmlvciBnZXRCYXNlX0JlaGF2aW9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CYXNlIE9wZXJhdGlvbjwvYj48L2VtPicgcmVmZXJlbmNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmFzZSBPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLCB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEJhc2VfT3BlcmF0aW9uKE9wZXJhdGlvbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0VGVzdENhc2VfQmFzZV9PcGVyYXRpb24oKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIgb3JkZXJlZD0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCU9wZXJhdGlvbiBnZXRCYXNlX09wZXJhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVyaWZpZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LiBUaGUKKwkgKiBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudH0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZXJpZmllczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlcmlmaWVzPC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRUZXN0Q2FzZV9WZXJpZmllcygpCisJICogQG1vZGVsIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiBkZXJpdmVkPSJ0cnVlIgorCSAqICAgICAgICBvcmRlcmVkPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8UmVxdWlyZW1lbnQ+IGdldFZlcmlmaWVzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5UZXN0Q2FzZSNnZXRCYXNlX0JlaGF2aW9yIDxlbT5CYXNlIEJlaGF2aW9yPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIEJlaGF2aW9yPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlX0JlaGF2aW9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX0JlaGF2aW9yKEJlaGF2aW9yIHZhbHVlKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlI2dldEJhc2VfT3BlcmF0aW9uIDxlbT5CYXNlIE9wZXJhdGlvbjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBPcGVyYXRpb248L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEJhc2VfT3BlcmF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRCYXNlX09wZXJhdGlvbihPcGVyYXRpb24gdmFsdWUpOworCit9IC8vIFRlc3RDYXNlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvVmVyZGljdEtpbmQuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9WZXJkaWN0S2luZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjY3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvVmVyZGljdEtpbmQuamF2YQpAQCAtMCwwICsxLDI2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50czsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVudW1lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGl0ZXJhbHMgb2YgdGhlIGVudW1lcmF0aW9uICcgPGVtPjxiPlZlcmRpY3QgS2luZDwvYj48L2VtPicsIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aAorICogdGhlbS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZSNnZXRWZXJkaWN0S2luZCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGVudW0gVmVyZGljdEtpbmQgaW1wbGVtZW50cyBFbnVtZXJhdG9yIHsKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5QYXNzPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI1BBU1NfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlQQVNTKDAsICJwYXNzIiwgInBhc3MiKSwKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkZhaWw8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjRkFJTF9WQUxVRQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUZBSUwoMSwgImZhaWwiLCAiZmFpbCIpLAorCisJLyoqCisJICogVGhlICc8ZW0+PGI+SW5jb25jbHVzaXZlPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI0lOQ09OQ0xVU0lWRV9WQUxVRQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUlOQ09OQ0xVU0lWRSgyLCAiaW5jb25jbHVzaXZlIiwgImluY29uY2x1c2l2ZSIpLAorCisJLyoqCisJICogVGhlICc8ZW0+PGI+RXJyb3I8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjRVJST1JfVkFMVUUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlFUlJPUigzLCAiZXJyb3IiLCAiZXJyb3IiKTsKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPlBhc3M8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5QYXNzPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI1BBU1MKKwkgKiBAbW9kZWwgbmFtZT0icGFzcyIKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTX1ZBTFVFID0gMDsKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkZhaWw8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5GYWlsPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI0ZBSUwKKwkgKiBAbW9kZWwgbmFtZT0iZmFpbCIKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQUlMX1ZBTFVFID0gMTsKKworCS8qKgorCSAqIFRoZSAnPGVtPjxiPkluY29uY2x1c2l2ZTwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkluY29uY2x1c2l2ZTwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNJTkNPTkNMVVNJVkUKKwkgKiBAbW9kZWwgbmFtZT0iaW5jb25jbHVzaXZlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ09OQ0xVU0lWRV9WQUxVRSA9IDI7CisKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5FcnJvcjwvYj48L2VtPicgbGl0ZXJhbCB2YWx1ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdCBpc24ndCBjbGVhciwgdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI0VSUk9SCisJICogQG1vZGVsIG5hbWU9ImVycm9yIgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1ZBTFVFID0gMzsKKworCS8qKgorCSAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5WZXJkaWN0IEtpbmQ8L2I+PC9lbT4nIGVudW1lcmF0b3JzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFZlcmRpY3RLaW5kW10gVkFMVUVTX0FSUkFZID0gbmV3IFZlcmRpY3RLaW5kW10geyBQQVNTLCBGQUlMLCBJTkNPTkNMVVNJVkUsIEVSUk9SLCB9OworCisJLyoqCisJICogQSBwdWJsaWMgcmVhZC1vbmx5IGxpc3Qgb2YgYWxsIHRoZSAnPGVtPjxiPlZlcmRpY3QgS2luZDwvYj48L2VtPicKKwkgKiBlbnVtZXJhdG9ycy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFZlcmRpY3RLaW5kPiBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPlZlcmRpY3QgS2luZDwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQKKwkgKiBpbnRlZ2VyIHZhbHVlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFZlcmRpY3RLaW5kIGdldChpbnQgdmFsdWUpIHsKKwkJc3dpdGNoICh2YWx1ZSkgeworCQljYXNlIFBBU1NfVkFMVUU6CisJCQlyZXR1cm4gUEFTUzsKKwkJY2FzZSBGQUlMX1ZBTFVFOgorCQkJcmV0dXJuIEZBSUw7CisJCWNhc2UgSU5DT05DTFVTSVZFX1ZBTFVFOgorCQkJcmV0dXJuIElOQ09OQ0xVU0lWRTsKKwkJY2FzZSBFUlJPUl9WQUxVRToKKwkJCXJldHVybiBFUlJPUjsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPlZlcmRpY3QgS2luZDwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQKKwkgKiBsaXRlcmFsIHZhbHVlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFZlcmRpY3RLaW5kIGdldChTdHJpbmcgbGl0ZXJhbCkgeworCQlmb3IgKGludCBpID0gMDsgaSA8IFZBTFVFU19BUlJBWS5sZW5ndGg7ICsraSkgeworCQkJVmVyZGljdEtpbmQgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOworCQkJaWYgKHJlc3VsdC50b1N0cmluZygpLmVxdWFscyhsaXRlcmFsKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5WZXJkaWN0IEtpbmQ8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkCisJICogbmFtZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBWZXJkaWN0S2luZCBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsKKwkJCVZlcmRpY3RLaW5kIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbGl0ZXJhbDsKKworCS8qKgorCSAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFZlcmRpY3RLaW5kKGludCB2YWx1ZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBsaXRlcmFsKSB7CisJCXRoaXMudmFsdWUgPSB2YWx1ZTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5saXRlcmFsID0gbGl0ZXJhbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldExpdGVyYWwoKSB7CisJCXJldHVybiBsaXRlcmFsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGxpdGVyYWwgdmFsdWUgb2YgdGhlIGVudW1lcmF0b3IsIHdoaWNoIGlzIGl0cyBzdHJpbmcKKwkgKiByZXByZXNlbnRhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIGxpdGVyYWw7CisJfQorCit9IC8vIFZlcmRpY3RLaW5kCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvVmVyaWZ5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvVmVyaWZ5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmMWYwOQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9WZXJpZnkuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlZlcmlmeTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UjZ2V0VmVyaWZ5KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFZlcmlmeSBleHRlbmRzIG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQuVHJhY2UgeworfSAvLyBWZXJpZnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL0NvcHlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9Db3B5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMTcxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9Db3B5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuQ29weTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJyA8ZW0+PGI+Q29weTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29weUltcGwgZXh0ZW5kcyBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLmludGVybmFsLmltcGwuVHJhY2VJbXBsIGltcGxlbWVudHMgQ29weSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29weUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBSZXF1aXJlbWVudHNQYWNrYWdlLkxpdGVyYWxzLkNPUFk7CisJfQorCit9IC8vIENvcHlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9EZXJpdmVSZXF0SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvRGVyaXZlUmVxdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY0ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvRGVyaXZlUmVxdEltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLkRlcml2ZVJlcXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPkRlcml2ZSBSZXF0PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZXJpdmVSZXF0SW1wbCBleHRlbmRzIG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQuaW50ZXJuYWwuaW1wbC5UcmFjZUltcGwgaW1wbGVtZW50cyBEZXJpdmVSZXF0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZXJpdmVSZXF0SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFJlcXVpcmVtZW50c1BhY2thZ2UuTGl0ZXJhbHMuREVSSVZFX1JFUVQ7CisJfQorCit9IC8vIERlcml2ZVJlcXRJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9SZXF1aXJlbWVudEltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL1JlcXVpcmVtZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzgzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9SZXF1aXJlbWVudEltcGwuamF2YQpAQCAtMCwwICsxLDcwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuTWluaW1hbEVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRUxpc3QuVW5tb2RpZmlhYmxlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuQ29weTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5EZXJpdmVSZXF0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuU2F0aXNmeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5WZXJpZnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuRGVwZW5kZW5jeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5EaXJlY3RlZFJlbGF0aW9uc2hpcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5OYW1lZEVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5SZWZpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5UcmFjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC51dGlsLlVNTFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5SZXF1aXJlbWVudDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudEltcGwjZ2V0VGV4dCA8ZW0+VGV4dDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRJbXBsI2dldElkIDxlbT5JZDwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRJbXBsI2dldERlcml2ZWQgPGVtPkRlcml2ZWQ8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50SW1wbCNnZXREZXJpdmVkRnJvbSA8ZW0+RGVyaXZlZCBGcm9tPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudEltcGwjZ2V0U2F0aXNmaWVkQnkgPGVtPlNhdGlzZmllZCBCeTwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRJbXBsI2dldFJlZmluZWRCeSA8ZW0+UmVmaW5lZCBCeTwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRJbXBsI2dldFRyYWNlZFRvIDxlbT5UcmFjZWQgVG88L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50SW1wbCNnZXRWZXJpZmllZEJ5IDxlbT5WZXJpZmllZCBCeTwvZW0+fTwvbGk+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRJbXBsI2dldE1hc3RlciA8ZW0+TWFzdGVyPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudEltcGwjZ2V0QmFzZV9DbGFzcyA8ZW0+QmFzZSBDbGFzczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlcXVpcmVtZW50SW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBSZXF1aXJlbWVudCB7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGV4dCgpIDxlbT5UZXh0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRUZXh0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRleHQoKSA8ZW0+VGV4dDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0VGV4dCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyB0ZXh0ID0gVEVYVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZCgpIDxlbT5JZDwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0SWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkKCkgPGVtPklkPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRJZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBpZCA9IElEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9DbGFzcygpIDxlbT5CYXNlIENsYXNzPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNnZXRCYXNlX0NsYXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgYmFzZV9DbGFzczsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSZXF1aXJlbWVudEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIGJhc2ljR2V0QmFzZV9DbGFzcygpIHsKKwkJcmV0dXJuIGJhc2VfQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBSZXF1aXJlbWVudCBiYXNpY0dldE1hc3RlcigpIHsKKwkJLy8gVGhlIFJlcXVpcmVtZW50IGlzIHRoZSBzdXBwbGllciBvZiB0aGUgQ29weSBsaW5rIGJldHdlZW4gdGhlIG1hc3RlcgorCQkvLyBSZXF1aXJlbWVudCBhbmQKKwkJLy8gY3VycmVudAorCQkvLyBUaGlzIHNob3VsZCByZXR1cm4gdGhlIFRlc3RDYXNlIHZlcmlmeWluZyBjdXJyZW50IFJlcXVpcmVtZW50CisJCVJlcXVpcmVtZW50IG1hc3RlciA9IG51bGw7CisJCUNvcHkgY3VycmVudENvcHkgPSBudWxsOworCisJCWlmIChnZXRCYXNlX0NsYXNzKCkgIT0gbnVsbCkgeworCQkJSXRlcmF0b3I8RGVwZW5kZW5jeT4gaXREZXAgPSBnZXRCYXNlX0NsYXNzKCkuZ2V0Q2xpZW50RGVwZW5kZW5jaWVzKCkuaXRlcmF0b3IoKTsKKworCQkJLy8gRmluZCBDb3B5IGxpbmsKKwkJCXdoaWxlIChpdERlcC5oYXNOZXh0KCkpIHsKKwkJCQlEZXBlbmRlbmN5IGN1cnJlbnREZXAgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudENvcHkgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihjdXJyZW50RGVwLCBDb3B5LmNsYXNzKTsKKworCQkJCWlmIChjdXJyZW50Q29weSAhPSBudWxsKSB7CisJCQkJCUVMaXN0PE5hbWVkRWxlbWVudD4gc3VwcGxpZXJzID0gY3VycmVudENvcHkuZ2V0QmFzZV9BYnN0cmFjdGlvbigpLmdldFN1cHBsaWVycygpOworCQkJCQlJdGVyYXRvcjxOYW1lZEVsZW1lbnQ+IGl0ID0gc3VwcGxpZXJzLml0ZXJhdG9yKCk7CisJCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkgJiYgKG1hc3RlciA9PSBudWxsKSkgeworCQkJCQkJUmVxdWlyZW1lbnQgY3VycmVudFJlcXVpcmVtZW50ID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oaXQubmV4dCgpLCBSZXF1aXJlbWVudC5jbGFzcyk7CisJCQkJCQlpZiAoY3VycmVudFJlcXVpcmVtZW50ICE9IG51bGwpIHsKKwkJCQkJCQltYXN0ZXIgPSBjdXJyZW50UmVxdWlyZW1lbnQ7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIG1hc3RlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fVEVYVDoKKwkJCXJldHVybiBnZXRUZXh0KCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fSUQ6CisJCQlyZXR1cm4gZ2V0SWQoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19ERVJJVkVEOgorCQkJcmV0dXJuIGdldERlcml2ZWQoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19ERVJJVkVEX0ZST006CisJCQlyZXR1cm4gZ2V0RGVyaXZlZEZyb20oKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19TQVRJU0ZJRURfQlk6CisJCQlyZXR1cm4gZ2V0U2F0aXNmaWVkQnkoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19SRUZJTkVEX0JZOgorCQkJcmV0dXJuIGdldFJlZmluZWRCeSgpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX1RSQUNFRF9UTzoKKwkJCXJldHVybiBnZXRUcmFjZWRUbygpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX1ZFUklGSUVEX0JZOgorCQkJcmV0dXJuIGdldFZlcmlmaWVkQnkoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19NQVNURVI6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRNYXN0ZXIoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldE1hc3RlcigpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX0JBU0VfQ0xBU1M6CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX0NsYXNzKCk7CisJCQl9CisJCQlyZXR1cm4gYmFzaWNHZXRCYXNlX0NsYXNzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19URVhUOgorCQkJcmV0dXJuIFRFWFRfRURFRkFVTFQgPT0gbnVsbCA/IHRleHQgIT0gbnVsbCA6ICFURVhUX0VERUZBVUxULmVxdWFscyh0ZXh0KTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19JRDoKKwkJCXJldHVybiBJRF9FREVGQVVMVCA9PSBudWxsID8gaWQgIT0gbnVsbCA6ICFJRF9FREVGQVVMVC5lcXVhbHMoaWQpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX0RFUklWRUQ6CisJCQlyZXR1cm4gIWdldERlcml2ZWQoKS5pc0VtcHR5KCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fREVSSVZFRF9GUk9NOgorCQkJcmV0dXJuICFnZXREZXJpdmVkRnJvbSgpLmlzRW1wdHkoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19TQVRJU0ZJRURfQlk6CisJCQlyZXR1cm4gIWdldFNhdGlzZmllZEJ5KCkuaXNFbXB0eSgpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX1JFRklORURfQlk6CisJCQlyZXR1cm4gIWdldFJlZmluZWRCeSgpLmlzRW1wdHkoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19UUkFDRURfVE86CisJCQlyZXR1cm4gIWdldFRyYWNlZFRvKCkuaXNFbXB0eSgpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX1ZFUklGSUVEX0JZOgorCQkJcmV0dXJuICFnZXRWZXJpZmllZEJ5KCkuaXNFbXB0eSgpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX01BU1RFUjoKKwkJCXJldHVybiBiYXNpY0dldE1hc3RlcigpICE9IG51bGw7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fQkFTRV9DTEFTUzoKKwkJCXJldHVybiBiYXNlX0NsYXNzICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fVEVYVDoKKwkJCXNldFRleHQoKFN0cmluZykgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX0lEOgorCQkJc2V0SWQoKFN0cmluZykgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX0JBU0VfQ0xBU1M6CisJCQlzZXRCYXNlX0NsYXNzKChvcmcuZWNsaXBzZS51bWwyLnVtbC5DbGFzcykgbmV3VmFsdWUpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBSZXF1aXJlbWVudHNQYWNrYWdlLkxpdGVyYWxzLlJFUVVJUkVNRU5UOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fVEVYVDoKKwkJCXNldFRleHQoVEVYVF9FREVGQVVMVCk7CisJCQlyZXR1cm47CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fSUQ6CisJCQlzZXRJZChJRF9FREVGQVVMVCk7CisJCQlyZXR1cm47CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9fQkFTRV9DTEFTUzoKKwkJCXNldEJhc2VfQ2xhc3MoKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzKSBudWxsKTsKKwkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MgZ2V0QmFzZV9DbGFzcygpIHsKKwkJaWYgKGJhc2VfQ2xhc3MgIT0gbnVsbCAmJiBiYXNlX0NsYXNzLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRCYXNlX0NsYXNzID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9DbGFzczsKKwkJCWJhc2VfQ2xhc3MgPSAob3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3MpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9DbGFzcyk7CisJCQlpZiAoYmFzZV9DbGFzcyAhPSBvbGRCYXNlX0NsYXNzKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19CQVNFX0NMQVNTLCBvbGRCYXNlX0NsYXNzLCBiYXNlX0NsYXNzKSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX0NsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8UmVxdWlyZW1lbnQ+IGdldERlcml2ZWQoKSB7CisJCS8vIFRoaXMgc2hvdWxkIHJldHVybiB0aGUgUmVxdWlyZW1lbnQocykgZGVyaXZlZCBmcm9tIGN1cnJlbnQKKwkJRUxpc3Q8UmVxdWlyZW1lbnQ+IGRlcml2ZWQgPSBuZXcgQmFzaWNFTGlzdDxSZXF1aXJlbWVudD4oKTsKKwkJRGVyaXZlUmVxdCBjdXJyZW50RGVyaXZlUmVxdCA9IG51bGw7CisKKwkJaWYgKGdldEJhc2VfQ2xhc3MoKSAhPSBudWxsKSB7CisJCQlJdGVyYXRvcjxEaXJlY3RlZFJlbGF0aW9uc2hpcD4gaXREZXAgPSBnZXRCYXNlX0NsYXNzKCkuZ2V0VGFyZ2V0RGlyZWN0ZWRSZWxhdGlvbnNoaXBzKCkuaXRlcmF0b3IoKTsKKworCQkJLy8gRmluZCBEZXJpdmVSZXF0IGxpbmsKKwkJCXdoaWxlIChpdERlcC5oYXNOZXh0KCkpIHsKKwkJCQlEaXJlY3RlZFJlbGF0aW9uc2hpcCBjdXJyZW50RGlyZWN0ZWRSZWxhdGlvbnNoaXAgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudERlcml2ZVJlcXQgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihjdXJyZW50RGlyZWN0ZWRSZWxhdGlvbnNoaXAsIERlcml2ZVJlcXQuY2xhc3MpOworCisJCQkJaWYgKGN1cnJlbnREZXJpdmVSZXF0ICE9IG51bGwpIHsKKwkJCQkJRUxpc3Q8TmFtZWRFbGVtZW50PiBjbGllbnRzID0gY3VycmVudERlcml2ZVJlcXQuZ2V0QmFzZV9BYnN0cmFjdGlvbigpLmdldENsaWVudHMoKTsKKwkJCQkJSXRlcmF0b3I8TmFtZWRFbGVtZW50PiBpdCA9IGNsaWVudHMuaXRlcmF0b3IoKTsKKwkJCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJCQkJUmVxdWlyZW1lbnQgY3VycmVudFJlcXVpcmVtZW50ID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oaXQubmV4dCgpLCBSZXF1aXJlbWVudC5jbGFzcyk7CisJCQkJCQlpZiAoY3VycmVudFJlcXVpcmVtZW50ICE9IG51bGwpIHsKKwkJCQkJCQlkZXJpdmVkLmFkZChjdXJyZW50UmVxdWlyZW1lbnQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJVW5tb2RpZmlhYmxlRUxpc3Q8UmVxdWlyZW1lbnQ+IHJlc3VsdExpc3QgPSBuZXcgVW5tb2RpZmlhYmxlRUxpc3Q8UmVxdWlyZW1lbnQ+KHRoaXMsIFJlcXVpcmVtZW50c1BhY2thZ2UuZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50X0Rlcml2ZWQoKSwgZGVyaXZlZC5zaXplKCksIGRlcml2ZWQudG9BcnJheSgpKTsKKwkJcmV0dXJuIHJlc3VsdExpc3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFTGlzdDxSZXF1aXJlbWVudD4gZ2V0RGVyaXZlZEZyb20oKSB7CisJCS8vIFRoaXMgc2hvdWxkIHJldHVybiB0aGUgUmVxdWlyZW1lbnQocykgdGhpcyBSZXF1aXJlbWVudCBpcyBkZXJpdmVkCisJCS8vIGZyb20KKwkJRUxpc3Q8UmVxdWlyZW1lbnQ+IGRlcml2ZWRGcm9tID0gbmV3IEJhc2ljRUxpc3Q8UmVxdWlyZW1lbnQ+KCk7CisJCURlcml2ZVJlcXQgY3VycmVudERlcml2ZVJlcXQgPSBudWxsOworCQlpZiAoZ2V0QmFzZV9DbGFzcygpICE9IG51bGwpIHsKKwkJCUl0ZXJhdG9yPERpcmVjdGVkUmVsYXRpb25zaGlwPiBpdERlcCA9IGdldEJhc2VfQ2xhc3MoKS5nZXRTb3VyY2VEaXJlY3RlZFJlbGF0aW9uc2hpcHMoKS5pdGVyYXRvcigpOworCisJCQkvLyBGaW5kIERlcml2ZVJlcXQgbGluaworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSkgeworCQkJCURpcmVjdGVkUmVsYXRpb25zaGlwIGN1cnJlbnREUmVsYXRpb25zaGlwID0gaXREZXAubmV4dCgpOworCQkJCWN1cnJlbnREZXJpdmVSZXF0ID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oY3VycmVudERSZWxhdGlvbnNoaXAsIERlcml2ZVJlcXQuY2xhc3MpOworCisJCQkJaWYgKGN1cnJlbnREZXJpdmVSZXF0ICE9IG51bGwpIHsKKwkJCQkJRUxpc3Q8TmFtZWRFbGVtZW50PiBzdXBwbGllcnMgPSBjdXJyZW50RGVyaXZlUmVxdC5nZXRCYXNlX0Fic3RyYWN0aW9uKCkuZ2V0U3VwcGxpZXJzKCk7CisJCQkJCUl0ZXJhdG9yPE5hbWVkRWxlbWVudD4gaXQgPSBzdXBwbGllcnMuaXRlcmF0b3IoKTsKKwkJCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJCQkJUmVxdWlyZW1lbnQgY3VycmVudFJlcXVpcmVtZW50ID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oaXQubmV4dCgpLCBSZXF1aXJlbWVudC5jbGFzcyk7CisJCQkJCQlpZiAoY3VycmVudFJlcXVpcmVtZW50ICE9IG51bGwpIHsKKwkJCQkJCQlkZXJpdmVkRnJvbS5hZGQoY3VycmVudFJlcXVpcmVtZW50KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCVVubW9kaWZpYWJsZUVMaXN0PFJlcXVpcmVtZW50PiByZXN1bHRMaXN0ID0gbmV3IFVubW9kaWZpYWJsZUVMaXN0PFJlcXVpcmVtZW50Pih0aGlzLCBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudF9EZXJpdmVkRnJvbSgpLCBkZXJpdmVkRnJvbS5zaXplKCksIGRlcml2ZWRGcm9tLnRvQXJyYXkoKSk7CisJCXJldHVybiByZXN1bHRMaXN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisJCXJldHVybiBpZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVxdWlyZW1lbnQgZ2V0TWFzdGVyKCkgeworCQlSZXF1aXJlbWVudCBtYXN0ZXIgPSBiYXNpY0dldE1hc3RlcigpOworCQlyZXR1cm4gbWFzdGVyICE9IG51bGwgJiYgbWFzdGVyLmVJc1Byb3h5KCkgPyAoUmVxdWlyZW1lbnQpIGVSZXNvbHZlUHJveHkoKEludGVybmFsRU9iamVjdCkgbWFzdGVyKSA6IG1hc3RlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEVMaXN0PE5hbWVkRWxlbWVudD4gZ2V0UmVmaW5lZEJ5KCkgeworCQkvLyBUaGlzIHNob3VsZCByZXR1cm4gdGhlIE5hbWVkRWxlbWVudChzKSB0aGF0IHJlZmluZSBjdXJyZW50CisJCS8vIFJlcXVpcmVtZW50CisJCUVMaXN0PE5hbWVkRWxlbWVudD4gcmVmaW5lZEJ5ID0gbmV3IEJhc2ljRUxpc3Q8TmFtZWRFbGVtZW50PigpOworCQlSZWZpbmUgY3VycmVudFJlZmluZSA9IG51bGw7CisKKwkJaWYgKGdldEJhc2VfQ2xhc3MoKSAhPSBudWxsKSB7CisJCQlJdGVyYXRvcjxEaXJlY3RlZFJlbGF0aW9uc2hpcD4gaXREZXAgPSBnZXRCYXNlX0NsYXNzKCkuZ2V0VGFyZ2V0RGlyZWN0ZWRSZWxhdGlvbnNoaXBzKCkuaXRlcmF0b3IoKTsKKworCQkJLy8gRmluZCBSZWZpbmUgbGluaworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSkgeworCQkJCURpcmVjdGVkUmVsYXRpb25zaGlwIGN1cnJlbnREUmVsYXRpb25zaGlwID0gaXREZXAubmV4dCgpOworCQkJCWN1cnJlbnRSZWZpbmUgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihjdXJyZW50RFJlbGF0aW9uc2hpcCwgUmVmaW5lLmNsYXNzKTsKKworCQkJCWlmIChjdXJyZW50UmVmaW5lICE9IG51bGwpIHsKKwkJCQkJcmVmaW5lZEJ5LmFkZEFsbChjdXJyZW50UmVmaW5lLmdldEJhc2VfQWJzdHJhY3Rpb24oKS5nZXRDbGllbnRzKCkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCVVubW9kaWZpYWJsZUVMaXN0PE5hbWVkRWxlbWVudD4gcmVzdWx0TGlzdCA9IG5ldyBVbm1vZGlmaWFibGVFTGlzdDxOYW1lZEVsZW1lbnQ+KHRoaXMsIFJlcXVpcmVtZW50c1BhY2thZ2UuZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50X1JlZmluZWRCeSgpLCByZWZpbmVkQnkuc2l6ZSgpLCByZWZpbmVkQnkudG9BcnJheSgpKTsKKwkJcmV0dXJuIHJlc3VsdExpc3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTmFtZWRFbGVtZW50IGdldFJlZmluZWRCeShTdHJpbmcgbmFtZSkgeworCQlyZXR1cm4gZ2V0UmVmaW5lZEJ5KG5hbWUsIGZhbHNlLCBudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0UmVmaW5lZEJ5KFN0cmluZyBuYW1lLCBib29sZWFuIGlnbm9yZUNhc2UsIEVDbGFzcyBlQ2xhc3MpIHsKKwkJcmVmaW5lZEJ5TG9vcDogZm9yIChOYW1lZEVsZW1lbnQgcmVmaW5lZEJ5IDogZ2V0UmVmaW5lZEJ5KCkpIHsKKwkJCWlmIChlQ2xhc3MgIT0gbnVsbCAmJiAhZUNsYXNzLmlzSW5zdGFuY2UocmVmaW5lZEJ5KSkgeworCQkJCWNvbnRpbnVlIHJlZmluZWRCeUxvb3A7CisJCQl9CisJCQlpZiAobmFtZSAhPSBudWxsICYmICEoaWdub3JlQ2FzZSA/IG5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZWZpbmVkQnkuZ2V0TmFtZSgpKSA6IG5hbWUuZXF1YWxzKHJlZmluZWRCeS5nZXROYW1lKCkpKSkgeworCQkJCWNvbnRpbnVlIHJlZmluZWRCeUxvb3A7CisJCQl9CisJCQlyZXR1cm4gcmVmaW5lZEJ5OworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8TmFtZWRFbGVtZW50PiBnZXRTYXRpc2ZpZWRCeSgpIHsKKwkJLy8gVGhpcyBzaG91bGQgcmV0dXJuIHRoZSBOYW1lZEVsZW1lbnQocykgdGhhdCBzYXRpc2Z5IGN1cnJlbnQKKwkJLy8gUmVxdWlyZW1lbnQKKwkJRUxpc3Q8TmFtZWRFbGVtZW50PiBzYXRpc2Z5QnkgPSBuZXcgQmFzaWNFTGlzdDxOYW1lZEVsZW1lbnQ+KCk7CisJCVNhdGlzZnkgY3VycmVudFNhdGlzZnkgPSBudWxsOworCisJCWlmIChnZXRCYXNlX0NsYXNzKCkgIT0gbnVsbCkgeworCQkJSXRlcmF0b3I8RGlyZWN0ZWRSZWxhdGlvbnNoaXA+IGl0RGVwID0gZ2V0QmFzZV9DbGFzcygpLmdldFRhcmdldERpcmVjdGVkUmVsYXRpb25zaGlwcygpLml0ZXJhdG9yKCk7CisKKwkJCS8vIEZpbmQgU2F0aXNmeSBsaW5rCisJCQl3aGlsZSAoaXREZXAuaGFzTmV4dCgpKSB7CisJCQkJRGlyZWN0ZWRSZWxhdGlvbnNoaXAgY3VycmVudERSZWxhdGlvbnNoaXAgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudFNhdGlzZnkgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihjdXJyZW50RFJlbGF0aW9uc2hpcCwgU2F0aXNmeS5jbGFzcyk7CisKKwkJCQlpZiAoY3VycmVudFNhdGlzZnkgIT0gbnVsbCkgeworCQkJCQlzYXRpc2Z5QnkuYWRkQWxsKGN1cnJlbnRTYXRpc2Z5LmdldEJhc2VfQWJzdHJhY3Rpb24oKS5nZXRDbGllbnRzKCkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCVVubW9kaWZpYWJsZUVMaXN0PE5hbWVkRWxlbWVudD4gcmVzdWx0TGlzdCA9IG5ldyBVbm1vZGlmaWFibGVFTGlzdDxOYW1lZEVsZW1lbnQ+KHRoaXMsIFJlcXVpcmVtZW50c1BhY2thZ2UuZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50X1NhdGlzZmllZEJ5KCksIHNhdGlzZnlCeS5zaXplKCksIHNhdGlzZnlCeS50b0FycmF5KCkpOworCQlyZXR1cm4gcmVzdWx0TGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0U2F0aXNmaWVkQnkoU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIGdldFNhdGlzZmllZEJ5KG5hbWUsIGZhbHNlLCBudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0U2F0aXNmaWVkQnkoU3RyaW5nIG5hbWUsIGJvb2xlYW4gaWdub3JlQ2FzZSwgRUNsYXNzIGVDbGFzcykgeworCQlzYXRpc2ZpZWRCeUxvb3A6IGZvciAoTmFtZWRFbGVtZW50IHNhdGlzZmllZEJ5IDogZ2V0U2F0aXNmaWVkQnkoKSkgeworCQkJaWYgKGVDbGFzcyAhPSBudWxsICYmICFlQ2xhc3MuaXNJbnN0YW5jZShzYXRpc2ZpZWRCeSkpIHsKKwkJCQljb250aW51ZSBzYXRpc2ZpZWRCeUxvb3A7CisJCQl9CisJCQlpZiAobmFtZSAhPSBudWxsICYmICEoaWdub3JlQ2FzZSA/IG5hbWUuZXF1YWxzSWdub3JlQ2FzZShzYXRpc2ZpZWRCeS5nZXROYW1lKCkpIDogbmFtZS5lcXVhbHMoc2F0aXNmaWVkQnkuZ2V0TmFtZSgpKSkpIHsKKwkJCQljb250aW51ZSBzYXRpc2ZpZWRCeUxvb3A7CisJCQl9CisJCQlyZXR1cm4gc2F0aXNmaWVkQnk7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQlyZXR1cm4gdGV4dDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEVMaXN0PE5hbWVkRWxlbWVudD4gZ2V0VHJhY2VkVG8oKSB7CisJCS8vIFRoaXMgc2hvdWxkIHJldHVybiB0aGUgTmFtZWRFbGVtZW50KHMpIHRyYWNlZCBieSBjdXJyZW50IFJlcXVpcmVtZW50CisJCS8vIFN5c01MIHNwZWMuIDogRGVyaXZlZCBmcm9tIGFsbCBlbGVtZW50cyB0aGF0IGFyZSB0aGUgY2xpZW50IG9mIGEKKwkJLy8gq3RyYWNluyByZWxhdGlvbnNoaXAKKwkJLy8gZm9yIHdoaWNoIHRoaXMgcmVxdWlyZW1lbnQgaXMgYSBzdXBwbGllci4KKwkJRUxpc3Q8TmFtZWRFbGVtZW50PiB0cmFjZWRUbyA9IG5ldyBCYXNpY0VMaXN0PE5hbWVkRWxlbWVudD4oKTsKKwkJVHJhY2UgY3VycmVudFRyYWNlID0gbnVsbDsKKworCQlpZiAoZ2V0QmFzZV9DbGFzcygpICE9IG51bGwpIHsKKwkJCUl0ZXJhdG9yPERpcmVjdGVkUmVsYXRpb25zaGlwPiBpdERlcCA9IGdldEJhc2VfQ2xhc3MoKS5nZXRUYXJnZXREaXJlY3RlZFJlbGF0aW9uc2hpcHMoKS5pdGVyYXRvcigpOworCisJCQkvLyBGaW5kIFRyYWNlIGxpbmsKKwkJCXdoaWxlIChpdERlcC5oYXNOZXh0KCkpIHsKKwkJCQlEaXJlY3RlZFJlbGF0aW9uc2hpcCBjdXJyZW50RFIgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudFRyYWNlID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oY3VycmVudERSLCBUcmFjZS5jbGFzcyk7CisKKwkJCQkvLyBNdXN0IGJlIGEgVHJhY2Ugbm90IGEgc3VidHlwZSAoc2VlIGJ1ZyAjMzUyNTYzKS4KKwkJCQlpZiAoKGN1cnJlbnRUcmFjZSAhPSBudWxsKSAmJiAoY3VycmVudFRyYWNlLmVDbGFzcygpID09IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VHJhY2UoKSkpIHsKKwkJCQkJRUxpc3Q8TmFtZWRFbGVtZW50PiBzdXBwbGllcnMgPSBjdXJyZW50VHJhY2UuZ2V0QmFzZV9BYnN0cmFjdGlvbigpLmdldENsaWVudHMoKTsKKwkJCQkJdHJhY2VkVG8uYWRkQWxsKHN1cHBsaWVycyk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJVW5tb2RpZmlhYmxlRUxpc3Q8TmFtZWRFbGVtZW50PiByZXN1bHRMaXN0ID0gbmV3IFVubW9kaWZpYWJsZUVMaXN0PE5hbWVkRWxlbWVudD4odGhpcywgUmVxdWlyZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRfVHJhY2VkVG8oKSwgdHJhY2VkVG8uc2l6ZSgpLCB0cmFjZWRUby50b0FycmF5KCkpOworCQlyZXR1cm4gcmVzdWx0TGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0VHJhY2VkVG8oU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIGdldFRyYWNlZFRvKG5hbWUsIGZhbHNlLCBudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0VHJhY2VkVG8oU3RyaW5nIG5hbWUsIGJvb2xlYW4gaWdub3JlQ2FzZSwgRUNsYXNzIGVDbGFzcykgeworCQl0cmFjZWRUb0xvb3A6IGZvciAoTmFtZWRFbGVtZW50IHRyYWNlZFRvIDogZ2V0VHJhY2VkVG8oKSkgeworCQkJaWYgKGVDbGFzcyAhPSBudWxsICYmICFlQ2xhc3MuaXNJbnN0YW5jZSh0cmFjZWRUbykpIHsKKwkJCQljb250aW51ZSB0cmFjZWRUb0xvb3A7CisJCQl9CisJCQlpZiAobmFtZSAhPSBudWxsICYmICEoaWdub3JlQ2FzZSA/IG5hbWUuZXF1YWxzSWdub3JlQ2FzZSh0cmFjZWRUby5nZXROYW1lKCkpIDogbmFtZS5lcXVhbHModHJhY2VkVG8uZ2V0TmFtZSgpKSkpIHsKKwkJCQljb250aW51ZSB0cmFjZWRUb0xvb3A7CisJCQl9CisJCQlyZXR1cm4gdHJhY2VkVG87CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFTGlzdDxOYW1lZEVsZW1lbnQ+IGdldFZlcmlmaWVkQnkoKSB7CisJCS8vIFRoaXMgc2hvdWxkIHJldHVybiB0aGUgbGlzdCBvZiBOYW1lZEVsZW1lbnQgdmVyaWZ5aW5nIGN1cnJlbnQKKwkJLy8gUmVxdWlyZW1lbnQKKwkJRUxpc3Q8TmFtZWRFbGVtZW50PiB2ZXJpZmllZEJ5ID0gbmV3IEJhc2ljRUxpc3Q8TmFtZWRFbGVtZW50PigpOworCQlWZXJpZnkgY3VycmVudFZlcmlmeSA9IG51bGw7CisKKwkJaWYgKGdldEJhc2VfQ2xhc3MoKSAhPSBudWxsKSB7CisJCQlJdGVyYXRvcjxEaXJlY3RlZFJlbGF0aW9uc2hpcD4gaXREZXAgPSBnZXRCYXNlX0NsYXNzKCkuZ2V0VGFyZ2V0RGlyZWN0ZWRSZWxhdGlvbnNoaXBzKCkuaXRlcmF0b3IoKTsKKworCQkJLy8gRmluZCBWZXJpZnkgbGluaworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSkgeworCQkJCURpcmVjdGVkUmVsYXRpb25zaGlwIGN1cnJlbnREUmVsYXRpb25zaGlwID0gaXREZXAubmV4dCgpOworCQkJCWN1cnJlbnRWZXJpZnkgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihjdXJyZW50RFJlbGF0aW9uc2hpcCwgVmVyaWZ5LmNsYXNzKTsKKworCQkJCWlmIChjdXJyZW50VmVyaWZ5ICE9IG51bGwpIHsKKwkJCQkJdmVyaWZpZWRCeS5hZGRBbGwoY3VycmVudFZlcmlmeS5nZXRCYXNlX0Fic3RyYWN0aW9uKCkuZ2V0Q2xpZW50cygpKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlVbm1vZGlmaWFibGVFTGlzdDxOYW1lZEVsZW1lbnQ+IHJlc3VsdExpc3QgPSBuZXcgVW5tb2RpZmlhYmxlRUxpc3Q8TmFtZWRFbGVtZW50Pih0aGlzLCBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudF9WZXJpZmllZEJ5KCksIHZlcmlmaWVkQnkuc2l6ZSgpLCB2ZXJpZmllZEJ5LnRvQXJyYXkoKSk7CisJCXJldHVybiByZXN1bHRMaXN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5hbWVkRWxlbWVudCBnZXRWZXJpZmllZEJ5KFN0cmluZyBuYW1lKSB7CisJCXJldHVybiBnZXRWZXJpZmllZEJ5KG5hbWUsIGZhbHNlLCBudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOYW1lZEVsZW1lbnQgZ2V0VmVyaWZpZWRCeShTdHJpbmcgbmFtZSwgYm9vbGVhbiBpZ25vcmVDYXNlLCBFQ2xhc3MgZUNsYXNzKSB7CisJCXZlcmlmaWVkQnlMb29wOiBmb3IgKE5hbWVkRWxlbWVudCB2ZXJpZmllZEJ5IDogZ2V0VmVyaWZpZWRCeSgpKSB7CisJCQlpZiAoZUNsYXNzICE9IG51bGwgJiYgIWVDbGFzcy5pc0luc3RhbmNlKHZlcmlmaWVkQnkpKSB7CisJCQkJY29udGludWUgdmVyaWZpZWRCeUxvb3A7CisJCQl9CisJCQlpZiAobmFtZSAhPSBudWxsICYmICEoaWdub3JlQ2FzZSA/IG5hbWUuZXF1YWxzSWdub3JlQ2FzZSh2ZXJpZmllZEJ5LmdldE5hbWUoKSkgOiBuYW1lLmVxdWFscyh2ZXJpZmllZEJ5LmdldE5hbWUoKSkpKSB7CisJCQkJY29udGludWUgdmVyaWZpZWRCeUxvb3A7CisJCQl9CisJCQlyZXR1cm4gdmVyaWZpZWRCeTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0NsYXNzKG9yZy5lY2xpcHNlLnVtbDIudW1sLkNsYXNzIG5ld0Jhc2VfQ2xhc3MpIHsKKwkJb3JnLmVjbGlwc2UudW1sMi51bWwuQ2xhc3Mgb2xkQmFzZV9DbGFzcyA9IGJhc2VfQ2xhc3M7CisJCWJhc2VfQ2xhc3MgPSBuZXdCYXNlX0NsYXNzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX0JBU0VfQ0xBU1MsIG9sZEJhc2VfQ2xhc3MsIGJhc2VfQ2xhc3MpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBuZXdJZCkgeworCQlTdHJpbmcgb2xkSWQgPSBpZDsKKwkJaWQgPSBuZXdJZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX19JRCwgb2xkSWQsIGlkKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0TWFzdGVyKFJlcXVpcmVtZW50IG5ld01hc3RlcikgeworCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgbmV3VGV4dCkgeworCQlTdHJpbmcgb2xkVGV4dCA9IHRleHQ7CisJCXRleHQgPSBuZXdUZXh0OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfX1RFWFQsIG9sZFRleHQsIHRleHQpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSB7CisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKwkJfQorCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHRleHQ6ICIpOworCQlyZXN1bHQuYXBwZW5kKHRleHQpOworCQlyZXN1bHQuYXBwZW5kKCIsIGlkOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChpZCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBSZXF1aXJlbWVudEltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL1JlcXVpcmVtZW50UmVsYXRlZEltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL1JlcXVpcmVtZW50UmVsYXRlZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTc2MDVjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvUmVxdWlyZW1lbnRSZWxhdGVkSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5NaW5pbWFsRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVFTGlzdC5Vbm1vZGlmaWFibGVFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5TYXRpc2Z5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlZlcmlmeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5EZXBlbmRlbmN5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkRpcmVjdGVkUmVsYXRpb25zaGlwOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk5hbWVkRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlJlZmluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLlRyYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLnV0aWwuVU1MVXRpbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlJlcXVpcmVtZW50IFJlbGF0ZWQ8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuUmVxdWlyZW1lbnRSZWxhdGVkSW1wbCNnZXRCYXNlX05hbWVkRWxlbWVudCA8ZW0+QmFzZSBOYW1lZCBFbGVtZW50PC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudFJlbGF0ZWRJbXBsI2dldFRyYWNlZEZyb20gPGVtPlRyYWNlZCBGcm9tPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudFJlbGF0ZWRJbXBsI2dldFNhdGlzZmllcyA8ZW0+U2F0aXNmaWVzPC9lbT59PC9saT4KKyAqIDxsaT57QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbC5SZXF1aXJlbWVudFJlbGF0ZWRJbXBsI2dldFJlZmluZXMgPGVtPlJlZmluZXM8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50UmVsYXRlZEltcGwjZ2V0VmVyaWZpZXMgPGVtPlZlcmlmaWVzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVxdWlyZW1lbnRSZWxhdGVkSW1wbCBleHRlbmRzIE1pbmltYWxFT2JqZWN0SW1wbC5Db250YWluZXIgaW1wbGVtZW50cyBSZXF1aXJlbWVudFJlbGF0ZWQgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKSA8ZW0+QmFzZSBOYW1lZCBFbGVtZW50PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfTmFtZWRFbGVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTmFtZWRFbGVtZW50IGJhc2VfTmFtZWRFbGVtZW50OworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlcXVpcmVtZW50UmVsYXRlZEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5hbWVkRWxlbWVudCBiYXNpY0dldEJhc2VfTmFtZWRFbGVtZW50KCkgeworCQlyZXR1cm4gYmFzZV9OYW1lZEVsZW1lbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfUkVMQVRFRF9fQkFTRV9OQU1FRF9FTEVNRU5UOgorCQkJaWYgKHJlc29sdmUpIHsKKwkJCQlyZXR1cm4gZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfTmFtZWRFbGVtZW50KCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9SRUxBVEVEX19UUkFDRURfRlJPTToKKwkJCXJldHVybiBnZXRUcmFjZWRGcm9tKCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9SRUxBVEVEX19TQVRJU0ZJRVM6CisJCQlyZXR1cm4gZ2V0U2F0aXNmaWVzKCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9SRUxBVEVEX19SRUZJTkVTOgorCQkJcmV0dXJuIGdldFJlZmluZXMoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX1JFTEFURURfX1ZFUklGSUVTOgorCQkJcmV0dXJuIGdldFZlcmlmaWVzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX1JFTEFURURfX0JBU0VfTkFNRURfRUxFTUVOVDoKKwkJCXJldHVybiBiYXNlX05hbWVkRWxlbWVudCAhPSBudWxsOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfUkVMQVRFRF9fVFJBQ0VEX0ZST006CisJCQlyZXR1cm4gIWdldFRyYWNlZEZyb20oKS5pc0VtcHR5KCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9SRUxBVEVEX19TQVRJU0ZJRVM6CisJCQlyZXR1cm4gIWdldFNhdGlzZmllcygpLmlzRW1wdHkoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX1JFTEFURURfX1JFRklORVM6CisJCQlyZXR1cm4gIWdldFJlZmluZXMoKS5pc0VtcHR5KCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9SRUxBVEVEX19WRVJJRklFUzoKKwkJCXJldHVybiAhZ2V0VmVyaWZpZXMoKS5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVF9SRUxBVEVEX19CQVNFX05BTUVEX0VMRU1FTlQ6CisJCQlzZXRCYXNlX05hbWVkRWxlbWVudCgoTmFtZWRFbGVtZW50KSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFJlcXVpcmVtZW50c1BhY2thZ2UuTGl0ZXJhbHMuUkVRVUlSRU1FTlRfUkVMQVRFRDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlRfUkVMQVRFRF9fQkFTRV9OQU1FRF9FTEVNRU5UOgorCQkJc2V0QmFzZV9OYW1lZEVsZW1lbnQoKE5hbWVkRWxlbWVudCkgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5hbWVkRWxlbWVudCBnZXRCYXNlX05hbWVkRWxlbWVudCgpIHsKKwkJaWYgKGJhc2VfTmFtZWRFbGVtZW50ICE9IG51bGwgJiYgYmFzZV9OYW1lZEVsZW1lbnQuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfTmFtZWRFbGVtZW50ID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9OYW1lZEVsZW1lbnQ7CisJCQliYXNlX05hbWVkRWxlbWVudCA9IChOYW1lZEVsZW1lbnQpIGVSZXNvbHZlUHJveHkob2xkQmFzZV9OYW1lZEVsZW1lbnQpOworCQkJaWYgKGJhc2VfTmFtZWRFbGVtZW50ICE9IG9sZEJhc2VfTmFtZWRFbGVtZW50KSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX1JFTEFURURfX0JBU0VfTkFNRURfRUxFTUVOVCwgb2xkQmFzZV9OYW1lZEVsZW1lbnQsIGJhc2VfTmFtZWRFbGVtZW50KSk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBiYXNlX05hbWVkRWxlbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEVMaXN0PFJlcXVpcmVtZW50PiBnZXRSZWZpbmVzKCkgeworCQkvLyBUaGlzIHNob3VsZCByZXR1cm4gdGhlIFJlcXVpcmVtZW50KHMpIHJlZmluZWQgYnkgY3VycmVudCBlbGVtZW50CisJCUVMaXN0PFJlcXVpcmVtZW50PiByZWZpbmVzID0gbmV3IEJhc2ljRUxpc3Q8UmVxdWlyZW1lbnQ+KCk7CisJCVJlZmluZSBjdXJyZW50UmVmaW5lID0gbnVsbDsKKworCQlpZiAoZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKSAhPSBudWxsKSB7CisJCQkvLyBGaW5kIFJlZmluZSBsaW5rCisJCQlJdGVyYXRvcjxEZXBlbmRlbmN5PiBpdERlcCA9IGdldEJhc2VfTmFtZWRFbGVtZW50KCkuZ2V0Q2xpZW50RGVwZW5kZW5jaWVzKCkuaXRlcmF0b3IoKTsKKworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSkgeworCQkJCURlcGVuZGVuY3kgY3VycmVudERlcGVuZGVuY3kgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudFJlZmluZSA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGN1cnJlbnREZXBlbmRlbmN5LCBSZWZpbmUuY2xhc3MpOworCisJCQkJaWYgKGN1cnJlbnRSZWZpbmUgIT0gbnVsbCkgeworCQkJCQlFTGlzdDxOYW1lZEVsZW1lbnQ+IHN1cHBsaWVycyA9IGN1cnJlbnRSZWZpbmUuZ2V0QmFzZV9BYnN0cmFjdGlvbigpLmdldFN1cHBsaWVycygpOworCQkJCQlJdGVyYXRvcjxOYW1lZEVsZW1lbnQ+IGl0ID0gc3VwcGxpZXJzLml0ZXJhdG9yKCk7CisJCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCQkJCVJlcXVpcmVtZW50IGN1cnJlbnRSZXF1aXJlbWVudCA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGl0Lm5leHQoKSwgUmVxdWlyZW1lbnQuY2xhc3MpOworCQkJCQkJaWYgKGN1cnJlbnRSZXF1aXJlbWVudCAhPSBudWxsKSB7CisJCQkJCQkJcmVmaW5lcy5hZGQoY3VycmVudFJlcXVpcmVtZW50KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCVVubW9kaWZpYWJsZUVMaXN0PFJlcXVpcmVtZW50PiByZXN1bHRMaXN0ID0gbmV3IFVubW9kaWZpYWJsZUVMaXN0PFJlcXVpcmVtZW50Pih0aGlzLCBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudFJlbGF0ZWRfUmVmaW5lcygpLCByZWZpbmVzLnNpemUoKSwgcmVmaW5lcy50b0FycmF5KCkpOworCQlyZXR1cm4gcmVzdWx0TGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEVMaXN0PFJlcXVpcmVtZW50PiBnZXRTYXRpc2ZpZXMoKSB7CisJCS8vIFRoaXMgc2hvdWxkIHJldHVybiB0aGUgUmVxdWlyZW1lbnQocykgc2F0aXNmaWVkIGJ5IGN1cnJlbnQgZWxlbWVudAorCQlFTGlzdDxSZXF1aXJlbWVudD4gc2F0aXNmaWVzID0gbmV3IEJhc2ljRUxpc3Q8UmVxdWlyZW1lbnQ+KCk7CisJCVNhdGlzZnkgY3VycmVudFNhdGlzZnkgPSBudWxsOworCisJCWlmIChnZXRCYXNlX05hbWVkRWxlbWVudCgpICE9IG51bGwpIHsKKwkJCS8vIEZpbmQgU2F0aXNmeSBsaW5rCisJCQlJdGVyYXRvcjxEZXBlbmRlbmN5PiBpdERlcCA9IGdldEJhc2VfTmFtZWRFbGVtZW50KCkuZ2V0Q2xpZW50RGVwZW5kZW5jaWVzKCkuaXRlcmF0b3IoKTsKKworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSkgeworCQkJCURlcGVuZGVuY3kgY3VycmVudERlcGVuZGVuY3kgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudFNhdGlzZnkgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihjdXJyZW50RGVwZW5kZW5jeSwgU2F0aXNmeS5jbGFzcyk7CisKKwkJCQlpZiAoY3VycmVudFNhdGlzZnkgIT0gbnVsbCkgeworCQkJCQlFTGlzdDxOYW1lZEVsZW1lbnQ+IHN1cHBsaWVycyA9IGN1cnJlbnRTYXRpc2Z5LmdldEJhc2VfQWJzdHJhY3Rpb24oKS5nZXRTdXBwbGllcnMoKTsKKwkJCQkJSXRlcmF0b3I8TmFtZWRFbGVtZW50PiBpdCA9IHN1cHBsaWVycy5pdGVyYXRvcigpOworCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJCQlSZXF1aXJlbWVudCBjdXJyZW50UmVxdWlyZW1lbnQgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihpdC5uZXh0KCksIFJlcXVpcmVtZW50LmNsYXNzKTsKKwkJCQkJCWlmIChjdXJyZW50UmVxdWlyZW1lbnQgIT0gbnVsbCkgeworCQkJCQkJCXNhdGlzZmllcy5hZGQoY3VycmVudFJlcXVpcmVtZW50KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCVVubW9kaWZpYWJsZUVMaXN0PFJlcXVpcmVtZW50PiByZXN1bHRMaXN0ID0gbmV3IFVubW9kaWZpYWJsZUVMaXN0PFJlcXVpcmVtZW50Pih0aGlzLCBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRS5nZXRSZXF1aXJlbWVudFJlbGF0ZWRfU2F0aXNmaWVzKCksIHNhdGlzZmllcy5zaXplKCksIHNhdGlzZmllcy50b0FycmF5KCkpOworCQlyZXR1cm4gcmVzdWx0TGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEVMaXN0PFJlcXVpcmVtZW50PiBnZXRUcmFjZWRGcm9tKCkgeworCisJCS8vIERlcml2ZWQgZnJvbSBhbGwgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIHN1cHBsaWVyIG9mIGEgInRyYWNlIgorCQkvLyByZWxhdGlvbnNoaXAgZm9yCisJCS8vIHdoaWNoIHRoaXMgZWxlbWVudCBpcyBhIGNsaWVudC4KKwkJLy8gInRyYWNlIiBzdWJ0eXBlcyBhcmUgbm90IGluY2x1ZGVkIChzZWUgYnVnICMzNTI1NjMpLgorCQlFTGlzdDxSZXF1aXJlbWVudD4gdHJhY2VkRnJvbSA9IG5ldyBCYXNpY0VMaXN0PFJlcXVpcmVtZW50PigpOworCQlUcmFjZSBjdXJyZW50VHJhY2UgPSBudWxsOworCisJCWlmIChnZXRCYXNlX05hbWVkRWxlbWVudCgpICE9IG51bGwpIHsKKwkJCS8vIEZpbmQgVHJhY2UgbGluaworCQkJRUxpc3Q8RGlyZWN0ZWRSZWxhdGlvbnNoaXA+IHJlbGF0aW9uc2hpcHMgPSBnZXRCYXNlX05hbWVkRWxlbWVudCgpLmdldFNvdXJjZURpcmVjdGVkUmVsYXRpb25zaGlwcygpOworCQkJSXRlcmF0b3I8RGlyZWN0ZWRSZWxhdGlvbnNoaXA+IGl0RGVwID0gcmVsYXRpb25zaGlwcy5pdGVyYXRvcigpOworCisJCQl3aGlsZSAoaXREZXAuaGFzTmV4dCgpKSB7CisJCQkJRGlyZWN0ZWRSZWxhdGlvbnNoaXAgY3VycmVudERSZWxhdGlvbnNoaXAgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudFRyYWNlID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oY3VycmVudERSZWxhdGlvbnNoaXAsIFRyYWNlLmNsYXNzKTsKKworCQkJCS8vIE11c3QgYmUgYSBUcmFjZSBub3QgYSBzdWJ0eXBlIChzZWUgYnVnICMzNTI1NjMpLgorCQkJCWlmICgoY3VycmVudFRyYWNlICE9IG51bGwpICYmIChjdXJyZW50VHJhY2UuZUNsYXNzKCkgPT0gU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRUcmFjZSgpKSkgeworCQkJCQlFTGlzdDxOYW1lZEVsZW1lbnQ+IGNsaWVudHMgPSBjdXJyZW50VHJhY2UuZ2V0QmFzZV9BYnN0cmFjdGlvbigpLmdldFN1cHBsaWVycygpOworCQkJCQlJdGVyYXRvcjxOYW1lZEVsZW1lbnQ+IGl0ID0gY2xpZW50cy5pdGVyYXRvcigpOworCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJCQlSZXF1aXJlbWVudCBjdXJyZW50UmVxdWlyZW1lbnQgPSBVTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihpdC5uZXh0KCksIFJlcXVpcmVtZW50LmNsYXNzKTsKKwkJCQkJCWlmIChjdXJyZW50UmVxdWlyZW1lbnQgIT0gbnVsbCkgeworCQkJCQkJCXRyYWNlZEZyb20uYWRkKGN1cnJlbnRSZXF1aXJlbWVudCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlVbm1vZGlmaWFibGVFTGlzdDxSZXF1aXJlbWVudD4gcmVzdWx0TGlzdCA9IG5ldyBVbm1vZGlmaWFibGVFTGlzdDxSZXF1aXJlbWVudD4odGhpcywgUmVxdWlyZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UmVxdWlyZW1lbnRSZWxhdGVkX1RyYWNlZEZyb20oKSwgdHJhY2VkRnJvbS5zaXplKCksIHRyYWNlZEZyb20udG9BcnJheSgpKTsKKwkJcmV0dXJuIHJlc3VsdExpc3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFTGlzdDxSZXF1aXJlbWVudD4gZ2V0VmVyaWZpZXMoKSB7CisJCS8vIFRoaXMgc2hvdWxkIHJldHVybiB0aGUgUmVxdWlyZW1lbnQocykgdmVyaWZpZWQgYnkgY3VycmVudCBlbGVtZW50CisJCUVMaXN0PFJlcXVpcmVtZW50PiB2ZXJpZmllcyA9IG5ldyBCYXNpY0VMaXN0PFJlcXVpcmVtZW50PigpOworCQlWZXJpZnkgY3VycmVudFZlcmlmeSA9IG51bGw7CisKKwkJaWYgKGdldEJhc2VfTmFtZWRFbGVtZW50KCkgIT0gbnVsbCkgeworCQkJLy8gRmluZCBTYXRpc2Z5IGxpbmsKKwkJCUl0ZXJhdG9yPERlcGVuZGVuY3k+IGl0RGVwID0gZ2V0QmFzZV9OYW1lZEVsZW1lbnQoKS5nZXRDbGllbnREZXBlbmRlbmNpZXMoKS5pdGVyYXRvcigpOworCisJCQl3aGlsZSAoaXREZXAuaGFzTmV4dCgpKSB7CisJCQkJRGVwZW5kZW5jeSBjdXJyZW50RGVwZW5kZW5jeSA9IGl0RGVwLm5leHQoKTsKKwkJCQljdXJyZW50VmVyaWZ5ID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oY3VycmVudERlcGVuZGVuY3ksIFZlcmlmeS5jbGFzcyk7CisKKwkJCQlpZiAoY3VycmVudFZlcmlmeSAhPSBudWxsKSB7CisJCQkJCUVMaXN0PE5hbWVkRWxlbWVudD4gc3VwcGxpZXJzID0gY3VycmVudFZlcmlmeS5nZXRCYXNlX0Fic3RyYWN0aW9uKCkuZ2V0U3VwcGxpZXJzKCk7CisJCQkJCUl0ZXJhdG9yPE5hbWVkRWxlbWVudD4gaXQgPSBzdXBwbGllcnMuaXRlcmF0b3IoKTsKKwkJCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJCQkJUmVxdWlyZW1lbnQgY3VycmVudFJlcXVpcmVtZW50ID0gVU1MVXRpbC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oaXQubmV4dCgpLCBSZXF1aXJlbWVudC5jbGFzcyk7CisJCQkJCQlpZiAoY3VycmVudFJlcXVpcmVtZW50ICE9IG51bGwpIHsKKwkJCQkJCQl2ZXJpZmllcy5hZGQoY3VycmVudFJlcXVpcmVtZW50KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisKKwkJVW5tb2RpZmlhYmxlRUxpc3Q8UmVxdWlyZW1lbnQ+IHJlc3VsdExpc3QgPSBuZXcgVW5tb2RpZmlhYmxlRUxpc3Q8UmVxdWlyZW1lbnQ+KHRoaXMsIFJlcXVpcmVtZW50c1BhY2thZ2UuZUlOU1RBTkNFLmdldFJlcXVpcmVtZW50UmVsYXRlZF9WZXJpZmllcygpLCB2ZXJpZmllcy5zaXplKCksIHZlcmlmaWVzLnRvQXJyYXkoKSk7CisJCXJldHVybiByZXN1bHRMaXN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJhc2VfTmFtZWRFbGVtZW50KE5hbWVkRWxlbWVudCBuZXdCYXNlX05hbWVkRWxlbWVudCkgeworCQlOYW1lZEVsZW1lbnQgb2xkQmFzZV9OYW1lZEVsZW1lbnQgPSBiYXNlX05hbWVkRWxlbWVudDsKKwkJYmFzZV9OYW1lZEVsZW1lbnQgPSBuZXdCYXNlX05hbWVkRWxlbWVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX1JFTEFURURfX0JBU0VfTkFNRURfRUxFTUVOVCwgb2xkQmFzZV9OYW1lZEVsZW1lbnQsIGJhc2VfTmFtZWRFbGVtZW50KSk7CisJCX0KKwl9CisKK30gLy8gUmVxdWlyZW1lbnRSZWxhdGVkSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvUmVxdWlyZW1lbnRzRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL1JlcXVpcmVtZW50c0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMmEwZgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL1JlcXVpcmVtZW50c0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLkNvcHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuRGVyaXZlUmVxdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlNhdGlzZnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVmVyaWZ5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlcXVpcmVtZW50c0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgUmVxdWlyZW1lbnRzRmFjdG9yeSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBSZXF1aXJlbWVudHNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlcXVpcmVtZW50c0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVJlcXVpcmVtZW50c0ZhY3RvcnkgdGhlUmVxdWlyZW1lbnRzRmFjdG9yeSA9IChSZXF1aXJlbWVudHNGYWN0b3J5KSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpOworCQkJaWYgKHRoZVJlcXVpcmVtZW50c0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVSZXF1aXJlbWVudHNGYWN0b3J5OworCQkJfQorCQl9IGNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFJlcXVpcmVtZW50c0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZXF1aXJlbWVudHNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuREVSSVZFX1JFUVQ6CisJCQlyZXR1cm4gY3JlYXRlRGVyaXZlUmVxdCgpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuVkVSSUZZOgorCQkJcmV0dXJuIGNyZWF0ZVZlcmlmeSgpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuQ09QWToKKwkJCXJldHVybiBjcmVhdGVDb3B5KCk7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5TQVRJU0ZZOgorCQkJcmV0dXJuIGNyZWF0ZVNhdGlzZnkoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRToKKwkJCXJldHVybiBjcmVhdGVUZXN0Q2FzZSgpOworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuUkVRVUlSRU1FTlQ6CisJCQlyZXR1cm4gY3JlYXRlUmVxdWlyZW1lbnQoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX1JFTEFURUQ6CisJCQlyZXR1cm4gY3JlYXRlUmVxdWlyZW1lbnRSZWxhdGVkKCk7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvcHkgY3JlYXRlQ29weSgpIHsKKwkJQ29weUltcGwgY29weSA9IG5ldyBDb3B5SW1wbCgpOworCQlyZXR1cm4gY29weTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVyaXZlUmVxdCBjcmVhdGVEZXJpdmVSZXF0KCkgeworCQlEZXJpdmVSZXF0SW1wbCBkZXJpdmVSZXF0ID0gbmV3IERlcml2ZVJlcXRJbXBsKCk7CisJCXJldHVybiBkZXJpdmVSZXF0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZXF1aXJlbWVudCBjcmVhdGVSZXF1aXJlbWVudCgpIHsKKwkJUmVxdWlyZW1lbnRJbXBsIHJlcXVpcmVtZW50ID0gbmV3IFJlcXVpcmVtZW50SW1wbCgpOworCQlyZXR1cm4gcmVxdWlyZW1lbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlcXVpcmVtZW50UmVsYXRlZCBjcmVhdGVSZXF1aXJlbWVudFJlbGF0ZWQoKSB7CisJCVJlcXVpcmVtZW50UmVsYXRlZEltcGwgcmVxdWlyZW1lbnRSZWxhdGVkID0gbmV3IFJlcXVpcmVtZW50UmVsYXRlZEltcGwoKTsKKwkJcmV0dXJuIHJlcXVpcmVtZW50UmVsYXRlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2F0aXNmeSBjcmVhdGVTYXRpc2Z5KCkgeworCQlTYXRpc2Z5SW1wbCBzYXRpc2Z5ID0gbmV3IFNhdGlzZnlJbXBsKCk7CisJCXJldHVybiBzYXRpc2Z5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0Q2FzZSBjcmVhdGVUZXN0Q2FzZSgpIHsKKwkJVGVzdENhc2VJbXBsIHRlc3RDYXNlID0gbmV3IFRlc3RDYXNlSW1wbCgpOworCQlyZXR1cm4gdGVzdENhc2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlcmlmeSBjcmVhdGVWZXJpZnkoKSB7CisJCVZlcmlmeUltcGwgdmVyaWZ5ID0gbmV3IFZlcmlmeUltcGwoKTsKKwkJcmV0dXJuIHZlcmlmeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVxdWlyZW1lbnRzUGFja2FnZSBnZXRSZXF1aXJlbWVudHNQYWNrYWdlKCkgeworCQlyZXR1cm4gKFJlcXVpcmVtZW50c1BhY2thZ2UpIGdldEVQYWNrYWdlKCk7CisJfQorCit9IC8vIFJlcXVpcmVtZW50c0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9SZXF1aXJlbWVudHNQYWNrYWdlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvUmVxdWlyZW1lbnRzUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTg3ZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvUmVxdWlyZW1lbnRzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDU4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuU3lzbWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWN0aXZpdGllcy5BY3Rpdml0aWVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuaW50ZXJuYWwuaW1wbC5BY3Rpdml0aWVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5BbGxvY2F0aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hbGxvY2F0aW9ucy5pbnRlcm5hbC5pbXBsLkFsbG9jYXRpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuQmxvY2tzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmJsb2Nrcy5pbnRlcm5hbC5pbXBsLkJsb2Nrc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuQ29uc3RyYWludHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuY29uc3RyYWludHMuaW50ZXJuYWwuaW1wbC5Db25zdHJhaW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLkludGVyYWN0aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcmFjdGlvbnMuaW50ZXJuYWwuaW1wbC5JbnRlcmFjdGlvbnNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVybmFsLmltcGwuU3lzbWxQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZWxlbWVudHMuTW9kZWxlbGVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLmludGVybmFsLmltcGwuTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLlBvcnRhbmRmbG93c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wb3J0YW5kZmxvd3MuaW50ZXJuYWwuaW1wbC5Qb3J0YW5kZmxvd3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5Db3B5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLkRlcml2ZVJlcXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5TYXRpc2Z5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlZlcmlmeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuU3RhdGVtYWNoaW5lc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLmludGVybmFsLmltcGwuU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuVXNlY2FzZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuaW50ZXJuYWwuaW1wbC5Vc2VjYXNlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudHlwZXMuVHlwZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLlVNTFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBSZXF1aXJlbWVudHNQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgUmVxdWlyZW1lbnRzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4gQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlcXVpcmVtZW50c1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSB7CisJCQlyZXR1cm4gKFJlcXVpcmVtZW50c1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFJlcXVpcmVtZW50c1BhY2thZ2UuZU5TX1VSSSk7CisJCX0KKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBSZXF1aXJlbWVudHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBSZXF1aXJlbWVudHNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJU3lzbWxQYWNrYWdlSW1wbCB0aGVTeXNtbFBhY2thZ2UgPSAoU3lzbWxQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN5c21sUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTeXNtbFBhY2thZ2UuZU5TX1VSSSkgOiBTeXNtbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsIHRoZU1vZGVsZWxlbWVudHNQYWNrYWdlID0gKE1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsZWxlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UKKwkJCQkuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbGVsZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlCbG9ja3NQYWNrYWdlSW1wbCB0aGVCbG9ja3NQYWNrYWdlID0gKEJsb2Nrc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEJsb2Nrc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQmxvY2tzUGFja2FnZS5lTlNfVVJJKSA6IEJsb2Nrc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUG9ydGFuZGZsb3dzUGFja2FnZUltcGwgdGhlUG9ydGFuZGZsb3dzUGFja2FnZSA9IChQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFBvcnRhbmRmbG93c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IFBvcnRhbmRmbG93c1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQ29uc3RyYWludHNQYWNrYWdlSW1wbCB0aGVDb25zdHJhaW50c1BhY2thZ2UgPSAoQ29uc3RyYWludHNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbnN0cmFpbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb25zdHJhaW50c1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IENvbnN0cmFpbnRzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBY3Rpdml0aWVzUGFja2FnZUltcGwgdGhlQWN0aXZpdGllc1BhY2thZ2UgPSAoQWN0aXZpdGllc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWN0aXZpdGllc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBBY3Rpdml0aWVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWN0aXZpdGllc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCB0aGVBbGxvY2F0aW9uc1BhY2thZ2UgPSAoQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCkgKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFsbG9jYXRpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBbGxvY2F0aW9uc1BhY2thZ2UuZU5TX1VSSSkKKwkJCQk6IEFsbG9jYXRpb25zUGFja2FnZS5lSU5TVEFOQ0UpOworCQlJbnRlcmFjdGlvbnNQYWNrYWdlSW1wbCB0aGVJbnRlcmFjdGlvbnNQYWNrYWdlID0gKEludGVyYWN0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEludGVyYWN0aW9uc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoSW50ZXJhY3Rpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogSW50ZXJhY3Rpb25zUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwgdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UgPSAoU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhdGVtYWNoaW5lc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSA6IFN0YXRlbWFjaGluZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVVzZWNhc2VzUGFja2FnZUltcGwgdGhlVXNlY2FzZXNQYWNrYWdlID0gKFVzZWNhc2VzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVc2VjYXNlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVXNlY2FzZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBVc2VjYXNlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTeXNtbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVCbG9ja3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb25zdHJhaW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFjdGl2aXRpZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBbGxvY2F0aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUludGVyYWN0aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVCbG9ja3NQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUG9ydGFuZGZsb3dzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFjdGl2aXRpZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWxsb2NhdGlvbnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVXNlY2FzZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuZnJlZXplKCk7CisKKworCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KFJlcXVpcmVtZW50c1BhY2thZ2UuZU5TX1VSSSwgdGhlUmVxdWlyZW1lbnRzUGFja2FnZSk7CisJCXJldHVybiB0aGVSZXF1aXJlbWVudHNQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRlcml2ZVJlcXRFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdmVyaWZ5RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGNvcHlFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2F0aXNmeUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0Q2FzZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZXF1aXJlbWVudEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlCisJICogcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPgorCSAqIE5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwgaWYgb25lIGFscmVhZHkgZXhpc3RzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBSZXF1aXJlbWVudHNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgUmVxdWlyZW1lbnRzRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZGVyaXZlUmVxdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERVJJVkVfUkVRVCk7CisKKwkJdmVyaWZ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFZFUklGWSk7CisKKwkJY29weUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT1BZKTsKKworCQlzYXRpc2Z5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFNBVElTRlkpOworCisJCXRlc3RDYXNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfQ0FTRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodGVzdENhc2VFQ2xhc3MsIFRFU1RfQ0FTRV9fQkFTRV9CRUhBVklPUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UodGVzdENhc2VFQ2xhc3MsIFRFU1RfQ0FTRV9fQkFTRV9PUEVSQVRJT04pOworCQljcmVhdGVFUmVmZXJlbmNlKHRlc3RDYXNlRUNsYXNzLCBURVNUX0NBU0VfX1ZFUklGSUVTKTsKKworCQlyZXF1aXJlbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhSRVFVSVJFTUVOVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocmVxdWlyZW1lbnRFQ2xhc3MsIFJFUVVJUkVNRU5UX19URVhUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShyZXF1aXJlbWVudEVDbGFzcywgUkVRVUlSRU1FTlRfX0lEKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyZXF1aXJlbWVudEVDbGFzcywgUkVRVUlSRU1FTlRfX0RFUklWRUQpOworCQljcmVhdGVFUmVmZXJlbmNlKHJlcXVpcmVtZW50RUNsYXNzLCBSRVFVSVJFTUVOVF9fREVSSVZFRF9GUk9NKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyZXF1aXJlbWVudEVDbGFzcywgUkVRVUlSRU1FTlRfX1NBVElTRklFRF9CWSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocmVxdWlyZW1lbnRFQ2xhc3MsIFJFUVVJUkVNRU5UX19SRUZJTkVEX0JZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyZXF1aXJlbWVudEVDbGFzcywgUkVRVUlSRU1FTlRfX1RSQUNFRF9UTyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocmVxdWlyZW1lbnRFQ2xhc3MsIFJFUVVJUkVNRU5UX19WRVJJRklFRF9CWSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocmVxdWlyZW1lbnRFQ2xhc3MsIFJFUVVJUkVNRU5UX19NQVNURVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHJlcXVpcmVtZW50RUNsYXNzLCBSRVFVSVJFTUVOVF9fQkFTRV9DTEFTUyk7CisKKwkJcmVxdWlyZW1lbnRSZWxhdGVkRUNsYXNzID0gY3JlYXRlRUNsYXNzKFJFUVVJUkVNRU5UX1JFTEFURUQpOworCQljcmVhdGVFUmVmZXJlbmNlKHJlcXVpcmVtZW50UmVsYXRlZEVDbGFzcywgUkVRVUlSRU1FTlRfUkVMQVRFRF9fQkFTRV9OQU1FRF9FTEVNRU5UKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MsIFJFUVVJUkVNRU5UX1JFTEFURURfX1RSQUNFRF9GUk9NKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MsIFJFUVVJUkVNRU5UX1JFTEFURURfX1NBVElTRklFUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocmVxdWlyZW1lbnRSZWxhdGVkRUNsYXNzLCBSRVFVSVJFTUVOVF9SRUxBVEVEX19SRUZJTkVTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MsIFJFUVVJUkVNRU5UX1JFTEFURURfX1ZFUklGSUVTKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldENvcHkoKSB7CisJCXJldHVybiBjb3B5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGVyaXZlUmVxdCgpIHsKKwkJcmV0dXJuIGRlcml2ZVJlcXRFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSZXF1aXJlbWVudCgpIHsKKwkJcmV0dXJuIHJlcXVpcmVtZW50RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50X0Jhc2VfQ2xhc3MoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgcmVxdWlyZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRSZXF1aXJlbWVudF9EZXJpdmVkKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHJlcXVpcmVtZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfRGVyaXZlZEZyb20oKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgcmVxdWlyZW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSZXF1aXJlbWVudF9JZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKSByZXF1aXJlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50X01hc3RlcigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByZXF1aXJlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50X1JlZmluZWRCeSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByZXF1aXJlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50X1NhdGlzZmllZEJ5KCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHJlcXVpcmVtZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UmVxdWlyZW1lbnRfVGV4dCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKSByZXF1aXJlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50X1RyYWNlZFRvKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHJlcXVpcmVtZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UmVxdWlyZW1lbnRfVmVyaWZpZWRCeSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByZXF1aXJlbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UmVxdWlyZW1lbnRSZWxhdGVkKCkgeworCQlyZXR1cm4gcmVxdWlyZW1lbnRSZWxhdGVkRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50UmVsYXRlZF9CYXNlX05hbWVkRWxlbWVudCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRSZXF1aXJlbWVudFJlbGF0ZWRfUmVmaW5lcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRSZXF1aXJlbWVudFJlbGF0ZWRfU2F0aXNmaWVzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHJlcXVpcmVtZW50UmVsYXRlZEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50UmVsYXRlZF9UcmFjZWRGcm9tKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHJlcXVpcmVtZW50UmVsYXRlZEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlcXVpcmVtZW50UmVsYXRlZF9WZXJpZmllcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSByZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVxdWlyZW1lbnRzRmFjdG9yeSBnZXRSZXF1aXJlbWVudHNGYWN0b3J5KCkgeworCQlyZXR1cm4gKFJlcXVpcmVtZW50c0ZhY3RvcnkpIGdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNhdGlzZnkoKSB7CisJCXJldHVybiBzYXRpc2Z5RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdENhc2UoKSB7CisJCXJldHVybiB0ZXN0Q2FzZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUZXN0Q2FzZV9CYXNlX0JlaGF2aW9yKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpIHRlc3RDYXNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VGVzdENhc2VfQmFzZV9PcGVyYXRpb24oKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSkgdGVzdENhc2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUZXN0Q2FzZV9WZXJpZmllcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKSB0ZXN0Q2FzZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VmVyaWZ5KCkgeworCQlyZXR1cm4gdmVyaWZ5RUNsYXNzOworCX0KKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlTdGFuZGFyZFBhY2thZ2UgdGhlU3RhbmRhcmRQYWNrYWdlID0gKFN0YW5kYXJkUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCQlVTUxQYWNrYWdlIHRoZVVNTFBhY2thZ2UgPSAoVU1MUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVU1MUGFja2FnZS5lTlNfVVJJKTsKKwkJVHlwZXNQYWNrYWdlIHRoZVR5cGVzUGFja2FnZSA9IChUeXBlc1BhY2thZ2UpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFR5cGVzUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlkZXJpdmVSZXF0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRUcmFjZSgpKTsKKwkJdmVyaWZ5RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRUcmFjZSgpKTsKKwkJY29weUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0VHJhY2UoKSk7CisJCXNhdGlzZnlFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFRyYWNlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcywgZmVhdHVyZXMsIGFuZCBvcGVyYXRpb25zOyBhZGQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGRlcml2ZVJlcXRFQ2xhc3MsIERlcml2ZVJlcXQuY2xhc3MsICJEZXJpdmVSZXF0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3ModmVyaWZ5RUNsYXNzLCBWZXJpZnkuY2xhc3MsICJWZXJpZnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhjb3B5RUNsYXNzLCBDb3B5LmNsYXNzLCAiQ29weSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKHNhdGlzZnlFQ2xhc3MsIFNhdGlzZnkuY2xhc3MsICJTYXRpc2Z5IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3ModGVzdENhc2VFQ2xhc3MsIFRlc3RDYXNlLmNsYXNzLCAiVGVzdENhc2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldFRlc3RDYXNlX0Jhc2VfQmVoYXZpb3IoKSwgdGhlVU1MUGFja2FnZS5nZXRCZWhhdmlvcigpLCBudWxsLCAiYmFzZV9CZWhhdmlvciIsIG51bGwsIDEsIDEsIFRlc3RDYXNlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsICFJU19ERVJJVkVELAorCQkJCSFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VGVzdENhc2VfQmFzZV9PcGVyYXRpb24oKSwgdGhlVU1MUGFja2FnZS5nZXRPcGVyYXRpb24oKSwgbnVsbCwgImJhc2VfT3BlcmF0aW9uIiwgbnVsbCwgMSwgMSwgVGVzdENhc2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRUZXN0Q2FzZV9WZXJpZmllcygpLCB0aGlzLmdldFJlcXVpcmVtZW50KCksIG51bGwsICJ2ZXJpZmllcyIsIG51bGwsIDAsIC0xLCBUZXN0Q2FzZS5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHJlcXVpcmVtZW50RUNsYXNzLCBSZXF1aXJlbWVudC5jbGFzcywgIlJlcXVpcmVtZW50IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRSZXF1aXJlbWVudF9UZXh0KCksIHRoZVR5cGVzUGFja2FnZS5nZXRTdHJpbmcoKSwgInRleHQiLCBudWxsLCAxLCAxLCBSZXF1aXJlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgIUlTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRSZXF1aXJlbWVudF9JZCgpLCB0aGVUeXBlc1BhY2thZ2UuZ2V0U3RyaW5nKCksICJpZCIsIG51bGwsIDEsIDEsIFJlcXVpcmVtZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFJlcXVpcmVtZW50X0Rlcml2ZWQoKSwgdGhpcy5nZXRSZXF1aXJlbWVudCgpLCBudWxsLCAiZGVyaXZlZCIsIG51bGwsIDAsIC0xLCBSZXF1aXJlbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsICFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UmVxdWlyZW1lbnRfRGVyaXZlZEZyb20oKSwgdGhpcy5nZXRSZXF1aXJlbWVudCgpLCBudWxsLCAiZGVyaXZlZEZyb20iLCBudWxsLCAwLCAtMSwgUmVxdWlyZW1lbnQuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFJlcXVpcmVtZW50X1NhdGlzZmllZEJ5KCksIHRoZVVNTFBhY2thZ2UuZ2V0TmFtZWRFbGVtZW50KCksIG51bGwsICJzYXRpc2ZpZWRCeSIsIG51bGwsIDAsIC0xLCBSZXF1aXJlbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRSZXF1aXJlbWVudF9SZWZpbmVkQnkoKSwgdGhlVU1MUGFja2FnZS5nZXROYW1lZEVsZW1lbnQoKSwgbnVsbCwgInJlZmluZWRCeSIsIG51bGwsIDAsIC0xLCBSZXF1aXJlbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRSZXF1aXJlbWVudF9UcmFjZWRUbygpLCB0aGVVTUxQYWNrYWdlLmdldE5hbWVkRWxlbWVudCgpLCBudWxsLCAidHJhY2VkVG8iLCBudWxsLCAwLCAtMSwgUmVxdWlyZW1lbnQuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCBJU19ERVJJVkVELAorCQkJCSFJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UmVxdWlyZW1lbnRfVmVyaWZpZWRCeSgpLCB0aGVVTUxQYWNrYWdlLmdldE5hbWVkRWxlbWVudCgpLCBudWxsLCAidmVyaWZpZWRCeSIsIG51bGwsIDAsIC0xLCBSZXF1aXJlbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRSZXF1aXJlbWVudF9NYXN0ZXIoKSwgdGhpcy5nZXRSZXF1aXJlbWVudCgpLCBudWxsLCAibWFzdGVyIiwgbnVsbCwgMCwgMSwgUmVxdWlyZW1lbnQuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCBJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFJlcXVpcmVtZW50X0Jhc2VfQ2xhc3MoKSwgdGhlVU1MUGFja2FnZS5nZXRDbGFzc18oKSwgbnVsbCwgImJhc2VfQ2xhc3MiLCBudWxsLCAxLCAxLCBSZXF1aXJlbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhyZXF1aXJlbWVudFJlbGF0ZWRFQ2xhc3MsIFJlcXVpcmVtZW50UmVsYXRlZC5jbGFzcywgIlJlcXVpcmVtZW50UmVsYXRlZCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UmVxdWlyZW1lbnRSZWxhdGVkX0Jhc2VfTmFtZWRFbGVtZW50KCksIHRoZVVNTFBhY2thZ2UuZ2V0TmFtZWRFbGVtZW50KCksIG51bGwsICJiYXNlX05hbWVkRWxlbWVudCIsIG51bGwsIDEsIDEsIFJlcXVpcmVtZW50UmVsYXRlZC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLAorCQkJCSFJU19VTklRVUUsICFJU19ERVJJVkVELCAhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFJlcXVpcmVtZW50UmVsYXRlZF9UcmFjZWRGcm9tKCksIHRoaXMuZ2V0UmVxdWlyZW1lbnQoKSwgbnVsbCwgInRyYWNlZEZyb20iLCBudWxsLCAwLCAtMSwgUmVxdWlyZW1lbnRSZWxhdGVkLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFJlcXVpcmVtZW50UmVsYXRlZF9TYXRpc2ZpZXMoKSwgdGhpcy5nZXRSZXF1aXJlbWVudCgpLCBudWxsLCAic2F0aXNmaWVzIiwgbnVsbCwgMCwgLTEsIFJlcXVpcmVtZW50UmVsYXRlZC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRSZXF1aXJlbWVudFJlbGF0ZWRfUmVmaW5lcygpLCB0aGlzLmdldFJlcXVpcmVtZW50KCksIG51bGwsICJyZWZpbmVzIiwgbnVsbCwgMCwgLTEsIFJlcXVpcmVtZW50UmVsYXRlZC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsICFJU19VTklRVUUsIElTX0RFUklWRUQsCisJCQkJIUlTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRSZXF1aXJlbWVudFJlbGF0ZWRfVmVyaWZpZXMoKSwgdGhpcy5nZXRSZXF1aXJlbWVudCgpLCBudWxsLCAidmVyaWZpZXMiLCBudWxsLCAwLCAtMSwgUmVxdWlyZW1lbnRSZWxhdGVkLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgIUlTX1VOSVFVRSwgSVNfREVSSVZFRCwKKwkJCQkhSVNfT1JERVJFRCk7CisJfQorCit9IC8vIFJlcXVpcmVtZW50c1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9TYXRpc2Z5SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvU2F0aXNmeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjVlZWUwCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvU2F0aXNmeUltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuU2F0aXNmeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcgPGVtPjxiPlNhdGlzZnk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNhdGlzZnlJbXBsIGV4dGVuZHMgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5pbnRlcm5hbC5pbXBsLlRyYWNlSW1wbCBpbXBsZW1lbnRzIFNhdGlzZnkgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNhdGlzZnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUmVxdWlyZW1lbnRzUGFja2FnZS5MaXRlcmFscy5TQVRJU0ZZOworCX0KKworfSAvLyBTYXRpc2Z5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvVGVzdENhc2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvaW50ZXJuYWwvaW1wbC9UZXN0Q2FzZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzg4OTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvVGVzdENhc2VJbXBsLmphdmEKQEAgLTAsMCArMSwyOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLk1pbmltYWxFT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZUVMaXN0LlVubW9kaWZpYWJsZUVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVmVyaWZ5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkJlaGF2aW9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLkRlcGVuZGVuY3k7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuTmFtZWRFbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnVtbDIudW1sLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC51dGlsLlVNTFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5UZXN0IENhc2U8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLmludGVybmFsLmltcGwuVGVzdENhc2VJbXBsI2dldEJhc2VfQmVoYXZpb3IgPGVtPkJhc2UgQmVoYXZpb3I8L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlRlc3RDYXNlSW1wbCNnZXRCYXNlX09wZXJhdGlvbiA8ZW0+QmFzZSBPcGVyYXRpb248L2VtPn08L2xpPgorICogPGxpPntAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlRlc3RDYXNlSW1wbCNnZXRWZXJpZmllcyA8ZW0+VmVyaWZpZXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0Q2FzZUltcGwgZXh0ZW5kcyBNaW5pbWFsRU9iamVjdEltcGwuQ29udGFpbmVyIGltcGxlbWVudHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9CZWhhdmlvcigpIDxlbT5CYXNlIEJlaGF2aW9yPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgI2dldEJhc2VfQmVoYXZpb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBCZWhhdmlvciBiYXNlX0JlaGF2aW9yOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QmFzZV9PcGVyYXRpb24oKSA8ZW0+QmFzZSBPcGVyYXRpb248L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSAjZ2V0QmFzZV9PcGVyYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBPcGVyYXRpb24gYmFzZV9PcGVyYXRpb247CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdENhc2VJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCZWhhdmlvciBiYXNpY0dldEJhc2VfQmVoYXZpb3IoKSB7CisJCXJldHVybiBiYXNlX0JlaGF2aW9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPcGVyYXRpb24gYmFzaWNHZXRCYXNlX09wZXJhdGlvbigpIHsKKwkJcmV0dXJuIGJhc2VfT3BlcmF0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRV9fQkFTRV9CRUhBVklPUjoKKwkJCWlmIChyZXNvbHZlKSB7CisJCQkJcmV0dXJuIGdldEJhc2VfQmVoYXZpb3IoKTsKKwkJCX0KKwkJCXJldHVybiBiYXNpY0dldEJhc2VfQmVoYXZpb3IoKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRV9fQkFTRV9PUEVSQVRJT046CisJCQlpZiAocmVzb2x2ZSkgeworCQkJCXJldHVybiBnZXRCYXNlX09wZXJhdGlvbigpOworCQkJfQorCQkJcmV0dXJuIGJhc2ljR2V0QmFzZV9PcGVyYXRpb24oKTsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRV9fVkVSSUZJRVM6CisJCQlyZXR1cm4gZ2V0VmVyaWZpZXMoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuVEVTVF9DQVNFX19CQVNFX0JFSEFWSU9SOgorCQkJcmV0dXJuIGJhc2VfQmVoYXZpb3IgIT0gbnVsbDsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRV9fQkFTRV9PUEVSQVRJT046CisJCQlyZXR1cm4gYmFzZV9PcGVyYXRpb24gIT0gbnVsbDsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRV9fVkVSSUZJRVM6CisJCQlyZXR1cm4gIWdldFZlcmlmaWVzKCkuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuVEVTVF9DQVNFX19CQVNFX0JFSEFWSU9SOgorCQkJc2V0QmFzZV9CZWhhdmlvcigoQmVoYXZpb3IpIG5ld1ZhbHVlKTsKKwkJCXJldHVybjsKKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRV9fQkFTRV9PUEVSQVRJT046CisJCQlzZXRCYXNlX09wZXJhdGlvbigoT3BlcmF0aW9uKSBuZXdWYWx1ZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFJlcXVpcmVtZW50c1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9DQVNFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5URVNUX0NBU0VfX0JBU0VfQkVIQVZJT1I6CisJCQlzZXRCYXNlX0JlaGF2aW9yKChCZWhhdmlvcikgbnVsbCk7CisJCQlyZXR1cm47CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5URVNUX0NBU0VfX0JBU0VfT1BFUkFUSU9OOgorCQkJc2V0QmFzZV9PcGVyYXRpb24oKE9wZXJhdGlvbikgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJlaGF2aW9yIGdldEJhc2VfQmVoYXZpb3IoKSB7CisJCWlmIChiYXNlX0JlaGF2aW9yICE9IG51bGwgJiYgYmFzZV9CZWhhdmlvci5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZV9CZWhhdmlvciA9IChJbnRlcm5hbEVPYmplY3QpIGJhc2VfQmVoYXZpb3I7CisJCQliYXNlX0JlaGF2aW9yID0gKEJlaGF2aW9yKSBlUmVzb2x2ZVByb3h5KG9sZEJhc2VfQmVoYXZpb3IpOworCQkJaWYgKGJhc2VfQmVoYXZpb3IgIT0gb2xkQmFzZV9CZWhhdmlvcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgUmVxdWlyZW1lbnRzUGFja2FnZS5URVNUX0NBU0VfX0JBU0VfQkVIQVZJT1IsIG9sZEJhc2VfQmVoYXZpb3IsIGJhc2VfQmVoYXZpb3IpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIGJhc2VfQmVoYXZpb3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9wZXJhdGlvbiBnZXRCYXNlX09wZXJhdGlvbigpIHsKKwkJaWYgKGJhc2VfT3BlcmF0aW9uICE9IG51bGwgJiYgYmFzZV9PcGVyYXRpb24uZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEJhc2VfT3BlcmF0aW9uID0gKEludGVybmFsRU9iamVjdCkgYmFzZV9PcGVyYXRpb247CisJCQliYXNlX09wZXJhdGlvbiA9IChPcGVyYXRpb24pIGVSZXNvbHZlUHJveHkob2xkQmFzZV9PcGVyYXRpb24pOworCQkJaWYgKGJhc2VfT3BlcmF0aW9uICE9IG9sZEJhc2VfT3BlcmF0aW9uKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBSZXF1aXJlbWVudHNQYWNrYWdlLlRFU1RfQ0FTRV9fQkFTRV9PUEVSQVRJT04sIG9sZEJhc2VfT3BlcmF0aW9uLCBiYXNlX09wZXJhdGlvbikpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYmFzZV9PcGVyYXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFTGlzdDxSZXF1aXJlbWVudD4gZ2V0VmVyaWZpZXMoKSB7CisJCS8vIFRoaXMgc2hvdWxkIHJldHVybiB0aGUgUmVxdWlyZW1lbnRzIHZlcmlmaWVkIGJ5IGN1cnJlbnQgVGVzdENhc2UKKwkJRUxpc3Q8UmVxdWlyZW1lbnQ+IHZlcmlmaWVzID0gbmV3IEJhc2ljRUxpc3Q8UmVxdWlyZW1lbnQ+KCk7CisJCVZlcmlmeSBjdXJyZW50VmVyaWZ5ID0gbnVsbDsKKworCQlpZiAoKGdldEJhc2VfQmVoYXZpb3IoKSAhPSBudWxsKSB8fCAoZ2V0QmFzZV9PcGVyYXRpb24oKSAhPSBudWxsKSkgeworCQkJLy8gRmluZCBWZXJpZnkgbGluaworCQkJSXRlcmF0b3I8RGVwZW5kZW5jeT4gaXREZXA7CisJCQlpZiAoZ2V0QmFzZV9CZWhhdmlvcigpICE9IG51bGwpIHsKKwkJCQlpdERlcCA9IGdldEJhc2VfQmVoYXZpb3IoKS5nZXRDbGllbnREZXBlbmRlbmNpZXMoKS5pdGVyYXRvcigpOworCQkJfSBlbHNlIHsgLy8gaWYgKGdldEJhc2VfT3BlcmF0aW9uKCkgIT0gbnVsbCkKKwkJCQlpdERlcCA9IGdldEJhc2VfT3BlcmF0aW9uKCkuZ2V0Q2xpZW50RGVwZW5kZW5jaWVzKCkuaXRlcmF0b3IoKTsKKwkJCX0KKworCQkJd2hpbGUgKGl0RGVwLmhhc05leHQoKSkgeworCQkJCURlcGVuZGVuY3kgY3VycmVudERlcGVuZGVuY3kgPSBpdERlcC5uZXh0KCk7CisJCQkJY3VycmVudFZlcmlmeSA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGN1cnJlbnREZXBlbmRlbmN5LCBWZXJpZnkuY2xhc3MpOworCisJCQkJaWYgKGN1cnJlbnRWZXJpZnkgIT0gbnVsbCkgeworCQkJCQlFTGlzdDxOYW1lZEVsZW1lbnQ+IHN1cHBsaWVycyA9IGN1cnJlbnRWZXJpZnkuZ2V0QmFzZV9BYnN0cmFjdGlvbigpLmdldFN1cHBsaWVycygpOworCQkJCQlJdGVyYXRvcjxOYW1lZEVsZW1lbnQ+IGl0ID0gc3VwcGxpZXJzLml0ZXJhdG9yKCk7CisJCQkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCQkJCVJlcXVpcmVtZW50IGN1cnJlbnRSZXF1aXJlbWVudCA9IFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGl0Lm5leHQoKSwgUmVxdWlyZW1lbnQuY2xhc3MpOworCQkJCQkJaWYgKGN1cnJlbnRSZXF1aXJlbWVudCAhPSBudWxsKSB7CisJCQkJCQkJdmVyaWZpZXMuYWRkKGN1cnJlbnRSZXF1aXJlbWVudCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlVbm1vZGlmaWFibGVFTGlzdDxSZXF1aXJlbWVudD4gcmVzdWx0TGlzdCA9IG5ldyBVbm1vZGlmaWFibGVFTGlzdDxSZXF1aXJlbWVudD4odGhpcywgUmVxdWlyZW1lbnRzUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VGVzdENhc2VfVmVyaWZpZXMoKSwgdmVyaWZpZXMuc2l6ZSgpLCB2ZXJpZmllcy50b0FycmF5KCkpOworCQlyZXR1cm4gcmVzdWx0TGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX0JlaGF2aW9yKEJlaGF2aW9yIG5ld0Jhc2VfQmVoYXZpb3IpIHsKKwkJQmVoYXZpb3Igb2xkQmFzZV9CZWhhdmlvciA9IGJhc2VfQmVoYXZpb3I7CisJCWJhc2VfQmVoYXZpb3IgPSBuZXdCYXNlX0JlaGF2aW9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJlcXVpcmVtZW50c1BhY2thZ2UuVEVTVF9DQVNFX19CQVNFX0JFSEFWSU9SLCBvbGRCYXNlX0JlaGF2aW9yLCBiYXNlX0JlaGF2aW9yKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCYXNlX09wZXJhdGlvbihPcGVyYXRpb24gbmV3QmFzZV9PcGVyYXRpb24pIHsKKwkJT3BlcmF0aW9uIG9sZEJhc2VfT3BlcmF0aW9uID0gYmFzZV9PcGVyYXRpb247CisJCWJhc2VfT3BlcmF0aW9uID0gbmV3QmFzZV9PcGVyYXRpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUmVxdWlyZW1lbnRzUGFja2FnZS5URVNUX0NBU0VfX0JBU0VfT1BFUkFUSU9OLCBvbGRCYXNlX09wZXJhdGlvbiwgYmFzZV9PcGVyYXRpb24pKTsKKwkJfQorCX0KKworfSAvLyBUZXN0Q2FzZUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL1ZlcmlmeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy9pbnRlcm5hbC9pbXBsL1ZlcmlmeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjY4Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL2ludGVybmFsL2ltcGwvVmVyaWZ5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5WZXJpZnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnIDxlbT48Yj5WZXJpZnk8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFZlcmlmeUltcGwgZXh0ZW5kcyBvcmcuZWNsaXBzZS51bWwyLnVtbC5wcm9maWxlLnN0YW5kYXJkLmludGVybmFsLmltcGwuVHJhY2VJbXBsIGltcGxlbWVudHMgVmVyaWZ5IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWZXJpZnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUmVxdWlyZW1lbnRzUGFja2FnZS5MaXRlcmFscy5WRVJJRlk7CisJfQorCit9IC8vIFZlcmlmeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy91dGlsL1JlcXVpcmVtZW50c0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvdXRpbC9SZXF1aXJlbWVudHNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Njk1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvdXRpbC9SZXF1aXJlbWVudHNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLkNvcHk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuRGVyaXZlUmVxdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudFJlbGF0ZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5TYXRpc2Z5OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlZlcmlmeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcworICogYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlcXVpcmVtZW50c0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFJlcXVpcmVtZW50c1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSZXF1aXJlbWVudHNTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPSBuZXcgUmVxdWlyZW1lbnRzU3dpdGNoPEFkYXB0ZXI+KCkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVyaXZlUmVxdChEZXJpdmVSZXF0IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZURlcml2ZVJlcXRBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZVZlcmlmeShWZXJpZnkgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlVmVyaWZ5QWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VDb3B5KENvcHkgb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlQ29weUFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlU2F0aXNmeShTYXRpc2Z5IG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVNhdGlzZnlBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RDYXNlKFRlc3RDYXNlIG9iamVjdCkgeworCQkJcmV0dXJuIGNyZWF0ZVRlc3RDYXNlQWRhcHRlcigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBBZGFwdGVyIGNhc2VSZXF1aXJlbWVudChSZXF1aXJlbWVudCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVSZXF1aXJlbWVudEFkYXB0ZXIoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBjYXNlUmVxdWlyZW1lbnRSZWxhdGVkKFJlcXVpcmVtZW50UmVsYXRlZCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVSZXF1aXJlbWVudFJlbGF0ZWRBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgY2FzZVRyYWNlKG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQuVHJhY2Ugb2JqZWN0KSB7CisJCQlyZXR1cm4gY3JlYXRlVHJhY2VBZGFwdGVyKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQl9CisJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZXF1aXJlbWVudHNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB0YXJnZXQKKwkgKiAgICAgICAgICAgIHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCkgdGFyZ2V0KTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5Db3B5IDxlbT5Db3B5PC9lbT59Jy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UKKwkgKiBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLkNvcHkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29weUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuRGVyaXZlUmVxdCA8ZW0+RGVyaXZlIFJlcXQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdAorCSAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzCisJICogdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5EZXJpdmVSZXF0CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlcml2ZVJlcXRBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudCA8ZW0+UmVxdWlyZW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdAorCSAqIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzCisJICogdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZXF1aXJlbWVudEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkIDxlbT5SZXF1aXJlbWVudCBSZWxhdGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQKKwkgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncworCSAqIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRSZWxhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlcXVpcmVtZW50UmVsYXRlZEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuU2F0aXNmeSA8ZW0+U2F0aXNmeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5TYXRpc2Z5CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhdGlzZnlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5UZXN0Q2FzZQorCSAqIDxlbT5UZXN0IENhc2U8L2VtPn0nLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKwkgKiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEKKwkgKiBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVGVzdENhc2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdENhc2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAnIHtAbGluayBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5zdGFuZGFyZC5UcmFjZSA8ZW0+VHJhY2U8L2VtPn0nLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZQorCSAqIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwuc3RhbmRhcmQuVHJhY2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVHJhY2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlZlcmlmeSA8ZW0+VmVyaWZ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlZlcmlmeQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVWZXJpZnlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmCisJICogdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlCisJICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KSBvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKK30gLy8gUmVxdWlyZW1lbnRzQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy91dGlsL1JlcXVpcmVtZW50c1Jlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy91dGlsL1JlcXVpcmVtZW50c1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGM3NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL3V0aWwvUmVxdWlyZW1lbnRzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZQorICogcGFja2FnZS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy51dGlsLlJlcXVpcmVtZW50c1Jlc291cmNlSW1wbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVxdWlyZW1lbnRzUmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFJlc291cmNlRmFjdG9yeUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZXF1aXJlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKKwkJWE1MUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFJlcXVpcmVtZW50c1Jlc291cmNlSW1wbCh1cmkpOworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9FWFRFTkRFRF9NRVRBX0RBVEEsIEJvb2xlYW4uVFJVRSk7CisJCXJlc3VsdC5nZXREZWZhdWx0TG9hZE9wdGlvbnMoKS5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VYVEVOREVEX01FVEFfREFUQSwgQm9vbGVhbi5UUlVFKTsKKworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9TQ0hFTUFfTE9DQVRJT04sIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0VOQ09ERURfQVRUUklCVVRFX1NUWUxFLCBCb29sZWFuLlRSVUUpOworCQlyZXN1bHQuZ2V0RGVmYXVsdFNhdmVPcHRpb25zKCkucHV0KFhNTFJlc291cmNlLk9QVElPTl9VU0VfRU5DT0RFRF9BVFRSSUJVVEVfU1RZTEUsIEJvb2xlYW4uVFJVRSk7CisKKwkJcmVzdWx0LmdldERlZmF1bHRMb2FkT3B0aW9ucygpLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fVVNFX0xFWElDQUxfSEFORExFUiwgQm9vbGVhbi5UUlVFKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKK30gLy8gUmVxdWlyZW1lbnRzUmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL3V0aWwvUmVxdWlyZW1lbnRzUmVzb3VyY2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvdXRpbC9SZXF1aXJlbWVudHNSZXNvdXJjZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzZmZmQyCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL3V0aWwvUmVxdWlyZW1lbnRzUmVzb3VyY2VJbXBsLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMudXRpbC5SZXF1aXJlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBSZXF1aXJlbWVudHNSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlcXVpcmVtZW50c1Jlc291cmNlSW1wbChVUkkgdXJpKSB7CisJCXN1cGVyKHVyaSk7CisJfQorCit9IC8vIFJlcXVpcmVtZW50c1Jlc291cmNlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL3V0aWwvUmVxdWlyZW1lbnRzU3dpdGNoLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9yZXF1aXJlbWVudHMvdXRpbC9SZXF1aXJlbWVudHNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGY1NThhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL3V0aWwvUmVxdWlyZW1lbnRzU3dpdGNoLmphdmEKQEAgLTAsMCArMSwzMDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5Td2l0Y2g7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuQ29weTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5EZXJpdmVSZXF0OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50UmVsYXRlZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5SZXF1aXJlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlNhdGlzZnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuVmVyaWZ5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZQorICogaGllcmFyY2h5LiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9IHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0IGFuZCBwcm9jZWVkaW5nIHVwIHRoZQorICogaW5oZXJpdGFuY2UgaGllcmFyY2h5IHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLCB3aGljaCBpcyB0aGUKKyAqIHJlc3VsdCBvZiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucmVxdWlyZW1lbnRzLlJlcXVpcmVtZW50c1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlcXVpcmVtZW50c1N3aXRjaDxUPiBleHRlbmRzIFN3aXRjaDxUPiB7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFJlcXVpcmVtZW50c1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlcXVpcmVtZW50c1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrcyB3aGV0aGVyIHRoaXMgaXMgYSBzd2l0Y2ggZm9yIHRoZSBnaXZlbiBwYWNrYWdlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtZXRlciBlUGFja2FnZSB0aGUgcGFja2FnZSBpbiBxdWVzdGlvbi4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBpcyBhIHN3aXRjaCBmb3IgdGhlIGdpdmVuIHBhY2thZ2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGlzU3dpdGNoRm9yKEVQYWNrYWdlIGVQYWNrYWdlKSB7CisJCXJldHVybiBlUGFja2FnZSA9PSBtb2RlbFBhY2thZ2U7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICcgPGVtPkNvcHk8L2VtPicuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnIDxlbT5Db3B5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQ29weShDb3B5IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXJpdmUgUmVxdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uCisJICogcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXJpdmUgUmVxdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZURlcml2ZVJlcXQoRGVyaXZlUmVxdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVxdWlyZW1lbnQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbgorCSAqIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVxdWlyZW1lbnQ8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VSZXF1aXJlbWVudChSZXF1aXJlbWVudCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVxdWlyZW1lbnQgUmVsYXRlZDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzCisJICogaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUKKwkgKiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZXF1aXJlbWVudCBSZWxhdGVkPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlUmVxdWlyZW1lbnRSZWxhdGVkKFJlcXVpcmVtZW50UmVsYXRlZCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJhY2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAgICAgICAgICAgIHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcmFjZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVRyYWNlKG9yZy5lY2xpcHNlLnVtbDIudW1sLnByb2ZpbGUuc3RhbmRhcmQuVHJhY2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhdGlzZnk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisJICogbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2F0aXNmeTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVNhdGlzZnkoU2F0aXNmeSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBDYXNlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucworCSAqIG51bGw7IHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIG9iamVjdAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgQ2FzZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVRlc3RDYXNlKFRlc3RDYXNlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5WZXJpZnk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisJICogbnVsbDsgcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VmVyaWZ5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlVmVyaWZ5KFZlcmlmeSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMKKwkgKiBudWxsOyByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMKKwkgKiB0aGUgbGFzdCBjYXNlIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogICAgICAgICAgICB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuREVSSVZFX1JFUVQ6IHsKKwkJCURlcml2ZVJlcXQgZGVyaXZlUmVxdCA9IChEZXJpdmVSZXF0KSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlRGVyaXZlUmVxdChkZXJpdmVSZXF0KTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGNhc2VUcmFjZShkZXJpdmVSZXF0KTsKKwkJCX0KKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuVkVSSUZZOiB7CisJCQlWZXJpZnkgdmVyaWZ5ID0gKFZlcmlmeSkgdGhlRU9iamVjdDsKKwkJCVQgcmVzdWx0ID0gY2FzZVZlcmlmeSh2ZXJpZnkpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gY2FzZVRyYWNlKHZlcmlmeSk7CisJCQl9CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLkNPUFk6IHsKKwkJCUNvcHkgY29weSA9IChDb3B5KSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlQ29weShjb3B5KTsKKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGNhc2VUcmFjZShjb3B5KTsKKwkJCX0KKwkJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJfQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQljYXNlIFJlcXVpcmVtZW50c1BhY2thZ2UuU0FUSVNGWTogeworCQkJU2F0aXNmeSBzYXRpc2Z5ID0gKFNhdGlzZnkpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VTYXRpc2Z5KHNhdGlzZnkpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gY2FzZVRyYWNlKHNhdGlzZnkpOworCQkJfQorCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5URVNUX0NBU0U6IHsKKwkJCVRlc3RDYXNlIHRlc3RDYXNlID0gKFRlc3RDYXNlKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlVGVzdENhc2UodGVzdENhc2UpOworCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQkJcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJCWNhc2UgUmVxdWlyZW1lbnRzUGFja2FnZS5SRVFVSVJFTUVOVDogeworCQkJUmVxdWlyZW1lbnQgcmVxdWlyZW1lbnQgPSAoUmVxdWlyZW1lbnQpIHRoZUVPYmplY3Q7CisJCQlUIHJlc3VsdCA9IGNhc2VSZXF1aXJlbWVudChyZXF1aXJlbWVudCk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJY2FzZSBSZXF1aXJlbWVudHNQYWNrYWdlLlJFUVVJUkVNRU5UX1JFTEFURUQ6IHsKKwkJCVJlcXVpcmVtZW50UmVsYXRlZCByZXF1aXJlbWVudFJlbGF0ZWQgPSAoUmVxdWlyZW1lbnRSZWxhdGVkKSB0aGVFT2JqZWN0OworCQkJVCByZXN1bHQgPSBjYXNlUmVxdWlyZW1lbnRSZWxhdGVkKHJlcXVpcmVtZW50UmVsYXRlZCk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCX0KKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworfSAvLyBSZXF1aXJlbWVudHNTd2l0Y2gKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy91dGlsL1JlcXVpcmVtZW50c1hNTFByb2Nlc3Nvci5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvcmVxdWlyZW1lbnRzL3V0aWwvUmVxdWlyZW1lbnRzWE1MUHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3YWM2ZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3JlcXVpcmVtZW50cy91dGlsL1JlcXVpcmVtZW50c1hNTFByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkudXRpbC5YTUxQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGhlbHBlciBtZXRob2RzIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgWE1MIGRvY3VtZW50cworICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVxdWlyZW1lbnRzWE1MUHJvY2Vzc29yIGV4dGVuZHMgWE1MUHJvY2Vzc29yIHsKKworCS8qKgorCSAqIFB1YmxpYyBjb25zdHJ1Y3RvciB0byBpbnN0YW50aWF0ZSB0aGUgaGVscGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlcXVpcmVtZW50c1hNTFByb2Nlc3NvcigpIHsKKwkJc3VwZXIoKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFKSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCX0KKworCS8qKgorCSAqIFJlZ2lzdGVyIGZvciAiKiIgYW5kICJ4bWwiIGZpbGUgZXh0ZW5zaW9ucyB0aGUgUmVxdWlyZW1lbnRzUmVzb3VyY2VGYWN0b3J5SW1wbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE1hcDxTdHJpbmcsIFJlc291cmNlLkZhY3Rvcnk+IGdldFJlZ2lzdHJhdGlvbnMoKSB7CisJCWlmIChyZWdpc3RyYXRpb25zID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFJlZ2lzdHJhdGlvbnMoKTsKKwkJCXJlZ2lzdHJhdGlvbnMucHV0KFhNTF9FWFRFTlNJT04sIG5ldyBSZXF1aXJlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoU1RBUl9FWFRFTlNJT04sIG5ldyBSZXF1aXJlbWVudHNSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQl9CisJCXJldHVybiByZWdpc3RyYXRpb25zOworCX0KKworfSAvLyBSZXF1aXJlbWVudHNYTUxQcm9jZXNzb3IKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3N0YXRlbWFjaGluZXMvU3RhdGVtYWNoaW5lc0ZhY3RvcnkuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3N0YXRlbWFjaGluZXMvU3RhdGVtYWNoaW5lc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2VlYjVkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvc3RhdGVtYWNoaW5lcy9TdGF0ZW1hY2hpbmVzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcyBhCisgKiBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLlN0YXRlbWFjaGluZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhdGVtYWNoaW5lc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RhdGVtYWNoaW5lc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLmludGVybmFsLmltcGwuU3RhdGVtYWNoaW5lc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdGF0ZW1hY2hpbmVzUGFja2FnZSBnZXRTdGF0ZW1hY2hpbmVzUGFja2FnZSgpOworCit9IC8vIFN0YXRlbWFjaGluZXNGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL1N0YXRlbWFjaGluZXNQYWNrYWdlLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL1N0YXRlbWFjaGluZXNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzNWNiYwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3N0YXRlbWFjaGluZXMvU3RhdGVtYWNoaW5lc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQgY29udGFpbnMKKyAqIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLlN0YXRlbWFjaGluZXNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdGF0ZW1hY2hpbmVzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdAorCSAqIHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5EdW1teTwvZW0+JyBkYXRhIHR5cGUuIDwhLS0KKwkJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKgorCQkgKiBAc2VlIGphdmEubGFuZy5TdHJpbmcKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuaW50ZXJuYWwuaW1wbC5TdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwjZ2V0RHVtbXkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgRFVNTVkgPSBlSU5TVEFOQ0UuZ2V0RHVtbXkoKTsKKworCX0KKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gInN0YXRlbWFjaGluZXMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvMC43LjAvU3lzTUwvU3RhdGVNYWNoaW5lcyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJTdGF0ZU1hY2hpbmVzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdGF0ZW1hY2hpbmVzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuaW50ZXJuYWwuaW1wbC5TdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5EdW1teTwvZW0+JyBkYXRhIHR5cGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIGphdmEubGFuZy5TdHJpbmcKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5pbnRlcm5hbC5pbXBsLlN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCNnZXREdW1teSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBEVU1NWSA9IDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgamF2YS5sYW5nLlN0cmluZyA8ZW0+RHVtbXk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPkR1bW15PC9lbT4nLgorCSAqIEBzZWUgamF2YS5sYW5nLlN0cmluZworCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLmxhbmcuU3RyaW5nIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0RHVtbXkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0YXRlbWFjaGluZXNGYWN0b3J5IGdldFN0YXRlbWFjaGluZXNGYWN0b3J5KCk7CisKK30gLy8gU3RhdGVtYWNoaW5lc1BhY2thZ2UKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3N0YXRlbWFjaGluZXMvaW50ZXJuYWwvaW1wbC9TdGF0ZW1hY2hpbmVzRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3N0YXRlbWFjaGluZXMvaW50ZXJuYWwvaW1wbC9TdGF0ZW1hY2hpbmVzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg3YTBlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvc3RhdGVtYWNoaW5lcy9pbnRlcm5hbC9pbXBsL1N0YXRlbWFjaGluZXNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuU3RhdGVtYWNoaW5lc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLlN0YXRlbWFjaGluZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YXRlbWFjaGluZXNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFN0YXRlbWFjaGluZXNGYWN0b3J5IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0YXRlbWFjaGluZXNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBTdGF0ZW1hY2hpbmVzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdGF0ZW1hY2hpbmVzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJU3RhdGVtYWNoaW5lc0ZhY3RvcnkgdGhlU3RhdGVtYWNoaW5lc0ZhY3RvcnkgPSAoU3RhdGVtYWNoaW5lc0ZhY3RvcnkpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpOworCQkJaWYgKHRoZVN0YXRlbWFjaGluZXNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlU3RhdGVtYWNoaW5lc0ZhY3Rvcnk7CisJCQl9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgU3RhdGVtYWNoaW5lc0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGF0ZW1hY2hpbmVzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0RHVtbXlUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlyZXR1cm4gc3VwZXIuY29udmVydFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBTdGF0ZW1hY2hpbmVzUGFja2FnZS5EVU1NWToKKwkJCXJldHVybiBjb252ZXJ0RHVtbXlUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjcmVhdGVEdW1teUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gKFN0cmluZykgc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBTdGF0ZW1hY2hpbmVzUGFja2FnZS5EVU1NWToKKwkJCXJldHVybiBjcmVhdGVEdW1teUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGF0ZW1hY2hpbmVzUGFja2FnZSBnZXRTdGF0ZW1hY2hpbmVzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChTdGF0ZW1hY2hpbmVzUGFja2FnZSkgZ2V0RVBhY2thZ2UoKTsKKwl9CisKK30gLy8gU3RhdGVtYWNoaW5lc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL2ludGVybmFsL2ltcGwvU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL2ludGVybmFsL2ltcGwvU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiZTkzNQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3N0YXRlbWFjaGluZXMvaW50ZXJuYWwvaW1wbC9TdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDIzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGwuSW50ZXJhY3Rpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcm5hbC5pbXBsLlN5c21sUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLk1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuUG9ydGFuZGZsb3dzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5TdGF0ZW1hY2hpbmVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuU3RhdGVtYWNoaW5lc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5pbnRlcm5hbC5pbXBsLlVzZWNhc2VzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgU3RhdGVtYWNoaW5lc1BhY2thZ2UgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqCisJICogPHA+CisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBTdGF0ZW1hY2hpbmVzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4gQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0YXRlbWFjaGluZXNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgeworCQkJcmV0dXJuIChTdGF0ZW1hY2hpbmVzUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhdGVtYWNoaW5lc1BhY2thZ2UuZU5TX1VSSSk7CisJCX0KKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCVN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlTeXNtbFBhY2thZ2VJbXBsIHRoZVN5c21sUGFja2FnZSA9IChTeXNtbFBhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU3lzbWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSA6IFN5c21sUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UgPSAoTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsZWxlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUJsb2Nrc1BhY2thZ2VJbXBsIHRoZUJsb2Nrc1BhY2thZ2UgPSAoQmxvY2tzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQmxvY2tzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIDogQmxvY2tzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCB0aGVQb3J0YW5kZmxvd3NQYWNrYWdlID0gKFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogUG9ydGFuZGZsb3dzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlDb25zdHJhaW50c1BhY2thZ2VJbXBsIHRoZUNvbnN0cmFpbnRzUGFja2FnZSA9IChDb25zdHJhaW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29uc3RyYWludHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29uc3RyYWludHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQ29uc3RyYWludHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUFjdGl2aXRpZXNQYWNrYWdlSW1wbCB0aGVBY3Rpdml0aWVzUGFja2FnZSA9IChBY3Rpdml0aWVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFjdGl2aXRpZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBBY3Rpdml0aWVzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBbGxvY2F0aW9uc1BhY2thZ2VJbXBsIHRoZUFsbG9jYXRpb25zUGFja2FnZSA9IChBbGxvY2F0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWxsb2NhdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUludGVyYWN0aW9uc1BhY2thZ2VJbXBsIHRoZUludGVyYWN0aW9uc1BhY2thZ2UgPSAoSW50ZXJhY3Rpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBJbnRlcmFjdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVVzZWNhc2VzUGFja2FnZUltcGwgdGhlVXNlY2FzZXNQYWNrYWdlID0gKFVzZWNhc2VzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShVc2VjYXNlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBVc2VjYXNlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVXNlY2FzZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBVc2VjYXNlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3lzbWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQmxvY2tzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUG9ydGFuZGZsb3dzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBY3Rpdml0aWVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWxsb2NhdGlvbnNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVJbnRlcmFjdGlvbnNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVVc2VjYXNlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN5c21sUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsZWxlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQmxvY2tzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb25zdHJhaW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBY3Rpdml0aWVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVJlcXVpcmVtZW50c1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVJbnRlcmFjdGlvbnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVXNlY2FzZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmZyZWV6ZSgpOworCisKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJLCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSk7CisJCXJldHVybiB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSBkdW1teUVEYXRhVHlwZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUKKwkgKiBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+CisJICogTm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLCBpZiBvbmUgYWxyZWFkeSBleGlzdHMuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5TdGF0ZW1hY2hpbmVzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBTdGF0ZW1hY2hpbmVzRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgZGF0YSB0eXBlcworCQlkdW1teUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShEVU1NWSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXREdW1teSgpIHsKKwkJcmV0dXJuIGR1bW15RURhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGF0ZW1hY2hpbmVzRmFjdG9yeSBnZXRTdGF0ZW1hY2hpbmVzRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChTdGF0ZW1hY2hpbmVzRmFjdG9yeSkgZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBkYXRhIHR5cGVzCisJCWluaXRFRGF0YVR5cGUoZHVtbXlFRGF0YVR5cGUsIFN0cmluZy5jbGFzcywgIkR1bW15IiwgSVNfU0VSSUFMSVpBQkxFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwl9CisKK30gLy8gU3RhdGVtYWNoaW5lc1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL3V0aWwvU3RhdGVtYWNoaW5lc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3N0YXRlbWFjaGluZXMvdXRpbC9TdGF0ZW1hY2hpbmVzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTVlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL3V0aWwvU3RhdGVtYWNoaW5lc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5SW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZQorICogcGFja2FnZS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMudXRpbC5TdGF0ZW1hY2hpbmVzUmVzb3VyY2VJbXBsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGF0ZW1hY2hpbmVzUmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFJlc291cmNlRmFjdG9yeUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGF0ZW1hY2hpbmVzUmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7CisJCVJlc291cmNlIHJlc3VsdCA9IG5ldyBTdGF0ZW1hY2hpbmVzUmVzb3VyY2VJbXBsKHVyaSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCit9IC8vIFN0YXRlbWFjaGluZXNSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL3V0aWwvU3RhdGVtYWNoaW5lc1Jlc291cmNlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvc3RhdGVtYWNoaW5lcy91dGlsL1N0YXRlbWFjaGluZXNSZXNvdXJjZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Q5Zjk0Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvc3RhdGVtYWNoaW5lcy91dGlsL1N0YXRlbWFjaGluZXNSZXNvdXJjZUltcGwuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1MUmVzb3VyY2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5SZXNvdXJjZSA8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5zdGF0ZW1hY2hpbmVzLnV0aWwuU3RhdGVtYWNoaW5lc1Jlc291cmNlRmFjdG9yeUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YXRlbWFjaGluZXNSZXNvdXJjZUltcGwgZXh0ZW5kcyBYTUxSZXNvdXJjZUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIG5ldyByZXNvdXJjZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YXRlbWFjaGluZXNSZXNvdXJjZUltcGwoVVJJIHVyaSkgeworCQlzdXBlcih1cmkpOworCX0KKworfSAvLyBTdGF0ZW1hY2hpbmVzUmVzb3VyY2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC9zdGF0ZW1hY2hpbmVzL3V0aWwvU3RhdGVtYWNoaW5lc1hNTFByb2Nlc3Nvci5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvc3RhdGVtYWNoaW5lcy91dGlsL1N0YXRlbWFjaGluZXNYTUxQcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWY3OTNmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvc3RhdGVtYWNoaW5lcy91dGlsL1N0YXRlbWFjaGluZXNYTUxQcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy51dGlsOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS51dGlsLlhNTFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuU3RhdGVtYWNoaW5lc1BhY2thZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXIgbWV0aG9kcyB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIFhNTCBkb2N1bWVudHMKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YXRlbWFjaGluZXNYTUxQcm9jZXNzb3IgZXh0ZW5kcyBYTUxQcm9jZXNzb3IgeworCisJLyoqCisJICogUHVibGljIGNvbnN0cnVjdG9yIHRvIGluc3RhbnRpYXRlIHRoZSBoZWxwZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhdGVtYWNoaW5lc1hNTFByb2Nlc3NvcigpIHsKKwkJc3VwZXIoKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFKSk7CisJCVN0YXRlbWFjaGluZXNQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwl9CisKKwkvKioKKwkgKiBSZWdpc3RlciBmb3IgIioiIGFuZCAieG1sIiBmaWxlIGV4dGVuc2lvbnMgdGhlIFN0YXRlbWFjaGluZXNSZXNvdXJjZUZhY3RvcnlJbXBsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgUmVzb3VyY2UuRmFjdG9yeT4gZ2V0UmVnaXN0cmF0aW9ucygpIHsKKwkJaWYgKHJlZ2lzdHJhdGlvbnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UmVnaXN0cmF0aW9ucygpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoWE1MX0VYVEVOU0lPTiwgbmV3IFN0YXRlbWFjaGluZXNSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoU1RBUl9FWFRFTlNJT04sIG5ldyBTdGF0ZW1hY2hpbmVzUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJfQorCQlyZXR1cm4gcmVnaXN0cmF0aW9uczsKKwl9CisKK30gLy8gU3RhdGVtYWNoaW5lc1hNTFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvVXNlY2FzZXNGYWN0b3J5LmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91c2VjYXNlcy9Vc2VjYXNlc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTM3YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvVXNlY2FzZXNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdCBwcm92aWRlcyBhCisgKiBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBVc2VjYXNlc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVXNlY2FzZXNGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuaW50ZXJuYWwuaW1wbC5Vc2VjYXNlc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlVc2VjYXNlc1BhY2thZ2UgZ2V0VXNlY2FzZXNQYWNrYWdlKCk7CisKK30gLy8gVXNlY2FzZXNGYWN0b3J5CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91c2VjYXNlcy9Vc2VjYXNlc1BhY2thZ2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3VzZWNhc2VzL1VzZWNhc2VzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjY0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91c2VjYXNlcy9Vc2VjYXNlc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuIEl0IGNvbnRhaW5zCisgKiBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuVXNlY2FzZXNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBVc2VjYXNlc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQKKwkgKiByZXByZXNlbnQKKwkgKiA8dWw+CisJICogPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RHVtbXk8L2VtPicgZGF0YSB0eXBlLiA8IS0tCisJCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICoKKwkJICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5pbnRlcm5hbC5pbXBsLlVzZWNhc2VzUGFja2FnZUltcGwjZ2V0RHVtbXkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgRFVNTVkgPSBlSU5TVEFOQ0UuZ2V0RHVtbXkoKTsKKworCX0KKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gInVzZWNhc2VzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzLzAuNy4wL1N5c01ML1VzZUNhc2VzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIlVzZUNhc2VzIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlVc2VjYXNlc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5pbnRlcm5hbC5pbXBsLlVzZWNhc2VzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5EdW1teTwvZW0+JyBkYXRhIHR5cGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlIGphdmEubGFuZy5TdHJpbmcKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuaW50ZXJuYWwuaW1wbC5Vc2VjYXNlc1BhY2thZ2VJbXBsI2dldER1bW15KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERVTU1ZID0gMDsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZhLmxhbmcuU3RyaW5nIDxlbT5EdW1teTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+RHVtbXk8L2VtPicuCisJICogQHNlZSBqYXZhLmxhbmcuU3RyaW5nCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEubGFuZy5TdHJpbmciCisJICogQGdlbmVyYXRlZAorCSAqLworCUVEYXRhVHlwZSBnZXREdW1teSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVXNlY2FzZXNGYWN0b3J5IGdldFVzZWNhc2VzRmFjdG9yeSgpOworCit9IC8vIFVzZWNhc2VzUGFja2FnZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvaW50ZXJuYWwvaW1wbC9Vc2VjYXNlc0ZhY3RvcnlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91c2VjYXNlcy9pbnRlcm5hbC9pbXBsL1VzZWNhc2VzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDY5MDAwCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvaW50ZXJuYWwvaW1wbC9Vc2VjYXNlc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5pbnRlcm5hbC5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLlVzZWNhc2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLlVzZWNhc2VzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uIDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBVc2VjYXNlc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgVXNlY2FzZXNGYWN0b3J5IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFVzZWNhc2VzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gVXNlY2FzZXNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVzZWNhc2VzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJVXNlY2FzZXNGYWN0b3J5IHRoZVVzZWNhc2VzRmFjdG9yeSA9IChVc2VjYXNlc0ZhY3RvcnkpIEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KFVzZWNhc2VzUGFja2FnZS5lTlNfVVJJKTsKKwkJCWlmICh0aGVVc2VjYXNlc0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVVc2VjYXNlc0ZhY3Rvcnk7CisJCQl9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgVXNlY2FzZXNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVXNlY2FzZXNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnREdW1teVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQljYXNlIFVzZWNhc2VzUGFja2FnZS5EVU1NWToKKwkJCXJldHVybiBjb252ZXJ0RHVtbXlUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjcmVhdGVEdW1teUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gKFN0cmluZykgc3VwZXIuY3JlYXRlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJY2FzZSBVc2VjYXNlc1BhY2thZ2UuRFVNTVk6CisJCQlyZXR1cm4gY3JlYXRlRHVtbXlGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVXNlY2FzZXNQYWNrYWdlIGdldFVzZWNhc2VzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChVc2VjYXNlc1BhY2thZ2UpIGdldEVQYWNrYWdlKCk7CisJfQorCit9IC8vIFVzZWNhc2VzRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3VzZWNhc2VzL2ludGVybmFsL2ltcGwvVXNlY2FzZXNQYWNrYWdlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvaW50ZXJuYWwvaW1wbC9Vc2VjYXNlc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5ZjBlNwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3VzZWNhc2VzL2ludGVybmFsL2ltcGwvVXNlY2FzZXNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuaW50ZXJuYWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmFjdGl2aXRpZXMuQWN0aXZpdGllc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5hY3Rpdml0aWVzLmludGVybmFsLmltcGwuQWN0aXZpdGllc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuQWxsb2NhdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYWxsb2NhdGlvbnMuaW50ZXJuYWwuaW1wbC5BbGxvY2F0aW9uc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuYmxvY2tzLkJsb2Nrc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5ibG9ja3MuaW50ZXJuYWwuaW1wbC5CbG9ja3NQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLkNvbnN0cmFpbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmNvbnN0cmFpbnRzLmludGVybmFsLmltcGwuQ29uc3RyYWludHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmludGVyYWN0aW9ucy5JbnRlcmFjdGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuaW50ZXJhY3Rpb25zLmludGVybmFsLmltcGwuSW50ZXJhY3Rpb25zUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5pbnRlcm5hbC5pbXBsLlN5c21sUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGVsZW1lbnRzLk1vZGVsZWxlbWVudHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubW9kZWxlbGVtZW50cy5pbnRlcm5hbC5pbXBsLk1vZGVsZWxlbWVudHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnBvcnRhbmRmbG93cy5Qb3J0YW5kZmxvd3NQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucG9ydGFuZGZsb3dzLmludGVybmFsLmltcGwuUG9ydGFuZGZsb3dzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5yZXF1aXJlbWVudHMuUmVxdWlyZW1lbnRzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnJlcXVpcmVtZW50cy5pbnRlcm5hbC5pbXBsLlJlcXVpcmVtZW50c1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuc3RhdGVtYWNoaW5lcy5TdGF0ZW1hY2hpbmVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnN0YXRlbWFjaGluZXMuaW50ZXJuYWwuaW1wbC5TdGF0ZW1hY2hpbmVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy5Vc2VjYXNlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwucHJvZmlsZS5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVXNlY2FzZXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFVzZWNhc2VzUGFja2FnZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICoKKwkgKiA8cD4KKwkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFVzZWNhc2VzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4gQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBVc2VjYXNlc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSB7CisJCQlyZXR1cm4gKFVzZWNhc2VzUGFja2FnZSkgRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVXNlY2FzZXNQYWNrYWdlLmVOU19VUkkpOworCQl9CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlVc2VjYXNlc1BhY2thZ2VJbXBsIHRoZVVzZWNhc2VzUGFja2FnZSA9IChVc2VjYXNlc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgVXNlY2FzZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBVc2VjYXNlc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlTeXNtbFBhY2thZ2VJbXBsIHRoZVN5c21sUGFja2FnZSA9IChTeXNtbFBhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3lzbWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU3lzbWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN5c21sUGFja2FnZS5lTlNfVVJJKSA6IFN5c21sUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UgPSAoTW9kZWxlbGVtZW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxlbGVtZW50c1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbGVsZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXRFUGFja2FnZShNb2RlbGVsZW1lbnRzUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsZWxlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUJsb2Nrc1BhY2thZ2VJbXBsIHRoZUJsb2Nrc1BhY2thZ2UgPSAoQmxvY2tzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQmxvY2tzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShCbG9ja3NQYWNrYWdlLmVOU19VUkkpIDogQmxvY2tzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQb3J0YW5kZmxvd3NQYWNrYWdlSW1wbCB0aGVQb3J0YW5kZmxvd3NQYWNrYWdlID0gKFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFBvcnRhbmRmbG93c1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUG9ydGFuZGZsb3dzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogUG9ydGFuZGZsb3dzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlDb25zdHJhaW50c1BhY2thZ2VJbXBsIHRoZUNvbnN0cmFpbnRzUGFja2FnZSA9IChDb25zdHJhaW50c1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29uc3RyYWludHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29uc3RyYWludHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbnN0cmFpbnRzUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQ29uc3RyYWludHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUFjdGl2aXRpZXNQYWNrYWdlSW1wbCB0aGVBY3Rpdml0aWVzUGFja2FnZSA9IChBY3Rpdml0aWVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBY3Rpdml0aWVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEFjdGl2aXRpZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFjdGl2aXRpZXNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBBY3Rpdml0aWVzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlBbGxvY2F0aW9uc1BhY2thZ2VJbXBsIHRoZUFsbG9jYXRpb25zUGFja2FnZSA9IChBbGxvY2F0aW9uc1BhY2thZ2VJbXBsKSAoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQWxsb2NhdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQWxsb2NhdGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFsbG9jYXRpb25zUGFja2FnZS5lTlNfVVJJKQorCQkJCTogQWxsb2NhdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVJlcXVpcmVtZW50c1BhY2thZ2VJbXBsIHRoZVJlcXVpcmVtZW50c1BhY2thZ2UgPSAoUmVxdWlyZW1lbnRzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUmVxdWlyZW1lbnRzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSZXF1aXJlbWVudHNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBSZXF1aXJlbWVudHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUludGVyYWN0aW9uc1BhY2thZ2VJbXBsIHRoZUludGVyYWN0aW9uc1BhY2thZ2UgPSAoSW50ZXJhY3Rpb25zUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgSW50ZXJhY3Rpb25zUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcmFjdGlvbnNQYWNrYWdlLmVOU19VUkkpCisJCQkJOiBJbnRlcmFjdGlvbnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCB0aGVTdGF0ZW1hY2hpbmVzUGFja2FnZSA9IChTdGF0ZW1hY2hpbmVzUGFja2FnZUltcGwpIChFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGF0ZW1hY2hpbmVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN0YXRlbWFjaGluZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFCisJCQkJLmdldEVQYWNrYWdlKFN0YXRlbWFjaGluZXNQYWNrYWdlLmVOU19VUkkpIDogU3RhdGVtYWNoaW5lc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVVc2VjYXNlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN5c21sUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxlbGVtZW50c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUJsb2Nrc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVBvcnRhbmRmbG93c1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbnN0cmFpbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUFsbG9jYXRpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUmVxdWlyZW1lbnRzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhdGVtYWNoaW5lc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVVc2VjYXNlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTeXNtbFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbGVsZW1lbnRzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUJsb2Nrc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQb3J0YW5kZmxvd3NQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29uc3RyYWludHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQWN0aXZpdGllc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVBbGxvY2F0aW9uc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVSZXF1aXJlbWVudHNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlSW50ZXJhY3Rpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVN0YXRlbWFjaGluZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVVzZWNhc2VzUGFja2FnZS5mcmVlemUoKTsKKworCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoVXNlY2FzZXNQYWNrYWdlLmVOU19VUkksIHRoZVVzZWNhc2VzUGFja2FnZSk7CisJCXJldHVybiB0aGVVc2VjYXNlc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRGF0YVR5cGUgZHVtbXlFRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlCisJICogcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPgorCSAqIE5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMgZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwgaWYgb25lIGFscmVhZHkgZXhpc3RzLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLlVzZWNhc2VzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgVXNlY2FzZXNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgVXNlY2FzZXNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBkYXRhIHR5cGVzCisJCWR1bW15RURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKERVTU1ZKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRURhdGFUeXBlIGdldER1bW15KCkgeworCQlyZXR1cm4gZHVtbXlFRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVzZWNhc2VzRmFjdG9yeSBnZXRVc2VjYXNlc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoVXNlY2FzZXNGYWN0b3J5KSBnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZShkdW1teUVEYXRhVHlwZSwgU3RyaW5nLmNsYXNzLCAiRHVtbXkiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCX0KKworfSAvLyBVc2VjYXNlc1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91c2VjYXNlcy91dGlsL1VzZWNhc2VzUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvdXRpbC9Vc2VjYXNlc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU1ODVkCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvdXRpbC9Vc2VjYXNlc1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlRmFjdG9yeUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlJlc291cmNlIEZhY3Rvcnk8L2I+IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51c2VjYXNlcy51dGlsLlVzZWNhc2VzUmVzb3VyY2VJbXBsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBVc2VjYXNlc1Jlc291cmNlRmFjdG9yeUltcGwgZXh0ZW5kcyBSZXNvdXJjZUZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVXNlY2FzZXNSZXNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlIGNyZWF0ZVJlc291cmNlKFVSSSB1cmkpIHsKKwkJUmVzb3VyY2UgcmVzdWx0ID0gbmV3IFVzZWNhc2VzUmVzb3VyY2VJbXBsKHVyaSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCit9IC8vIFVzZWNhc2VzUmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvdXRpbC9Vc2VjYXNlc1Jlc291cmNlSW1wbC5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvdXRpbC9Vc2VjYXNlc1Jlc291cmNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjVhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91c2VjYXNlcy91dGlsL1VzZWNhc2VzUmVzb3VyY2VJbXBsLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUxSZXNvdXJjZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlJlc291cmNlIDwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLnV0aWwuVXNlY2FzZXNSZXNvdXJjZUZhY3RvcnlJbXBsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBVc2VjYXNlc1Jlc291cmNlSW1wbCBleHRlbmRzIFhNTFJlc291cmNlSW1wbCB7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHVyaQorCSAqICAgICAgICAgICAgdGhlIFVSSSBvZiB0aGUgbmV3IHJlc291cmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVXNlY2FzZXNSZXNvdXJjZUltcGwoVVJJIHVyaSkgeworCQlzdXBlcih1cmkpOworCX0KKworfSAvLyBVc2VjYXNlc1Jlc291cmNlSW1wbApkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvdXRpbC9Vc2VjYXNlc1hNTFByb2Nlc3Nvci5qYXZhIGIvc3lzbWwxNC9wbHVnaW5zL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwvc3JjL29yZy9lY2xpcHNlL3BhcHlydXMvc3lzbWwvdXNlY2FzZXMvdXRpbC9Vc2VjYXNlc1hNTFByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTJlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91c2VjYXNlcy91dGlsL1VzZWNhc2VzWE1MUHJvY2Vzc29yLmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnVzZWNhc2VzLnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLnV0aWwuWE1MUHJvY2Vzc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXNlY2FzZXMuVXNlY2FzZXNQYWNrYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVyIG1ldGhvZHMgdG8gc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBYTUwgZG9jdW1lbnRzCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBVc2VjYXNlc1hNTFByb2Nlc3NvciBleHRlbmRzIFhNTFByb2Nlc3NvciB7CisKKwkvKioKKwkgKiBQdWJsaWMgY29uc3RydWN0b3IgdG8gaW5zdGFudGlhdGUgdGhlIGhlbHBlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVc2VjYXNlc1hNTFByb2Nlc3NvcigpIHsKKwkJc3VwZXIoKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFKSk7CisJCVVzZWNhc2VzUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJfQorCisJLyoqCisJICogUmVnaXN0ZXIgZm9yICIqIiBhbmQgInhtbCIgZmlsZSBleHRlbnNpb25zIHRoZSBVc2VjYXNlc1Jlc291cmNlRmFjdG9yeUltcGwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBSZXNvdXJjZS5GYWN0b3J5PiBnZXRSZWdpc3RyYXRpb25zKCkgeworCQlpZiAocmVnaXN0cmF0aW9ucyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRSZWdpc3RyYXRpb25zKCk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChYTUxfRVhURU5TSU9OLCBuZXcgVXNlY2FzZXNSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoU1RBUl9FWFRFTlNJT04sIG5ldyBVc2VjYXNlc1Jlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCX0KKwkJcmV0dXJuIHJlZ2lzdHJhdGlvbnM7CisJfQorCit9IC8vIFVzZWNhc2VzWE1MUHJvY2Vzc29yCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL0VsZW1lbnRVdGlsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL0VsZW1lbnRVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyYTg1MQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3V0aWwvRWxlbWVudFV0aWwuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UudW1sMi51bWwuRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51bWwyLnVtbC51dGlsLlVNTFV0aWw7CisKK0BEZXByZWNhdGVkCitwdWJsaWMgY2xhc3MgRWxlbWVudFV0aWwgeworCisJLyoqCisJICogQ2hlY2sgaWYgdGhlIFN0ZXJlb3R5cGVkRWxlbWVudCBoYXMgdGhlIGdpdmVuIHN0ZXJlb3R5cGUsIG9yIGlmIG9uZSBvZgorCSAqIGl0cyBzdGVyZW90eXBlIGlzIGluaGVyaXRzIGZyb20gdGhlIHN0ZXJlb3R5cGUgcGFzc2VkIGluIHBhcmFtZXRlci4gVGhpcworCSAqIG1ldGhvZCBjdXJyZW50bHkgZXhpc3RzIGluIFVNTFV0aWxzLCB0aGlzIG9uZSBpcyBhIGNvcHkgY3JlYXRlZCB0byBhdm9pZAorCSAqIHNvbWUgZGVwZW5kZW5jaWVzIHByb3BhZ2F0ZWQgYnkgVU1MVXRpbHMgKGpmYWNlLi4uKS4gQ3VycmVudCBVTUxVdGlscworCSAqIHBsdWctaW4gc2hvdWxkIHByb2JhYmx5IGJlIHNlcGFyYXRlZCBpbnRvIHR3byBwYXJ0cyBvbmUgZGVwZW5kaW5nIG9uIFVNTDIKKwkgKiBwbHVnLWluIG9ubHksIGFuZCB0aGUgb3RoZXIgYnJpbmdpbmcgdWkgcmVsYXRlZCBmZWF0dXJlczsKKwkgKgorCSAqIEBkZXByZWNhdGVkIHByZWZlciB1c2luZyB7QGxpbmsgVU1MVXRpbCNnZXRTdGVyZW90eXBlQXBwbGljYXRpb24oRWxlbWVudCwgQ2xhc3MpfQorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBFT2JqZWN0IGhhc1N0ZXJlb3R5cGUoRWxlbWVudCBlbHQsIEVDbGFzcyBzdGVyZW90eXBlQ2xhc3MpIHsKKwkJcmV0dXJuIFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGVsdCwgc3RlcmVvdHlwZUNsYXNzLmdldENsYXNzKCkpOworCX0KKworCS8qKgorCSAqIENvbnZlbmllbnQgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBTdGVyZW90eXBlQXBwbGljYXRpb24gYnkgcGFzc2luZyBhbgorCSAqIGVsZW1lbnQgb2YgdGhlIHN0YXRpYyBwcm9maWxlLgorCSAqCisJICogQGRlcHJlY2F0ZWQgcHJlZmVyIHVzaW5nIHtAbGluayBVTUxVdGlsI2dldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihFbGVtZW50LCBDbGFzcyl9CisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgRU9iamVjdD4gVCBnZXRTdGVyZW90eXBlQXBwbGljYXRpb24oRWxlbWVudCBlbGVtZW50LCBqYXZhLmxhbmcuQ2xhc3M8VD4gY2xhenopIHsKKwkJcmV0dXJuIFVNTFV0aWwuZ2V0U3RlcmVvdHlwZUFwcGxpY2F0aW9uKGVsZW1lbnQsIGNsYXp6KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sUmVzb3VyY2UuamF2YSBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3V0aWwvU3lzbWxSZXNvdXJjZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1M2E1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sUmVzb3VyY2UuamF2YQpAQCAtMCwwICsxLDIyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQ0VBIExJU1QuCisgKgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogIFlhbm4gVGFuZ3V5IChDRUEgTElTVCkgeWFubi50YW5ndXlAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKiAgVmluY2VudCBMb3JlbnpvIChDRUEgTElTVCkgdmluY2VudC5sb3JlbnpvQGNlYS5mcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLlN5c21sUGFja2FnZTsKKworLyoqCisgKiBGb3IgYWxsIGRlcHJlY2F0ZWQgOiB1c2Ugb3JnLmVjbGlwc2UudW1sMi51bWwudXRpbC5VTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbgorICogRXggOgorICogcmVwbGFjZSBhcHBsaWVkU3RlcmVvdHlwZSA9CisgKiBjb25uZWN0b3JFbmQuZ2V0QXBwbGllZFN0ZXJlb3R5cGUoIlN5c01MOjpCbG9ja3M6Ok5lc3RlZENvbm5lY3RvckVuZCIpO2Nvbm5lY3RvckVuZC5nZXRTdGVyZW90eXBlQXBwbGljYXRpb24oYXBwbGllZFN0ZXJlb3R5cGUpOworICogYnkgb3JnLmVjbGlwc2UudW1sMi51bWwudXRpbC5VTUxVdGlsLmdldFN0ZXJlb3R5cGVBcHBsaWNhdGlvbihlbGVtZW50LCBOZXN0ZWRDb25uZWN0b3JFbmQuY2xhc3MpOworICovCitwdWJsaWMgY2xhc3MgU3lzbWxSZXNvdXJjZSB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSUJSQVJJRVNfUEFUSE1BUCA9ICJwYXRobWFwOi8vU3lzTUxfTElCUkFSSUVTLyI7IC8vJE5PTi1OTFMtMSQKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNZU01MX1BSSU1JVElWRV9UWVBFU19MSUJSQVJZX1VSSSA9IExJQlJBUklFU19QQVRITUFQICsgIlN5c01MUHJpbWl0aXZlVHlwZXMudW1sIjsgLy8kTk9OLU5MUy0xJAorCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPRklMRVNfUEFUSE1BUCA9ICJwYXRobWFwOi8vU3lzTUxfUFJPRklMRVMvIjsgLy8kTk9OLU5MUy0xJAorCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1lTTUxfUFJPRklMRV9OU19VUkkgPSBTeXNtbFBhY2thZ2UuZU5TX1VSSTsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNZU01MX1BST0ZJTEVfVVJJID0gUFJPRklMRVNfUEFUSE1BUCArICJTeXNNTC5wcm9maWxlLnVtbCI7IC8vJE5PTi1OTFMtMSQKKworCisJLy8gU3RlcmVvdHlwZXMgaWRzCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBDT05GT1JNX0lEID0gIlN5c01MOjpNb2RlbEVsZW1lbnRzOjpDb25mb3JtIjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgVklFV19JRCA9ICJTeXNNTDo6TW9kZWxFbGVtZW50czo6VmlldyI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZJRVdfUE9JTlRfSUQgPSAiU3lzTUw6Ok1vZGVsRWxlbWVudHM6OlZpZXdQb2ludCI7CisKKwkvKioKKwkgKiBAZGVwcmVjYXRlZCB1c2UgVklFV19QT0lOVF9JRCBpbnN0ZWFkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBWSUVXUE9JTlRfSUQgPSBWSUVXX1BPSU5UX0lEOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSQVRJT05BTEVfSUQgPSAiU3lzTUw6Ok1vZGVsRWxlbWVudHM6OlJhdGlvbmFsZSI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBST0JMRU1fSUQgPSAiU3lzTUw6Ok1vZGVsRWxlbWVudHM6OlByb2JsZW0iOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBCTE9DS19JRCA9ICJTeXNNTDo6QmxvY2tzOjpCbG9jayI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJU1RSSUJVVEVEX1BST1BFUlRZX0lEID0gIlN5c01MOjpCbG9ja3M6OkRpc3RyaWJ1dGVkUHJvcGVydHkiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBESU1FTlNJT05fSUQgPSAiU3lzTUw6OkJsb2Nrczo6RGltZW5zaW9uIjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgVU5JVF9JRCA9ICJTeXNNTDo6QmxvY2tzOjpVbml0IjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgVkFMVUVfVFlQRV9JRCA9ICJTeXNNTDo6QmxvY2tzOjpWYWx1ZVR5cGUiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBORVNURURfQ09OTkVDVE9SX0VORF9JRCA9ICJTeXNNTDo6QmxvY2tzOjpOZXN0ZWRDb25uZWN0b3JFbmQiOworCisJLyoqIEBkZXByZWNhdGVkIHVzZSBORVNURURfQ09OTkVDVE9SX0VORF9JRCBpbnN0ZWFkICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBORVNURURfQ09OTkVDVE9SRU5EX0lEID0gTkVTVEVEX0NPTk5FQ1RPUl9FTkRfSUQ7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFBBUlRJQ0lQQU5UX1BST1BFUlRZX0lEID0gIlN5c01MOjpCbG9ja3M6OlBhcnRpY2lwYW50UHJvcGVydHkiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBDT05ORUNUT1JfUFJPUEVSVFlfSUQgPSAiU3lzTUw6OkJsb2Nrczo6Q29ubmVjdG9yUHJvcGVydHkiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBCSU5ESU5HX0NPTk5FQ1RPUl9JRCA9ICJTeXNNTDo6QmxvY2tzOjpCaW5kaW5nQ29ubmVjdG9yIjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPUEVSVFlfU1BFQ0lGSUNfVFlQRV9JRCA9ICJTeXNNTDo6QmxvY2tzOjpQcm9wZXJ0eVNwZWNpZmljVHlwZSI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEZMT1dfUE9SVF9JRCA9ICJTeXNNTDo6UG9ydEFuZEZsb3dzOjpGbG93UG9ydCI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEZMT1dfUFJPUEVSVFlfSUQgPSAiU3lzTUw6OlBvcnRBbmRGbG93czo6Rmxvd1Byb3BlcnR5IjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgRkxPV19TUEVDSUZJQ0FUSU9OX0lEID0gIlN5c01MOjpQb3J0QW5kRmxvd3M6OkZsb3dTcGVjaWZpY2F0aW9uIjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgSVRFTV9GTE9XX0lEID0gIlN5c01MOjpQb3J0QW5kRmxvd3M6Okl0ZW1GbG93IjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQ09OU1RSQUlOVF9CTE9DS19JRCA9ICJTeXNNTDo6Q29uc3RyYWludHM6OkNvbnN0cmFpbnRCbG9jayI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTlNUUkFJTlRfUFJPUEVSVFlfSUQgPSAiU3lzTUw6OkNvbnN0cmFpbnRzOjpDb25zdHJhaW50UHJvcGVydHkiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBPUFRJT05BTF9JRCA9ICJTeXNNTDo6QWN0aXZpdGllczo6T3B0aW9uYWwiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSQVRFX0lEID0gIlN5c01MOjpBY3Rpdml0aWVzOjpSYXRlIjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUFJPQkFCSUxJVFlfSUQgPSAiU3lzTUw6OkFjdGl2aXRpZXM6OlByb2JhYmlsaXR5IjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQ09OVElOVU9VU19JRCA9ICJTeXNNTDo6QWN0aXZpdGllczo6Q29udGludW91cyI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJU0NSRVRFX0lEID0gIlN5c01MOjpBY3Rpdml0aWVzOjpEaXNjcmV0ZSI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTlRST0xfT1BFUkFUT1JfSUQgPSAiU3lzTUw6OkFjdGl2aXRpZXM6OkNvbnRyb2xPcGVyYXRvciI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5PX0JVRkZFUl9JRCA9ICJTeXNNTDo6QWN0aXZpdGllczo6Tm9CdWZmZXIiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBPVkVSV1JJVEVfSUQgPSAiU3lzTUw6OkFjdGl2aXRpZXM6Ok92ZXJ3cml0ZSI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFMTE9DQVRFX0lEID0gIlN5c01MOjpBbGxvY2F0aW9uczo6QWxsb2NhdGUiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBBTExPQ0FURURfSUQgPSAiU3lzTUw6OkFsbG9jYXRpb25zOjpBbGxvY2F0ZWQiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBBTExPQ0FURV9BQ1RJVklUWV9QQVJUSVRJT05fSUQgPSAiU3lzTUw6OkFsbG9jYXRpb25zOjpBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uIjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgREVSSVZFX1JFUVRfSUQgPSAiU3lzTUw6OlJlcXVpcmVtZW50czo6RGVyaXZlUmVxdCI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFZFUklGWV9JRCA9ICJTeXNNTDo6UmVxdWlyZW1lbnRzOjpWZXJpZnkiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBDT1BZX0lEID0gIlN5c01MOjpSZXF1aXJlbWVudHM6OkNvcHkiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBTQVRJU0ZZX0lEID0gIlN5c01MOjpSZXF1aXJlbWVudHM6OlNhdGlzZnkiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBURVNUX0NBU0VfSUQgPSAiU3lzTUw6OlJlcXVpcmVtZW50czo6VGVzdENhc2UiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRVFVSVJFTUVOVF9JRCA9ICJTeXNNTDo6UmVxdWlyZW1lbnRzOjpSZXF1aXJlbWVudCI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFUVVJUkVNRU5UX1JFTEFURURfSUQgPSAiU3lzTUw6OlJlcXVpcmVtZW50czo6UmVxdWlyZW1lbnRSZWxhdGVkIjsKKworCS8vIFN1YlByb2ZpbGVzIGlkcworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgU1lTTUxfSUQgPSAiU3lzTUwiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBNT0RFTF9FTEVNRU5UU19JRCA9ICJTeXNNTDo6TW9kZWxFbGVtZW50cyI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJMT0NLU19JRCA9ICJTeXNNTDo6QmxvY2tzIjsKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUE9SVF9BTkRfRkxPV1NfSUQgPSAiU3lzTUw6OlBvcnRBbmRGbG93cyI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTlNUUkFJTlRTX0lEID0gIlN5c01MOjpDb25zdHJhaW50cyI7CisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFDVElWSVRJRVNfSUQgPSAiU3lzTUw6OkFjdGl2aXRpZXMiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBBTExPQ0FUSU9OU19JRCA9ICJTeXNNTDo6QWxsb2NhdGlvbnMiOworCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRVFVSVJFTUVOVFNfSUQgPSAiU3lzTUw6OlJlcXVpcmVtZW50cyI7CisKKwkvLyBzdGVyZW90eXBlIHByb3BlcnRpZXMgaWRzCisJLy8gcmVxdWlyZW1lbnRzIHByb3BlcnRpZXMKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFUVVJUkVNRU5UX0JBU0VfQ0xBU1NfSUQgPSAiYmFzZV9DbGFzcyI7IC8vJE5PTi1OTFMtMSQKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUkVRVUlSRU1FTlRfREVSSVZFRF9JRCA9ICJkZXJpdmVkIjsgLy8kTk9OLU5MUy0xJAorCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRVFVSVJFTUVOVF9ERVJJVkVEX0ZST01fSUQgPSAiZGVyaXZlZEZyb20iOy8vJE5PTi1OTFMtMSQKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUkVRVUlSRU1FTlRfSURfSUQgPSAiaWQiOy8vJE5PTi1OTFMtMSQKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUkVRVUlSRU1FTlRfTUFTVEVSX0lEID0gIm1hc3RlciI7Ly8kTk9OLU5MUy0xJAorCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRVFVSVJFTUVOVF9SRUZJTkVEX0JZX0lEID0gInJlZmluZWRCeSI7Ly8kTk9OLU5MUy0xJAorCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRVFVSVJFTUVOVF9TQVRJU0ZJRURfQllfSUQgPSAic2F0aXNmaWVkQnkiOy8vJE5PTi1OTFMtMSQKKworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUkVRVUlSRU1FTlRfVEVYVF9JRCA9ICJ0ZXh0IjsvLyROT04tTkxTLTEkCisKKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFUVVJUkVNRU5UX1RSQUNFRF9UT19JRCA9ICJ0cmFjZWRUbyI7Ly8kTk9OLU5MUy0xJAorCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRVFVSVJFTUVOVF9WRVJJRklFRF9CWV9JRCA9ICJ2ZXJpZmllZEJ5IjsvLyROT04tTkxTLTEkCisKK30KZGlmZiAtLWdpdCBhL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3V0aWwvU3lzbWxSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZWI3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IENFQSBMSVNULgorICoKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICBZYW5uIFRhbmd1eSAoQ0VBIExJU1QpIHlhbm4udGFuZ3V5QGNlYS5mciAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VGYWN0b3J5SW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UmVzb3VyY2UgRmFjdG9yeTwvYj4gYXNzb2NpYXRlZCB3aXRoIHRoZQorICogcGFja2FnZS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnV0aWwuU3lzbWxSZXNvdXJjZUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN5c21sUmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFJlc291cmNlRmFjdG9yeUltcGwgeworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTeXNtbFJlc291cmNlRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgeworCQlSZXNvdXJjZSByZXN1bHQgPSBuZXcgU3lzbWxSZXNvdXJjZUltcGwodXJpKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKK30gLy8gU3lzbWxSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sUmVzb3VyY2VJbXBsLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sUmVzb3VyY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1YTlmOQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3V0aWwvU3lzbWxSZXNvdXJjZUltcGwuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTFJlc291cmNlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+UmVzb3VyY2UgPC9iPiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXRpbC5TeXNtbFJlc291cmNlRmFjdG9yeUltcGwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN5c21sUmVzb3VyY2VJbXBsIGV4dGVuZHMgWE1MUmVzb3VyY2VJbXBsIHsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAcGFyYW0gdXJpCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBuZXcgcmVzb3VyY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTeXNtbFJlc291cmNlSW1wbChVUkkgdXJpKSB7CisJCXN1cGVyKHVyaSk7CisJfQorCit9IC8vIFN5c21sUmVzb3VyY2VJbXBsCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sWE1MUHJvY2Vzc29yLmphdmEgYi9zeXNtbDE0L3BsdWdpbnMvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC9zcmMvb3JnL2VjbGlwc2UvcGFweXJ1cy9zeXNtbC91dGlsL1N5c21sWE1MUHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg0MTkzNgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcGx1Z2lucy9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sL3NyYy9vcmcvZWNsaXBzZS9wYXB5cnVzL3N5c21sL3V0aWwvU3lzbWxYTUxQcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBDRUEgTElTVC4KKyAqCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgWWFubiBUYW5ndXkgKENFQSBMSVNUKSB5YW5uLnRhbmd1eUBjZWEuZnIgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkudXRpbC5YTUxQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5TeXNtbFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXIgbWV0aG9kcyB0byBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIFhNTCBkb2N1bWVudHMKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN5c21sWE1MUHJvY2Vzc29yIGV4dGVuZHMgWE1MUHJvY2Vzc29yIHsKKworCS8qKgorCSAqIFB1YmxpYyBjb25zdHJ1Y3RvciB0byBpbnN0YW50aWF0ZSB0aGUgaGVscGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICoKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN5c21sWE1MUHJvY2Vzc29yKCkgeworCQlzdXBlcigoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UpKTsKKwkJU3lzbWxQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwl9CisKKwkvKioKKwkgKiBSZWdpc3RlciBmb3IgIioiIGFuZCAieG1sIiBmaWxlIGV4dGVuc2lvbnMgdGhlIFN5c21sUmVzb3VyY2VGYWN0b3J5SW1wbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBSZXNvdXJjZS5GYWN0b3J5PiBnZXRSZWdpc3RyYXRpb25zKCkgeworCQlpZiAocmVnaXN0cmF0aW9ucyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRSZWdpc3RyYXRpb25zKCk7CisJCQlyZWdpc3RyYXRpb25zLnB1dChYTUxfRVhURU5TSU9OLCBuZXcgU3lzbWxSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkJcmVnaXN0cmF0aW9ucy5wdXQoU1RBUl9FWFRFTlNJT04sIG5ldyBTeXNtbFJlc291cmNlRmFjdG9yeUltcGwoKSk7CisJCX0KKwkJcmV0dXJuIHJlZ2lzdHJhdGlvbnM7CisJfQorCit9IC8vIFN5c21sWE1MUHJvY2Vzc29yCmRpZmYgLS1naXQgYS9zeXNtbDE0L3BsdWdpbnMvcG9tLnhtbCBiL3N5c21sMTQvcGx1Z2lucy9wb20ueG1sCmluZGV4IDg4OThmYmEuLmE5ZTliYWYgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvcGx1Z2lucy9wb20ueG1sCisrKyBiL3N5c21sMTQvcGx1Z2lucy9wb20ueG1sCkBAIC0xLDEzICsxLDE1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KLTxwcm9qZWN0PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQkKKwogCTxwYXJlbnQ+Ci0JICAgIDxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KLQkgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucm9vdDwvYXJ0aWZhY3RJZD4KLQkgICAgPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgIDwvcGFyZW50PgotICAgIAorCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnJvb3Q8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKwogCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnBsdWdpbnM8L2FydGlmYWN0SWQ+CiAJPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KIAk8bmFtZT5QYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjEgdG8gU3lzTUwxLjQgUGx1Z2luczwvbmFtZT4KQEAgLTE3LDYgKzE5LDkgQEAKIAkJPG1vZHVsZT5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbDwvbW9kdWxlPgogCQk8bW9kdWxlPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmJsYWNrYm94ZXM8L21vZHVsZT4KIAkJPG1vZHVsZT5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5kb2M8L21vZHVsZT4KKwkJPG1vZHVsZT5vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sPC9tb2R1bGU+CisJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5uYXR0YWJsZS5hbGxvY2F0aW9uLmNvbmZpZzwvbW9kdWxlPgorCQk8bW9kdWxlPm9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUucmVxdWlyZW1lbnQuY29uZmlnPC9tb2R1bGU+CiAJPC9tb2R1bGVzPgotCQorCiA8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9wb20ueG1sIGIvc3lzbWwxNC9wb20ueG1sCmluZGV4IGMyODk5MTcuLjVjNmUyNzYgMTAwNzU1Ci0tLSBhL3N5c21sMTQvcG9tLnhtbAorKysgYi9zeXNtbDE0L3BvbS54bWwKQEAgLTEsNjggKzEsMTAyIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4JCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CiAJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCQorCiAJPHBhcmVudD4KLQkgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgotCSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkucm9vdDwvYXJ0aWZhY3RJZD4KLQkgICAgPHZlcnNpb24+MS4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgCisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnJvb3Q8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjEuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCiAJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucm9vdDwvYXJ0aWZhY3RJZD4KLQk8dmVyc2lvbj4wLjExLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgogCTxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAJPGRlc2NyaXB0aW9uPlRoZSB0b3AgY29udGFpbmVyIG9mIFN5c01MIE1pZ3JhdGlvbiBmb3IgSW50ZXJvcGVyYWJpbGl0eS48L2Rlc2NyaXB0aW9uPgotCQorCiAJPG1vZHVsZXM+CiAJCTxtb2R1bGU+ZmVhdHVyZXM8L21vZHVsZT4KIAkJPG1vZHVsZT5wbHVnaW5zPC9tb2R1bGU+CiAJPC9tb2R1bGVzPgotCQorCiAJPHByb2ZpbGVzPgogCQk8cHJvZmlsZT4KLQkJCTxpZD5zeXNtbDE0VGFyZ2V0TWFpbjwvaWQ+Ci0JCQkKKwkJCTxpZD5zeXNtbDE0PC9pZD4KIAkJCTxwcm9wZXJ0aWVzPgotCQkJCTx0YXJnZXQucGxhdGZvcm0+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW48L3RhcmdldC5wbGF0Zm9ybT4KKwkJCQk8dGFyZ2V0LnBsYXRmb3JtPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uJHt2ZXJzaW9ufS4ke3RhcmdldC5zdWZmaXh9PC90YXJnZXQucGxhdGZvcm0+CiAJCQkJPHRhcmdldC5wbGF0Zm9ybS5ncm91cGlkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvdGFyZ2V0LnBsYXRmb3JtLmdyb3VwaWQ+Ci0JCQkJPHRhcmdldC52ZXJzaW9uPjAuMTEuMC1TTkFQU0hPVDwvdGFyZ2V0LnZlcnNpb24+CisJCQkJPHRhcmdldC52ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdGFyZ2V0LnZlcnNpb24+CiAJCQk8L3Byb3BlcnRpZXM+Ci0JCQkKIAkJCTxtb2R1bGVzPgogCQkJCTxtb2R1bGU+cmVsZW5nPC9tb2R1bGU+CiAJCQk8L21vZHVsZXM+Ci0JCQkKIAkJPC9wcm9maWxlPgogCQkKIAkJPHByb2ZpbGU+Ci0JCQk8aWQ+c3lzbWwxNFRhcmdldFRlc3RzPC9pZD4KLQkJCQorCQkJPGlkPnN5c21sMTR0ZXN0czwvaWQ+CiAJCQk8cHJvcGVydGllcz4KLQkJCQk8dGVzdENvbmZpZz5DSV9URVNUU19DT05GSUc8L3Rlc3RDb25maWc+Ci0JCQkJPGphY29jby52ZXJzaW9uPjAuNy40LjIwMTUwMjI2MjEyODwvamFjb2NvLnZlcnNpb24+Ci0JCQkJPCEtLSBTZXBhcmF0ZSBwcm9wZXJ0eSBmb3IgdGVzdCBhcmdMaW5lIHNlZW1zIHRvIGJlIHJlcXVpcmVkIHdoZW4gcnVubmluZyBKYWNvY28gKyBTdXJlZmlyZSAtLT4KLQkJCQk8dGVzdC5hcmdMaW5lPi1YbXM1MTJtIC1YbXgyMDQ4bSAtWFg6U29mdFJlZkxSVVBvbGljeU1TUGVyTUI9MTAwPC90ZXN0LmFyZ0xpbmU+Ci0JCQkJCi0JCQkJPHRhcmdldC5wbGF0Zm9ybT5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW48L3RhcmdldC5wbGF0Zm9ybT4KLQkJCQk8dGFyZ2V0LnBsYXRmb3JtLmdyb3VwaWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnRlc3RzPC90YXJnZXQucGxhdGZvcm0uZ3JvdXBpZD4KLQkJCQk8dGFyZ2V0LnZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC90YXJnZXQudmVyc2lvbj4KKwkJCQk8dGFyZ2V0LnBsYXRmb3JtPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLiR7dmVyc2lvbn0uJHt0YXJnZXQuc3VmZml4fTwvdGFyZ2V0LnBsYXRmb3JtPgorCQkJCTx0YXJnZXQucGxhdGZvcm0uZ3JvdXBpZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L3RhcmdldC5wbGF0Zm9ybS5ncm91cGlkPgorCQkJCTx0YXJnZXQudmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3RhcmdldC52ZXJzaW9uPgogCQkJPC9wcm9wZXJ0aWVzPgotCQkJCiAJCQk8bW9kdWxlcz4KIAkJCQk8bW9kdWxlPnJlbGVuZzwvbW9kdWxlPgotCQkJPC9tb2R1bGVzPgotCQkJCi0JCTwvcHJvZmlsZT4KLQkJCi0JCTxwcm9maWxlPgotCQkJPGlkPnRlc3RzPC9pZD4KLQkJCQotCQkJPG1vZHVsZXM+CiAJCQkJPG1vZHVsZT50ZXN0czwvbW9kdWxlPgogCQkJPC9tb2R1bGVzPgotCQkJCisJCTwvcHJvZmlsZT4KKwkJCisJCTxwcm9maWxlPgorCQkJPGlkPm94eWdlbjwvaWQ+CisJCQk8cHJvcGVydGllcz4KKwkJCQk8dmVyc2lvbj5veHlnZW48L3ZlcnNpb24+CisJCQk8L3Byb3BlcnRpZXM+CisJCTwvcHJvZmlsZT4KKwkJCisJCTxwcm9maWxlPgorCQkJPGlkPnBob3RvbjwvaWQ+CisJCQk8cHJvcGVydGllcz4KKwkJCQk8dmVyc2lvbj5waG90b248L3ZlcnNpb24+CisJCQk8L3Byb3BlcnRpZXM+CisJCTwvcHJvZmlsZT4KKwkJCisJCTxwcm9maWxlPgorCQkJPGlkPjIwMTgtMDk8L2lkPgorCQkJPHByb3BlcnRpZXM+CisJCQkJPHZlcnNpb24+MjAxOC0wOTwvdmVyc2lvbj4KKwkJCTwvcHJvcGVydGllcz4KKwkJPC9wcm9maWxlPgorCQkKKwkJPHByb2ZpbGU+CisJCQk8aWQ+MjAxOC0xMjwvaWQ+CisJCQk8cHJvcGVydGllcz4KKwkJCQk8dmVyc2lvbj4yMDE4LTEyPC92ZXJzaW9uPgorCQkJPC9wcm9wZXJ0aWVzPgorCQk8L3Byb2ZpbGU+CisJCQorCQk8cHJvZmlsZT4KKwkJCTxpZD5lY2xpcHNlaGlwcEludGVncmF0aW9uPC9pZD4KKwkJCTxhY3RpdmF0aW9uPgorCQkJCTxwcm9wZXJ0eT4KKwkJCQkJPG5hbWU+SkVOS0lOU19VUkw8L25hbWU+CisJCQkJPC9wcm9wZXJ0eT4KKwkJCTwvYWN0aXZhdGlvbj4KKwkJCTxwcm9wZXJ0aWVzPgorCQkJCTx0YXJnZXQuc3VmZml4PmVjbGlwc2U8L3RhcmdldC5zdWZmaXg+IDwhLS0gc2V0IHRvICdlY2xpcHNlJyB3aGVuIGJ1aWxkaW5nIG9uIEhJUFAsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VzIC0tPgorCQkJPC9wcm9wZXJ0aWVzPgorCQk8L3Byb2ZpbGU+CisJCQorCQk8cHJvZmlsZT4KKwkJCTxpZD5sb2NhbEludGVncmF0aW9uPC9pZD4KKwkJCTxhY3RpdmF0aW9uPgorCQkJCTxwcm9wZXJ0eT4KKwkJCQkJPG5hbWU+IUpFTktJTlNfVVJMPC9uYW1lPgorCQkJCTwvcHJvcGVydHk+CisJCQk8L2FjdGl2YXRpb24+CisJCQk8cHJvcGVydGllcz4KKwkJCQk8dGFyZ2V0LnN1ZmZpeD5wb3J0YWJsZTwvdGFyZ2V0LnN1ZmZpeD4KKwkJCTwvcHJvcGVydGllcz4KIAkJPC9wcm9maWxlPgogCTwvcHJvZmlsZXM+Ci0JCisKIDwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy8ucHJvamVjdCBiL3N5c21sMTQvcmVsZW5nLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTczYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5yZWxlbmc8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5tMmUuY29yZS5tYXZlbjJCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5tMmUuY29yZS5tYXZlbjJOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnAyL2NhdGVnb3J5LnhtbCBiL3N5c21sMTQvcmVsZW5nL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnAyL2NhdGVnb3J5LnhtbAppbmRleCBjZjFlMGRkLi5lNjAzYWQ1IDEwMDY0NAotLS0gYS9zeXNtbDE0L3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5wMi9jYXRlZ29yeS54bWwKKysrIGIvc3lzbWwxNC9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucDIvY2F0ZWdvcnkueG1sCkBAIC0xLDkgKzEsOSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxzaXRlPgotICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5mZWF0dXJlXzAuMTEuMC5xdWFsaWZpZXIuamFyIiBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZSIgdmVyc2lvbj0iMC4xMS4wLnF1YWxpZmllciI+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmVfMC4xMi4wLnF1YWxpZmllci5qYXIiIGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5mZWF0dXJlIiB2ZXJzaW9uPSIwLjEyLjAucXVhbGlmaWVyIj4KICAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmNhdGVnb3J5Ii8+CiAgICA8L2ZlYXR1cmU+Ci0gICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmUuc291cmNlXzAuMTEuMC5xdWFsaWZpZXIuamFyIiBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwuZmVhdHVyZS5zb3VyY2UiIHZlcnNpb249IjAuMTEuMC5xdWFsaWZpZXIiPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5mZWF0dXJlLnNvdXJjZV8wLjEyLjAucXVhbGlmaWVyLmphciIgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLmZlYXR1cmUuc291cmNlIiB2ZXJzaW9uPSIwLjEyLjAucXVhbGlmaWVyIj4KICAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmNhdGVnb3J5Ii8+CiAgICA8L2ZlYXR1cmU+CiAgICAKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnAyL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5wMi9wb20ueG1sCmluZGV4IDRjMDZjNGIuLjllNjI2ZWEgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvcmVsZW5nL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnAyL3BvbS54bWwKKysrIGIvc3lzbWwxNC9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucDIvcG9tLnhtbApAQCAtMSwxNSArMSwxNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CiAJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCQorCiAJPHBhcmVudD4KIAkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgogCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5yZWxlbmc8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjAuMTEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwkJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgogCTwvcGFyZW50PgotCQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmludGVyb3BlcmFiaWxpdHkuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnAyPC9hcnRpZmFjdElkPgorCisJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucDI8L2FydGlmYWN0SWQ+CiAJPHBhY2thZ2luZz5lY2xpcHNlLXJlcG9zaXRvcnk8L3BhY2thZ2luZz4KLQkKKwogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy9wb20ueG1sCmluZGV4IDNkZDBhM2UuLjk2NTE1MTkgMTAwNzU1Ci0tLSBhL3N5c21sMTQvcmVsZW5nL3BvbS54bWwKKysrIGIvc3lzbWwxNC9yZWxlbmcvcG9tLnhtbApAQCAtMSwxMiArMSwxMyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAogCTxwYXJlbnQ+CiAJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KIAkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucm9vdDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAJPC9wYXJlbnQ+CiAKIAk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5yZWxlbmc8L2FydGlmYWN0SWQ+CkBAIC0xNiw1ICsxNyw1IEBACiAJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucDI8L21vZHVsZT4KIAkJPG1vZHVsZT50YXJnZXRwbGF0Zm9ybXM8L21vZHVsZT4KIAk8L21vZHVsZXM+Ci0JCisKIDwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4udGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL2VjbGlwc2Uvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnRhcmdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjIzZGRjOC4uMDAwMDAwMAotLS0gYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4udGFyZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08P3BkZT8+Ci08IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9tYmFyYmVyby9mci5vYmVvLnJlbGVuZy50YXJnZXRwbGF0Zm9ybSAtLT4KLTx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0U3lzbWwgLSBPeHlnZW4iIHNlcXVlbmNlTnVtYmVyPSIxNTAzNzYxMTk1Ij4KLSAgPGxvY2F0aW9ucz4KLSAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuZmVhdHVyZS5zb3VyY2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmRpYWdyYW0uZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuZGlhZ3JhbS5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwucHJvcGVydGllcy5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5wcm9wZXJ0aWVzLmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGV4cGxvcmVyLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm1vZGVsZXhwbG9yZXIuZmVhdHVyZS5zb3VyY2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci0gICAgICA8cmVwb3NpdG9yeSBpZD0ic3lzbWwxMSIgbG9jYXRpb249Imh0dHBzOi8vaHVkc29uLmVjbGlwc2Uub3JnL3BhcHlydXMvdmlldy9TeXNtbC9qb2IvcGFweXJ1cy1zeXNtbDExLW94eWdlbi9sYXN0U3VjY2Vzc2Z1bEJ1aWxkL2FydGlmYWN0L29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxMS5wMi90YXJnZXQvcmVwb3NpdG9yeS8iLz4KLSAgICA8L2xvY2F0aW9uPgotICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5zb3VyY2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGlkPSJzeXNtbDE0IiBsb2NhdGlvbj0iaHR0cHM6Ly9odWRzb24uZWNsaXBzZS5vcmcvcGFweXJ1cy9qb2IvcGFweXJ1cy1zeXNtbC1veHlnZW4vbGFzdFN1Y2Nlc3NmdWxCdWlsZC9hcnRpZmFjdC9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LnAyL3RhcmdldC9yZXBvc2l0b3J5LyIvPgotICAgIDwvbG9jYXRpb24+Ci0gICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tcGFyZSIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5wcm9qZWN0IiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249ImZpbGU6L2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9veHlnZW4vIi8+Ci0gICAgPC9sb2NhdGlvbj4KLSAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEuZG9jIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbiIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5ibGFja2JveGVzIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5ibGFja2JveGVzLnNvdXJjZSIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGlkPSJQYXB5cnVzIiBsb2NhdGlvbj0iZmlsZTovaG9tZS9kYXRhL2h0dHBkL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvb3h5Z2VuLyIvPgotICAgIDwvbG9jYXRpb24+Ci0gICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LmZyYW1ld29yayIgdmVyc2lvbj0iMC4wLjAiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LnV0aWxzIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLnRlc3RzLnRvb2xzIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXNEZXYiIGxvY2F0aW9uPSJodHRwczovL2h1ZHNvbi5lY2xpcHNlLm9yZy9wYXB5cnVzL2pvYi9QYXB5cnVzLU94eWdlbi1EZXZlbG9wZXIvbGFzdFN1Y2Nlc3NmdWxCdWlsZC9hcnRpZmFjdC9yZXBvc2l0b3J5LyIvPgotICAgIDwvbG9jYXRpb24+Ci0gIDwvbG9jYXRpb25zPgotPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LmVjbGlwc2Uvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LmVjbGlwc2UudGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlLnRhcmdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDA5NGRjCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlLnRhcmdldApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gMjAxOC0wOSIgc2VxdWVuY2VOdW1iZXI9IjE1NTExMDkyNDQiPgorICA8bG9jYXRpb25zPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UubTJtLnF2dC5vbWwucHJvamVjdCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOC0wOS8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXMiIGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy8yMDE4LTA5LyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9InN5c21sMTQiIGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvY29tcG9uZW50cy9zeXNtbDE0LzIwMTgtMDkiLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LmVjbGlwc2UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDBlMGJmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlL3BvbS54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKwk8cGFyZW50PgorCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRhcmdldHBsYXRmb3JtczwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCisJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LmVjbGlwc2U8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCAyMDE4LTA5IFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgaW4gMjAxOC0wOTwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS50YXJnZXQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlNjY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlLnRhcmdldApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gMjAxOC0wOSIgc2VxdWVuY2VOdW1iZXI9IjE1NTExMDkyNDQiPgorICA8bG9jYXRpb25zPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UubTJtLnF2dC5vbWwucHJvamVjdCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOC0wOS8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXMiIGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy8yMDE4LTA5LyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9InN5c21sMTQiIGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvY29tcG9uZW50cy9zeXNtbDE0LzIwMTgtMDkiLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUudHBkIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUudHBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YjA5MjIKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS50cGQKQEAgLTAsMCArMSwyMCBAQAordGFyZ2V0ICJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSAyMDE4LTA5IiB3aXRoIHNvdXJjZSByZXF1aXJlbWVudHMKKworbG9jYXRpb24gImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE4LTA5LyIgeworIG9yZy5lY2xpcHNlLm0ybS5xdnQub21sLnByb2plY3QgbGF6eQorfQorCisvL21hbnVhbFVwZGF0ZQorbG9jYXRpb24gUGFweXJ1cyAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvMjAxOC0wOS8iIHsKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmRvYyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uc291cmNlIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIGxhenkKK30KKworLy9tYW51YWxVcGRhdGUKK2xvY2F0aW9uIHN5c21sMTQgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvMjAxOC0wOSIgeworIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAgbGF6eQorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIGxhenkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYTdmMQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUvcG9tLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGFyZ2V0cGxhdGZvcm1zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGU8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCAyMDE4LTA5IFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgaW4gMjAxOC0wOTwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLmVjbGlwc2Uvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLmVjbGlwc2UudGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlLnRhcmdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDA0NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlLnRhcmdldApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gMjAxOC0xMiIgc2VxdWVuY2VOdW1iZXI9IjE1NTExMDk0NjUiPgorICA8bG9jYXRpb25zPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UubTJtLnF2dC5vbWwucHJvamVjdCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOC0xMi8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXMiIGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy8yMDE4LTEyLyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9InN5c21sMTQiIGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvY29tcG9uZW50cy9zeXNtbDE0LzIwMTgtMDkiLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLmVjbGlwc2UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTZlZTRlCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlL3BvbS54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKwk8cGFyZW50PgorCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRhcmdldHBsYXRmb3JtczwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+MC4xMi4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCTwvcGFyZW50PgorCisJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLmVjbGlwc2U8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCAyMDE4LTEyIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgaW4gMjAxOC0xMjwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS50YXJnZXQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NDNiMgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlLnRhcmdldApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gMjAxOC0xMiIgc2VxdWVuY2VOdW1iZXI9IjE1NTExMDk0NjUiPgorICA8bG9jYXRpb25zPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UubTJtLnF2dC5vbWwucHJvamVjdCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOC0xMi8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXMiIGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy8yMDE4LTEyLyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9InN5c21sMTQiIGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvY29tcG9uZW50cy9zeXNtbDE0LzIwMTgtMDkiLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUudHBkIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUudHBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDBhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS50cGQKQEAgLTAsMCArMSwyMCBAQAordGFyZ2V0ICJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSAyMDE4LTEyIiB3aXRoIHNvdXJjZSByZXF1aXJlbWVudHMKKworbG9jYXRpb24gImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE4LTEyLyIgeworIG9yZy5lY2xpcHNlLm0ybS5xdnQub21sLnByb2plY3QgbGF6eQorfQorCisvL21hbnVhbFVwZGF0ZQorbG9jYXRpb24gUGFweXJ1cyAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvMjAxOC0xMi8iIHsKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmRvYyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uc291cmNlIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIGxhenkKK30KKworLy9tYW51YWxVcGRhdGUKK2xvY2F0aW9uIHN5c21sMTQgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvMjAxOC0wOSIgeworIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAgbGF6eQorIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIGxhenkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxMzU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUvcG9tLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGFyZ2V0cGxhdGZvcm1zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGU8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCAyMDE4LTEyIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgaW4gMjAxOC0xMjwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi50YXJnZXQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5lY2xpcHNlLnRhcmdldApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHN5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnRhcmdldApyZW5hbWUgdG8gc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLmVjbGlwc2Uvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS50YXJnZXQKaW5kZXggYjg0MmE5ZC4uNzdlOTQ1MQotLS0gYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi50YXJnZXQKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLmVjbGlwc2Uvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL21iYXJiZXJvL2ZyLm9iZW8ucmVsZW5nLnRhcmdldHBsYXRmb3JtIC0tPgotPHRhcmdldCBuYW1lPSJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTRTeXNtbCAtIE94eWdlbiIgc2VxdWVuY2VOdW1iZXI9IjE0OTg0MTY0MDYiPgorPHRhcmdldCBuYW1lPSJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSBPeHlnZW4iIHNlcXVlbmNlTnVtYmVyPSIxNDk4NDE2NDA2Ij4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm0ybS5xdnQub21sLnByb2plY3QiIHZlcnNpb249IjAuMC4wIi8+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS9wb20ueG1sIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLmVjbGlwc2UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODBiMDEyCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLmVjbGlwc2UvcG9tLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGFyZ2V0cGxhdGZvcm1zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5lY2xpcHNlPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS10YXJnZXQtZGVmaW5pdGlvbjwvcGFja2FnaW5nPgorCTxuYW1lPkludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgT3h5Z2VuIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgaW4gT3h5Z2VuPC9kZXNjcmlwdGlvbj4KKworPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi50YXJnZXQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUudGFyZ2V0CnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHN5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi50YXJnZXQKcmVuYW1lIHRvIHN5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS50YXJnZXQKaW5kZXggYWE5N2I5MC4uMjI0MzRlZSAxMDA2NDQKLS0tIGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnRhcmdldAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9tYmFyYmVyby9mci5vYmVvLnJlbGVuZy50YXJnZXRwbGF0Zm9ybSAtLT4KLTx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0U3lzbWwgLSBPeHlnZW4iIHNlcXVlbmNlTnVtYmVyPSIxNDk4NDE2NDA2Ij4KKzx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gT3h5Z2VuIiBzZXF1ZW5jZU51bWJlcj0iMTQ5ODQxNjQwNiI+CiAgIDxsb2NhdGlvbnM+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5wcm9qZWN0IiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlLnRwZCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS50cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0MDY0OAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS50cGQKQEAgLTAsMCArMSwyMCBAQAordGFyZ2V0ICJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSBPeHlnZW4iIHdpdGggc291cmNlIHJlcXVpcmVtZW50cworCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL294eWdlbi8iIHsKKyBvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5wcm9qZWN0IGxhenkKK30KKworLy9tYW51YWxVcGRhdGUKK2xvY2F0aW9uIFBhcHlydXMgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy91cGRhdGVzL3JlbGVhc2VzL294eWdlbi8iIHsKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmRvYyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uc291cmNlIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIGxhenkKK30KKworLy9tYW51YWxVcGRhdGUKK2xvY2F0aW9uIHN5c21sMTQgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvb3h5Z2VuIiB7Cisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuZmVhdHVyZS5ncm91cCBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAgbGF6eQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9wb20ueG1sIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAxNTE1NAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS10YXJnZXQtZGVmaW5pdGlvbjwvcGFja2FnaW5nPgorCTxuYW1lPkludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgT3h5Z2VuIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgaW4gT3h5Z2VuPC9kZXNjcmlwdGlvbj4KKworPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi50cGQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4vb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4udHBkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1ZGJlYWI0Li4wMDAwMDAwCi0tLSBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi50cGQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi10YXJnZXQgIkludGVyb3BlcmFiaWxpdHkgU3lzbWwxNFN5c21sIC0gT3h5Z2VuIiB3aXRoIHNvdXJjZSByZXF1aXJlbWVudHMKLQotbG9jYXRpb24gImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9veHlnZW4vIiB7Ci0gb3JnLmVjbGlwc2UubTJtLnF2dC5vbWwucHJvamVjdCBsYXp5Ci19Ci0KLS8vbWFudWFsVXBkYXRlCi1sb2NhdGlvbiBQYXB5cnVzICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy9veHlnZW4vIiB7Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MgbGF6eQotIG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbiBsYXp5Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLnNvdXJjZSBsYXp5Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMgbGF6eQotIG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5ibGFja2JveGVzLnNvdXJjZSBsYXp5Ci19Ci0KLS8vbWFudWFsVXBkYXRlCi1sb2NhdGlvbiBzeXNtbDExICJodHRwczovL2h1ZHNvbi5lY2xpcHNlLm9yZy9wYXB5cnVzL3ZpZXcvU3lzbWwvam9iL3BhcHlydXMtc3lzbWwxMS1veHlnZW4vbGFzdFN1Y2Nlc3NmdWxCdWlsZC9hcnRpZmFjdC9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTEucDIvdGFyZ2V0L3JlcG9zaXRvcnkvIiB7Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAgbGF6eQotIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuZmVhdHVyZS5zb3VyY2UuZmVhdHVyZS5ncm91cCBsYXp5Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5kaWFncmFtLmZlYXR1cmUuZmVhdHVyZS5ncm91cCBsYXp5Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5kaWFncmFtLmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAgbGF6eSAKLSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnByb3BlcnRpZXMuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIGxhenkKLSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLnByb3BlcnRpZXMuZmVhdHVyZS5zb3VyY2UuZmVhdHVyZS5ncm91cCBsYXp5Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGV4cGxvcmVyLmZlYXR1cmUuZmVhdHVyZS5ncm91cCBsYXp5Ci0gb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5tb2RlbGV4cGxvcmVyLmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAgbGF6eQotIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIGxhenkKLSBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAgbGF6eQotfQotCi0vL21hbnVhbFVwZGF0ZQotbG9jYXRpb24gc3lzbWwxNCAiaHR0cHM6Ly9odWRzb24uZWNsaXBzZS5vcmcvcGFweXJ1cy9qb2IvcGFweXJ1cy1zeXNtbC1veHlnZW4vbGFzdFN1Y2Nlc3NmdWxCdWlsZC9hcnRpZmFjdC9yZWxlbmcvb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LnAyL3RhcmdldC9yZXBvc2l0b3J5LyIgewotIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAgbGF6eQotIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIGxhenkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW4vcG9tLnhtbCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWZiNjI0Li4wMDAwMDAwCi0tLSBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQkKLQk8cGFyZW50PgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRhcmdldHBsYXRmb3JtczwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgotCTwvcGFyZW50PgkKLQkKLQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtdGFyZ2V0LWRlZmluaXRpb248L3BhY2thZ2luZz4KLQk8bmFtZT5JbnRlcm9wZXJhYmlsaXR5IFN5c01MMTQgT3h5Z2VuIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgotCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxNCBpbiBPeHlnZW48L2Rlc2NyaXB0aW9uPgotCQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLmVjbGlwc2UudGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLmVjbGlwc2Uvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5waG90b24uZWNsaXBzZS50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmNWNiNAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLmVjbGlwc2UudGFyZ2V0CkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGU/PgorPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgorPHRhcmdldCBuYW1lPSJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSBQaG90b24iIHNlcXVlbmNlTnVtYmVyPSIxNTUxMTA4MTA5Ij4KKyAgPGxvY2F0aW9ucz4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm0ybS5xdnQub21sLnByb2plY3QiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iZmlsZTovaG9tZS9kYXRhL2h0dHBkL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL3Bob3Rvbi8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXMiIGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy9waG90b24vIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0ic3lzbWwxNCIgbG9jYXRpb249ImZpbGU6L2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvcGhvdG9uIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgPC9sb2NhdGlvbnM+Cis8L3RhcmdldD4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5lY2xpcHNlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5waG90b24uZWNsaXBzZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTFhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5waG90b24uZWNsaXBzZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLmVjbGlwc2U8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCBQaG90b24gVGFyZ2V0IERlZmluaXRpb248L25hbWU+CisJPGRlc2NyaXB0aW9uPlRoaXMgcGx1Zy1pbiBjb250YWlucyB0aGUgdGFyZ2V0IGRlZmluaXRpb24gZm9yIFBhcHlydXMgSW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCBpbiBQaG90b248L2Rlc2NyaXB0aW9uPgorCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlLnRhcmdldCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkOGNiNQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS50YXJnZXQKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8P3BkZT8+Cis8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Cis8dGFyZ2V0IG5hbWU9IkludGVyb3BlcmFiaWxpdHkgU3lzbWwxNCAtIFBob3RvbiIgc2VxdWVuY2VOdW1iZXI9IjE1NTExMDgxMDkiPgorICA8bG9jYXRpb25zPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UubTJtLnF2dC5vbWwucHJvamVjdCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvcGhvdG9uLyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmRvYyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24iIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLnNvdXJjZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcy5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iUGFweXJ1cyIgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy91cGRhdGVzL3JlbGVhc2VzL3Bob3Rvbi8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5zb3VyY2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJzeXNtbDE0IiBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL2NvbXBvbmVudHMvc3lzbWwxNC9waG90b24iLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlLnRwZCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS50cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxNDJjYgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS50cGQKQEAgLTAsMCArMSwyMCBAQAordGFyZ2V0ICJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSBQaG90b24iIHdpdGggc291cmNlIHJlcXVpcmVtZW50cworCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL3Bob3Rvbi8iIHsKKyBvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5wcm9qZWN0IGxhenkKK30KKworLy9tYW51YWxVcGRhdGUKK2xvY2F0aW9uIFBhcHlydXMgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy91cGRhdGVzL3JlbGVhc2VzL3Bob3Rvbi8iIHsKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmRvYyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uc291cmNlIGxhenkKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIGxhenkKK30KKworLy9tYW51YWxVcGRhdGUKK2xvY2F0aW9uIHN5c21sMTQgImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvcGhvdG9uIiB7Cisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuZmVhdHVyZS5ncm91cCBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAgbGF6eQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9wb20ueG1sIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M2NjBiMgotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS10YXJnZXQtZGVmaW5pdGlvbjwvcGFja2FnaW5nPgorCTxuYW1lPkludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgUGhvdG9uIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgaW4gUGhvdG9uPC9kZXNjcmlwdGlvbj4KKworPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LmVjbGlwc2Uvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS50YXJnZXQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUudGFyZ2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODI3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUudGFyZ2V0CkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGU/PgorPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgorPHRhcmdldCBuYW1lPSJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSAyMDE4LTA5IiBzZXF1ZW5jZU51bWJlcj0iMTU1MTE3MjQ2MCI+CisgIDxsb2NhdGlvbnM+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmRvYyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24iIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLnNvdXJjZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcy5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC5mcmFtZXdvcmsiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC51dGlscyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by50ZXN0cy50b29scyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJQYXB5cnVzIiBsb2NhdGlvbj0iZmlsZTovaG9tZS9kYXRhL2h0dHBkL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvMjAxOC0wOS8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5zb3VyY2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJzeXNtbDE0IiBsb2NhdGlvbj0iZmlsZTovaG9tZS9kYXRhL2h0dHBkL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL2NvbXBvbmVudHMvc3lzbWwxNC8yMDE4LTA5Ii8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi5jb21wYXJlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm0ybS5xdnQub21sLnByb2plY3QiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iZmlsZTovaG9tZS9kYXRhL2h0dHBkL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMTgtMDkvIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgPC9sb2NhdGlvbnM+Cis8L3RhcmdldD4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LmVjbGlwc2UvcG9tLnhtbCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LmVjbGlwc2UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDU1Mzg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkuZWNsaXBzZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkuZWNsaXBzZTwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPmVjbGlwc2UtdGFyZ2V0LWRlZmluaXRpb248L3BhY2thZ2luZz4KKwk8bmFtZT5JbnRlcm9wZXJhYmlsaXR5IFN5c01MMS40IFRlc3RzIDIwMTgtMDkgVGFyZ2V0IERlZmluaXRpb248L25hbWU+CisJPGRlc2NyaXB0aW9uPlRoaXMgcGx1Zy1pbiBjb250YWlucyB0aGUgdGFyZ2V0IGRlZmluaXRpb24gZm9yIFBhcHlydXMgSW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCBUZXN0cyBpbiAyMDE4LTA5PC9kZXNjcmlwdGlvbj4KKworPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUudGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MDA1OAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUudGFyZ2V0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGU/PgorPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgorPHRhcmdldCBuYW1lPSJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSAyMDE4LTA5IiBzZXF1ZW5jZU51bWJlcj0iMTU1MTE3MjQ2MCI+CisgIDxsb2NhdGlvbnM+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmRvYyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24iIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLnNvdXJjZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uYmxhY2tib3hlcy5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iUGFweXJ1cyIgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy91cGRhdGVzL3JlbGVhc2VzLzIwMTgtMDkvIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0ic3lzbWwxNCIgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvMjAxOC0wOSIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tcGFyZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5nbWYucnVudGltZS5ub3RhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5wcm9qZWN0IiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE4LTA5LyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LmZyYW1ld29yayIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LnV0aWxzIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLnRlc3RzLnRvb2xzIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXNEZXYiIGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvMjAxOC0wOSIvPgorICAgIDwvbG9jYXRpb24+CisgIDwvbG9jYXRpb25zPgorPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlLnRwZCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUudHBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhM2VhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlLnRwZApAQCAtMCwwICsxLDE3IEBACit0YXJnZXQgIkludGVyb3BlcmFiaWxpdHkgU3lzbWwxNCAtIDIwMTgtMDkiIHdpdGggc291cmNlIHJlcXVpcmVtZW50cworCitpbmNsdWRlICIuLi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlLnRwZCIKKworbG9jYXRpb24gImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE4LTA5LyIgeworIG9yZy5lY2xpcHNlLmVtZi5jb21wYXJlIGxhenkKKyBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyIGxhenkKKyBvcmcuZWNsaXBzZS51aS5pZGUuYXBwbGljYXRpb24gbGF6eQorIG9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uIGxhenkKK30KKworLy9tYW51YWxVcGRhdGUKK2xvY2F0aW9uIFBhcHlydXNEZXYgImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy8yMDE4LTA5InsKKyBvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LmZyYW1ld29yayBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC51dGlscyBsYXp5Cisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8udGVzdHMudG9vbHMgbGF6eQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTA5LnBvcnRhYmxlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTE0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0wOS5wb3J0YWJsZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMDkucG9ydGFibGU8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCBUZXN0cyAyMDE4LTA5IFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgVGVzdHMgaW4gMjAxOC0wOTwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUudGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIuZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlLnRhcmdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWJhM2M2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIuZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlLnRhcmdldApAQCAtMCwwICsxLDMxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gMjAxOC0xMiIgc2VxdWVuY2VOdW1iZXI9IjE1NTExNzI1NjMiPgorICA8bG9jYXRpb25zPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuanVuaXQuZnJhbWV3b3JrIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuanVuaXQudXRpbHMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8udGVzdHMudG9vbHMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iUGFweXJ1cyIgbG9jYXRpb249ImZpbGU6L2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy91cGRhdGVzL3JlbGVhc2VzLzIwMTgtMTIvIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0ic3lzbWwxNCIgbG9jYXRpb249ImZpbGU6L2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvMjAxOC0wOSIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tcGFyZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5nbWYucnVudGltZS5ub3RhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5wcm9qZWN0IiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249ImZpbGU6L2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE4LTEyLyIvPgorICAgIDwvbG9jYXRpb24+CisgIDwvbG9jYXRpb25zPgorPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5lY2xpcHNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwYjFmOQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLmVjbGlwc2UvcG9tLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGFyZ2V0cGxhdGZvcm1zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLmVjbGlwc2U8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCBUZXN0cyAyMDE4LTEyIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgVGVzdHMgaW4gMjAxOC0xMjwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlLnRhcmdldCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUudGFyZ2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzcwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlLnRhcmdldApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gMjAxOC0xMiIgc2VxdWVuY2VOdW1iZXI9IjE1NTExNzI1NjMiPgorICA8bG9jYXRpb25zPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5pbmZyYS5kb2MiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uLmJsYWNrYm94ZXMuc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXMiIGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy8yMDE4LTEyLyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9InN5c21sMTQiIGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvY29tcG9uZW50cy9zeXNtbDE0LzIwMTgtMDkiLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLmNvbXBhcmUiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlciIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS51aS5pZGUuYXBwbGljYXRpb24iIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUubm90YXRpb24iIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UubTJtLnF2dC5vbWwucHJvamVjdCIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOC0xMi8iLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC5mcmFtZXdvcmsiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC51dGlscyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by50ZXN0cy50b29scyIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJQYXB5cnVzRGV2IiBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy91cGRhdGVzL3JlbGVhc2VzLzIwMTgtMTIiLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS50cGQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlLnRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZiOWJhCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS50cGQKQEAgLTAsMCArMSwxNyBAQAordGFyZ2V0ICJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSAyMDE4LTEyIiB3aXRoIHNvdXJjZSByZXF1aXJlbWVudHMKKworaW5jbHVkZSAiLi4vb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLm1haW4udGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS50cGQiCisKK2xvY2F0aW9uICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOC0xMi8iIHsKKyBvcmcuZWNsaXBzZS5lbWYuY29tcGFyZSBsYXp5Cisgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlciBsYXp5Cisgb3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIGxhenkKKyBvcmcuZWNsaXBzZS5nbWYucnVudGltZS5ub3RhdGlvbiBsYXp5Cit9CisKKy8vbWFudWFsVXBkYXRlCitsb2NhdGlvbiBQYXB5cnVzRGV2ICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvMjAxOC0xMiJ7Cisgb3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC5mcmFtZXdvcmsgbGF6eQorIG9yZy5lY2xpcHNlLnBhcHlydXMuanVuaXQudXRpbHMgbGF6eQorIG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLnRlc3RzLnRvb2xzIGxhenkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uMjAxOC0xMi5wb3J0YWJsZS9wb20ueG1sIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2JjYTRmCi0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLjIwMTgtMTIucG9ydGFibGUvcG9tLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGFyZ2V0cGxhdGZvcm1zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS4yMDE4LTEyLnBvcnRhYmxlPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS10YXJnZXQtZGVmaW5pdGlvbjwvcGFja2FnaW5nPgorCTxuYW1lPkludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgVGVzdHMgMjAxOC0xMiBUYXJnZXQgRGVmaW5pdGlvbjwvbmFtZT4KKwk8ZGVzY3JpcHRpb24+VGhpcyBwbHVnLWluIGNvbnRhaW5zIHRoZSB0YXJnZXQgZGVmaW5pdGlvbiBmb3IgUGFweXJ1cyBJbnRlcm9wZXJhYmlsaXR5IFN5c01MMS40IFRlc3RzIGluIDIwMTgtMTI8L2Rlc2NyaXB0aW9uPgorCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4udGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5lY2xpcHNlLnRhcmdldApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi50YXJnZXQKcmVuYW1lIHRvIHN5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS50YXJnZXQKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS9wb20ueG1sIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5lY2xpcHNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0ODZiNAotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4uZWNsaXBzZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5lY2xpcHNlPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS10YXJnZXQtZGVmaW5pdGlvbjwvcGFja2FnaW5nPgorCTxuYW1lPkludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgVGVzdHMgT3h5Z2VuIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgVGVzdHMgaW4gT3h5Z2VuPC9kZXNjcmlwdGlvbj4KKworPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4vb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnRhcmdldCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlLnRhcmdldApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4udGFyZ2V0CmNvcHkgdG8gc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUudGFyZ2V0CmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi50cGQgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS50cGQKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBzeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi50cGQKcmVuYW1lIHRvIHN5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlLnRwZAppbmRleCAyZWMzYTY0Li43NzRjMzI5Ci0tLSBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4vb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnRwZAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuLnBvcnRhYmxlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS50cGQKQEAgLTEsMTcgKzEsMTEgQEAKLXRhcmdldCAiSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0U3lzbWwgLSBPeHlnZW4iIHdpdGggc291cmNlIHJlcXVpcmVtZW50cwordGFyZ2V0ICJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSBPeHlnZW4iIHdpdGggc291cmNlIHJlcXVpcmVtZW50cwogCi1pbmNsdWRlICIuLi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi50cGQiCitpbmNsdWRlICIuLi9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC5tYWluLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS50cGQiCiAKIGxvY2F0aW9uICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvb3h5Z2VuLyIgewogIG9yZy5lY2xpcHNlLmVtZi5jb21wYXJlIGxhenkKICBvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyIGxhenkKICBvcmcuZWNsaXBzZS51aS5pZGUuYXBwbGljYXRpb24gbGF6eQotCi19Ci0KLS8vbWFudWFsVXBkYXRlCi1sb2NhdGlvbiBQYXB5cnVzICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy9veHlnZW4vIiB7Ci0gCiB9CiAKIC8vbWFudWFsVXBkYXRlCkBAIC0xOSw1ICsxMyw0IEBACiAgb3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC5mcmFtZXdvcmsgbGF6eQogIG9yZy5lY2xpcHNlLnBhcHlydXMuanVuaXQudXRpbHMgbGF6eQogIG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLnRlc3RzLnRvb2xzIGxhenkKLQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUvcG9tLnhtbCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW4ucG9ydGFibGUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODYwMmE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi5wb3J0YWJsZTwvYXJ0aWZhY3RJZD4KKwk8cGFja2FnaW5nPmVjbGlwc2UtdGFyZ2V0LWRlZmluaXRpb248L3BhY2thZ2luZz4KKwk8bmFtZT5JbnRlcm9wZXJhYmlsaXR5IFN5c01MMS40IFRlc3RzIE94eWdlbiBUYXJnZXQgRGVmaW5pdGlvbjwvbmFtZT4KKwk8ZGVzY3JpcHRpb24+VGhpcyBwbHVnLWluIGNvbnRhaW5zIHRoZSB0YXJnZXQgZGVmaW5pdGlvbiBmb3IgUGFweXJ1cyBJbnRlcm9wZXJhYmlsaXR5IFN5c01MMS40IFRlc3RzIGluIE94eWdlbjwvZGVzY3JpcHRpb24+CisKKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU5NmZlMjAuLjAwMDAwMDAKLS0tIGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLm94eWdlbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQkKLQk8cGFyZW50PgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRhcmdldHBsYXRmb3JtczwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgotCTwvcGFyZW50PgkKLQkKLSAgCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS50ZXN0czwvZ3JvdXBJZD4KLQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5veHlnZW48L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+Ci0JPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBPeHlnZW4gVGFyZ2V0IERlZmluaXRpb248L25hbWU+Ci0JPGRlc2NyaXB0aW9uPlRoaXMgcGx1Zy1pbiBjb250YWlucyB0aGUgdGFyZ2V0IGRlZmluaXRpb24gZm9yIFBhcHlydXMgSW50ZXJvcGVyYWJpbGl0eSBpbiBPeHlnZW48L2Rlc2NyaXB0aW9uPgotCQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24uZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUudGFyZ2V0IGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5lY2xpcHNlL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzMmQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24uZWNsaXBzZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUudGFyZ2V0CkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGU/PgorPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgorPHRhcmdldCBuYW1lPSJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSBQaG90b24iIHNlcXVlbmNlTnVtYmVyPSIxNTUxMTcyMDI5Ij4KKyAgPGxvY2F0aW9ucz4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEuZG9jIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5ibGFja2JveGVzIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5ibGFja2JveGVzLnNvdXJjZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LmZyYW1ld29yayIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LnV0aWxzIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLnRlc3RzLnRvb2xzIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9IlBhcHlydXMiIGxvY2F0aW9uPSJmaWxlOi9ob21lL2RhdGEvaHR0cGQvZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy9waG90b24vIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LmZlYXR1cmUuc291cmNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0ic3lzbWwxNCIgbG9jYXRpb249ImZpbGU6L2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9tZHQvcGFweXJ1cy9jb21wb25lbnRzL3N5c21sMTQvcGhvdG9uIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi5jb21wYXJlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm0ybS5xdnQub21sLnByb2plY3QiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iZmlsZTovaG9tZS9kYXRhL2h0dHBkL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL3Bob3Rvbi8iLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24uZWNsaXBzZS9wb20ueG1sIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5lY2xpcHNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcwOWMxNwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24uZWNsaXBzZS9wb20ueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50YXJnZXRwbGF0Zm9ybXM8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KKworCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5lY2xpcHNlPC9hcnRpZmFjdElkPgorCTxwYWNrYWdpbmc+ZWNsaXBzZS10YXJnZXQtZGVmaW5pdGlvbjwvcGFja2FnaW5nPgorCTxuYW1lPkludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgVGVzdHMgUGhvdG9uIFRhcmdldCBEZWZpbml0aW9uPC9uYW1lPgorCTxkZXNjcmlwdGlvbj5UaGlzIHBsdWctaW4gY29udGFpbnMgdGhlIHRhcmdldCBkZWZpbml0aW9uIGZvciBQYXB5cnVzIEludGVyb3BlcmFiaWxpdHkgU3lzTUwxLjQgVGVzdHMgaW4gUGhvdG9uPC9kZXNjcmlwdGlvbj4KKworPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlLnRhcmdldCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlLnRhcmdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTU5YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUudGFyZ2V0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGU/PgorPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgorPHRhcmdldCBuYW1lPSJJbnRlcm9wZXJhYmlsaXR5IFN5c21sMTQgLSBQaG90b24iIHNlcXVlbmNlTnVtYmVyPSIxNTUxMTcyMDI5Ij4KKyAgPGxvY2F0aW9ucz4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuaW5mcmEuZG9jIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5tMm0ucXZ0by5jb21tb24uc291cmNlIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5ibGFja2JveGVzIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLmNvbW1vbi5ibGFja2JveGVzLnNvdXJjZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJQYXB5cnVzIiBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvcGhvdG9uLyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5mZWF0dXJlLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9InN5c21sMTQiIGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvY29tcG9uZW50cy9zeXNtbDE0L3Bob3RvbiIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tcGFyZSIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmlkZS5hcHBsaWNhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5nbWYucnVudGltZS5ub3RhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5tMm0ucXZ0Lm9tbC5wcm9qZWN0IiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9waG90b24vIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuanVuaXQuZnJhbWV3b3JrIiB2ZXJzaW9uPSIwLjAuMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuanVuaXQudXRpbHMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8udGVzdHMudG9vbHMiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iUGFweXJ1c0RldiIgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvbWR0L3BhcHlydXMvdXBkYXRlcy9yZWxlYXNlcy9waG90b24vIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgPC9sb2NhdGlvbnM+Cis8L3RhcmdldD4KZGlmZiAtLWdpdCBhL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlLnRwZCBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlLnRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmI3OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRhcmdldHBsYXRmb3JtLnBob3Rvbi5wb3J0YWJsZS9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUudHBkCkBAIC0wLDAgKzEsMTcgQEAKK3RhcmdldCAiSW50ZXJvcGVyYWJpbGl0eSBTeXNtbDE0IC0gUGhvdG9uIiB3aXRoIHNvdXJjZSByZXF1aXJlbWVudHMKKworaW5jbHVkZSAiLi4vb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUudHBkIgorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL3Bob3Rvbi8iIHsKKyBvcmcuZWNsaXBzZS5lbWYuY29tcGFyZSBsYXp5Cisgb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlciBsYXp5Cisgb3JnLmVjbGlwc2UudWkuaWRlLmFwcGxpY2F0aW9uIGxhenkKKyBvcmcuZWNsaXBzZS5nbWYucnVudGltZS5ub3RhdGlvbiBsYXp5Cit9CisKKy8vbWFudWFsVXBkYXRlCitsb2NhdGlvbiBQYXB5cnVzRGV2ICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL21kdC9wYXB5cnVzL3VwZGF0ZXMvcmVsZWFzZXMvcGhvdG9uLyJ7Cisgb3JnLmVjbGlwc2UucGFweXJ1cy5qdW5pdC5mcmFtZXdvcmsgbGF6eQorIG9yZy5lY2xpcHNlLnBhcHlydXMuanVuaXQudXRpbHMgbGF6eQorIG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLnRlc3RzLnRvb2xzIGxhenkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ucGhvdG9uLnBvcnRhYmxlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiOTc5MwotLS0gL2Rldi9udWxsCisrKyBiL3N5c21sMTQvcmVsZW5nL3RhcmdldHBsYXRmb3Jtcy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGUvcG9tLnhtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworCTxwYXJlbnQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KKwkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGFyZ2V0cGxhdGZvcm1zPC9hcnRpZmFjdElkPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJPC9wYXJlbnQ+CisKKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy50YXJnZXRwbGF0Zm9ybS5waG90b24ucG9ydGFibGU8L2FydGlmYWN0SWQ+CisJPHBhY2thZ2luZz5lY2xpcHNlLXRhcmdldC1kZWZpbml0aW9uPC9wYWNrYWdpbmc+CisJPG5hbWU+SW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCBUZXN0cyBQaG90b24gVGFyZ2V0IERlZmluaXRpb248L25hbWU+CisJPGRlc2NyaXB0aW9uPlRoaXMgcGx1Zy1pbiBjb250YWlucyB0aGUgdGFyZ2V0IGRlZmluaXRpb24gZm9yIFBhcHlydXMgSW50ZXJvcGVyYWJpbGl0eSBTeXNNTDEuNCBUZXN0cyBpbiBQaG90b248L2Rlc2NyaXB0aW9uPgorCis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3lzbWwxNC9yZWxlbmcvdGFyZ2V0cGxhdGZvcm1zL3BvbS54bWwgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvcG9tLnhtbAppbmRleCAxN2NlNjA2Li5kMTRmMGMyIDEwMDY0NAotLS0gYS9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvcG9tLnhtbAorKysgYi9zeXNtbDE0L3JlbGVuZy90YXJnZXRwbGF0Zm9ybXMvcG9tLnhtbApAQCAtMSwxMiArMSwxMyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAogCTxwYXJlbnQ+CiAJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KIAkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucmVsZW5nPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjExLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KIAk8L3BhcmVudD4KIAogCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRhcmdldHBsYXRmb3JtczwvYXJ0aWZhY3RJZD4KQEAgLTE0LDE3ICsxNSwxNiBAQAogCiAJPHByb2ZpbGVzPgogCQk8cHJvZmlsZT4KLSAgICAgIAkJPGlkPnN5c21sMTRUYXJnZXRNYWluPC9pZD4KKwkJCTxpZD5zeXNtbDE0PC9pZD4KIAkJCTxtb2R1bGVzPgotCQkJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS5veHlnZW48L21vZHVsZT4KLQkJCTwvbW9kdWxlcz4gICAgICAJCQotICAgIAk8L3Byb2ZpbGU+Ci0gICAgCQorCQkJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwubWFpbi50YXJnZXRwbGF0Zm9ybS4ke3ZlcnNpb259LiR7dGFyZ2V0LnN1ZmZpeH08L21vZHVsZT4KKwkJCTwvbW9kdWxlcz4KKwkJPC9wcm9maWxlPgogCQk8cHJvZmlsZT4KLSAgICAgIAkJPGlkPnN5c21sMTRUYXJnZXRUZXN0czwvaWQ+CisJCQk8aWQ+c3lzbWwxNHRlc3RzPC9pZD4KIAkJCTxtb2R1bGVzPgotCQkJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0ub3h5Z2VuPC9tb2R1bGU+Ci0JCQk8L21vZHVsZXM+ICAgICAgCQkKLSAgICAJPC9wcm9maWxlPgorCQkJCTxtb2R1bGU+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMudGFyZ2V0cGxhdGZvcm0uJHt2ZXJzaW9ufS4ke3RhcmdldC5zdWZmaXh9PC9tb2R1bGU+CisJCQk8L21vZHVsZXM+CisJCTwvcHJvZmlsZT4KIAk8L3Byb2ZpbGVzPgogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGZhNDc2ZmUuLjhhZTkwYzcgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvc3lzbWwxNC90ZXN0cy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDAuMTEuMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAwLjEyLjAucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5wYXB5cnVzLmluZnJhLmNvcmUubG9nO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKQEAgLTEzLDggKzEzLDkgQEAKICBvcmcuZWNsaXBzZS5wYXB5cnVzLmp1bml0LnV0aWxzO2J1bmRsZS12ZXJzaW9uPSJbMi4wLjAsMy4wLjApIiwKICBvcmcuZWNsaXBzZS5lbWYuY29tcGFyZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCiAgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8uY29tbW9uO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbDtidW5kbGUtdmVyc2lvbj0iWzAuMTEuMCwxLjAuMCkiLAotIG9yZy5lY2xpcHNlLnBhcHlydXMudW1sLm0ybS5xdnRvLnRlc3RzLnRvb2xzO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIgorIG9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sO2J1bmRsZS12ZXJzaW9uPSJbMC4xMi4wLDEuMC4wKSIsCisgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwubTJtLnF2dG8udGVzdHMudG9vbHM7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAorIG9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uO2J1bmRsZS12ZXJzaW9uPSJbMS45LjAsMy4wLjApIgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMuQWN0aXZhdG9yCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLApkaWZmIC0tZ2l0IGEvc3lzbWwxNC90ZXN0cy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy9wb20ueG1sIGIvc3lzbWwxNC90ZXN0cy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy9wb20ueG1sCmluZGV4IGI1MDYzOTUuLjZlM2Q1OGMgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvcG9tLnhtbAorKysgYi9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3BvbS54bWwKQEAgLTEsMTEgKzEsMTIgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAk8cGFyZW50PgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkudGVzdHM8L2dyb3VwSWQ+CisJCTxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KIAkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMucGx1Z2luczwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgorCQk8dmVyc2lvbj4wLjEyLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAJPC9wYXJlbnQ+CiAJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHM8L2FydGlmYWN0SWQ+CiAJPHBhY2thZ2luZz5lY2xpcHNlLXRlc3QtcGx1Z2luPC9wYWNrYWdpbmc+CkBAIC0yMCw3ICsyMSw4IEBACiAJCQkJCTx1c2VVSVRocmVhZD50cnVlPC91c2VVSVRocmVhZD4KIAkJCQkJPHRlc3RGYWlsdXJlSWdub3JlPnRydWU8L3Rlc3RGYWlsdXJlSWdub3JlPgogCQkJCQk8cHJvZHVjdD5vcmcuZWNsaXBzZS5zZGsuaWRlPC9wcm9kdWN0PgotCQkJCQk8IS0tIElmIGEgc3BlY2lmaWMgPGFyZ0xpbmU+IGlzIHJlcXVpcmVkIGhlcmUsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIEphQ29DbyBwYXJhbWV0ZXJzIChTZWUgcGFyZW50IHBvbSwgQnVnIDQ3ODE3MCkgLS0+CisJCQkJCTwhLS0gSWYgYSBzcGVjaWZpYyA8YXJnTGluZT4gaXMgcmVxdWlyZWQgaGVyZSwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgCisJCQkJCQlKYUNvQ28gcGFyYW1ldGVycyAoU2VlIHBhcmVudCBwb20sIEJ1ZyA0NzgxNzApIC0tPgogCQkJCQk8c2tpcFRlc3RzPiR7c2tpcEFsbFRlc3RzfTwvc2tpcFRlc3RzPgogCQkJCQk8dGVzdENsYXNzPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzLnRlc3RzLkFsbFRlc3RzPC90ZXN0Q2xhc3M+CiAJCQkJPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvc3lzbWwxNC90ZXN0cy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy9yZXNvdXJjZXMvRXhwZWN0ZWRSZXN1bHQvQWxsb2NhdGlvblRhYmxlL0FsbG9jYXRpb25UYWJsZV9jb252ZXJ0ZWQubm90YXRpb24gYi9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3Jlc291cmNlcy9FeHBlY3RlZFJlc3VsdC9BbGxvY2F0aW9uVGFibGUvQWxsb2NhdGlvblRhYmxlX2NvbnZlcnRlZC5ub3RhdGlvbgppbmRleCA0NDQ1Y2Y1Li42YWFiZGJiIDEwMDY0NAotLS0gYS9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3Jlc291cmNlcy9FeHBlY3RlZFJlc3VsdC9BbGxvY2F0aW9uVGFibGUvQWxsb2NhdGlvblRhYmxlX2NvbnZlcnRlZC5ub3RhdGlvbgorKysgYi9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3Jlc291cmNlcy9FeHBlY3RlZFJlc3VsdC9BbGxvY2F0aW9uVGFibGUvQWxsb2NhdGlvblRhYmxlX2NvbnZlcnRlZC5ub3RhdGlvbgpAQCAtMSwyOSArMSwyOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxuYXR0YWJsZTpUYWJsZSB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmNvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9pbmZyYS92aWV3cG9pbnRzL2NvbmZpZ3VyYXRpb24iIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiB4bWxuczpuYXR0YWJsZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsIiB4bWxuczpuYXR0YWJsZWF4aXM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXMiIHhtbG5zOm5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uIiB4bWxuczpuYXR0YWJsZWF4aXNwcm92aWRlcj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpc3Byb3ZpZGVyIiB4bWxuczpuYXR0YWJsZWNvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC9uYXR0YWJsZWNvbmZpZ3VyYXRpb24iIHhtbG5zOnVtbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbCMvL25hdHRhYmxlYXhpcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzY29uZmlndXJhdGlvbiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwjLy9uYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNwcm92aWRlciBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwjLy9uYXR0YWJsZWF4aXNwcm92aWRlciBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvbmF0dGFibGVjb25maWd1cmF0aW9uIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbCMvL25hdHRhYmxlY29uZmlndXJhdGlvbiIgeG1pOmlkPSJfTVJZNVFQcHdFZWFDeVpLTlBYTHhFdyIgbmFtZT0iQWxsb2NhdGlvblRhYmxlMCIgY3VycmVudFJvd0F4aXNQcm92aWRlcj0iX01SWmdWZnB3RWVhQ3laS05QWEx4RXciIGN1cnJlbnRDb2x1bW5BeGlzUHJvdmlkZXI9Il9NUlpnVVBwd0VlYUN5WktOUFhMeEV3IiB0YWJsZUtpbmRJZD0ib3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0LnRhYmxlLmFsbG9jYXRpb24iPgorPG5hdHRhYmxlOlRhYmxlIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIHhtbG5zOm5hdHRhYmxlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwiIHhtbG5zOm5hdHRhYmxlYXhpcz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpcyIgeG1sbnM6bmF0dGFibGVheGlzY29uZmlndXJhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb24iIHhtbG5zOm5hdHRhYmxlYXhpc3Byb3ZpZGVyPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzcHJvdmlkZXIiIHhtbG5zOm5hdHRhYmxlY29uZmlndXJhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL25hdHRhYmxlY29uZmlndXJhdGlvbiIgeG1sbnM6dW1sPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvNS4wLjAvVU1MIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsIy8vbmF0dGFibGVheGlzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbCMvL25hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb24gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpc3Byb3ZpZGVyIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbCMvL25hdHRhYmxlYXhpc3Byb3ZpZGVyIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC9uYXR0YWJsZWNvbmZpZ3VyYXRpb24gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsIy8vbmF0dGFibGVjb25maWd1cmF0aW9uIiB4bWk6aWQ9Il9NUlk1UVBwd0VlYUN5WktOUFhMeEV3IiBuYW1lPSJBbGxvY2F0aW9uVGFibGUwIiBjdXJyZW50Um93QXhpc1Byb3ZpZGVyPSJfTVJaZ1ZmcHdFZWFDeVpLTlBYTHhFdyIgY3VycmVudENvbHVtbkF4aXNQcm92aWRlcj0iX01SWmdVUHB3RWVhQ3laS05QWEx4RXciIHRhYmxlS2luZElkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQudGFibGUuYWxsb2NhdGlvbiI+CiAgIDxlQW5ub3RhdGlvbnMgeG1pOnR5cGU9ImVjb3JlOkVBbm5vdGF0aW9uIiB4bWk6aWQ9IkltcG9ydGVkX0Zyb21fU3lzTUxfMS4xX09mX19NUlk1UVBwd0VlYUN5WktOUFhMeEV3IiBzb3VyY2U9IkltcG9ydGVkX0Zyb21fU3lzTUxfMS4xIj4KICAgICA8ZGV0YWlscyB4bWk6dHlwZT0iZWNvcmU6RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIHhtaTppZD0iUGFweXJ1c19Tb3VyY2VfTW9kZWxfTmFtZV9PZl9JbXBvcnRlZF9Gcm9tX1N5c01MXzEuMV9PZl9fTVJZNVFQcHdFZWFDeVpLTlBYTHhFdyIga2V5PSJQYXB5cnVzX1NvdXJjZV9Nb2RlbF9OYW1lIiB2YWx1ZT0iQWxsb2NhdGlvblRhYmxlX2NvbnZlcnRlZCIvPgotICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9EYXRlX09mX0ltcG9ydGVkX0Zyb21fU3lzTUxfMS4xX09mX19NUlk1UVBwd0VlYUN5WktOUFhMeEV3IiBrZXk9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0RhdGUiIHZhbHVlPSIyMDE3MDYwNzExMjgxNyIvPgotICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbl9PZl9JbXBvcnRlZF9Gcm9tX1N5c01MXzEuMV9PZl9fTVJZNVFQcHdFZWFDeVpLTlBYTHhFdyIga2V5PSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbiIgdmFsdWU9IjAuMTEuMC5xdWFsaWZpZXIiLz4KKyAgICA8ZGV0YWlscyB4bWk6dHlwZT0iZWNvcmU6RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIHhtaTppZD0iUGFweXJ1c19TeXNNTF9NaWdyYXRpb25fRGF0ZV9PZl9JbXBvcnRlZF9Gcm9tX1N5c01MXzEuMV9PZl9fTVJZNVFQcHdFZWFDeVpLTlBYTHhFdyIga2V5PSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9EYXRlIiB2YWx1ZT0iMjAxOTAyMjYxMTA0MTMiLz4KKyAgICA8ZGV0YWlscyB4bWk6dHlwZT0iZWNvcmU6RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIHhtaTppZD0iUGFweXJ1c19TeXNNTF9NaWdyYXRpb25fQnVuZGxlX1ZlcnNpb25fT2ZfSW1wb3J0ZWRfRnJvbV9TeXNNTF8xLjFfT2ZfX01SWTVRUHB3RWVhQ3laS05QWEx4RXciIGtleT0iUGFweXJ1c19TeXNNTF9NaWdyYXRpb25fQnVuZGxlX1ZlcnNpb24iIHZhbHVlPSIwLjEyLjAucXVhbGlmaWVyIi8+CiAgIDwvZUFubm90YXRpb25zPgogICA8Y29udGV4dCB4bWk6dHlwZT0idW1sOk1vZGVsIiBocmVmPSJBbGxvY2F0aW9uVGFibGVfY29udmVydGVkLnVtbCNfbTVGa1lQa2lFZWF2dHJXSENROFRudyIvPgogICA8b3duZXIgeG1pOnR5cGU9InVtbDpNb2RlbCIgaHJlZj0iQWxsb2NhdGlvblRhYmxlX2NvbnZlcnRlZC51bWwjX201RmtZUGtpRWVhdnRyV0hDUThUbnciLz4KLSAgPHByb3RvdHlwZSB4bWk6dHlwZT0iY29uZmlndXJhdGlvbjpQYXB5cnVzU3luY1RhYmxlIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwubmF0dGFibGUuYWxsb2NhdGlvbi5jb25maWcvcmVzb3VyY2VzL2FsbG9jYXRpb25UYWJsZS5jb25maWd1cmF0aW9uI19yNXk3d0hEdUVlV2gtTXNzV21DQl9BIi8+Ci0gIDx0YWJsZUNvbmZpZ3VyYXRpb24geG1pOnR5cGU9Im5hdHRhYmxlY29uZmlndXJhdGlvbjpUYWJsZUNvbmZpZ3VyYXRpb24iIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLmFsbG9jYXRpb24vcmVzb3VyY2VzL2FsbG9jYXRpb24ubmF0dGFibGVjb25maWd1cmF0aW9uIy8iLz4KKyAgPHRhYmxlQ29uZmlndXJhdGlvbiB4bWk6dHlwZT0ibmF0dGFibGVjb25maWd1cmF0aW9uOlRhYmxlQ29uZmlndXJhdGlvbiIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUuYWxsb2NhdGlvbi9yZXNvdXJjZXMvYWxsb2NhdGlvbi5uYXR0YWJsZWNvbmZpZ3VyYXRpb24jX1RuOXNnRjlXRWVpYmJNQnhqQ0J0MnciLz4KICAgPGNvbHVtbkF4aXNQcm92aWRlcnNIaXN0b3J5IHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNwcm92aWRlcjpTbGF2ZU9iamVjdEF4aXNQcm92aWRlciIgeG1pOmlkPSJfTVJaZ1VQcHdFZWFDeVpLTlBYTHhFdyIgZGVzY3JpcHRpb249IlRoaXMgcHJvdmlkZXIgcHJvdmlkZXMgdGhlIGRlZmF1bHQgY29sdW1ucyBmb3IgdGhlIFN5c01MIEFsbG9jYXRpb24gVGFibGUiIG5hbWU9IlN5c01MQWxsb2NhdGlvbkZlYXR1cmVQcm92aWRlciI+CiAgICAgPGF4aXMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpczpFU3RydWN0dXJhbEZlYXR1cmVBeGlzIiB4bWk6aWQ9Il9NUlpnVWZwd0VlYUN5WktOUFhMeEV3Ij4KLSAgICAgIDxtYW5hZ2VyIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLnJlcXVpcmVtZW50L3Jlc291cmNlcy9yZXF1aXJlbWVudC5uYXR0YWJsZWNvbmZpZ3VyYXRpb24jLy9AY29sdW1uSGVhZGVyQXhpc0NvbmZpZ3VyYXRpb24vQGF4aXNNYW5hZ2Vycy4wIi8+CisgICAgICA8bWFuYWdlciB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpBeGlzTWFuYWdlclJlcHJlc2VudGF0aW9uIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC9yZXNvdXJjZXMvcmVxdWlyZW1lbnQubmF0dGFibGVjb25maWd1cmF0aW9uI29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC5mZWF0dXJlLmF4aXMubWFuYWdlciIvPgogICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi81LjAuMC9VTUwjLy9OYW1lZEVsZW1lbnQvbmFtZSIvPgogICAgIDwvYXhpcz4KICAgICA8YXhpcyB4bWk6dHlwZT0ibmF0dGFibGVheGlzOkVTdHJ1Y3R1cmFsRmVhdHVyZUF4aXMiIHhtaTppZD0iX01SWmdVdnB3RWVhQ3laS05QWEx4RXciPgotICAgICAgPG1hbmFnZXIgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246QXhpc01hbmFnZXJSZXByZXNlbnRhdGlvbiIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUucmVxdWlyZW1lbnQvcmVzb3VyY2VzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbiMvL0Bjb2x1bW5IZWFkZXJBeGlzQ29uZmlndXJhdGlvbi9AYXhpc01hbmFnZXJzLjAiLz4KKyAgICAgIDxtYW5hZ2VyIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLnJlcXVpcmVtZW50L3Jlc291cmNlcy9yZXF1aXJlbWVudC5uYXR0YWJsZWNvbmZpZ3VyYXRpb24jb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLnJlcXVpcmVtZW50LmZlYXR1cmUuYXhpcy5tYW5hZ2VyIi8+CiAgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCMvL0RlcGVuZGVuY3kvY2xpZW50Ii8+CiAgICAgPC9heGlzPgogICAgIDxheGlzIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXM6RVN0cnVjdHVyYWxGZWF0dXJlQXhpcyIgeG1pOmlkPSJfTVJaZ1VfcHdFZWFDeVpLTlBYTHhFdyI+Ci0gICAgICA8bWFuYWdlciB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpBeGlzTWFuYWdlclJlcHJlc2VudGF0aW9uIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC9yZXNvdXJjZXMvcmVxdWlyZW1lbnQubmF0dGFibGVjb25maWd1cmF0aW9uIy8vQGNvbHVtbkhlYWRlckF4aXNDb25maWd1cmF0aW9uL0BheGlzTWFuYWdlcnMuMCIvPgorICAgICAgPG1hbmFnZXIgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246QXhpc01hbmFnZXJSZXByZXNlbnRhdGlvbiIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUucmVxdWlyZW1lbnQvcmVzb3VyY2VzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbiNvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUucmVxdWlyZW1lbnQuZmVhdHVyZS5heGlzLm1hbmFnZXIiLz4KICAgICAgIDxlbGVtZW50IHhtaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VtbDIvNS4wLjAvVU1MIy8vRGVwZW5kZW5jeS9zdXBwbGllciIvPgogICAgIDwvYXhpcz4KICAgICA8YXhpcyB4bWk6dHlwZT0ibmF0dGFibGVheGlzOkVTdHJ1Y3R1cmFsRmVhdHVyZUF4aXMiIHhtaTppZD0iX01SWmdWUHB3RWVhQ3laS05QWEx4RXciPgotICAgICAgPG1hbmFnZXIgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246QXhpc01hbmFnZXJSZXByZXNlbnRhdGlvbiIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUucmVxdWlyZW1lbnQvcmVzb3VyY2VzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbiMvL0Bjb2x1bW5IZWFkZXJBeGlzQ29uZmlndXJhdGlvbi9AYXhpc01hbmFnZXJzLjAiLz4KKyAgICAgIDxtYW5hZ2VyIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLnJlcXVpcmVtZW50L3Jlc291cmNlcy9yZXF1aXJlbWVudC5uYXR0YWJsZWNvbmZpZ3VyYXRpb24jb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLnJlcXVpcmVtZW50LmZlYXR1cmUuYXhpcy5tYW5hZ2VyIi8+CiAgICAgICA8ZWxlbWVudCB4bWk6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCMvL0VsZW1lbnQvb3duZXIiLz4KICAgICA8L2F4aXM+CiAgIDwvY29sdW1uQXhpc1Byb3ZpZGVyc0hpc3Rvcnk+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3Jlc291cmNlcy9FeHBlY3RlZFJlc3VsdC9BbGxvY2F0aW9uVGFibGUvQWxsb2NhdGlvblRhYmxlX2NvbnZlcnRlZC51bWwgYi9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3Jlc291cmNlcy9FeHBlY3RlZFJlc3VsdC9BbGxvY2F0aW9uVGFibGUvQWxsb2NhdGlvblRhYmxlX2NvbnZlcnRlZC51bWwKaW5kZXggODU1MTQ5NS4uNmQ2ZTgyZSAxMDA2NDQKLS0tIGEvc3lzbWwxNC90ZXN0cy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy9yZXNvdXJjZXMvRXhwZWN0ZWRSZXN1bHQvQWxsb2NhdGlvblRhYmxlL0FsbG9jYXRpb25UYWJsZV9jb252ZXJ0ZWQudW1sCisrKyBiL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvcmVzb3VyY2VzL0V4cGVjdGVkUmVzdWx0L0FsbG9jYXRpb25UYWJsZS9BbGxvY2F0aW9uVGFibGVfY29udmVydGVkLnVtbApAQCAtMyw4ICszLDggQEAKICAgPHVtbDpNb2RlbCB4bWk6aWQ9Il9tNUZrWVBraUVlYXZ0cldIQ1E4VG53IiBuYW1lPSJSb290RWxlbWVudCI+CiAgICAgPGVBbm5vdGF0aW9ucyB4bWk6dHlwZT0iZWNvcmU6RUFubm90YXRpb24iIHhtaTppZD0iSW1wb3J0ZWRfRnJvbV9TeXNNTF8xMV9PZl9fbTVGa1lQa2lFZWF2dHJXSENROFRudyIgc291cmNlPSJJbXBvcnRlZF9Gcm9tX1N5c01MXzEuMSI+CiAgICAgICA8ZGV0YWlscyB4bWk6dHlwZT0iZWNvcmU6RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIHhtaTppZD0iUGFweXJ1c19Tb3VyY2VfTW9kZWxfTmFtZV9PZl9fbTVGa1lQa2lFZWF2dHJXSENROFRudyIga2V5PSJQYXB5cnVzX1NvdXJjZV9Nb2RlbF9OYW1lIiB2YWx1ZT0iQWxsb2NhdGlvblRhYmxlIi8+Ci0gICAgICA8ZGV0YWlscyB4bWk6dHlwZT0iZWNvcmU6RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIHhtaTppZD0iUGFweXJ1c19TeXNNTF9NaWdyYXRpb25fRGF0ZV9PZl9fbTVGa1lQa2lFZWF2dHJXSENROFRudyIga2V5PSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9EYXRlIiB2YWx1ZT0iMjAxNzA2MDcxMTI4MTQiLz4KLSAgICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbl9PZl9fbTVGa1lQa2lFZWF2dHJXSENROFRudyIga2V5PSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbiIgdmFsdWU9IjAuMTEuMC5xdWFsaWZpZXIiLz4KKyAgICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9EYXRlX09mX19tNUZrWVBraUVlYXZ0cldIQ1E4VG53IiBrZXk9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0RhdGUiIHZhbHVlPSIyMDE5MDIyNjExMDQxMiIvPgorICAgICAgPGRldGFpbHMgeG1pOnR5cGU9ImVjb3JlOkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiB4bWk6aWQ9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0J1bmRsZV9WZXJzaW9uX09mX19tNUZrWVBraUVlYXZ0cldIQ1E4VG53IiBrZXk9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0J1bmRsZV9WZXJzaW9uIiB2YWx1ZT0iMC4xMi4wLnF1YWxpZmllciIvPgogICAgIDwvZUFubm90YXRpb25zPgogICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9WOEF0UVBub0VlYXVEdG9EWndJcWp3Ii8+CiAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2NQVkZjUG5vRWVhdUR0b0Rad0lxanciLz4KQEAgLTE2NSw3ICsxNjUsNyBAQAogICA8c3RhbmRhcmQ6Q3JlYXRlIHhtaTppZD0iY3JlYXRlU3RlcmVvdHlwZV9PZl9jcmVhdGVPcGVyYXRpb25fT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciIGJhc2VfQmVoYXZpb3JhbEZlYXR1cmU9ImNyZWF0ZU9wZXJhdGlvbl9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyIvPgogICA8TW9kZWxFbGVtZW50czpTdGFrZWhvbGRlciB4bWk6aWQ9InN0YWtlaG9sZGVyMl9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyIgYmFzZV9DbGFzc2lmaWVyPSJiYXNlQ2xhc3NpZmllcl9PZl9zdGFrZWhvbGRlcjJfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciLz4KICAgPE1vZGVsRWxlbWVudHM6U3Rha2Vob2xkZXIgeG1pOmlkPSJzdGFrZWhvbGRlcjFfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciIGJhc2VfQ2xhc3NpZmllcj0iYmFzZUNsYXNzaWZpZXJfT2Zfc3Rha2Vob2xkZXIxX09mX19maWg3a1Bub0VlYXVEdG9EWndJcWp3Ii8+Ci0gIDxNb2RlbEVsZW1lbnRzOlZpZXdwb2ludCB4bWk6aWQ9Il9maWg3a1Bub0VlYXVEdG9EWndJcWp3IiBiYXNlX0NsYXNzPSJfZmlXOGNQbm9FZWF1RHRvRFp3SXFqdyIgY29uY2Vybkxpc3Q9ImNvbmNlcm5MaXN0XzFfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxancgY29uY2Vybkxpc3RfMl9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyIgcHVycG9zZT0idGVzdDEmI3hEOyYjeEE7dGVzdDImI3hEOyYjeEE7dGVzdDMiIHN0YWtlaG9sZGVyPSJzdGFrZWhvbGRlcjJfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxancgc3Rha2Vob2xkZXIxX09mX19maWg3a1Bub0VlYXVEdG9EWndJcWp3Ij4KKyAgPE1vZGVsRWxlbWVudHM6Vmlld3BvaW50IHhtaTppZD0iX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciIGJhc2VfQ2xhc3M9Il9maVc4Y1Bub0VlYXVEdG9EWndJcWp3IiBjb25jZXJuTGlzdD0iY29uY2Vybkxpc3RfMV9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyBjb25jZXJuTGlzdF8yX09mX19maWg3a1Bub0VlYXVEdG9EWndJcWp3IiBwdXJwb3NlPSJ0ZXN0MSYjeEQ7JiN4QTt0ZXN0MiYjeEQ7JiN4QTt0ZXN0MyIgc3Rha2Vob2xkZXI9InN0YWtlaG9sZGVyMV9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyBzdGFrZWhvbGRlcjJfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciPgogICAgIDxsYW5ndWFnZT5DKys8L2xhbmd1YWdlPgogICAgIDxsYW5ndWFnZT5DPC9sYW5ndWFnZT4KICAgICA8bGFuZ3VhZ2U+T0NMPC9sYW5ndWFnZT4KZGlmZiAtLWdpdCBhL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvcmVzb3VyY2VzL0V4cGVjdGVkUmVzdWx0L1JlcXVpcmVtZW50VGFibGUvUmVxdWlyZW1lbnRUYWJsZV9jb252ZXJ0ZWQubm90YXRpb24gYi9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3Jlc291cmNlcy9FeHBlY3RlZFJlc3VsdC9SZXF1aXJlbWVudFRhYmxlL1JlcXVpcmVtZW50VGFibGVfY29udmVydGVkLm5vdGF0aW9uCmluZGV4IDdjZTk1MWIuLjg3OGU0YTcgMTAwNjQ0Ci0tLSBhL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvcmVzb3VyY2VzL0V4cGVjdGVkUmVzdWx0L1JlcXVpcmVtZW50VGFibGUvUmVxdWlyZW1lbnRUYWJsZV9jb252ZXJ0ZWQubm90YXRpb24KKysrIGIvc3lzbWwxNC90ZXN0cy9vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy9yZXNvdXJjZXMvRXhwZWN0ZWRSZXN1bHQvUmVxdWlyZW1lbnRUYWJsZS9SZXF1aXJlbWVudFRhYmxlX2NvbnZlcnRlZC5ub3RhdGlvbgpAQCAtMSwyNCArMSwyMyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxuYXR0YWJsZTpUYWJsZSB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmNvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9pbmZyYS92aWV3cG9pbnRzL2NvbmZpZ3VyYXRpb24iIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiB4bWxuczpuYXR0YWJsZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsIiB4bWxuczpuYXR0YWJsZWF4aXM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXMiIHhtbG5zOm5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uIiB4bWxuczpuYXR0YWJsZWF4aXNwcm92aWRlcj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpc3Byb3ZpZGVyIiB4bWxuczpuYXR0YWJsZWNvbmZpZ3VyYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC9uYXR0YWJsZWNvbmZpZ3VyYXRpb24iIHhtbG5zOnVtbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91bWwyLzUuMC4wL1VNTCIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbCMvL25hdHRhYmxlYXhpcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzY29uZmlndXJhdGlvbiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwjLy9uYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNwcm92aWRlciBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwjLy9uYXR0YWJsZWF4aXNwcm92aWRlciBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvbmF0dGFibGVjb25maWd1cmF0aW9uIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbCMvL25hdHRhYmxlY29uZmlndXJhdGlvbiIgeG1pOmlkPSJfUTBsWG9QcHdFZWFDeVpLTlBYTHhFdyIgbmFtZT0iUmVxdWlyZW1lbnRUYWJsZTAiIGN1cnJlbnRSb3dBeGlzUHJvdmlkZXI9Il9RMGxYcGZwd0VlYUN5WktOUFhMeEV3IiBjdXJyZW50Q29sdW1uQXhpc1Byb3ZpZGVyPSJfUTBsWG9mcHdFZWFDeVpLTlBYTHhFdyIgdGFibGVLaW5kSWQ9Im9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC50YWJsZS5yZXF1aXJlbWVudCI+Cis8bmF0dGFibGU6VGFibGUgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgeG1sbnM6bmF0dGFibGU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbCIgeG1sbnM6bmF0dGFibGVheGlzPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzIiB4bWxuczpuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzY29uZmlndXJhdGlvbiIgeG1sbnM6bmF0dGFibGVheGlzcHJvdmlkZXI9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcGFweXJ1cy9uYXR0YWJsZS9tb2RlbC90YWJsZS9uYXR0YWJsZWF4aXNwcm92aWRlciIgeG1sbnM6bmF0dGFibGVjb25maWd1cmF0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvbmF0dGFibGVjb25maWd1cmF0aW9uIiB4bWxuczp1bWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi81LjAuMC9VTUwiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpcyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwjLy9uYXR0YWJsZWF4aXMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL3RhYmxlL25hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb24gaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsIy8vbmF0dGFibGVheGlzY29uZmlndXJhdGlvbiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwvdGFibGUvbmF0dGFibGVheGlzcHJvdmlkZXIgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsIy8vbmF0dGFibGVheGlzcHJvdmlkZXIgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wYXB5cnVzL25hdHRhYmxlL21vZGVsL25hdHRhYmxlY29uZmlndXJhdGlvbiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3BhcHlydXMvbmF0dGFibGUvbW9kZWwjLy9uYXR0YWJsZWNvbmZpZ3VyYXRpb24iIHhtaTppZD0iX1EwbFhvUHB3RWVhQ3laS05QWEx4RXciIG5hbWU9IlJlcXVpcmVtZW50VGFibGUwIiBjdXJyZW50Um93QXhpc1Byb3ZpZGVyPSJfUTBsWHBmcHdFZWFDeVpLTlBYTHhFdyIgY3VycmVudENvbHVtbkF4aXNQcm92aWRlcj0iX1EwbFhvZnB3RWVhQ3laS05QWEx4RXciIHRhYmxlS2luZElkPSJvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQudGFibGUucmVxdWlyZW1lbnQiPgogICA8ZUFubm90YXRpb25zIHhtaTp0eXBlPSJlY29yZTpFQW5ub3RhdGlvbiIgeG1pOmlkPSJJbXBvcnRlZF9Gcm9tX1N5c01MXzEuMV9PZl9fUTBsWG9QcHdFZWFDeVpLTlBYTHhFdyIgc291cmNlPSJJbXBvcnRlZF9Gcm9tX1N5c01MXzEuMSI+CiAgICAgPGRldGFpbHMgeG1pOnR5cGU9ImVjb3JlOkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiB4bWk6aWQ9IlBhcHlydXNfU291cmNlX01vZGVsX05hbWVfT2ZfSW1wb3J0ZWRfRnJvbV9TeXNNTF8xLjFfT2ZfX1EwbFhvUHB3RWVhQ3laS05QWEx4RXciIGtleT0iUGFweXJ1c19Tb3VyY2VfTW9kZWxfTmFtZSIgdmFsdWU9IlJlcXVpcmVtZW50VGFibGVfY29udmVydGVkIi8+Ci0gICAgPGRldGFpbHMgeG1pOnR5cGU9ImVjb3JlOkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiB4bWk6aWQ9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0RhdGVfT2ZfSW1wb3J0ZWRfRnJvbV9TeXNNTF8xLjFfT2ZfX1EwbFhvUHB3RWVhQ3laS05QWEx4RXciIGtleT0iUGFweXJ1c19TeXNNTF9NaWdyYXRpb25fRGF0ZSIgdmFsdWU9IjIwMTcwNjA3MTEyODU5Ii8+Ci0gICAgPGRldGFpbHMgeG1pOnR5cGU9ImVjb3JlOkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiB4bWk6aWQ9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0J1bmRsZV9WZXJzaW9uX09mX0ltcG9ydGVkX0Zyb21fU3lzTUxfMS4xX09mX19RMGxYb1Bwd0VlYUN5WktOUFhMeEV3IiBrZXk9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0J1bmRsZV9WZXJzaW9uIiB2YWx1ZT0iMC4xMS4wLnF1YWxpZmllciIvPgorICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9EYXRlX09mX0ltcG9ydGVkX0Zyb21fU3lzTUxfMS4xX09mX19RMGxYb1Bwd0VlYUN5WktOUFhMeEV3IiBrZXk9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0RhdGUiIHZhbHVlPSIyMDE5MDIyNjExMDYwMiIvPgorICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbl9PZl9JbXBvcnRlZF9Gcm9tX1N5c01MXzEuMV9PZl9fUTBsWG9QcHdFZWFDeVpLTlBYTHhFdyIga2V5PSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbiIgdmFsdWU9IjAuMTIuMC5xdWFsaWZpZXIiLz4KICAgPC9lQW5ub3RhdGlvbnM+CiAgIDxjb250ZXh0IHhtaTp0eXBlPSJ1bWw6TW9kZWwiIGhyZWY9IlJlcXVpcmVtZW50VGFibGVfY29udmVydGVkLnVtbCNfbTVGa1lQa2lFZWF2dHJXSENROFRudyIvPgogICA8b3duZXIgeG1pOnR5cGU9InVtbDpNb2RlbCIgaHJlZj0iUmVxdWlyZW1lbnRUYWJsZV9jb252ZXJ0ZWQudW1sI19tNUZrWVBraUVlYXZ0cldIQ1E4VG53Ii8+Ci0gIDxwcm90b3R5cGUgeG1pOnR5cGU9ImNvbmZpZ3VyYXRpb246UGFweXJ1c1N5bmNUYWJsZSIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLm5hdHRhYmxlLnJlcXVpcmVtZW50LmNvbmZpZy9jb25maWdzL3JlcXVpcmVtZW50VGFibGUuY29uZmlndXJhdGlvbiNfbFRFMGdIRHdFZVdoLU1zc1dtQ0JfQSIvPgotICA8dGFibGVDb25maWd1cmF0aW9uIHhtaTp0eXBlPSJuYXR0YWJsZWNvbmZpZ3VyYXRpb246VGFibGVDb25maWd1cmF0aW9uIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC9yZXNvdXJjZXMvcmVxdWlyZW1lbnQubmF0dGFibGVjb25maWd1cmF0aW9uIy8iLz4KKyAgPHRhYmxlQ29uZmlndXJhdGlvbiB4bWk6dHlwZT0ibmF0dGFibGVjb25maWd1cmF0aW9uOlRhYmxlQ29uZmlndXJhdGlvbiIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUucmVxdWlyZW1lbnQvcmVzb3VyY2VzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbiNfX3F1bGNHMWdFZWlqTXI4WGpVOGdDZyIvPgogICA8Y29sdW1uQXhpc1Byb3ZpZGVyc0hpc3RvcnkgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc3Byb3ZpZGVyOlNsYXZlT2JqZWN0QXhpc1Byb3ZpZGVyIiB4bWk6aWQ9Il9RMGxYb2Zwd0VlYUN5WktOUFhMeEV3IiBkZXNjcmlwdGlvbj0iUHJvdmlkZXMgdGhlIGNvbHVtbnMgb2YgdGhlIHRhYmxlcyB3aXRoIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIiBuYW1lPSJSZXF1aXJlbWVudHMgRmVhdHVyZSBDb2x1bW5zIFByb3ZpZGVyIj4KICAgICA8YXhpcyB4bWk6dHlwZT0ibmF0dGFibGVheGlzOkZlYXR1cmVJZEF4aXMiIHhtaTppZD0iX1EwbFhvdnB3RWVhQ3laS05QWEx4RXciIGVsZW1lbnQ9InByb3BlcnR5X29mX3N0ZXJlb3R5cGU6L1N5c01MOjpSZXF1aXJlbWVudHM6OlJlcXVpcmVtZW50OjppZCI+Ci0gICAgICA8bWFuYWdlciB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpBeGlzTWFuYWdlclJlcHJlc2VudGF0aW9uIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC9yZXNvdXJjZXMvcmVxdWlyZW1lbnQubmF0dGFibGVjb25maWd1cmF0aW9uIy8vQGNvbHVtbkhlYWRlckF4aXNDb25maWd1cmF0aW9uL0BheGlzTWFuYWdlcnMuMSIvPgorICAgICAgPG1hbmFnZXIgeG1pOnR5cGU9Im5hdHRhYmxlYXhpc2NvbmZpZ3VyYXRpb246QXhpc01hbmFnZXJSZXByZXNlbnRhdGlvbiIgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUucmVxdWlyZW1lbnQvcmVzb3VyY2VzL3JlcXVpcmVtZW50Lm5hdHRhYmxlY29uZmlndXJhdGlvbiNvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sMTQubmF0dGFibGUucmVxdWlyZW1lbnQuc3RlcmVvdHlwZS5wcm9wZXJ0eS5heGlzLm1hbmFnZXIiLz4KICAgICA8L2F4aXM+CiAgICAgPGF4aXMgeG1pOnR5cGU9Im5hdHRhYmxlYXhpczpFU3RydWN0dXJhbEZlYXR1cmVBeGlzIiB4bWk6aWQ9Il9RMGxYb19wd0VlYUN5WktOUFhMeEV3Ij4KLSAgICAgIDxtYW5hZ2VyIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLnJlcXVpcmVtZW50L3Jlc291cmNlcy9yZXF1aXJlbWVudC5uYXR0YWJsZWNvbmZpZ3VyYXRpb24jLy9AY29sdW1uSGVhZGVyQXhpc0NvbmZpZ3VyYXRpb24vQGF4aXNNYW5hZ2Vycy4wIi8+CisgICAgICA8bWFuYWdlciB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpBeGlzTWFuYWdlclJlcHJlc2VudGF0aW9uIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC9yZXNvdXJjZXMvcmVxdWlyZW1lbnQubmF0dGFibGVjb25maWd1cmF0aW9uI29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC5mZWF0dXJlLmF4aXMubWFuYWdlciIvPgogICAgICAgPGVsZW1lbnQgeG1pOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdW1sMi81LjAuMC9VTUwjLy9OYW1lZEVsZW1lbnQvbmFtZSIvPgogICAgIDwvYXhpcz4KICAgICA8YXhpcyB4bWk6dHlwZT0ibmF0dGFibGVheGlzOkZlYXR1cmVJZEF4aXMiIHhtaTppZD0iX1EwbFhwUHB3RWVhQ3laS05QWEx4RXciIGVsZW1lbnQ9InByb3BlcnR5X29mX3N0ZXJlb3R5cGU6L1N5c01MOjpSZXF1aXJlbWVudHM6OlJlcXVpcmVtZW50Ojp0ZXh0Ij4KLSAgICAgIDxtYW5hZ2VyIHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNjb25maWd1cmF0aW9uOkF4aXNNYW5hZ2VyUmVwcmVzZW50YXRpb24iIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbDE0Lm5hdHRhYmxlLnJlcXVpcmVtZW50L3Jlc291cmNlcy9yZXF1aXJlbWVudC5uYXR0YWJsZWNvbmZpZ3VyYXRpb24jLy9AY29sdW1uSGVhZGVyQXhpc0NvbmZpZ3VyYXRpb24vQGF4aXNNYW5hZ2Vycy4xIi8+CisgICAgICA8bWFuYWdlciB4bWk6dHlwZT0ibmF0dGFibGVheGlzY29uZmlndXJhdGlvbjpBeGlzTWFuYWdlclJlcHJlc2VudGF0aW9uIiBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC9yZXNvdXJjZXMvcmVxdWlyZW1lbnQubmF0dGFibGVjb25maWd1cmF0aW9uI29yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwxNC5uYXR0YWJsZS5yZXF1aXJlbWVudC5zdGVyZW90eXBlLnByb3BlcnR5LmF4aXMubWFuYWdlciIvPgogICAgIDwvYXhpcz4KICAgPC9jb2x1bW5BeGlzUHJvdmlkZXJzSGlzdG9yeT4KICAgPHJvd0F4aXNQcm92aWRlcnNIaXN0b3J5IHhtaTp0eXBlPSJuYXR0YWJsZWF4aXNwcm92aWRlcjpNYXN0ZXJPYmplY3RBeGlzUHJvdmlkZXIiIHhtaTppZD0iX1EwbFhwZnB3RWVhQ3laS05QWEx4RXciIGRlc2NyaXB0aW9uPSJQcm92aWRlcyB0aGUgcmVxdWlyZW1lbnRzIGRpcmVjdGx5IG93bmVkIGJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YWJsZSIgbmFtZT0iUmVxdWlyZW1lbnQgQXhpcyBQcm92aWRlciIgZGlzY29ubmVjdFNsYXZlPSJ0cnVlIi8+CmRpZmYgLS1naXQgYS9zeXNtbDE0L3Rlc3RzL29yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnRlc3RzL3Jlc291cmNlcy9FeHBlY3RlZFJlc3VsdC9SZXF1aXJlbWVudFRhYmxlL1JlcXVpcmVtZW50VGFibGVfY29udmVydGVkLnVtbCBiL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvcmVzb3VyY2VzL0V4cGVjdGVkUmVzdWx0L1JlcXVpcmVtZW50VGFibGUvUmVxdWlyZW1lbnRUYWJsZV9jb252ZXJ0ZWQudW1sCmluZGV4IDA0ZWEyMDQuLjk0ZjNlZTggMTAwNjQ0Ci0tLSBhL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvcmVzb3VyY2VzL0V4cGVjdGVkUmVzdWx0L1JlcXVpcmVtZW50VGFibGUvUmVxdWlyZW1lbnRUYWJsZV9jb252ZXJ0ZWQudW1sCisrKyBiL3N5c21sMTQvdGVzdHMvb3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMvcmVzb3VyY2VzL0V4cGVjdGVkUmVzdWx0L1JlcXVpcmVtZW50VGFibGUvUmVxdWlyZW1lbnRUYWJsZV9jb252ZXJ0ZWQudW1sCkBAIC0zLDggKzMsOCBAQAogICA8dW1sOk1vZGVsIHhtaTppZD0iX201RmtZUGtpRWVhdnRyV0hDUThUbnciIG5hbWU9IlJvb3RFbGVtZW50Ij4KICAgICA8ZUFubm90YXRpb25zIHhtaTp0eXBlPSJlY29yZTpFQW5ub3RhdGlvbiIgeG1pOmlkPSJJbXBvcnRlZF9Gcm9tX1N5c01MXzExX09mX19tNUZrWVBraUVlYXZ0cldIQ1E4VG53IiBzb3VyY2U9IkltcG9ydGVkX0Zyb21fU3lzTUxfMS4xIj4KICAgICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1NvdXJjZV9Nb2RlbF9OYW1lX09mX19tNUZrWVBraUVlYXZ0cldIQ1E4VG53IiBrZXk9IlBhcHlydXNfU291cmNlX01vZGVsX05hbWUiIHZhbHVlPSJSZXF1aXJlbWVudFRhYmxlIi8+Ci0gICAgICA8ZGV0YWlscyB4bWk6dHlwZT0iZWNvcmU6RVN0cmluZ1RvU3RyaW5nTWFwRW50cnkiIHhtaTppZD0iUGFweXJ1c19TeXNNTF9NaWdyYXRpb25fRGF0ZV9PZl9fbTVGa1lQa2lFZWF2dHJXSENROFRudyIga2V5PSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9EYXRlIiB2YWx1ZT0iMjAxNzA2MDcxMTI4NTgiLz4KLSAgICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbl9PZl9fbTVGa1lQa2lFZWF2dHJXSENROFRudyIga2V5PSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9CdW5kbGVfVmVyc2lvbiIgdmFsdWU9IjAuMTEuMC5xdWFsaWZpZXIiLz4KKyAgICAgIDxkZXRhaWxzIHhtaTp0eXBlPSJlY29yZTpFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeSIgeG1pOmlkPSJQYXB5cnVzX1N5c01MX01pZ3JhdGlvbl9EYXRlX09mX19tNUZrWVBraUVlYXZ0cldIQ1E4VG53IiBrZXk9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0RhdGUiIHZhbHVlPSIyMDE5MDIyNjExMDYwMSIvPgorICAgICAgPGRldGFpbHMgeG1pOnR5cGU9ImVjb3JlOkVTdHJpbmdUb1N0cmluZ01hcEVudHJ5IiB4bWk6aWQ9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0J1bmRsZV9WZXJzaW9uX09mX19tNUZrWVBraUVlYXZ0cldIQ1E4VG53IiBrZXk9IlBhcHlydXNfU3lzTUxfTWlncmF0aW9uX0J1bmRsZV9WZXJzaW9uIiB2YWx1ZT0iMC4xMi4wLnF1YWxpZmllciIvPgogICAgIDwvZUFubm90YXRpb25zPgogICAgIDxvd25lZENvbW1lbnQgeG1pOnR5cGU9InVtbDpDb21tZW50IiB4bWk6aWQ9Il9WOEF0UVBub0VlYXVEdG9EWndJcWp3Ii8+CiAgICAgPG93bmVkQ29tbWVudCB4bWk6dHlwZT0idW1sOkNvbW1lbnQiIHhtaTppZD0iX2NQVkZjUG5vRWVhdUR0b0Rad0lxanciLz4KQEAgLTE2Niw3ICsxNjYsNyBAQAogICA8c3RhbmRhcmQ6Q3JlYXRlIHhtaTppZD0iY3JlYXRlU3RlcmVvdHlwZV9PZl9jcmVhdGVPcGVyYXRpb25fT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciIGJhc2VfQmVoYXZpb3JhbEZlYXR1cmU9ImNyZWF0ZU9wZXJhdGlvbl9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyIvPgogICA8TW9kZWxFbGVtZW50czpTdGFrZWhvbGRlciB4bWk6aWQ9InN0YWtlaG9sZGVyMl9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyIgYmFzZV9DbGFzc2lmaWVyPSJiYXNlQ2xhc3NpZmllcl9PZl9zdGFrZWhvbGRlcjJfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciLz4KICAgPE1vZGVsRWxlbWVudHM6U3Rha2Vob2xkZXIgeG1pOmlkPSJzdGFrZWhvbGRlcjFfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciIGJhc2VfQ2xhc3NpZmllcj0iYmFzZUNsYXNzaWZpZXJfT2Zfc3Rha2Vob2xkZXIxX09mX19maWg3a1Bub0VlYXVEdG9EWndJcWp3Ii8+Ci0gIDxNb2RlbEVsZW1lbnRzOlZpZXdwb2ludCB4bWk6aWQ9Il9maWg3a1Bub0VlYXVEdG9EWndJcWp3IiBiYXNlX0NsYXNzPSJfZmlXOGNQbm9FZWF1RHRvRFp3SXFqdyIgY29uY2Vybkxpc3Q9ImNvbmNlcm5MaXN0XzFfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxancgY29uY2Vybkxpc3RfMl9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyIgcHVycG9zZT0idGVzdDEmI3hEOyYjeEE7dGVzdDImI3hEOyYjeEE7dGVzdDMiIHN0YWtlaG9sZGVyPSJzdGFrZWhvbGRlcjJfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxancgc3Rha2Vob2xkZXIxX09mX19maWg3a1Bub0VlYXVEdG9EWndJcWp3Ij4KKyAgPE1vZGVsRWxlbWVudHM6Vmlld3BvaW50IHhtaTppZD0iX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciIGJhc2VfQ2xhc3M9Il9maVc4Y1Bub0VlYXVEdG9EWndJcWp3IiBjb25jZXJuTGlzdD0iY29uY2Vybkxpc3RfMV9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyBjb25jZXJuTGlzdF8yX09mX19maWg3a1Bub0VlYXVEdG9EWndJcWp3IiBwdXJwb3NlPSJ0ZXN0MSYjeEQ7JiN4QTt0ZXN0MiYjeEQ7JiN4QTt0ZXN0MyIgc3Rha2Vob2xkZXI9InN0YWtlaG9sZGVyMV9PZl9fZmloN2tQbm9FZWF1RHRvRFp3SXFqdyBzdGFrZWhvbGRlcjJfT2ZfX2ZpaDdrUG5vRWVhdUR0b0Rad0lxanciPgogICAgIDxsYW5ndWFnZT5DKys8L2xhbmd1YWdlPgogICAgIDxsYW5ndWFnZT5DPC9sYW5ndWFnZT4KICAgICA8bGFuZ3VhZ2U+T0NMPC9sYW5ndWFnZT4KZGlmZiAtLWdpdCBhL3N5c21sMTQvdGVzdHMvcG9tLnhtbCBiL3N5c21sMTQvdGVzdHMvcG9tLnhtbAppbmRleCA3ZjI2NDJiLi4wZTEzYjYzIDEwMDY0NAotLS0gYS9zeXNtbDE0L3Rlc3RzL3BvbS54bWwKKysrIGIvc3lzbWwxNC90ZXN0cy9wb20ueG1sCkBAIC0xLDIxICsxLDIyIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KLTxwcm9qZWN0PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgogCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAogCTxwYXJlbnQ+Ci0JICAgIDxncm91cElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eTwvZ3JvdXBJZD4KLQkgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwucm9vdDwvYXJ0aWZhY3RJZD4KLQkgICAgPHZlcnNpb24+MC4xMS4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgIDwvcGFyZW50PgorCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHk8L2dyb3VwSWQ+CisJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBhcHlydXMuaW50ZXJvcGVyYWJpbGl0eS5zeXNtbDE0LnN5c21sLnJvb3Q8L2FydGlmYWN0SWQ+CisJCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8L3BhcmVudD4KIAotICAJPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnRlc3RzPC9ncm91cElkPgotICAJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UucGFweXJ1cy5pbnRlcm9wZXJhYmlsaXR5LnN5c21sMTQuc3lzbWwudGVzdHMucGx1Z2luczwvYXJ0aWZhY3RJZD4KLSAgCTx2ZXJzaW9uPjAuMTEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKwk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0cy5wbHVnaW5zPC9hcnRpZmFjdElkPgorCTx2ZXJzaW9uPjAuMTIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KIAk8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgogCTxkZXNjcmlwdGlvbj5UaGUgdG9wIGNvbnRhaW5lciBvZiBTeXNNTCBtaWdyYXRpb24gdGVzdHMgcGx1Zy1pbnMgZm9yIHRoZSBJbnRlcm9wZXJhYmlsaXR5LjwvZGVzY3JpcHRpb24+CiAKIAk8bW9kdWxlcz4KIAkJPG1vZHVsZT5vcmcuZWNsaXBzZS5wYXB5cnVzLmludGVyb3BlcmFiaWxpdHkuc3lzbWwxNC5zeXNtbC50ZXN0czwvbW9kdWxlPgogCTwvbW9kdWxlcz4KLQkKKwogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK