ZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLy5jbGFzc3BhdGggYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ZTMxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvLnByb2plY3QgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2Zjc5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc0J1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5hcGlBbmFseXNpc05hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWMzODlhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1RodSBKdWwgMzEgMTU6MTc6MzQgQlNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEwYjU4OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwuSkFYUERlYnVnVUlQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICV2ZW5kb3JOYW1lCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQ7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWk7YnVuZGxlLXZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2wudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3I7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWk7YnVuZGxlLXZlcnNpb249IlsxLjAuNDAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy4zLjAsNC4wLjApIgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzMDAwMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+QXVndXN0LCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDdmY2MwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9pY29ucy94c2x0X3Byb2Nlc3Nvci5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9pY29ucy94c2x0X3Byb2Nlc3Nvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNzEyODkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvaWNvbnMveHNsdF9wcm9jZXNzb3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgxMjM2Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpCi12ZW5kb3JOYW1lID0gRWNsaXBzZS5vcmcKLXBsdWdpbk5hbWUgPSBYU0wgSkFYUCBEZWJ1ZyBVSSAoSW5jdWJhdGluZykKLXBhZ2VOYW1lSmF2YVByb2Nlc3NvcnMgPSBKYXZhIFByb2Nlc3NvcnMKLXZpZXdOYW1lUmVzdWx0ID0gUmVzdWx0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvcGx1Z2luLnhtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmOTcyZGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Ci08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25UYWJzIj4KLQkJPHRhYgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvci5YU0xQcm9jZXNzb3JUYWIyIgotCQkJZ3JvdXA9Im9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoQ29uZmlndXJhdGlvblRhYkdyb3VwLnhzbHQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5qYXhwLnRhYnMucHJvY2Vzc29yIiBuYW1lPSJQcm9jZXNzb3IiPgotCQkJPGFzc29jaWF0ZWREZWxlZ2F0ZQotCQkJCWRlbGVnYXRlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5pbnRlcm5hbC5qYXhwLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUiPgotCQkJPC9hc3NvY2lhdGVkRGVsZWdhdGU+Ci0JCQk8cGxhY2VtZW50IGFmdGVyPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMub3V0cHV0Ij4KLQkJCTwvcGxhY2VtZW50PgotCQk8L3RhYj4KLQkJPHRhYiBjbGFzcz0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25zLkphdmFKUkVUYWIiCi0JCQlncm91cD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9uVGFiR3JvdXAueHNsdCIKLQkJCWlkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuamF2YUpSRVRhYiIgbmFtZT0iSlJFIj4KLQkJCTxhc3NvY2lhdGVkRGVsZWdhdGUKLQkJCQlkZWxlZ2F0ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuaW50ZXJuYWwuamF4cC5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIj4KLQkJCTwvYXNzb2NpYXRlZERlbGVnYXRlPgotCQkJPHBsYWNlbWVudCBhZnRlcj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy51aS5qYXhwLnRhYnMucHJvY2Vzc29yIj4KLQkJCTwvcGxhY2VtZW50PgotCQk8L3RhYj4KLQkJPHRhYiBjbGFzcz0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmxhdW5jaENvbmZpZ3VyYXRpb25zLkphdmFDbGFzc3BhdGhUYWIiCi0JCQlncm91cD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hDb25maWd1cmF0aW9uVGFiR3JvdXAueHNsdCIKLQkJCWlkPSJvcmcuZWNsaXBzZS5qZHQuZGVidWcudWkuamF2YUNsYXNzcGF0aFRhYiIgbmFtZT0iQ2xhc3NwYXRoIj4KLQkJCTxhc3NvY2lhdGVkRGVsZWdhdGUKLQkJCQlkZWxlZ2F0ZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuaW50ZXJuYWwuamF4cC5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIj4KLQkJCTwvYXNzb2NpYXRlZERlbGVnYXRlPgotCQkJPHBsYWNlbWVudCBhZnRlcj0ib3JnLmVjbGlwc2UuamR0LmRlYnVnLnVpLmphdmFKUkVUYWIiPgotCQkJPC9wbGFjZW1lbnQ+Ci0JCTwvdGFiPgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+Ci0JCTxwYWdlIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3QueHNsLnVpLnByZWZlcmVuY2VzLkJhc2VQcmVmZXJlbmNlUGFnZSIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wudWkucHJlZmVyZW5jZXMuamF2YSIgbmFtZT0iJXBhZ2VOYW1lSmF2YVByb2Nlc3NvcnMiPgotCQk8L3BhZ2U+Ci0JPC9leHRlbnNpb24+Ci0gPGV4dGVuc2lvbgotICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0gICAgPHZpZXcKLSAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnZpZXdzLlJlc3VsdFZpZXciCi0gICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5yZXN1bHR2aWV3IgotICAgICAgICAgIG5hbWU9IiV2aWV3TmFtZVJlc3VsdCIKLSAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnhtbCI+Ci0gICAgPC92aWV3PgotIDwvZXh0ZW5zaW9uPgotICA8ZXh0ZW5zaW9uCi0gICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZUV4dGVuc2lvbnMiPgotICAgICA8cGVyc3BlY3RpdmVFeHRlbnNpb24KLSAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLmRlYnVnLnVpLkRlYnVnUGVyc3BlY3RpdmUiPgotICAgICAgICA8dmlldwotICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLnZpZXcxIgotICAgICAgICAgICAgICBtaW5pbWl6ZWQ9ImZhbHNlIgotICAgICAgICAgICAgICByZWxhdGlvbnNoaXA9InN0YWNrIgotICAgICAgICAgICAgICByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkuY29uc29sZS5Db25zb2xlVmlldyIKLSAgICAgICAgICAgICAgdmlzaWJsZT0iZmFsc2UiPgotICAgICAgICA8L3ZpZXc+Ci0gICAgIDwvcGVyc3BlY3RpdmVFeHRlbnNpb24+Ci0gIDwvZXh0ZW5zaW9uPgotIAotIAk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5jb250ZXh0Vmlld0JpbmRpbmdzIj4KLQkJPGNvbnRleHRWaWV3QmluZGluZwotCQkJY29udGV4dElkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLmNvbnRleHQiCi0JCQl2aWV3SWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5yZXN1bHR2aWV3Ij4KLQkJPC9jb250ZXh0Vmlld0JpbmRpbmc+Ci0JPC9leHRlbnNpb24+Ci0gCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvSkFYUERlYnVnVUlQbHVnaW4uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvSkFYUERlYnVnVUlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5YjIxZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL0pBWFBEZWJ1Z1VJUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSURlYnVnRXZlbnRTZXRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuQmFzZUxhdW5jaEhlbHBlcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEpBWFBEZWJ1Z1VJUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkiOwotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEpBWFBEZWJ1Z1VJUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgSkFYUERlYnVnVUlQbHVnaW4oKSB7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBKQVhQRGVidWdVSVBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9BZGRQcm9jZXNzb3JEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQWRkUHJvY2Vzc29yRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YjkyYjEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9BZGRQcm9jZXNzb3JEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlN0YXR1c0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbWJvVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvci5JbnN0YWxsU3RhbmRpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklEZWJ1Z2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBBZGRQcm9jZXNzb3JEaWFsb2cgZXh0ZW5kcyBTdGF0dXNEaWFsb2cKLXsKLQlwcml2YXRlIGZpbmFsIEluc3RhbGxTdGFuZGluIHN0YW5kaW5Qcm9jZXNzb3I7Ci0JcHJpdmF0ZSBmaW5hbCBJUHJvY2Vzc29yVHlwZVtdIHByb2Nlc3NvclR5cGVzOwotCXByaXZhdGUgSVByb2Nlc3NvclR5cGUgc2VsZWN0ZWRQcm9jZXNzb3JUeXBlOwotCXByaXZhdGUgQ29tYm9WaWV3ZXIgcHJvY2Vzc29yVHlwZUZpZWxkOwotCXByaXZhdGUgUHJvY2Vzc29yTGlicmFyeUJsb2NrIGZMaWJyYXJ5QmxvY2s7Ci0JcHJpdmF0ZSBUZXh0IHByb2Nlc3Nvck5hbWVGaWVsZDsKLQlwcml2YXRlIGZpbmFsIElTdGF0dXNbXSBmU3RhdGk7Ci0JcHJpdmF0ZSBpbnQgZlByZXZJbmRleCA9IC0xOwotCXByaXZhdGUgZmluYWwgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrIGJsb2NrOwotCXByaXZhdGUgYm9vbGVhbiBhZGRpbmc7Ci0KLQlwdWJsaWMgQWRkUHJvY2Vzc29yRGlhbG9nKEluc3RhbGxlZFByb2Nlc3NvcnNCbG9jayBibG9jaywgU2hlbGwgcGFyZW50LCBJUHJvY2Vzc29yVHlwZVtdIHR5cGVzLCBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJc3VwZXIocGFyZW50KTsKLQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQkJdGhpcy5ibG9jayA9IGJsb2NrOwotCQlmU3RhdGkgPSBuZXcgSVN0YXR1c1s1XTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmU3RhdGkubGVuZ3RoOyBpKyspCi0JCXsKLQkJCWZTdGF0aVtpXSA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCX0KLQkJcHJvY2Vzc29yVHlwZXMgPSB0eXBlczsKLQkJc2VsZWN0ZWRQcm9jZXNzb3JUeXBlID0gaW5zdGFsbCAhPSBudWxsID8gaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkgOiB0eXBlc1swXTsKLQkJSW5zdGFsbFN0YW5kaW4gc3RhbmRpbiA9IG51bGw7Ci0JCWlmIChpbnN0YWxsID09IG51bGwpCi0JCXsKLQkJCWFkZGluZyA9IHRydWU7Ci0JCQlzdGFuZGluID0gbmV3IEluc3RhbGxTdGFuZGluKEpBWFBSdW50aW1lLmNyZWF0ZVVuaXF1ZVByb2Nlc3NvcklkKHNlbGVjdGVkUHJvY2Vzc29yVHlwZSksICIiLCBzZWxlY3RlZFByb2Nlc3NvclR5cGUuZ2V0SWQoKSwgbnVsbCwgbmV3IElQcm9jZXNzb3JKYXJbMF0pOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlzdGFuZGluID0gbmV3IEluc3RhbGxTdGFuZGluKGluc3RhbGwpOwotCQl9Ci0JCXN0YW5kaW5Qcm9jZXNzb3IgPSBzdGFuZGluOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIG5ld1NoZWxsKQotCXsKLQkJc3VwZXIuY29uZmlndXJlU2hlbGwobmV3U2hlbGwpOwotCQkvLyBUT0RPIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAuLi4KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVEaWFsb2dGaWVsZHMoQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCUdyaWREYXRhIGdkOwotCQlMYWJlbCBsYWJlbDsKLQotCQlsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dChNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfcHJvY2Vzc29yTmFtZSk7Ci0JCXByb2Nlc3Nvck5hbWVGaWVsZCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULkJPUkRFUik7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5OT05FLCBTV1QuTk9ORSwgZmFsc2UsIGZhbHNlKTsKLQkJZ2Qud2lkdGhIaW50ID0gY29udmVydFdpZHRoSW5DaGFyc1RvUGl4ZWxzKDUwKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlwcm9jZXNzb3JOYW1lRmllbGQuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJbGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX3Byb2Nlc3NvclR5cGUpOwotCQlwcm9jZXNzb3JUeXBlRmllbGQgPSBuZXcgQ29tYm9WaWV3ZXIocGFyZW50LCBTV1QuUkVBRF9PTkxZKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOwotCQlwcm9jZXNzb3JUeXBlRmllbGQuZ2V0Q29tYm8oKS5zZXRMYXlvdXREYXRhKGdkKTsKLQkJcHJvY2Vzc29yVHlwZUZpZWxkLnNldENvbnRlbnRQcm92aWRlcihuZXcgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIoKQotCQl7Ci0KLQkJCXByaXZhdGUgT2JqZWN0IGlucHV0OwotCi0JCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gKElQcm9jZXNzb3JUeXBlW10pIGlucHV0OwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJCXsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQkJewotCQkJCWlucHV0ID0gbmV3SW5wdXQ7Ci0JCQl9Ci0JCX0pOwotCQlwcm9jZXNzb3JUeXBlRmllbGQuc2V0TGFiZWxQcm92aWRlcihuZXcgTGFiZWxQcm92aWRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCXJldHVybiAoKElQcm9jZXNzb3JUeXBlKSBlbGVtZW50KS5nZXRMYWJlbCgpOwotCQkJfQotCQl9KTsKLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUZpZWxkTGlzdGVuZXJzKCkKLQl7Ci0JCXByb2Nlc3NvclR5cGVGaWVsZC5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQl1cGRhdGVQcm9jZXNzb3JUeXBlKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXByb2Nlc3Nvck5hbWVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKQotCQl7Ci0JCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpCi0JCQl7Ci0JCQkJc2V0UHJvY2Vzc29yTmFtZVN0YXR1cyh2YWxpZGF0ZVByb2Nlc3Nvck5hbWUoKSk7Ci0JCQkJdXBkYXRlU3RhdHVzTGluZSgpOwotCQkJfQotCQl9KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFByb2Nlc3Nvck5hbWUoKQotCXsKLQkJcmV0dXJuIHByb2Nlc3Nvck5hbWVGaWVsZC5nZXRUZXh0KCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgYW5jZXN0b3IpCi0JewotCQlDb21wb3NpdGUgcGFyZW50ID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShhbmNlc3Rvcik7Ci0JCSgoR3JpZExheW91dCkgcGFyZW50LmdldExheW91dCgpKS5udW1Db2x1bW5zID0gMzsKLS8vCQkoKEdyaWREYXRhKSBwYXJlbnQuZ2V0TGF5b3V0RGF0YSgpKS5oZWlnaHRIaW50ID0gNDAwOwotLy8JCSgoR3JpZERhdGEpIHBhcmVudC5nZXRMYXlvdXREYXRhKCkpLndpZHRoSGludCA9IDQwMDsKLQotCQljcmVhdGVEaWFsb2dGaWVsZHMocGFyZW50KTsKLQotCQlMYWJlbCBsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOwotCQlsLnNldFRleHQoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX2phcnMpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDM7Ci0JCWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJZkxpYnJhcnlCbG9jayA9IG5ldyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2sodGhpcyk7Ci0JCUNvbnRyb2wgYmxvY2sgPSBmTGlicmFyeUJsb2NrLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAzOwotCQlibG9jay5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlpbml0aWFsaXplRmllbGRzKCk7Ci0JCWNyZWF0ZUZpZWxkTGlzdGVuZXJzKCk7Ci0JCWFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotCQkKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdXBkYXRlUHJvY2Vzc29yVHlwZSgpCi0JewotCQlpbnQgc2VsSW5kZXggPSBwcm9jZXNzb3JUeXBlRmllbGQuZ2V0Q29tYm8oKS5nZXRTZWxlY3Rpb25JbmRleCgpOwotCQlpZiAoc2VsSW5kZXggPT0gZlByZXZJbmRleCkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCWZQcmV2SW5kZXggPSBzZWxJbmRleDsKLQkJaWYgKHNlbEluZGV4ID49IDAgJiYgc2VsSW5kZXggPCBwcm9jZXNzb3JUeXBlcy5sZW5ndGgpCi0JCXsKLQkJCXNlbGVjdGVkUHJvY2Vzc29yVHlwZSA9IHByb2Nlc3NvclR5cGVzW3NlbEluZGV4XTsKLQkJfQotCQlmTGlicmFyeUJsb2NrLmluaXRpYWxpemVGcm9tKHN0YW5kaW5Qcm9jZXNzb3IsIHNlbGVjdGVkUHJvY2Vzc29yVHlwZSk7Ci0JCXVwZGF0ZVN0YXR1c0xpbmUoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGUoKQotCXsKLQkJc3VwZXIuY3JlYXRlKCk7Ci0JCXByb2Nlc3Nvck5hbWVGaWVsZC5zZXRGb2N1cygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplRmllbGRzKCkKLQl7Ci0JCXByb2Nlc3NvclR5cGVGaWVsZC5zZXRJbnB1dChwcm9jZXNzb3JUeXBlcyk7Ci0JCWlmIChhZGRpbmcpCi0JCXsKLQkJCXByb2Nlc3Nvck5hbWVGaWVsZC5zZXRUZXh0KCIiKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvY2Vzc29yVHlwZUZpZWxkLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihwcm9jZXNzb3JUeXBlc1swXSkpOwotCQkJZkxpYnJhcnlCbG9jay5pbml0aWFsaXplRnJvbShzdGFuZGluUHJvY2Vzc29yLCBzZWxlY3RlZFByb2Nlc3NvclR5cGUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJvY2Vzc29yVHlwZUZpZWxkLmdldENvbWJvKCkuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCQlwcm9jZXNzb3JUeXBlRmllbGQuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHN0YW5kaW5Qcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpKSk7Ci0JCQlwcm9jZXNzb3JOYW1lRmllbGQuc2V0VGV4dChzdGFuZGluUHJvY2Vzc29yLmdldE5hbWUoKSk7Ci0KLQkJCWZMaWJyYXJ5QmxvY2suaW5pdGlhbGl6ZUZyb20oc3RhbmRpblByb2Nlc3Nvciwgc2VsZWN0ZWRQcm9jZXNzb3JUeXBlKTsKLQkJfQotCQlzZXRQcm9jZXNzb3JOYW1lU3RhdHVzKHZhbGlkYXRlUHJvY2Vzc29yTmFtZSgpKTsKLQkJdXBkYXRlU3RhdHVzTGluZSgpOwotCX0KLQotCXByaXZhdGUgSVN0YXR1cyB2YWxpZGF0ZVByb2Nlc3Nvck5hbWUoKQotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOwotCQlTdHJpbmcgbmFtZSA9IHByb2Nlc3Nvck5hbWVGaWVsZC5nZXRUZXh0KCk7Ci0JCWlmIChuYW1lID09IG51bGwgfHwgbmFtZS50cmltKCkubGVuZ3RoKCkgPT0gMCkKLQkJewotCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLk9LLCBNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfZW50ZXJOYW1lLCBudWxsKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChibG9jay5pc0R1cGxpY2F0ZU5hbWUobmFtZSkgJiYgKHN0YW5kaW5Qcm9jZXNzb3IgPT0gbnVsbCB8fCAhbmFtZS5lcXVhbHMoc3RhbmRpblByb2Nlc3Nvci5nZXROYW1lKCkpKSkKLQkJCXsKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFhTTERlYnVnVUlQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLk9LLCBNZXNzYWdlcy5BZGRQcm9jZXNzb3JEaWFsb2dfZHVwbGljYXRlTmFtZSwgbnVsbCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLy8gSVN0YXR1cyBzID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnZhbGlkYXRlTmFtZShuYW1lLAotCQkJCS8vIElSZXNvdXJjZS5GSUxFKTsKLQkJCQkvLyBpZiAoIXMuaXNPSygpKQotCQkJCS8vIHsKLQkJCQkvLyBzdGF0dXMuc2V0RXJyb3IoTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX1Byb2Nlc3Nvcl9uYW1lX211c3RfYmVfYV92YWxpZF9maWxlX25hbWUsCi0JCQkJLy8gbmV3IFN0cmluZ1tdCi0JCQkJLy8geyBzLmdldE1lc3NhZ2UoKSB9KSk7Ci0JCQkJLy8gfQotCQkJfQotCQl9Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgdmFsaWRhdGVWZXJzaW9uU3RhdHVzKCkKLQl7Ci0JCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVTdGF0dXNMaW5lKCkKLQl7Ci0JCUlTdGF0dXMgbWF4ID0gbnVsbDsKLQkJZm9yIChJU3RhdHVzIGN1cnIgOiBmU3RhdGkpCi0JCXsKLQkJCWlmIChjdXJyLm1hdGNoZXMoSVN0YXR1cy5FUlJPUikpCi0JCQl7Ci0JCQkJdXBkYXRlU3RhdHVzKGN1cnIpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlmIChtYXggPT0gbnVsbCB8fCBjdXJyLmdldFNldmVyaXR5KCkgPiBtYXguZ2V0U2V2ZXJpdHkoKSkKLQkJCXsKLQkJCQltYXggPSBjdXJyOwotCQkJfQotCQl9Ci0JCXVwZGF0ZVN0YXR1cyhtYXgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIG9rUHJlc3NlZCgpCi0JewotCQlkb09rUHJlc3NlZCgpOwotCQlzdXBlci5va1ByZXNzZWQoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9Pa1ByZXNzZWQoKQotCXsKLQkJaWYgKGFkZGluZykKLQkJewotCQkJc2V0RmllbGRWYWx1ZXNUb1Byb2Nlc3NvcihzdGFuZGluUHJvY2Vzc29yKTsKLQkJCWJsb2NrLnByb2Nlc3NvckFkZGVkKHN0YW5kaW5Qcm9jZXNzb3IpOwotCQl9Ci0vLwkJZWxzZQotLy8JCQlzZXRGaWVsZFZhbHVlc1RvUHJvY2Vzc29yKChQcm9jZXNzb3JJbnN0YWxsKWVkaXRlZFByb2Nlc3Nvcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0RmllbGRWYWx1ZXNUb1Byb2Nlc3NvcihJbnN0YWxsU3RhbmRpbiBwcm9jZXNzb3IpCi0JewotCQlwcm9jZXNzb3Iuc2V0TmFtZShwcm9jZXNzb3JOYW1lRmllbGQuZ2V0VGV4dCgpKTsKLQkJcHJvY2Vzc29yLnNldFByb2Nlc3NvclR5cGVJZChzZWxlY3RlZFByb2Nlc3NvclR5cGUuZ2V0SWQoKSk7Ci0KLQkJSURlYnVnZ2VyW10gZGVidWdnZXJzID0gSkFYUFJ1bnRpbWUuZ2V0RGVidWdnZXJzKCk7Ci0JCWZvciAoSURlYnVnZ2VyIGVsZW1lbnQgOiBkZWJ1Z2dlcnMpCi0JCXsKLQkJCWlmIChlbGVtZW50LmdldFByb2Nlc3NvclR5cGUoKS5lcXVhbHMoc2VsZWN0ZWRQcm9jZXNzb3JUeXBlKSkKLQkJCQlwcm9jZXNzb3Iuc2V0RGVidWdnZXJJZChlbGVtZW50LmdldElkKCkpOwotCQl9Ci0KLQkJZkxpYnJhcnlCbG9jay5wZXJmb3JtQXBwbHkocHJvY2Vzc29yKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgRmlsZSBnZXRBYnNvbHV0ZUZpbGVPckVtcHR5KFN0cmluZyBwYXRoKQotCXsKLQkJaWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoLmxlbmd0aCgpID09IDApCi0JCXsKLQkJCXJldHVybiBuZXcgRmlsZSgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gbmV3IEZpbGUocGF0aCkuZ2V0QWJzb2x1dGVGaWxlKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFByb2Nlc3Nvck5hbWVTdGF0dXMoSVN0YXR1cyBzdGF0dXMpCi0JewotCQlmU3RhdGlbMF0gPSBzdGF0dXM7Ci0JfQotCi0JcHJvdGVjdGVkIElTdGF0dXMgZ2V0U3lzdGVtTGlicmFyeVN0YXR1cygpCi0JewotCQlyZXR1cm4gZlN0YXRpWzNdOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFN5c3RlbUxpYnJhcnlTdGF0dXMoSVN0YXR1cyBzdGF0dXMpCi0JewotCQlmU3RhdGlbM10gPSBzdGF0dXM7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VmVyc2lvblN0YXR1cyhJU3RhdHVzIHN0YXR1cykKLQl7Ci0JCWZTdGF0aVsyXSA9IHN0YXR1czsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVCdXR0b25zRW5hYmxlU3RhdGUoSVN0YXR1cyBzdGF0dXMpCi0JewotCQlCdXR0b24gb2sgPSBnZXRCdXR0b24oSURpYWxvZ0NvbnN0YW50cy5PS19JRCk7Ci0JCWlmIChvayAhPSBudWxsICYmICFvay5pc0Rpc3Bvc2VkKCkpCi0JCQlvay5zZXRFbmFibGVkKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0spOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHNldEJ1dHRvbkxheW91dERhdGEoQnV0dG9uIGJ1dHRvbikKLQl7Ci0JCXN1cGVyLnNldEJ1dHRvbkxheW91dERhdGEoYnV0dG9uKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKQotCXsKLQkJcmV0dXJuICJBRERfUFJPQ0VTU09SX0RJQUxPR19TRUNUSU9OIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nQm91bmRzU2V0dGluZ3MoKQotCXsKLS8vCQlJRGlhbG9nU2V0dGluZ3Mgc2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotLy8JCUlEaWFsb2dTZXR0aW5ncyBzZWN0aW9uID0gc2V0dGluZ3MuZ2V0U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotLy8JCWlmIChzZWN0aW9uID09IG51bGwpCi0vLwkJewotLy8JCQlzZWN0aW9uID0gc2V0dGluZ3MuYWRkTmV3U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotLy8JCX0KLS8vCQlyZXR1cm4gc2VjdGlvbjsKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9CYXNlUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvQmFzZVByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGI2YmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9CYXNlUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci0KLXB1YmxpYyBjbGFzcyBCYXNlUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotewotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKQotCXsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0luc3RhbGxlZFByb2Nlc3NvcnNCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkOWYzMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL0luc3RhbGxlZFByb2Nlc3NvcnNCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQ2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkxpc3RlbmVyTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5sYXlvdXQuR3JpZERhdGFGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2hlY2tTdGF0ZUNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNoZWNrYm94VGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNoZWNrU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyU29ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuQWJzdHJhY3RUYWJsZUJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkluc3RhbGxTdGFuZGluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrIGV4dGVuZHMgQWJzdHJhY3RUYWJsZUJsb2NrIGltcGxlbWVudHMgSVNlbGVjdGlvblByb3ZpZGVyCi17Ci0JcHJpdmF0ZSBDb21wb3NpdGUgZkNvbnRyb2w7Ci0JcHJpdmF0ZSBmaW5hbCBMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiBwcm9jZXNzb3JzID0gbmV3IEFycmF5TGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4oKTsKLQlwcml2YXRlIENoZWNrYm94VGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7Ci0JcHJpdmF0ZSBCdXR0b24gZkFkZEJ1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiBmUmVtb3ZlQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIGZFZGl0QnV0dG9uOwotCXByaXZhdGUgZmluYWwgTGlzdGVuZXJMaXN0IGZTZWxlY3Rpb25MaXN0ZW5lcnMgPSBuZXcgTGlzdGVuZXJMaXN0KCk7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uIGZQcmV2U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oKTsKLQotCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJZlNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKQotCXsKLQkJZlNlbGVjdGlvbkxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwotCX0KLQotCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpCi0JewotCQlyZXR1cm4gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGFibGVWaWV3ZXIuZ2V0Q2hlY2tlZEVsZW1lbnRzKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikKLQkJewotCQkJaWYgKCFzZWxlY3Rpb24uZXF1YWxzKGZQcmV2U2VsZWN0aW9uKSkKLQkJCXsKLQkJCQlmUHJldlNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQkJCQlPYmplY3QganJlID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlpZiAoanJlID09IG51bGwpCi0JCQkJewotCQkJCQl0YWJsZVZpZXdlci5zZXRDaGVja2VkRWxlbWVudHMobmV3IE9iamVjdFswXSk7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXRhYmxlVmlld2VyLnNldENoZWNrZWRFbGVtZW50cyhuZXcgT2JqZWN0W10KLQkJCQkJeyBqcmUgfSk7Ci0JCQkJCXRhYmxlVmlld2VyLnJldmVhbChqcmUpOwotCQkJCX0KLQkJCQlmaXJlU2VsZWN0aW9uQ2hhbmdlZCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgYW5jZXN0b3IpCi0JewotCi0JCUNvbXBvc2l0ZSBwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKGFuY2VzdG9yLCBTV1QuTlVMTCk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOwotCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJcGFyZW50LnNldExheW91dChsYXlvdXQpOwotCQlGb250IGZvbnQgPSBhbmNlc3Rvci5nZXRGb250KCk7Ci0JCXBhcmVudC5zZXRGb250KGZvbnQpOwotCQlmQ29udHJvbCA9IHBhcmVudDsKLQotCQlHcmlkRGF0YSBkYXRhOwotCi0JCUxhYmVsIHRhYmxlTGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7Ci0JCXRhYmxlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfMCk7Ci0JCWRhdGEgPSBuZXcgR3JpZERhdGEoKTsKLQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXRhYmxlTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQkJdGFibGVMYWJlbC5zZXRGb250KGZvbnQpOwotCi0JCVRhYmxlIGZUYWJsZSA9IG5ldyBUYWJsZShwYXJlbnQsIFNXVC5DSEVDSyB8IFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwpOwotCi0JCWRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJZGF0YS53aWR0aEhpbnQgPSA0NTA7Ci0JCWZUYWJsZS5zZXRMYXlvdXREYXRhKGRhdGEpOwotCQlmVGFibGUuc2V0Rm9udChmb250KTsKLQotCQlmVGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJZlRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQotCQlUYWJsZUNvbHVtbiBjb2x1bW4xID0gbmV3IFRhYmxlQ29sdW1uKGZUYWJsZSwgU1dULk5PTkUpOwotCQljb2x1bW4xLnNldFdpZHRoKDE4MCk7Ci0JCWNvbHVtbjEuc2V0UmVzaXphYmxlKHRydWUpOwotCQljb2x1bW4xLnNldFRleHQoTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzEpOwotCQljb2x1bW4xLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXNvcnRCeU5hbWUoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJVGFibGVDb2x1bW4gY29sdW1uMiA9IG5ldyBUYWJsZUNvbHVtbihmVGFibGUsIFNXVC5OT05FKTsKLQkJY29sdW1uMi5zZXRXaWR0aCg5MCk7Ci0JCWNvbHVtbjIuc2V0UmVzaXphYmxlKHRydWUpOwotCQljb2x1bW4yLnNldFRleHQoTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzIpOwotCQljb2x1bW4yLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXNvcnRCeVR5cGUoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJVGFibGVDb2x1bW4gY29sdW1uNCA9IG5ldyBUYWJsZUNvbHVtbihmVGFibGUsIFNXVC5OT05FKTsKLQkJY29sdW1uNC5zZXRXaWR0aCgxODApOwotCQljb2x1bW40LnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJY29sdW1uNC5zZXRUZXh0KE1lc3NhZ2VzLkluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja180KTsKLQkJY29sdW1uNC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlzb3J0QnlWZXJzaW9uKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCXRhYmxlVmlld2VyID0gbmV3IENoZWNrYm94VGFibGVWaWV3ZXIoZlRhYmxlKTsKLQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgVk1MYWJlbFByb3ZpZGVyKCkpOwotCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFByb2Nlc3NvcnNDb250ZW50UHJvdmlkZXIoKSk7Ci0KLQkJdGFibGVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZ0KQotCQkJewotCQkJCWVuYWJsZUJ1dHRvbnMoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJdGFibGVWaWV3ZXIuYWRkQ2hlY2tTdGF0ZUxpc3RlbmVyKG5ldyBJQ2hlY2tTdGF0ZUxpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgY2hlY2tTdGF0ZUNoYW5nZWQoQ2hlY2tTdGF0ZUNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQlpZiAoZXZlbnQuZ2V0Q2hlY2tlZCgpKQotCQkJCXsKLQkJCQkJc2V0Q2hlY2tlZEluc3RhbGwoKElQcm9jZXNzb3JJbnN0YWxsKSBldmVudC5nZXRFbGVtZW50KCkpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlzZXRDaGVja2VkSW5zdGFsbChudWxsKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCi0JCXRhYmxlVmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBlKQotCQkJewotCQkJCWlmICghdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKQotCQkJCXsKLQkJCQkJZWRpdFByb2Nlc3NvcigpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCWZUYWJsZS5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5QWRhcHRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBldmVudCkKLQkJCXsKLQkJCQlpZiAoZXZlbnQuY2hhcmFjdGVyID09IFNXVC5ERUwgJiYgZXZlbnQuc3RhdGVNYXNrID09IDApCi0JCQkJewotCQkJCQlyZW1vdmVQcm9jZXNzb3JzKCk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQotCQlDb21wb3NpdGUgYnV0dG9ucyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7Ci0JCWJ1dHRvbnMuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuVkVSVElDQUxfQUxJR05fQkVHSU5OSU5HKSk7Ci0JCWxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlidXR0b25zLnNldExheW91dChsYXlvdXQpOwotCQlidXR0b25zLnNldEZvbnQoZm9udCk7Ci0KLQkJZkFkZEJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9ucywgTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzUpOwotCQlmQWRkQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2dCkKLQkJCXsKLQkJCQlhZGRQcm9jZXNzb3IoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJZkVkaXRCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKGJ1dHRvbnMsIE1lc3NhZ2VzLkluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja182KTsKLQkJZkVkaXRCdXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZ0KQotCQkJewotCQkJCWVkaXRQcm9jZXNzb3IoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJZlJlbW92ZUJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24oYnV0dG9ucywgTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzcpOwotCQlmUmVtb3ZlQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpCi0JCXsKLQkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2dCkKLQkJCXsKLQkJCQlyZW1vdmVQcm9jZXNzb3JzKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCS8vIGNvcGllZCBmcm9tIExpc3REaWFsb2dGaWVsZC5DcmVhdGVTZXBhcmF0b3IoKQotCQlMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoYnV0dG9ucywgU1dULk5PTkUpOwotCQlzZXBhcmF0b3Iuc2V0VmlzaWJsZShmYWxzZSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0JCWdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotCQlnZC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkJFR0lOTklORzsKLQkJZ2QuaGVpZ2h0SGludCA9IDQ7Ci0JCXNlcGFyYXRvci5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlmaWxsV2l0aFdvcmtzcGFjZVByb2Nlc3NvcnMoKTsKLQkJZW5hYmxlQnV0dG9ucygpOwotCi0JCXJlc3RvcmVDb2x1bW5TZXR0aW5ncygpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZpbGxXaXRoV29ya3NwYWNlUHJvY2Vzc29ycygpCi0JewotCQlMaXN0PEluc3RhbGxTdGFuZGluPiBzdGFuZGlucyA9IG5ldyBBcnJheUxpc3Q8SW5zdGFsbFN0YW5kaW4+KCk7Ci0JCUlQcm9jZXNzb3JUeXBlW10gdHlwZXMgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlcygpOwotCQlmb3IgKElQcm9jZXNzb3JUeXBlIHR5cGUgOiB0eXBlcykKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxscyA9IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcnModHlwZS5nZXRJZCgpKTsKLQkJCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA6IGluc3RhbGxzKQotCQkJewotCQkJCXN0YW5kaW5zLmFkZChuZXcgSW5zdGFsbFN0YW5kaW4oaW5zdGFsbCkpOwotCQkJfQotCQl9Ci0JCXNldFByb2Nlc3NvcnMoKElQcm9jZXNzb3JJbnN0YWxsW10pIHN0YW5kaW5zLnRvQXJyYXkobmV3IElQcm9jZXNzb3JJbnN0YWxsW3N0YW5kaW5zLnNpemUoKV0pKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZmlyZVNlbGVjdGlvbkNoYW5nZWQoKQotCXsKLQkJU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBnZXRTZWxlY3Rpb24oKSk7Ci0JCU9iamVjdFtdIGxpc3RlbmVycyA9IGZTZWxlY3Rpb25MaXN0ZW5lcnMuZ2V0TGlzdGVuZXJzKCk7Ci0JCWZvciAoT2JqZWN0IGVsZW1lbnQgOiBsaXN0ZW5lcnMpCi0JCXsKLQkJCUlTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgPSAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikgZWxlbWVudDsKLQkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU29ydHMgYnkgdHlwZSwgYW5kIG5hbWUgd2l0aGluIHR5cGUuCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNvcnRCeVR5cGUoKQotCXsKLQkJdGFibGVWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikKLQkJCXsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBsZWZ0ID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlMTsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCByaWdodCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgZTI7Ci0JCQkJcmV0dXJuIGxlZnQuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldExhYmVsKCkuY29tcGFyZVRvSWdub3JlQ2FzZShyaWdodC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0TGFiZWwoKSk7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGJvb2xlYW4gaXNTb3J0ZXJQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc29ydEJ5VmVyc2lvbigpCi0JewotCQl0YWJsZVZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBjb21wYXJlKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBlMSwgT2JqZWN0IGUyKQotCQkJewotCQkJCUlQcm9jZXNzb3JJbnN0YWxsIGxlZnQgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGUxOwotCQkJCUlQcm9jZXNzb3JJbnN0YWxsIHJpZ2h0ID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlMjsKLQkJCQlyZXR1cm4gbGVmdC5nZXRTdXBwb3J0cygpLmNvbXBhcmVUb0lnbm9yZUNhc2UocmlnaHQuZ2V0U3VwcG9ydHMoKSk7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGJvb2xlYW4gaXNTb3J0ZXJQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9KTsKLQl9Ci0KLQkvKioKLQkgKiBTb3J0cyBieSBuYW1lLgotCSAqLwotCXByaXZhdGUgdm9pZCBzb3J0QnlOYW1lKCkKLQl7Ci0JCXRhYmxlVmlld2VyLnNldFNvcnRlcihuZXcgVmlld2VyU29ydGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpCi0JCQl7Ci0JCQkJaWYgKChlMSBpbnN0YW5jZW9mIElQcm9jZXNzb3JJbnN0YWxsKSAmJiAoZTIgaW5zdGFuY2VvZiBJUHJvY2Vzc29ySW5zdGFsbCkpCi0JCQkJewotCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBsZWZ0ID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlMTsKLQkJCQkJSVByb2Nlc3Nvckluc3RhbGwgcmlnaHQgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGUyOwotCQkJCQlyZXR1cm4gbGVmdC5nZXROYW1lKCkuY29tcGFyZVRvSWdub3JlQ2FzZShyaWdodC5nZXROYW1lKCkpOwotCQkJCX0KLQkJCQlyZXR1cm4gc3VwZXIuY29tcGFyZSh2aWV3ZXIsIGUxLCBlMik7Ci0JCQl9Ci0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGJvb2xlYW4gaXNTb3J0ZXJQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KQotCQkJewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQl9KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZW5hYmxlQnV0dG9ucygpCi0JewotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpOwotCQlpbnQgc2VsZWN0aW9uQ291bnQgPSBzZWxlY3Rpb24uc2l6ZSgpOwotCQlmRWRpdEJ1dHRvbi5zZXRFbmFibGVkKHNlbGVjdGlvbkNvdW50ID09IDEgJiYgISgoSVByb2Nlc3Nvckluc3RhbGwpc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpKS5pc0NvbnRyaWJ1dGVkKCkpOwotCQlpZiAoc2VsZWN0aW9uQ291bnQgPiAwICYmIHNlbGVjdGlvbkNvdW50IDwgdGFibGVWaWV3ZXIuZ2V0VGFibGUoKS5nZXRJdGVtQ291bnQoKSkKLQkJewotCQkJSXRlcmF0b3I8Pz4gaXRlcmF0b3IgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpCi0JCQl7Ci0JCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgaXRlcmF0b3IubmV4dCgpOwotCQkJCWlmIChpbnN0YWxsLmlzQ29udHJpYnV0ZWQoKSkKLQkJCQl7Ci0JCQkJCWZSZW1vdmVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0JCQlmUmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlmUmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVQdXNoQnV0dG9uKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBsYWJlbCkKLQl7Ci0JCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHBhcmVudCwgU1dULlBVU0gpOwotCQlidXR0b24uc2V0VGV4dChsYWJlbCk7Ci0JCWJ1dHRvbi5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKS5jcmVhdGUoKSk7Ci0JCXJldHVybiBidXR0b247Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpCi0JewotCQlyZXR1cm4gZkNvbnRyb2w7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0UHJvY2Vzc29ycyhJUHJvY2Vzc29ySW5zdGFsbFtdIHZtcykKLQl7Ci0JCXByb2Nlc3NvcnMuY2xlYXIoKTsKLQkJZm9yIChJUHJvY2Vzc29ySW5zdGFsbCBlbGVtZW50IDogdm1zKQotCQl7Ci0JCQlwcm9jZXNzb3JzLmFkZChlbGVtZW50KTsKLQkJfQotCQl0YWJsZVZpZXdlci5zZXRJbnB1dChwcm9jZXNzb3JzKTsKLQkJLy8gdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW5zdGFsbFtdIGdldFByb2Nlc3NvcnMoKQotCXsKLQkJcmV0dXJuIChJUHJvY2Vzc29ySW5zdGFsbFtdKSBwcm9jZXNzb3JzLnRvQXJyYXkobmV3IElQcm9jZXNzb3JJbnN0YWxsW3Byb2Nlc3NvcnMuc2l6ZSgpXSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFByb2Nlc3NvcigpCi0JewotCQlBZGRQcm9jZXNzb3JEaWFsb2cgZGlhbG9nID0gbmV3IEFkZFByb2Nlc3NvckRpYWxvZyh0aGlzLCBnZXRTaGVsbCgpLCBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlc0V4Y2xKUkVEZWZhdWx0KCksIG51bGwpOwotCQlkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX0FkZF9UaXRsZSk7Ci0JCWlmIChkaWFsb2cub3BlbigpICE9IFdpbmRvdy5PSykKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcHJvY2Vzc29yQWRkZWQoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCXByb2Nlc3NvcnMuYWRkKGluc3RhbGwpOwotCQl0YWJsZVZpZXdlci5hZGQoaW5zdGFsbCk7Ci0JCXRhYmxlVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihpbnN0YWxsKSwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNEdXBsaWNhdGVOYW1lKFN0cmluZyBuYW1lKQotCXsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZXNzb3JzLnNpemUoKTsgaSsrKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBwcm9jZXNzb3JzLmdldChpKTsKLQkJCWlmIChpbnN0YWxsLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCi0JCQl7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXByaXZhdGUgdm9pZCBlZGl0UHJvY2Vzc29yKCkKLQl7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdGFibGVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSAoSVByb2Nlc3Nvckluc3RhbGwpIHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJaWYgKGluc3RhbGwgPT0gbnVsbCkKLQkJewotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICghaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpCi0JCXsKLS8vCQkJUHJvY2Vzc29yRGV0YWlsc0RpYWxvZyBkaWFsb2cgPSBuZXcgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZyhnZXRTaGVsbCgpLCBpbnN0YWxsKTsKLS8vCQkJZGlhbG9nLm9wZW4oKTsKLS8vCQl9Ci0vLwkJZWxzZQotLy8JCXsKLQkJCUFkZFByb2Nlc3NvckRpYWxvZyBkaWFsb2cgPSBuZXcgQWRkUHJvY2Vzc29yRGlhbG9nKHRoaXMsIGdldFNoZWxsKCksIEpBWFBSdW50aW1lLmdldFByb2Nlc3NvclR5cGVzRXhjbEpSRURlZmF1bHQoKSwgaW5zdGFsbCk7Ci0JCQlkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuQWRkUHJvY2Vzc29yRGlhbG9nX0VkaXRfVGl0bGUpOwotCQkJaWYgKGRpYWxvZy5vcGVuKCkgIT0gV2luZG93Lk9LKQotCQkJewotCQkJCXJldHVybjsKLQkJCX0KLQkJCS8vIGZpbGxXaXRoV29ya3NwYWNlUHJvY2Vzc29ycygpOwotCQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlbW92ZVByb2Nlc3NvcnMoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJSVByb2Nlc3Nvckluc3RhbGxbXSB2bXMgPSBuZXcgSVByb2Nlc3Nvckluc3RhbGxbc2VsZWN0aW9uLnNpemUoKV07Ci0JCUl0ZXJhdG9yPD8+IGl0ZXIgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsKLQkJaW50IGkgPSAwOwotCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpCi0JCXsKLQkJCXZtc1tpXSA9IChJUHJvY2Vzc29ySW5zdGFsbCkgaXRlci5uZXh0KCk7Ci0JCQlpKys7Ci0JCX0KLQkJcmVtb3ZlUHJvY2Vzc29ycyh2bXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZVByb2Nlc3NvcnMoSVByb2Nlc3Nvckluc3RhbGxbXSB0aGVJbnN0YWxscykKLQl7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHByZXYgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGdldFNlbGVjdGlvbigpOwotCQlmb3IgKElQcm9jZXNzb3JJbnN0YWxsIGVsZW1lbnQgOiB0aGVJbnN0YWxscykKLQkJewotCQkJcHJvY2Vzc29ycy5yZW1vdmUoZWxlbWVudCk7Ci0JCX0KLQkJdGFibGVWaWV3ZXIucmVmcmVzaCgpOwotCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBjdXJyID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBnZXRTZWxlY3Rpb24oKTsKLQkJaWYgKCFjdXJyLmVxdWFscyhwcmV2KSkKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxscyA9IGdldFByb2Nlc3NvcnMoKTsKLQkJCWlmIChjdXJyLnNpemUoKSA9PSAwICYmIGluc3RhbGxzLmxlbmd0aCA9PSAxKQotCQkJewotCQkJCS8vIHBpY2sgYSBkZWZhdWx0IGluc3RhbGwgYXV0b21hdGljYWxseQotCQkJCXNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihpbnN0YWxsc1swXSkpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWZpcmVTZWxlY3Rpb25DaGFuZ2VkKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDaGVja2VkSW5zdGFsbChJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJaWYgKGluc3RhbGwgPT0gbnVsbCkKLQkJewotCQkJc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKCkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGluc3RhbGwpKTsKLQkJfQotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW5zdGFsbCBnZXRDaGVja2VkSW5zdGFsbCgpCi0JewotCQlPYmplY3RbXSBvYmplY3RzID0gdGFibGVWaWV3ZXIuZ2V0Q2hlY2tlZEVsZW1lbnRzKCk7Ci0JCWlmIChvYmplY3RzLmxlbmd0aCA9PSAwKQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gKElQcm9jZXNzb3JJbnN0YWxsKSBvYmplY3RzWzBdOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHNldFNvcnRDb2x1bW4oaW50IGNvbHVtbikKLQl7Ci0JCXN3aXRjaCAoY29sdW1uKQotCQl7Ci0JCQljYXNlIDE6Ci0JCQkJc29ydEJ5TmFtZSgpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCXNvcnRCeVR5cGUoKTsKLQkJCQlicmVhazsKLQkJfQotCQlzdXBlci5zZXRTb3J0Q29sdW1uKGNvbHVtbik7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFRhYmxlIGdldFRhYmxlKCkKLQl7Ci0JCXJldHVybiB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nU2V0dGluZ3MoKQotCXsKLQkJcmV0dXJuIFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRRdWFsaWZpZXIoKQotCXsKLQkJcmV0dXJuIFhTTERlYnVnVUlDb25zdGFudHMuUFJPQ0VTU09SX0RFVEFJTFNfRElBTE9HOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCX0KLQotCXByaXZhdGUgY2xhc3MgUHJvY2Vzc29yc0NvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi0JewotCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0KQotCQl7Ci0JCQlyZXR1cm4gcHJvY2Vzc29ycy50b0FycmF5KCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCXsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQl7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGNsYXNzIFZNTGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyCi0JewotCQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkKLQkJewotCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJUHJvY2Vzc29ySW5zdGFsbCkKLQkJCXsKLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlbGVtZW50OwotCQkJCXN3aXRjaCAoY29sdW1uSW5kZXgpCi0JCQkJewotCQkJCQljYXNlIDA6Ci0JCQkJCQlyZXR1cm4gaW5zdGFsbC5nZXROYW1lKCk7Ci0JCQkJCWNhc2UgMToKLQkJCQkJCXJldHVybiBpbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKS5nZXRMYWJlbCgpOwotCQkJCQljYXNlIDI6Ci0JCQkJCQlpZiAoaW5zdGFsbC5nZXREZWJ1Z2dlcigpICE9IG51bGwpCi0JCQkJCQl7Ci0JCQkJCQkJcmV0dXJuIGluc3RhbGwuZ2V0RGVidWdnZXIoKS5nZXROYW1lKCk7Ci0JCQkJCQl9Ci0JCQkJCQlyZXR1cm4gTWVzc2FnZXMuSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzg7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTsKLQkJfQotCi0JCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KQotCQl7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQwNGUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQlzdGF0aWMKLQl7Ci0JCS8vIGluaXRpYWxpemUgcmVzb3VyY2UgYnVuZGxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfMTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfRWRpdF9UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBZGRQcm9jZXNzb3JEaWFsb2dfQWRkX1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19qYXJzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19hdHRyaWJ1dGVzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JOYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JUeXBlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkZFByb2Nlc3NvckRpYWxvZ19lbnRlck5hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWRkUHJvY2Vzc29yRGlhbG9nX2R1cGxpY2F0ZU5hbWU7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfNjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfQWRkQnV0dG9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckxpYnJhcnlCbG9ja19SZW1vdmVCdXR0b247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZFdvcmtzcGFjZUJ1dHRvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfRmlsZURpYWxvZ19UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19UaXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19NZXNzYWdlOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzc7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzg7Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzA7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzI7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkKLQl7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Qcm9jZXNzb3JMaWJyYXJ5QmxvY2suamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvY2Vzc29yTGlicmFyeUJsb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNmFlMWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9Qcm9jZXNzb3JMaWJyYXJ5QmxvY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwucHJlZmVyZW5jZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyRmlsdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5FbGVtZW50VHJlZVNlbGVjdGlvbkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklTZWxlY3Rpb25TdGF0dXNWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm1vZGVsLldvcmtiZW5jaExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MubmF2aWdhdG9yLlJlc291cmNlQ29tcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkluc3RhbGxTdGFuZGluOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3Nvci5KYXJDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yLkphckxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yTGlicmFyeUJsb2NrIGltcGxlbWVudHMgU2VsZWN0aW9uTGlzdGVuZXIsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKLXsKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQVNUX1BBVEhfU0VUVElORyA9ICJMQVNUX1BBVEhfU0VUVElORyI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMQVNUX1dPUktTUEFDRV9QQVRIX1NFVFRJTkcgPSAiTEFTVF9XT1JLU1BBQ0VfUEFUSF9TRVRUSU5HIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERJQUxPR19TRVRUSU5HU19QUkVGSVggPSAiUHJvY2Vzc29yTGlicmFyeUJsb2NrIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBJbnN0YWxsU3RhbmRpbiBpbnN0YWxsOwotCXByb3RlY3RlZCBJUHJvY2Vzc29yVHlwZSBpbnN0YWxsVHlwZTsKLQlwcm90ZWN0ZWQgQWRkUHJvY2Vzc29yRGlhbG9nIGFkZERpYWxvZyA9IG51bGw7Ci0JcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOwotCXByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbjsKLQlwcml2YXRlIEJ1dHRvbiBhZGRCdXR0b247Ci0JcHJpdmF0ZSBCdXR0b24gYWRkV29ya3NwYWNlQnV0dG9uOwotCi0JcHJpdmF0ZSBmaW5hbCBJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBJU2VsZWN0aW9uU3RhdHVzVmFsaWRhdG9yKCkKLQl7Ci0JCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlKE9iamVjdFtdIHNlbGVjdGlvbikKLQkJewotCQkJaWYgKHNlbGVjdGlvbi5sZW5ndGggPT0gMCkKLQkJCXsKLQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwgIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlmb3IgKE9iamVjdCBlbGVtZW50IDogc2VsZWN0aW9uKQotCQkJewotCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZvbGRlcikKLQkJCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWFNMRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQsIDAsICIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZSkKLQkJCQl7Ci0JCQkJCS8vIElGaWxlIGZpbGUgPSAoSUZpbGUpIHNlbGVjdGlvbltpXTsKLQkJCQkJLy8gVE9ETyBjaGVjayB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhbHJlYWR5IG9uIHRoZSBjbGFzc3BhdGgKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwgIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCX0KLQl9OwotCi0JcHVibGljIFByb2Nlc3NvckxpYnJhcnlCbG9jayhBZGRQcm9jZXNzb3JEaWFsb2cgZGlhbG9nKQotCXsKLQkJYWRkRGlhbG9nID0gZGlhbG9nOwotCX0KLQotCXB1YmxpYyBDb250cm9sIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCUZvbnQgZm9udCA9IHBhcmVudC5nZXRGb250KCk7Ci0KLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IHRvcExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCXRvcExheW91dC5udW1Db2x1bW5zID0gMjsKLQkJdG9wTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXRvcExheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWNvbXAuc2V0TGF5b3V0KHRvcExheW91dCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWNvbXAuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJdGFibGVWaWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIoY29tcCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWdkLmhlaWdodEhpbnQgPSA2OwotCQl0YWJsZVZpZXdlci5nZXRDb250cm9sKCkuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCUphckNvbnRlbnRQcm92aWRlciBmTGlicmFyeUNvbnRlbnRQcm92aWRlciA9IG5ldyBKYXJDb250ZW50UHJvdmlkZXIoKTsKLQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKGZMaWJyYXJ5Q29udGVudFByb3ZpZGVyKTsKLQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgSmFyTGFiZWxQcm92aWRlcigpKTsKLQkJdGFibGVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCi0JCUNvbXBvc2l0ZSBwYXRoQnV0dG9uQ29tcCA9IG5ldyBDb21wb3NpdGUoY29tcCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IHBhdGhCdXR0b25MYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlwYXRoQnV0dG9uTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCXBhdGhCdXR0b25MYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlwYXRoQnV0dG9uQ29tcC5zZXRMYXlvdXQocGF0aEJ1dHRvbkxheW91dCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0JFR0lOTklORyB8IEdyaWREYXRhLkhPUklaT05UQUxfQUxJR05fRklMTCk7Ci0JCXBhdGhCdXR0b25Db21wLnNldExheW91dERhdGEoZ2QpOwotCQlwYXRoQnV0dG9uQ29tcC5zZXRGb250KGZvbnQpOwotCi0JCWFkZFdvcmtzcGFjZUJ1dHRvbiA9IGNyZWF0ZVB1c2hCdXR0b24ocGF0aEJ1dHRvbkNvbXAsIE1lc3NhZ2VzLlByb2Nlc3NvckxpYnJhcnlCbG9ja19BZGRXb3Jrc3BhY2VCdXR0b24pOwotCQlhZGRXb3Jrc3BhY2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7Ci0KLQkJYWRkQnV0dG9uID0gY3JlYXRlUHVzaEJ1dHRvbihwYXRoQnV0dG9uQ29tcCwgTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZEJ1dHRvbik7Ci0JCWFkZEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKLQotCQlyZW1vdmVCdXR0b24gPSBjcmVhdGVQdXNoQnV0dG9uKHBhdGhCdXR0b25Db21wLCBNZXNzYWdlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfUmVtb3ZlQnV0dG9uKTsKLQkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOwotCi0JCXJldHVybiBjb21wOwotCX0KLQotCXByb3RlY3RlZCBCdXR0b24gY3JlYXRlUHVzaEJ1dHRvbihDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwpCi0JewotCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5QVVNIKTsKLQkJYnV0dG9uLnNldEZvbnQocGFyZW50LmdldEZvbnQoKSk7Ci0JCWJ1dHRvbi5zZXRUZXh0KGxhYmVsKTsKLQkJYWRkRGlhbG9nLnNldEJ1dHRvbkxheW91dERhdGEoYnV0dG9uKTsKLQkJcmV0dXJuIGJ1dHRvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVWZXJ0aWNhbFNwYWNlcihDb21wb3NpdGUgY29tcCwgaW50IGNvbFNwYW4pCi0JewotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLCBTV1QuTk9ORSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7Ci0JCWdkLmhvcml6b250YWxTcGFuID0gY29sU3BhbjsKLQkJbGFiZWwuc2V0TGF5b3V0RGF0YShnZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSW5zdGFsbFN0YW5kaW4gc3RhbmRpbiwgSVByb2Nlc3NvclR5cGUgdHlwZSkKLQl7Ci0JCWluc3RhbGwgPSBzdGFuZGluOwotCQlpbnN0YWxsVHlwZSA9IHR5cGU7Ci0JCWlmIChpbnN0YWxsICE9IG51bGwpCi0JCQl0YWJsZVZpZXdlci5zZXRJbnB1dChpbnN0YWxsKTsKLQkJdXBkYXRlKCk7Ci0JfQotCi0JLyoqCi0JICogVXBkYXRlcyBidXR0b25zIGFuZCBzdGF0dXMgYmFzZWQgb24gY3VycmVudCBsaWJyYXJpZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB1cGRhdGUoKQotCXsKLQkJdXBkYXRlQnV0dG9ucygpOwotCQlJU3RhdHVzIHN0YXR1cyA9IFN0YXR1cy5PS19TVEFUVVM7Ci0JCWlmIChpbnN0YWxsICE9IG51bGwgJiYgaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkubGVuZ3RoID09IDApCi0JCXsKLQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBYU0xEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgMCwgTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrXzYsIG51bGwpOwotCQl9Ci0JCWFkZERpYWxvZy5zZXRTeXN0ZW1MaWJyYXJ5U3RhdHVzKHN0YXR1cyk7Ci0JCWFkZERpYWxvZy51cGRhdGVTdGF0dXNMaW5lKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KEluc3RhbGxTdGFuZGluIHN0YW5kaW4pCi0JewotCQlzdGFuZGluLnNldFByb2Nlc3NvckphcnMoaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkpOwotCX0KLQotCXByb3RlY3RlZCBJUHJvY2Vzc29ySW5zdGFsbCBnZXRWTUluc3RhbGwoKQotCXsKLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCi0JcHJvdGVjdGVkIElQcm9jZXNzb3JUeXBlIGdldFZNSW5zdGFsbFR5cGUoKQotCXsKLQkJcmV0dXJuIGluc3RhbGxUeXBlOwotCX0KLQotCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCQlPYmplY3Qgc291cmNlID0gZS5nZXRTb3VyY2UoKTsKLQkJaWYgKHNvdXJjZSA9PSByZW1vdmVCdXR0b24pCi0JCXsKLQkJCXJlbW92ZSgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJfQotCQllbHNlIGlmIChzb3VyY2UgPT0gYWRkQnV0dG9uKQotCQl7Ci0JCQlhZGRFeHRlcm5hbCgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHRhYmxlVmlld2VyLmdldFNlbGVjdGlvbigpKTsKLQkJfQotCQllbHNlIGlmIChzb3VyY2UgPT0gYWRkV29ya3NwYWNlQnV0dG9uKQotCQl7Ci0JCQlhZGRXb3Jrc3BhY2UoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKSk7Ci0JCX0KLQkJdXBkYXRlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JewotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRFeHRlcm5hbChJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlJRGlhbG9nU2V0dGluZ3MgZGlhbG9nU2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCQlTdHJpbmcgbGFzdFVzZWRQYXRoID0gZGlhbG9nU2V0dGluZ3MuZ2V0KExBU1RfUEFUSF9TRVRUSU5HKTsKLQkJaWYgKGxhc3RVc2VkUGF0aCA9PSBudWxsKQotCQl7Ci0JCQlsYXN0VXNlZFBhdGggPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2codGFibGVWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCksIFNXVC5NVUxUSSk7Ci0JCWRpYWxvZy5zZXRUZXh0KE1lc3NhZ2VzLlByb2Nlc3NvckxpYnJhcnlCbG9ja19GaWxlRGlhbG9nX1RpdGxlKTsKLQkJZGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMobmV3IFN0cmluZ1tdCi0JCXsgIiouamFyOyouemlwIiB9KTsgLy8kTk9OLU5MUy0xJAotCQlkaWFsb2cuc2V0RmlsdGVyUGF0aChsYXN0VXNlZFBhdGgpOwotCQlTdHJpbmcgcmVzID0gZGlhbG9nLm9wZW4oKTsKLQkJaWYgKHJlcyA9PSBudWxsKQotCQl7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJU3RyaW5nW10gZmlsZU5hbWVzID0gZGlhbG9nLmdldEZpbGVOYW1lcygpOwotCQlpbnQgbkNob3NlbiA9IGZpbGVOYW1lcy5sZW5ndGg7Ci0KLQkJSVBhdGggZmlsdGVyUGF0aCA9IG5ldyBQYXRoKGRpYWxvZy5nZXRGaWx0ZXJQYXRoKCkpOwotCQlJUHJvY2Vzc29ySmFyW10gbGlicyA9IG5ldyBJUHJvY2Vzc29ySmFyW25DaG9zZW5dOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5DaG9zZW47IGkrKykKLQkJewotCQkJbGlic1tpXSA9IEpBWFBSdW50aW1lLmNyZWF0ZVByb2Nlc3NvckphcihmaWx0ZXJQYXRoLmFwcGVuZChmaWxlTmFtZXNbaV0pLm1ha2VBYnNvbHV0ZSgpKTsKLQkJfQotCQlkaWFsb2dTZXR0aW5ncy5wdXQoTEFTVF9QQVRIX1NFVFRJTkcsIGZpbHRlclBhdGgudG9PU1N0cmluZygpKTsKLQotCQlJUHJvY2Vzc29ySmFyW10gY3VycmVudEphcnMgPSBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKTsKLQkJSVByb2Nlc3NvckphcltdIG5ld0phcnMgPSBuZXcgSVByb2Nlc3NvckphcltjdXJyZW50SmFycy5sZW5ndGggKyBsaWJzLmxlbmd0aF07Ci0JCVN5c3RlbS5hcnJheWNvcHkoY3VycmVudEphcnMsIDAsIG5ld0phcnMsIDAsIGN1cnJlbnRKYXJzLmxlbmd0aCk7Ci0JCVN5c3RlbS5hcnJheWNvcHkobGlicywgMCwgbmV3SmFycywgY3VycmVudEphcnMubGVuZ3RoLCBsaWJzLmxlbmd0aCk7Ci0JCWluc3RhbGwuc2V0UHJvY2Vzc29ySmFycyhuZXdKYXJzKTsKLQotCQl0YWJsZVZpZXdlci5hZGQobGlicyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZFdvcmtzcGFjZShJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pCi0JewotCQlJRGlhbG9nU2V0dGluZ3MgZGlhbG9nU2V0dGluZ3MgPSBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCQlTdHJpbmcgbGFzdFVzZWRQYXRoID0gZGlhbG9nU2V0dGluZ3MuZ2V0KExBU1RfV09SS1NQQUNFX1BBVEhfU0VUVElORyk7Ci0JCUlQYXRoIGxhc3RQYXRoID0gbnVsbDsKLQkJaWYgKGxhc3RVc2VkUGF0aCAhPSBudWxsKQotCQl7Ci0JCQlsYXN0UGF0aCA9IFBhdGguZnJvbVBvcnRhYmxlU3RyaW5nKGxhc3RVc2VkUGF0aCk7Ci0JCX0KLQotCQkvLyBJUmVzb3VyY2UgY3VycmVudFJlc291cmNlID0gZ2V0UmVzb3VyY2UoKTsKLQkJRWxlbWVudFRyZWVTZWxlY3Rpb25EaWFsb2cgZGlhbG9nID0gbmV3IEVsZW1lbnRUcmVlU2VsZWN0aW9uRGlhbG9nKHRhYmxlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpLCBuZXcgV29ya2JlbmNoTGFiZWxQcm92aWRlcigpLCBuZXcgV29ya2JlbmNoQ29udGVudFByb3ZpZGVyKCkpOwotCQlkaWFsb2cuc2V0VGl0bGUoTWVzc2FnZXMuUHJvY2Vzc29yTGlicmFyeUJsb2NrX1dvcmtzcGFjZUZpbGVEaWFsb2dfVGl0bGUpOwotCQlkaWFsb2cuc2V0TWVzc2FnZShNZXNzYWdlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19NZXNzYWdlKTsKLQkJZGlhbG9nLnNldFZhbGlkYXRvcih2YWxpZGF0b3IpOwotCQlkaWFsb2cuYWRkRmlsdGVyKG5ldyBWaWV3ZXJGaWx0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBib29sZWFuIHNlbGVjdChWaWV3ZXIgdmlld2VyLCBPYmplY3QgcGFyZW50RWxlbWVudCwgT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGUpCi0JCQkJewotCQkJCQlJRmlsZSBmaWxlID0gKElGaWxlKSBlbGVtZW50OwotCQkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCk7Ci0JCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCkKLQkJCQkJCXJldHVybiBmYWxzZTsKLQkJCQkJcmV0dXJuIGV4dGVuc2lvbi5lcXVhbHMoImphciIpOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfSk7Ci0JCWRpYWxvZy5zZXRJbnB1dChSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpKTsKLQkJaWYgKGxhc3RQYXRoICE9IG51bGwpCi0JCQlkaWFsb2cuc2V0SW5pdGlhbFNlbGVjdGlvbihsYXN0UGF0aCk7Ci0JCWRpYWxvZy5zZXRDb21wYXJhdG9yKG5ldyBSZXNvdXJjZUNvbXBhcmF0b3IoUmVzb3VyY2VDb21wYXJhdG9yLk5BTUUpKTsKLQkJZGlhbG9nLnNldEFsbG93TXVsdGlwbGUodHJ1ZSk7Ci0KLQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gV2luZG93Lk9LKQotCQl7Ci0JCQlPYmplY3RbXSBlbGVtZW50cyA9IGRpYWxvZy5nZXRSZXN1bHQoKTsKLQkJCWlmIChlbGVtZW50cy5sZW5ndGggPiAwKQotCQkJewotCQkJCUlQcm9jZXNzb3JKYXJbXSBsaWJzID0gbmV3IElQcm9jZXNzb3JKYXJbZWxlbWVudHMubGVuZ3RoXTsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKQotCQkJCXsKLQkJCQkJSUZpbGUgamFyID0gKElGaWxlKSBlbGVtZW50c1tpXTsKLQkJCQkJbGlic1tpXSA9IEpBWFBSdW50aW1lLmNyZWF0ZVByb2Nlc3NvckphcihqYXIuZ2V0RnVsbFBhdGgoKSk7Ci0JCQkJfQotCQkJCUlQcm9jZXNzb3JKYXJbXSBjdXJyZW50SmFycyA9IGluc3RhbGwuZ2V0UHJvY2Vzc29ySmFycygpOwotCQkJCUlQcm9jZXNzb3JKYXJbXSBuZXdKYXJzID0gbmV3IElQcm9jZXNzb3JKYXJbY3VycmVudEphcnMubGVuZ3RoICsgbGlicy5sZW5ndGhdOwotCQkJCVN5c3RlbS5hcnJheWNvcHkoY3VycmVudEphcnMsIDAsIG5ld0phcnMsIDAsIGN1cnJlbnRKYXJzLmxlbmd0aCk7Ci0JCQkJU3lzdGVtLmFycmF5Y29weShsaWJzLCAwLCBuZXdKYXJzLCBjdXJyZW50SmFycy5sZW5ndGgsIGxpYnMubGVuZ3RoKTsKLQkJCQlpbnN0YWxsLnNldFByb2Nlc3NvckphcnMobmV3SmFycyk7Ci0KLQkJCQl0YWJsZVZpZXdlci5hZGQobGlicyk7Ci0KLQkJCQlsYXN0UGF0aCA9IGxpYnNbMF0uZ2V0UGF0aCgpOwotCQkJCWxhc3RQYXRoID0gbGFzdFBhdGgudXB0b1NlZ21lbnQobGFzdFBhdGguc2VnbWVudENvdW50KCkpOwotCQkJCWRpYWxvZ1NldHRpbmdzLnB1dChMQVNUX1dPUktTUEFDRV9QQVRIX1NFVFRJTkcsIGxhc3RQYXRoLnRvUG9ydGFibGVTdHJpbmcoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVtb3ZlKElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikKLQl7Ci0JCUxpc3Q8SVByb2Nlc3Nvckphcj4gY3VycmVudEphcnMgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JKYXI+KEFycmF5cy5hc0xpc3QoaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkpKTsKLQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJY3VycmVudEphcnMucmVtb3ZlKGl0ZXIubmV4dCgpKTsKLQkJfQotCQlpbnN0YWxsLnNldFByb2Nlc3NvckphcnMoKElQcm9jZXNzb3JKYXJbXSkgY3VycmVudEphcnMudG9BcnJheShuZXcgSVByb2Nlc3NvckphclswXSkpOwotCQl0YWJsZVZpZXdlci5yZW1vdmUoc2VsZWN0aW9uLnRvQXJyYXkoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JewotCQl1cGRhdGVCdXR0b25zKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZUJ1dHRvbnMoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB0YWJsZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJcmVtb3ZlQnV0dG9uLnNldEVuYWJsZWQoIXNlbGVjdGlvbi5pc0VtcHR5KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL1Byb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2U0ZWVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvcHJlZmVyZW5jZXMvUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSBleHRlbmRzIFByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlCi17Ci0JcHJpdmF0ZSBJbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2sgcHJvY2Vzc29yc0Jsb2NrOwotCi0JcHVibGljIFByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZSgpCi0JewotCQlzdXBlcigpOwotCQkvLyBvbmx5IHVzZWQgd2hlbiBwYWdlIGlzIHNob3duIHByb2dyYW1hdGljYWxseQotCQlzZXRUaXRsZShNZXNzYWdlcy5Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMCk7Ci0JCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZV8xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoKQotCXsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgYW5jZXN0b3IpCi0JewotCQlpbml0aWFsaXplRGlhbG9nVW5pdHMoYW5jZXN0b3IpOwotCi0JCW5vRGVmYXVsdEFuZEFwcGx5QnV0dG9uKCk7Ci0KLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7Ci0JCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQlhbmNlc3Rvci5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQlwcm9jZXNzb3JzQmxvY2sgPSBuZXcgSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrKCk7Ci0JCXByb2Nlc3NvcnNCbG9jay5jcmVhdGVDb250cm9sKGFuY2VzdG9yKTsKLQkJQ29udHJvbCBjb250cm9sID0gcHJvY2Vzc29yc0Jsb2NrLmdldENvbnRyb2woKTsKLQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpOwotCQlkYXRhLmhvcml6b250YWxTcGFuID0gMTsKLQkJY29udHJvbC5zZXRMYXlvdXREYXRhKGRhdGEpOwotCi0JCS8vIFRPRE8gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscC4uLgotCi0JCWluaXREZWZhdWx0SW5zdGFsbCgpOwotCQlwcm9jZXNzb3JzQmxvY2suYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkKLQkJewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGdldEN1cnJlbnREZWZhdWx0UHJvY2Vzc29yKCk7Ci0JCQkJaWYgKGluc3RhbGwgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCXNldFZhbGlkKGZhbHNlKTsKLQkJCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZV8yKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJc2V0VmFsaWQodHJ1ZSk7Ci0JCQkJCXNldEVycm9yTWVzc2FnZShudWxsKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQlhcHBseURpYWxvZ0ZvbnQoYW5jZXN0b3IpOwotCQlyZXR1cm4gYW5jZXN0b3I7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gcGVyZm9ybU9rKCkKLQl7Ci0JCXByb2Nlc3NvcnNCbG9jay5zYXZlQ29sdW1uU2V0dGluZ3MoKTsKLQkJZmluYWwgYm9vbGVhbltdIG9rID0gbmV3IGJvb2xlYW5bMV07Ci0JCXRyeQotCQl7Ci0JCQlmaW5hbCBJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gcHJvY2Vzc29yc0Jsb2NrLmdldFByb2Nlc3NvcnMoKTsKLQkJCWZpbmFsIElQcm9jZXNzb3JJbnN0YWxsIGRlZmF1bHRQcm9jZXNzb3IgPSBnZXRDdXJyZW50RGVmYXVsdFByb2Nlc3NvcigpOwotCQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHJ1bm5hYmxlID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpCi0JCQl7Ci0JCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uCi0JCQkJewotCQkJCQl0cnkKLQkJCQkJewotCQkJCQkJSkFYUFJ1bnRpbWUuc2F2ZVByb2Nlc3NvclByZWZlcmVuY2VzKGluc3RhbGxzLGRlZmF1bHRQcm9jZXNzb3IsbW9uaXRvcik7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQkJewotCQkJCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCQkJCX0KLQkJCQkJb2tbMF0gPSAhbW9uaXRvci5pc0NhbmNlbGVkKCk7Ci0JCQkJfQotCQkJfTsKLQkJCVhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldFByb2dyZXNzU2VydmljZSgpLmJ1c3lDdXJzb3JXaGlsZShydW5uYWJsZSk7Ci0JCX0KLQkJY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCXJldHVybiBva1swXTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdERlZmF1bHRJbnN0YWxsKCkKLQl7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIHJlYWxEZWZhdWx0ID0gSkFYUFJ1bnRpbWUuZ2V0RGVmYXVsdFByb2Nlc3NvcigpOwotCQlpZiAocmVhbERlZmF1bHQgIT0gbnVsbCkKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxscyA9IHByb2Nlc3NvcnNCbG9jay5nZXRQcm9jZXNzb3JzKCk7Ci0JCQlmb3IgKElQcm9jZXNzb3JJbnN0YWxsIGZha2VJbnN0YWxsIDogaW5zdGFsbHMpCi0JCQl7Ci0JCQkJaWYgKGZha2VJbnN0YWxsLmdldElkKCkuZXF1YWxzKHJlYWxEZWZhdWx0LmdldElkKCkpKQotCQkJCXsKLQkJCQkJdmVyaWZ5RGVmYXVsdFZNKGZha2VJbnN0YWxsKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeURlZmF1bHRWTShJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJaWYgKGluc3RhbGwgIT0gbnVsbCkKLQkJewotCQkJcHJvY2Vzc29yc0Jsb2NrLnNldENoZWNrZWRJbnN0YWxsKGluc3RhbGwpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJvY2Vzc29yc0Jsb2NrLnNldENoZWNrZWRJbnN0YWxsKG51bGwpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBnZXRDdXJyZW50RGVmYXVsdFByb2Nlc3NvcigpCi0JewotCQlyZXR1cm4gcHJvY2Vzc29yc0Jsb2NrLmdldENoZWNrZWRJbnN0YWxsKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDRlN2YuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotQWRkUHJvY2Vzc29yRGlhbG9nXzE9U3VwcG9ydGVkIHZlcnNpb25zOgotQWRkUHJvY2Vzc29yRGlhbG9nXzc9UHJvY2Vzc29yIG11c3Qgc3VwcG9ydCBhdCBsZWFzdCBvbmUgWFNMVCB2ZXJzaW9uCi1BZGRQcm9jZXNzb3JEaWFsb2dfRWRpdF9UaXRsZT1FZGl0IFByb2Nlc3NvcgotQWRkUHJvY2Vzc29yRGlhbG9nX0FkZF9UaXRsZT1BZGQgUHJvY2Vzc29yCi1BZGRQcm9jZXNzb3JEaWFsb2dfcHJvY2Vzc29yTmFtZT1Qcm9jZXNzb3IgTmFtZToKLUFkZFByb2Nlc3NvckRpYWxvZ19wcm9jZXNzb3JUeXBlPVByb2Nlc3NvciBUeXBlOgotQWRkUHJvY2Vzc29yRGlhbG9nX2phcnM9TGlicmFyaWVzOgotQWRkUHJvY2Vzc29yRGlhbG9nX2F0dHJpYnV0ZXM9QXR0cmlidXRlczoKLUFkZFByb2Nlc3NvckRpYWxvZ19lbnRlck5hbWU9QSBuYW1lIG11c3QgYmUgZW50ZXJlZCBmb3IgdGhpcyBwcm9jZXNzb3IKLUFkZFByb2Nlc3NvckRpYWxvZ19kdXBsaWNhdGVOYW1lPVRoZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gdXNlZAotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzA9SW5zdGFsbGVkIEphdmEgWFNMVCBQcm9jZXNzb3JzOgotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzE9TmFtZQotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzI9VHlwZQotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzM9WFNMVCBWZXJzaW9ucwotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzQ9RGVidWdnZXIKLUluc3RhbGxlZFByb2Nlc3NvcnNCbG9ja181PUFkZAotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzY9RWRpdAotSW5zdGFsbGVkUHJvY2Vzc29yc0Jsb2NrXzc9UmVtb3ZlCi1JbnN0YWxsZWRQcm9jZXNzb3JzQmxvY2tfOD1Ob25lCi0KLVByb2Nlc3NvckxpYnJhcnlCbG9ja182PU9uZSBvciBtb3JlIGphciBmaWxlcyBtdXN0IGJlIHNwZWNpZmllZAotUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZEJ1dHRvbj1BZGQgRXh0ZXJuYWwgSkFScwotUHJvY2Vzc29yTGlicmFyeUJsb2NrX0FkZFdvcmtzcGFjZUJ1dHRvbj1BZGQgV29ya3NwYWNlIEpBUnMKLVByb2Nlc3NvckxpYnJhcnlCbG9ja19SZW1vdmVCdXR0b249UmVtb3ZlCi1Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfRmlsZURpYWxvZ19UaXRsZT1FeHRlcm5hbCBKQVJzCi1Qcm9jZXNzb3JMaWJyYXJ5QmxvY2tfV29ya3NwYWNlRmlsZURpYWxvZ19UaXRsZT1Xb3Jrc3BhY2UgSkFScwotUHJvY2Vzc29yTGlicmFyeUJsb2NrX1dvcmtzcGFjZUZpbGVEaWFsb2dfTWVzc2FnZT1TZWxlY3QgdGhlIEpBUnMgdGhhdCBtYWtlIHVwIHRoZSBYU0xUIHByb2Nlc3NvcgotCi1Qcm9jZXNzb3JzUHJlZmVyZW5jZVBhZ2VfMD1KYXZhIFhTTFQgUHJvY2Vzc29ycwotUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzE9QWRkLCByZW1vdmUgb3IgZWRpdCBYU0xUIHByb2Nlc3NvciBkZWZpbml0aW9ucy5cbkJ5IGRlZmF1bHQsIHRoZSBjaGVja2VkIFByb2Nlc3NvciBpcyB1c2VkIGZvciBhbGwgdHJhbnNmb3JtYXRpb25zLgotUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlXzI9U2VsZWN0IGEgZGVmYXVsdCBYU0xUIFByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvQXR0cmlidXRlRGlhbG9nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NWVjNTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlN0YXR1c0RpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlclNvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkxhdW5jaEF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLQotcHVibGljIGNsYXNzIEF0dHJpYnV0ZURpYWxvZyBleHRlbmRzIFN0YXR1c0RpYWxvZwotewotCXByaXZhdGUgVGFibGUgdGFibGU7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciB0Vmlld2VyOwotCXByaXZhdGUgVGV4dCB0ZXh0OwotCXByaXZhdGUgTGlzdDxJQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gbmV3IEFycmF5TGlzdDxJQXR0cmlidXRlPigpOwotCXByaXZhdGUgTGlzdDxJQXR0cmlidXRlPiBzZWxlY3RlZEF0dHJpYnV0ZXMgPSBuZXcgQXJyYXlMaXN0PElBdHRyaWJ1dGU+KCk7Ci0KLQlwdWJsaWMgQXR0cmlidXRlRGlhbG9nKFNoZWxsIHBhcmVudCwgTGF1bmNoQXR0cmlidXRlcyBsYXVuY2hBdHRyaWJ1dGVzKQotCXsKLQkJc3VwZXIocGFyZW50KTsKLQkJc2V0VGl0bGUoIlNlbGVjdCBQcm9jZXNzb3IgQXR0cmlidXRlcyIpOwotCQkKLQkJU2V0PFN0cmluZz4gYXR0cmlidXRlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCQlmb3IgKExhdW5jaEF0dHJpYnV0ZSBhdHQgOiBsYXVuY2hBdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZXMoKSkKLQkJewotCQkJYXR0cmlidXRlU2V0LmFkZChhdHQudXJpKTsKLQkJfQotCQlmb3IgKElQcm9jZXNzb3JUeXBlIHR5cGUgOiBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JUeXBlcygpKQotCQl7Ci0JCQlmb3IgKElBdHRyaWJ1dGUgYXR0cmlidXRlIDogdHlwZS5nZXRBdHRyaWJ1dGVzKCkpCi0JCQl7Ci0JCQkJaWYgKCFhdHRyaWJ1dGVTZXQuY29udGFpbnMoYXR0cmlidXRlLmdldFVSSSgpKSkKLQkJCQl7Ci0JCQkJCWF0dHJpYnV0ZVNldC5hZGQoYXR0cmlidXRlLmdldFVSSSgpKTsKLQkJCQkJYXR0cmlidXRlcy5hZGQoYXR0cmlidXRlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSk7Ci0JCWdkLndpZHRoSGludCA9IDQwMDsKLQkJY29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJY29tcC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dCgiU2VsZWN0IG9uZSBvciBtb3JlIGF0dHJpYnV0ZXMgdG8gc2V0IG9uIHRoZSBYU0xUIHByb2Nlc3Nvci4iKTsKLQkJCi0JCQotCQl0YWJsZSA9IG5ldyBUYWJsZShjb21wLFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwgfCBTV1QuTVVMVEkpOwotCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKGZhbHNlKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKTsKLQkJZ2QudmVydGljYWxJbmRlbnQgPSAxMDsKLQkJZ2QuaGVpZ2h0SGludCA9IDIwMDsKLQkJdGFibGUuc2V0TGF5b3V0RGF0YShnZCk7Ci0JCQotCQl0Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyKCkKLQkJewotCQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIGF0dHJpYnV0ZXMudG9BcnJheShuZXcgSUF0dHJpYnV0ZVswXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCUlBdHRyaWJ1dGUgYXR0cmlidXRlID0gKElBdHRyaWJ1dGUpZWxlbWVudDsKLQkJCQlyZXR1cm4gYXR0cmlidXRlLmdldFVSSSgpOwotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpCi0JCXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBjb21wYXJlKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBlMSwgT2JqZWN0IGUyKQotCQkJewotCQkJCUlBdHRyaWJ1dGUgYTEgPSAoSUF0dHJpYnV0ZSkgZTE7Ci0JCQkJSUF0dHJpYnV0ZSBhMiA9IChJQXR0cmlidXRlKSBlMjsKLQkJCQlyZXR1cm4gYTEuZ2V0VVJJKCkuY29tcGFyZVRvKGEyLmdldFVSSSgpKTsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkKLQkJCXsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWwgPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJc2VsZWN0ZWRBdHRyaWJ1dGVzID0gc2VsLnRvTGlzdCgpOwotCQkJCWlmIChzZWwuaXNFbXB0eSgpKQotCQkJCQl0ZXh0LnNldFRleHQoIiIpOwotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCUlBdHRyaWJ1dGUgYXR0cmlidXRlID0gKElBdHRyaWJ1dGUpc2VsLmdldEZpcnN0RWxlbWVudCgpOyAKLQkJCQkJdGV4dC5zZXRUZXh0KGF0dHJpYnV0ZS5nZXREZXNjcmlwdGlvbigpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhEb3VibGVDbGlja0V2ZW50IGV2ZW50KQotCQkJewotCQkJCWJ1dHRvblByZXNzZWQoSURpYWxvZ0NvbnN0YW50cy5PS19JRCk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldElucHV0KGF0dHJpYnV0ZXMpOwotCQkKLQkJdGV4dCA9IG5ldyBUZXh0KGNvbXAsU1dULkJPUkRFUiB8IFNXVC5XUkFQIHwgU1dULlJFQURfT05MWSB8IFNXVC5WX1NDUk9MTCk7Ci0JCXRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuRklMTCx0cnVlLGZhbHNlKTsKLQkJZ2QuaGVpZ2h0SGludCA9IDgwOwotCQl0ZXh0LnNldExheW91dERhdGEoZ2QpOwotCQkKLQkJaWYgKGF0dHJpYnV0ZXMuc2l6ZSgpID4gMCkKLQkJewotCQkJdFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odFZpZXdlci5nZXRFbGVtZW50QXQoMCkpLCB0cnVlKTsKLQkJfQotCQkKLQkJcmV0dXJuIGNvbXA7Ci0JfQotCQotCXB1YmxpYyBMaXN0PElBdHRyaWJ1dGU+IGdldEF0dHJpYnV0ZXMoKQotCXsKLQkJcmV0dXJuIHNlbGVjdGVkQXR0cmlidXRlczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0F0dHJpYnV0ZXNCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9BdHRyaWJ1dGVzQmxvY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3ZjExYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0F0dHJpYnV0ZXNCbG9jay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRWRpdGluZ1N1cHBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGV4dENlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJDZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyU29ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5BYnN0cmFjdFRhYmxlQmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC5KQVhQRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5MYXVuY2hBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVzQmxvY2sgZXh0ZW5kcyBBYnN0cmFjdFRhYmxlQmxvY2sKLXsKLQlwcml2YXRlIFRhYmxlIHRhYmxlOwotCXByaXZhdGUgVGFibGVWaWV3ZXIgdFZpZXdlcjsKLQlwcml2YXRlIExhdW5jaEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKLQlwcml2YXRlIEJ1dHRvbiByZW1vdmVCdXR0b247Ci0JcHJpdmF0ZSBNYXA8U3RyaW5nLElBdHRyaWJ1dGU+IGF0dHJpYnV0ZVVyaXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsSUF0dHJpYnV0ZT4oKTsKLQkKLQlwdWJsaWMgQXR0cmlidXRlc0Jsb2NrKCkKLQl7Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IEpBWFBSdW50aW1lLmdldFByb2Nlc3NvclR5cGVzKCkpCi0JCXsKLQkJCWZvciAoSUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiB0eXBlLmdldEF0dHJpYnV0ZXMoKSkKLQkJCXsKLQkJCQlhdHRyaWJ1dGVVcmlzLnB1dChhdHRyaWJ1dGUuZ2V0VVJJKCksIGF0dHJpYnV0ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkKLQl7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UXVhbGlmaWVyKCkKLQl7Ci0JCXJldHVybiBKQVhQRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQrIi4iK2dldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUYWJsZSBnZXRUYWJsZSgpCi0JewotCQlyZXR1cm4gdGFibGU7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJVGFiSXRlbSBpdGVtID0gbmV3IFRhYkl0ZW0oKFRhYkZvbGRlcilwYXJlbnQsU1dULk5PTkUpOwotCQlpdGVtLnNldFRleHQoIkF0dHJpYnV0ZXMiKTsKLQkJCi0JCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoMixmYWxzZSk7Ci0JCWxheW91dC5tYXJnaW5Cb3R0b20gPSAwOwotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOwotCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWl0ZW0uc2V0Q29udHJvbChjb21wb3NpdGUpOwotCQkKLQkJdGFibGUgPSBuZXcgVGFibGUoY29tcG9zaXRlLFNXVC5CT1JERVIgfCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuVl9TQ1JPTEwgfCBTV1QuTVVMVEkpOwotCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotCQl0YWJsZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuRklMTCx0cnVlLHRydWUpKTsKLQkJdGFibGUuYWRkS2V5TGlzdGVuZXIobmV3IEtleUFkYXB0ZXIoKSB7Ci0JCQlwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGV2ZW50KSB7Ci0JCQkJaWYgKGV2ZW50LmNoYXJhY3RlciA9PSBTV1QuREVMICYmIGV2ZW50LnN0YXRlTWFzayA9PSAwKSB7Ci0JCQkJCXBlcmZvcm1SZW1vdmUoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQkKLQkJVGFibGVDb2x1bW4gdGMxID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLFNXVC5OT05FKTsKLQkJdGMxLnNldFRleHQoIk5hbWUiKTsKLQkJdGMxLnNldFdpZHRoKDM1MCk7Ci0JCXRjMS5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCQotCQlUYWJsZUNvbHVtbiB0YzIgPSBuZXcgVGFibGVDb2x1bW4odGFibGUsU1dULk5PTkUpOwotCQl0YzIuc2V0VGV4dCgiVmFsdWUiKTsKLQkJdGMyLnNldFdpZHRoKDUwKTsKLQkJdGMyLnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJCi0JCUNvbXBvc2l0ZSBidXR0b25Db21wID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsU1dULkZJTEwpOwotCQlidXR0b25Db21wLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdsLm1hcmdpbldpZHRoID0gMDsKLQkJYnV0dG9uQ29tcC5zZXRMYXlvdXQoZ2wpOwotCQkKLQkJQnV0dG9uIGFkZEJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcCxTV1QuUFVTSCk7Ci0JCWFkZEJ1dHRvbi5zZXRUZXh0KCJBZGQiKTsKLQkJYWRkQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJYWRkQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCUF0dHJpYnV0ZURpYWxvZyBkaWFsb2cgPSBuZXcgQXR0cmlidXRlRGlhbG9nKGdldFNoZWxsKCksYXR0cmlidXRlcyk7Ci0JCQkJaWYgKGRpYWxvZy5vcGVuKCkgPT0gQXR0cmlidXRlRGlhbG9nLk9LKQotCQkJCXsKLQkJCQkJTGlzdDxJQXR0cmlidXRlPiBuZXdBdHRyaWJ1dGVzID0gZGlhbG9nLmdldEF0dHJpYnV0ZXMoKTsKLQkJCQkJTGF1bmNoQXR0cmlidXRlIGZpcnN0ID0gbnVsbDsKLQkJCQkJZm9yIChJQXR0cmlidXRlIGF0dHJpYnV0ZSA6IG5ld0F0dHJpYnV0ZXMpCi0JCQkJCXsKLQkJCQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHQgPSBuZXcgTGF1bmNoQXR0cmlidXRlKGF0dHJpYnV0ZS5nZXRVUkkoKSwic3RyaW5nIixudWxsKTsKLQkJCQkJCWlmIChmaXJzdCA9PSBudWxsKQotCQkJCQkJCWZpcnN0ID0gYXR0OwotCQkJCQkJYXR0cmlidXRlcy5hZGRBdHRyaWJ1dGUoYXR0KTsKLQkJCQkJfQotCQkJCQlpZiAobmV3QXR0cmlidXRlcy5zaXplKCkgPiAwKQotCQkJCQl7Ci0JCQkJCQl0Vmlld2VyLnJlZnJlc2goKTsKLQkJCQkJCXRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGZpcnN0KSwgdHJ1ZSk7Ci0JCQkJCQl0Vmlld2VyLmVkaXRFbGVtZW50KGZpcnN0LCAxKTsKLQkJCQkJCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCQotCQlyZW1vdmVCdXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXAsU1dULlBVU0gpOwotCQlyZW1vdmVCdXR0b24uc2V0VGV4dCgiUmVtb3ZlIik7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuVE9QLGZhbHNlLGZhbHNlKSk7Ci0JCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJfQotCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCQlwZXJmb3JtUmVtb3ZlKCk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJc2V0Q29udHJvbCh0YWJsZSk7Ci0JCQotCQl0Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHRhYmxlKTsKLQkJdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyKCkKLQkJewotCQkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JCQl7Ci0JCQkJcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlcygpLnRvQXJyYXkobmV3IExhdW5jaEF0dHJpYnV0ZVswXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQkJYXR0cmlidXRlcyA9IChMYXVuY2hBdHRyaWJ1dGVzKSBuZXdJbnB1dDsKLQkJCX0KLQkJfSk7Ci0JCXRWaWV3ZXIuc2V0U29ydGVyKG5ldyBWaWV3ZXJTb3J0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBpbnQgY29tcGFyZShWaWV3ZXIgdmlld2VyLCBPYmplY3QgZTEsIE9iamVjdCBlMikKLQkJCXsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgYTEgPSAoTGF1bmNoQXR0cmlidXRlKSBlMTsKLQkJCQlMYXVuY2hBdHRyaWJ1dGUgYTIgPSAoTGF1bmNoQXR0cmlidXRlKSBlMjsKLQkJCQlyZXR1cm4gYTEudXJpLmNvbXBhcmVUbyhhMi51cmkpOwotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCXVwZGF0ZVJlbW92ZUJ1dHRvbigpOwotCQkJfQotCQl9KTsKLQkJCi0JCVRhYmxlVmlld2VyQ29sdW1uIHR2YzEgPSBuZXcgVGFibGVWaWV3ZXJDb2x1bW4odFZpZXdlcix0YzEpOwotCQl0dmMxLnNldExhYmVsUHJvdmlkZXIobmV3IENlbGxMYWJlbFByb3ZpZGVyKCl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHVwZGF0ZShWaWV3ZXJDZWxsIGNlbGwpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSkgY2VsbC5nZXRFbGVtZW50KCk7Ci0JCQkJY2VsbC5zZXRUZXh0KHR2LnVyaSk7Ci0JCQl9Ci0JCQkKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIGludCBnZXRUb29sVGlwVGltZURpc3BsYXllZChPYmplY3Qgb2JqZWN0KQotCQkJewotCQkJCXJldHVybiA1MDAwOwotCQkJfQotCQkJCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSkgZWxlbWVudDsKLQkJCQlyZXR1cm4gYXR0cmlidXRlVXJpcy5nZXQodHYudXJpKS5nZXREZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCX0pOwotCQkKLS8vCQlDb2x1bW5WaWV3ZXJUb29sVGlwU3VwcG9ydC5lbmFibGVGb3IodFZpZXdlcik7Ci0JCQotCQlUYWJsZVZpZXdlckNvbHVtbiB0dmMyID0gbmV3IFRhYmxlVmlld2VyQ29sdW1uKHRWaWV3ZXIsdGMyKTsKLQkJdHZjMi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBDZWxsTGFiZWxQcm92aWRlcigpewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB1cGRhdGUoVmlld2VyQ2VsbCBjZWxsKQotCQkJewotCQkJCUxhdW5jaEF0dHJpYnV0ZSB0diA9IChMYXVuY2hBdHRyaWJ1dGUpIGNlbGwuZ2V0RWxlbWVudCgpOwotCQkJCWNlbGwuc2V0VGV4dCh0di52YWx1ZSk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJdHZjMi5zZXRFZGl0aW5nU3VwcG9ydChuZXcgRWRpdGluZ1N1cHBvcnQodFZpZXdlcil7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGJvb2xlYW4gY2FuRWRpdChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgQ2VsbEVkaXRvciBnZXRDZWxsRWRpdG9yKE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCXJldHVybiBuZXcgVGV4dENlbGxFZGl0b3IodGFibGUpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBPYmplY3QgZ2V0VmFsdWUoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIHR2ID0gKExhdW5jaEF0dHJpYnV0ZSllbGVtZW50OwotCQkJCXJldHVybiB0di52YWx1ZSA9PSBudWxsID8gIiIgOiB0di52YWx1ZTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBzZXRWYWx1ZShPYmplY3QgZWxlbWVudCwgT2JqZWN0IHZhbHVlKQotCQkJewotCQkJCUxhdW5jaEF0dHJpYnV0ZSB0diA9IChMYXVuY2hBdHRyaWJ1dGUpZWxlbWVudDsKLQkJCQl0di5zZXRWYWx1ZSgoU3RyaW5nKXZhbHVlKTsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJdFZpZXdlci51cGRhdGUodHYsIG51bGwpOwotCQkJfQotCQkJCi0JCX0pOwotCQkKLQkJcmVzdG9yZUNvbHVtblNldHRpbmdzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlUmVtb3ZlQnV0dG9uKCkKLQl7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKCF0Vmlld2VyLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZXNCbG9jay4xNiIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZUF0dHJpYnV0ZXNGcm9tU3RvcmFnZShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0FUVFJJQlVURVMsIChTdHJpbmcpIG51bGwpOwotCQlpZiAocyAhPSBudWxsICYmIHMubGVuZ3RoKCkgPiAwKQotCQl7Ci0JCQlhdHRyaWJ1dGVzID0gTGF1bmNoQXR0cmlidXRlcy5mcm9tWE1MKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShzLmdldEJ5dGVzKCkpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWF0dHJpYnV0ZXMgPSBuZXcgTGF1bmNoQXR0cmlidXRlcygpOwotCQl9Ci0JCXRWaWV3ZXIuc2V0SW5wdXQoYXR0cmlidXRlcyk7Ci0JCXVwZGF0ZVJlbW92ZUJ1dHRvbigpOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVGcm9tKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JewotCQl0cnkKLQkJewotCQkJaW5pdGlhbGl6ZUF0dHJpYnV0ZXNGcm9tU3RvcmFnZShjb25maWd1cmF0aW9uKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCQl0cnkKLQkJewotCQkJU3RyaW5nIHhtbCA9IGF0dHJpYnV0ZXMudG9YTUwoKTsKLQkJCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfQVRUUklCVVRFUywgeG1sKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBlcmZvcm1SZW1vdmUoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzZWwuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLQkJewotCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWF0dHJpYnV0ZXMucmVtb3ZlQXRyaWJ1dGUoYXR0LnVyaSk7Ci0JCX0KLQkJdFZpZXdlci5yZWZyZXNoKCk7Ci0JCXVwZGF0ZUxhdW5jaENvbmZpZ3VyYXRpb25EaWFsb2coKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0luc3RhbGxTdGFuZGluLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL0luc3RhbGxTdGFuZGluLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1YjM5MjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9JbnN0YWxsU3RhbmRpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5Qcm9jZXNzb3JJbnN0YWxsOwotCi1wdWJsaWMgY2xhc3MgSW5zdGFsbFN0YW5kaW4gZXh0ZW5kcyBQcm9jZXNzb3JJbnN0YWxsCi17Ci0JcHVibGljIEluc3RhbGxTdGFuZGluKElQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwpCi0JewotCQlzdXBlcihpbnN0YWxsLmdldElkKCksIGluc3RhbGwuZ2V0TmFtZSgpLCBpbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKS5nZXRJZCgpLCBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKSwgaW5zdGFsbC5nZXREZWJ1Z2dlcigpICE9IG51bGwgPyBpbnN0YWxsLmdldERlYnVnZ2VyKCkuZ2V0SWQoKSA6IG51bGwsIGluc3RhbGwKLQkJCQkuZ2V0U3VwcG9ydHMoKSwgaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpOwotCX0KLQotCXB1YmxpYyBJbnN0YWxsU3RhbmRpbihTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZUlkLCBTdHJpbmcgZGVidWdnZXJJZCwgSVByb2Nlc3NvckphcltdIGphcnMpCi0JewotCQlzdXBlcihpZCwgbmFtZSwgdHlwZUlkLCBqYXJzLCBkZWJ1Z2dlcklkLCAiIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJDb250ZW50UHJvdmlkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyQ29udGVudFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzN2EwZGUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJDb250ZW50UHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLQotcHVibGljIGNsYXNzIEphckNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyCi17Ci0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsOwotCi0JcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpCi0JewotCQlyZXR1cm4gaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQl7Ci0JCWluc3RhbGwgPSAoSVByb2Nlc3Nvckluc3RhbGwpIG5ld0lucHV0OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvSmFyTGFiZWxQcm92aWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJMYWJlbFByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZWQzMTMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9KYXJMYWJlbFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLQotcHVibGljIGNsYXNzIEphckxhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi17Ci0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCXsKLQkJSVByb2Nlc3NvckphciBqYXIgPSAoSVByb2Nlc3NvckphcikgZWxlbWVudDsKLQkJSVBhdGggcGF0aCA9IGphci5nZXRQYXRoKCk7Ci0JCXJldHVybiBwYXRoLmxhc3RTZWdtZW50KCkgKyAiIC0gIiArIHBhdGgucmVtb3ZlTGFzdFNlZ21lbnRzKDEpLnRvT1NTdHJpbmcoKSArICIiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTZjZTYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQotCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuICchJyArIGtleSArICchJzsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvT3V0cHV0UHJvcGVydGllc0Jsb2NrLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL091dHB1dFByb3BlcnRpZXNCbG9jay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDk4OWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvT3V0cHV0UHJvcGVydGllc0Jsb2NrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnRhYnMucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DZWxsRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbExhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5FZGl0aW5nU3VwcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXJDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UZXh0Q2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckNlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJTb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLkFic3RyYWN0VGFibGVCbG9jazsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLkpBWFBEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSU91dHB1dFByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuTGF1bmNoUHJvcGVydGllczsKLQotcHVibGljIGNsYXNzIE91dHB1dFByb3BlcnRpZXNCbG9jayBleHRlbmRzIEFic3RyYWN0VGFibGVCbG9jawotewotCXByaXZhdGUgVGFibGUgdGFibGU7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciB0Vmlld2VyOwotCXByaXZhdGUgTGF1bmNoUHJvcGVydGllcyBwcm9wZXJ0aWVzOwotCXByaXZhdGUgQnV0dG9uIHJlbW92ZUJ1dHRvbjsKLQlwcml2YXRlIE1hcDxTdHJpbmcsSU91dHB1dFByb3BlcnR5PiBwcm9wZXJ0eVVyaXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsSU91dHB1dFByb3BlcnR5PigpOwotCQotCXB1YmxpYyBPdXRwdXRQcm9wZXJ0aWVzQmxvY2soKQotCXsKLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZXMoKSkKLQkJewotCQkJZm9yIChJT3V0cHV0UHJvcGVydHkgcHJvcGVydHkgOiB0eXBlLmdldE91dHB1dFByb3BlcnRpZXMoKSkKLQkJCXsKLQkJCQlwcm9wZXJ0eVVyaXMucHV0KHByb3BlcnR5LmdldFVSSSgpLCBwcm9wZXJ0eSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ1NldHRpbmdzKCkKLQl7Ci0JCXJldHVybiBYU0xEZWJ1Z1VJUGx1Z2luLmdldERlZmF1bHQoKS5nZXREaWFsb2dTZXR0aW5ncygpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0UXVhbGlmaWVyKCkKLQl7Ci0JCXJldHVybiBKQVhQRGVidWdVSVBsdWdpbi5QTFVHSU5fSUQrIi4iK2dldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBUYWJsZSBnZXRUYWJsZSgpCi0JewotCQlyZXR1cm4gdGFibGU7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJVGFiSXRlbSBpdGVtID0gbmV3IFRhYkl0ZW0oKFRhYkZvbGRlcilwYXJlbnQsU1dULk5PTkUpOwotCQlpdGVtLnNldFRleHQoIk91dHB1dCBQcm9wZXJ0aWVzIik7Ci0JCQotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KDIsZmFsc2UpOwotCQlsYXlvdXQubWFyZ2luQm90dG9tID0gMDsKLQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKLQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOwotCQlpdGVtLnNldENvbnRyb2woY29tcG9zaXRlKTsKLQkJCi0JCXRhYmxlID0gbmV3IFRhYmxlKGNvbXBvc2l0ZSxTV1QuQk9SREVSIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULlZfU0NST0xMIHwgU1dULk1VTFRJKTsKLQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJdGFibGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULkZJTEwsdHJ1ZSx0cnVlKSk7Ci0JCXRhYmxlLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlBZGFwdGVyKCkgewotCQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBldmVudCkgewotCQkJCWlmIChldmVudC5jaGFyYWN0ZXIgPT0gU1dULkRFTCAmJiBldmVudC5zdGF0ZU1hc2sgPT0gMCkgewotCQkJCQlwZXJmb3JtUmVtb3ZlKCk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQotCQkKLQkJVGFibGVDb2x1bW4gdGMxID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLFNXVC5OT05FKTsKLQkJdGMxLnNldFRleHQoIk5hbWUiKTsKLQkJdGMxLnNldFdpZHRoKDM1MCk7Ci0JCXRjMS5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCQotCQlUYWJsZUNvbHVtbiB0YzIgPSBuZXcgVGFibGVDb2x1bW4odGFibGUsU1dULk5PTkUpOwotCQl0YzIuc2V0VGV4dCgiVmFsdWUiKTsKLQkJdGMyLnNldFdpZHRoKDUwKTsKLQkJdGMyLnNldFJlc2l6YWJsZSh0cnVlKTsKLQkJCi0JCUNvbXBvc2l0ZSBidXR0b25Db21wID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsU1dULkZJTEwpOwotCQlidXR0b25Db21wLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWdsLm1hcmdpbldpZHRoID0gMDsKLQkJYnV0dG9uQ29tcC5zZXRMYXlvdXQoZ2wpOwotCQkKLQkJQnV0dG9uIGFkZEJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9uQ29tcCxTV1QuUFVTSCk7Ci0JCWFkZEJ1dHRvbi5zZXRUZXh0KCJBZGQiKTsKLQkJYWRkQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5UT1AsZmFsc2UsZmFsc2UpKTsKLQkJYWRkQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQl9Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCU91dHB1dFByb3BlcnR5RGlhbG9nIGRpYWxvZyA9IG5ldyBPdXRwdXRQcm9wZXJ0eURpYWxvZyhnZXRTaGVsbCgpLHByb3BlcnRpZXMpOwotCQkJCWlmIChkaWFsb2cub3BlbigpID09IEF0dHJpYnV0ZURpYWxvZy5PSykKLQkJCQl7Ci0JCQkJCUxpc3Q8SU91dHB1dFByb3BlcnR5PiBuZXdQcm9wZXJ0aWVzID0gZGlhbG9nLmdldE91dHB1UHJvcGVydGllcygpOwotCQkJCQlTdHJpbmcgZmlyc3QgPSBudWxsOwotCQkJCQlmb3IgKElPdXRwdXRQcm9wZXJ0eSBwcm9wZXJ0eSA6IG5ld1Byb3BlcnRpZXMpCi0JCQkJCXsKLQkJCQkJCVN0cmluZyBhdHQgPSBwcm9wZXJ0eS5nZXRVUkkoKTsKLQkJCQkJCWlmIChmaXJzdCA9PSBudWxsKQotCQkJCQkJCWZpcnN0ID0gYXR0OwotCQkJCQkJcHJvcGVydGllcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eS5nZXRVUkkoKSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJaWYgKG5ld1Byb3BlcnRpZXMuc2l6ZSgpID4gMCkKLQkJCQkJewotCQkJCQkJdFZpZXdlci5yZWZyZXNoKCk7Ci0JCQkJCQl0Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihmaXJzdCksIHRydWUpOwotCQkJCQkJdFZpZXdlci5lZGl0RWxlbWVudChmaXJzdCwgMSk7Ci0JCQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQkKLQkJcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25Db21wLFNXVC5QVVNIKTsKLQkJcmVtb3ZlQnV0dG9uLnNldFRleHQoIlJlbW92ZSIpOwotCQlyZW1vdmVCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsU1dULlRPUCxmYWxzZSxmYWxzZSkpOwotCQlyZW1vdmVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLQkJCXsKLQkJCX0KLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJcGVyZm9ybVJlbW92ZSgpOwotCQkJfQotCQl9KTsKLQkJCi0JCXNldENvbnRyb2wodGFibGUpOwotCQkKLQkJdFZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZSk7Ci0JCXRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcigpCi0JCXsKLQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCQkJewotCQkJCXJldHVybiBwcm9wZXJ0aWVzLmdldFByb3BlcnRpZXMoKS5rZXlTZXQoKS50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJCXsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQkJewotCQkJfQotCQl9KTsKLQkJdFZpZXdlci5zZXRTb3J0ZXIobmV3IFZpZXdlclNvcnRlcigpKTsKLQkJdFZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKXsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCXVwZGF0ZVJlbW92ZUJ1dHRvbigpOwotCQkJfQotCQl9KTsKLQkJCi0JCVRhYmxlVmlld2VyQ29sdW1uIHR2YzEgPSBuZXcgVGFibGVWaWV3ZXJDb2x1bW4odFZpZXdlcix0YzEpOwotCQl0dmMxLnNldExhYmVsUHJvdmlkZXIobmV3IENlbGxMYWJlbFByb3ZpZGVyKCl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHVwZGF0ZShWaWV3ZXJDZWxsIGNlbGwpCi0JCQl7Ci0JCQkJU3RyaW5nIHR2ID0gKFN0cmluZykgY2VsbC5nZXRFbGVtZW50KCk7Ci0JCQkJY2VsbC5zZXRUZXh0KHR2KTsKLQkJCX0KLQkJCQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgaW50IGdldFRvb2xUaXBUaW1lRGlzcGxheWVkKE9iamVjdCBvYmplY3QpCi0JCQl7Ci0JCQkJcmV0dXJuIDUwMDA7Ci0JCQl9Ci0JCQkKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlTdHJpbmcgdHYgPSAoU3RyaW5nKSBlbGVtZW50OwotCQkJCXJldHVybiBwcm9wZXJ0eVVyaXMuZ2V0KHR2KS5nZXREZXNjcmlwdGlvbigpOwotCQkJfQotCQkJCi0JCX0pOwotCQkKLS8vCQlDb2x1bW5WaWV3ZXJUb29sVGlwU3VwcG9ydC5lbmFibGVGb3IodFZpZXdlcik7Ci0JCQotCQlUYWJsZVZpZXdlckNvbHVtbiB0dmMyID0gbmV3IFRhYmxlVmlld2VyQ29sdW1uKHRWaWV3ZXIsdGMyKTsKLQkJdHZjMi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBDZWxsTGFiZWxQcm92aWRlcigpewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB1cGRhdGUoVmlld2VyQ2VsbCBjZWxsKQotCQkJewotCQkJCVN0cmluZyB0diA9IChTdHJpbmcpIGNlbGwuZ2V0RWxlbWVudCgpOwotCQkJCVN0cmluZyB2YWwgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KHR2KTsKLQkJCQljZWxsLnNldFRleHQodmFsID09IG51bGwgPyAiIiA6IHZhbCk7Ci0JCQl9Ci0JCX0pOwotCQkKLQkJdHZjMi5zZXRFZGl0aW5nU3VwcG9ydChuZXcgRWRpdGluZ1N1cHBvcnQodFZpZXdlcil7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIGJvb2xlYW4gY2FuRWRpdChPYmplY3QgZWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgQ2VsbEVkaXRvciBnZXRDZWxsRWRpdG9yKE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCXJldHVybiBuZXcgVGV4dENlbGxFZGl0b3IodGFibGUpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXByb3RlY3RlZCBPYmplY3QgZ2V0VmFsdWUoT2JqZWN0IGVsZW1lbnQpCi0JCQl7Ci0JCQkJU3RyaW5nIHR2ID0gKFN0cmluZyllbGVtZW50OwotCQkJCVN0cmluZyB2YWwgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KHR2KTsKLQkJCQlyZXR1cm4gdmFsID09IG51bGwgPyAiIiA6IHZhbDsKLQkJCX0KLQotCQkJQE92ZXJyaWRlCi0JCQlwcm90ZWN0ZWQgdm9pZCBzZXRWYWx1ZShPYmplY3QgZWxlbWVudCwgT2JqZWN0IHZhbHVlKQotCQkJewotCQkJCVN0cmluZyB0diA9IChTdHJpbmcpZWxlbWVudDsKLQkJCQlwcm9wZXJ0aWVzLnNldFByb3BlcnR5KHR2LCAoU3RyaW5nKXZhbHVlKTsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQkJdFZpZXdlci51cGRhdGUodHYsIG51bGwpOwotCQkJfQotCQkJCi0JCX0pOwotCQkKLQkJcmVzdG9yZUNvbHVtblNldHRpbmdzKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdXBkYXRlUmVtb3ZlQnV0dG9uKCkKLQl7Ci0JCXJlbW92ZUJ1dHRvbi5zZXRFbmFibGVkKCF0Vmlld2VyLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZXNCbG9jay4xNiIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdHMoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLS8vCQlMYXVuY2hQcm9wZXJ0aWVzIHAgPSBuZXcgTGF1bmNoUHJvcGVydGllcygpOwotLy8JCXAuc2V0UHJvcGVydHkoImluZGVudCIsICJ5ZXMiKTsKLS8vCQl0cnkKLS8vCQl7Ci0vLwkJCVN0cmluZyB4bWwgPSBwLnRvWE1MKCk7Ci0vLwkJCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX1BST1BFUlRJRVMsIHhtbCk7Ci0vLwkJfQotLy8JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0vLwkJewotLy8JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0vLwkJewotLy8JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpCi0vLwkJewotLy8JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLS8vCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVQcm9wZXJ0aWVzRnJvbVN0b3JhZ2UoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfUFJPUEVSVElFUywgKFN0cmluZykgbnVsbCk7Ci0JCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApCi0JCXsKLQkJCXByb3BlcnRpZXMgPSBMYXVuY2hQcm9wZXJ0aWVzLmZyb21YTUwobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHMuZ2V0Qnl0ZXMoKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcHJvcGVydGllcyA9IG5ldyBMYXVuY2hQcm9wZXJ0aWVzKCk7Ci0JCX0KLQkJdFZpZXdlci5zZXRJbnB1dChwcm9wZXJ0aWVzKTsKLQkJdXBkYXRlUmVtb3ZlQnV0dG9uKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZUZyb20oSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlpbml0aWFsaXplUHJvcGVydGllc0Zyb21TdG9yYWdlKGNvbmZpZ3VyYXRpb24pOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgcGVyZm9ybUFwcGx5KElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbikKLQl7Ci0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgeG1sID0gcHJvcGVydGllcy50b1hNTCgpOwotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9PVVRQVVRfUFJPUEVSVElFUywgeG1sKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVhTTERlYnVnVUlQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBlcmZvcm1SZW1vdmUoKQotCXsKLQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCWZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBzZWwuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykKLQkJewotCQkJU3RyaW5nIGF0dCA9IChTdHJpbmcpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCXByb3BlcnRpZXMucmVtb3ZlUHJvcGVydHkoYXR0KTsKLQkJfQotCQl0Vmlld2VyLnJlZnJlc2goKTsKLQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvT3V0cHV0UHJvcGVydHlEaWFsb2cuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvT3V0cHV0UHJvcGVydHlEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjN2I3Yy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL091dHB1dFByb3BlcnR5RGlhbG9nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5TdGF0dXNEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSURvdWJsZUNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJTb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSU91dHB1dFByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkxhdW5jaFByb3BlcnRpZXM7Ci0KLXB1YmxpYyBjbGFzcyBPdXRwdXRQcm9wZXJ0eURpYWxvZyBleHRlbmRzIFN0YXR1c0RpYWxvZwotewotCXByaXZhdGUgVGFibGUgdGFibGU7Ci0JcHJpdmF0ZSBUYWJsZVZpZXdlciB0Vmlld2VyOwotCXByaXZhdGUgVGV4dCB0ZXh0OwotCXByaXZhdGUgTGlzdDxJT3V0cHV0UHJvcGVydHk+IHByb3BlcnRpZXMgPSBuZXcgQXJyYXlMaXN0PElPdXRwdXRQcm9wZXJ0eT4oKTsKLQlwcml2YXRlIExpc3Q8SU91dHB1dFByb3BlcnR5PiBzZWxlY3RlZFByb3BlcnRpZXMgPSBuZXcgQXJyYXlMaXN0PElPdXRwdXRQcm9wZXJ0eT4oKTsKLQotCXB1YmxpYyBPdXRwdXRQcm9wZXJ0eURpYWxvZyhTaGVsbCBwYXJlbnQsIExhdW5jaFByb3BlcnRpZXMgbGF1bmNoUHJvcGVydGllcykKLQl7Ci0JCXN1cGVyKHBhcmVudCk7Ci0JCXNldFRpdGxlKCJTZWxlY3QgT3V0cHV0IFByb3BlcnRpZXMiKTsKLQkJCi0JCVNldDxTdHJpbmc+IHByb3BlcnR5U2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCQlmb3IgKFN0cmluZyBhdHQgOiBsYXVuY2hQcm9wZXJ0aWVzLmdldFByb3BlcnRpZXMoKS5rZXlTZXQoKSkKLQkJewotCQkJcHJvcGVydHlTZXQuYWRkKGF0dCk7Ci0JCX0KLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZXMoKSkKLQkJewotCQkJZm9yIChJT3V0cHV0UHJvcGVydHkgcHJvcGVydHkgOiB0eXBlLmdldE91dHB1dFByb3BlcnRpZXMoKSkKLQkJCXsKLQkJCQlpZiAoIXByb3BlcnR5U2V0LmNvbnRhaW5zKHByb3BlcnR5LmdldFVSSSgpKSkKLQkJCQl7Ci0JCQkJCXByb3BlcnR5U2V0LmFkZChwcm9wZXJ0eS5nZXRVUkkoKSk7Ci0JCQkJCXByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJQ29tcG9zaXRlIGNvbXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCxTV1QuTk9ORSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSk7Ci0JCWdkLndpZHRoSGludCA9IDQwMDsKLQkJY29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJY29tcC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0JCQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb21wLFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dCgiU2VsZWN0IG9uZSBvciBtb3JlIG91dHB1dCBwcm9wZXJ0aWVzIGZvciB0aGUgdHJhbnNmb3JtYXRpb24uIik7Ci0JCQotCQkKLQkJdGFibGUgPSBuZXcgVGFibGUoY29tcCxTV1QuQk9SREVSIHwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULlZfU0NST0xMIHwgU1dULk1VTFRJKTsKLQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZShmYWxzZSk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSk7Ci0JCWdkLnZlcnRpY2FsSW5kZW50ID0gMTA7Ci0JCWdkLmhlaWdodEhpbnQgPSAyMDA7Ci0JCXRhYmxlLnNldExheW91dERhdGEoZ2QpOwotCQkKLQkJdFZpZXdlciA9IG5ldyBUYWJsZVZpZXdlcih0YWJsZSk7Ci0JCXRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBJU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcigpCi0JCXsKLQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCQkJewotCQkJCXJldHVybiBwcm9wZXJ0aWVzLnRvQXJyYXkobmV3IElPdXRwdXRQcm9wZXJ0eVswXSk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKQotCQkJewotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpCi0JCQl7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCUlPdXRwdXRQcm9wZXJ0eSBwcm9wZXJ0eSA9IChJT3V0cHV0UHJvcGVydHkpZWxlbWVudDsKLQkJCQlyZXR1cm4gcHJvcGVydHkuZ2V0VVJJKCk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldFNvcnRlcihuZXcgVmlld2VyU29ydGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpCi0JCQl7Ci0JCQkJSU91dHB1dFByb3BlcnR5IGExID0gKElPdXRwdXRQcm9wZXJ0eSkgZTE7Ci0JCQkJSU91dHB1dFByb3BlcnR5IGEyID0gKElPdXRwdXRQcm9wZXJ0eSkgZTI7Ci0JCQkJcmV0dXJuIGExLmdldFVSSSgpLmNvbXBhcmVUbyhhMi5nZXRVUkkoKSk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpewotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKWV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCXNlbGVjdGVkUHJvcGVydGllcyA9IHNlbC50b0xpc3QoKTsKLQkJCQlpZiAoc2VsLmlzRW1wdHkoKSkKLQkJCQkJdGV4dC5zZXRUZXh0KCIiKTsKLQkJCQllbHNlCi0JCQkJewotCQkJCQlJT3V0cHV0UHJvcGVydHkgcHJvcGVydHkgPSAoSU91dHB1dFByb3BlcnR5KXNlbC5nZXRGaXJzdEVsZW1lbnQoKTsgCi0JCQkJCXRleHQuc2V0VGV4dChwcm9wZXJ0eS5nZXREZXNjcmlwdGlvbigpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCl7Ci0JCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhEb3VibGVDbGlja0V2ZW50IGV2ZW50KQotCQkJewotCQkJCWJ1dHRvblByZXNzZWQoSURpYWxvZ0NvbnN0YW50cy5PS19JRCk7Ci0JCQl9Ci0JCX0pOwotCQl0Vmlld2VyLnNldElucHV0KHByb3BlcnRpZXMpOwotCQkKLQkJdGV4dCA9IG5ldyBUZXh0KGNvbXAsU1dULkJPUkRFUiB8IFNXVC5XUkFQIHwgU1dULlJFQURfT05MWSB8IFNXVC5WX1NDUk9MTCk7Ci0JCXRleHQuc2V0RWRpdGFibGUoZmFsc2UpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuRklMTCx0cnVlLGZhbHNlKTsKLQkJZ2QuaGVpZ2h0SGludCA9IDgwOwotCQl0ZXh0LnNldExheW91dERhdGEoZ2QpOwotCQkKLQkJaWYgKHByb3BlcnRpZXMuc2l6ZSgpID4gMCkKLQkJewotCQkJdFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odFZpZXdlci5nZXRFbGVtZW50QXQoMCkpLCB0cnVlKTsKLQkJfQotCQkKLQkJcmV0dXJuIGNvbXA7Ci0JfQotCQotCXB1YmxpYyBMaXN0PElPdXRwdXRQcm9wZXJ0eT4gZ2V0T3V0cHVQcm9wZXJ0aWVzKCkKLQl7Ci0JCXJldHVybiBzZWxlY3RlZFByb3BlcnRpZXM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JCbG9jay5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JCbG9jay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzUzODg0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yQmxvY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29tYm9WaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnByZWZlcmVuY2VzLlByb2Nlc3NvcnNQcmVmZXJlbmNlUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvckJsb2NrIGV4dGVuZHMgQWJzdHJhY3RMYXVuY2hDb25maWd1cmF0aW9uVGFiCi17Ci0JcHJpdmF0ZSBCdXR0b24gdXNlUHJlZmVyZW5jZXNSYWRpbzsKLQlwcml2YXRlIEJ1dHRvbiBhbHRlclByZWZlcmVuY2VzQnV0dG9uOwotCXByaXZhdGUgQnV0dG9uIG92ZXJyaWRlUHJlZmVyZW5jZXNSYWRpbzsKLQlwcml2YXRlIENvbWJvIHJ1bkNvbWJvOwotCXByaXZhdGUgQnV0dG9uIGluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b247Ci0JcHJpdmF0ZSBDb21ib1ZpZXdlciBydW5Db21ib1ZpZXdlcjsKLQlwcml2YXRlIENvbWJvVmlld2VyIGZhY3RvcnlDb21ib1ZpZXdlcjsKLQlwcml2YXRlIElUcmFuc2Zvcm1lckZhY3RvcnkgY3VycmVudEZhY3Rvcnk7Ci0KLQlwdWJsaWMgUHJvY2Vzc29yQmxvY2soKQotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlGb250IGZvbnQgPSBwYXJlbnQuZ2V0Rm9udCgpOwotCi0JCUNvbXBvc2l0ZSBncm91cCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7Ci0JCXNldENvbnRyb2woZ3JvdXApOwotCQlncm91cC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpKTsKLQkJZ3JvdXAuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7Ci0JCWdyb3VwLnNldEZvbnQoZm9udCk7Ci0vLwkJZ3JvdXAuc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JCbG9ja18wKTsKLQotCQl1c2VQcmVmZXJlbmNlc1JhZGlvID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlJBRElPKTsKLQkJdXNlUHJlZmVyZW5jZXNSYWRpby5zZXRUZXh0KFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckJsb2NrXzEpOwotCQl1c2VQcmVmZXJlbmNlc1JhZGlvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCXByZWZlcmVuY2VzU2VsZWN0ZWQoKTsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24uc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JCbG9ja18yKTsKLQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9FTkQpOwotCQlnZC53aWR0aEhpbnQgPSAxNTA7Ci0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWFsdGVyUHJlZmVyZW5jZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJSVByZWZlcmVuY2VQYWdlIHBhZ2UgPSBuZXcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlKCk7Ci0JCQkJc2hvd1ByZWZQYWdlKCJvcmcuZWNsaXBzZS53c3QueHNsdC5sYXVuY2hpbmcudWkucHJlZmVyZW5jZXMuUHJvY2Vzc29yUHJlZmVyZW5jZVBhZ2UiLCBwYWdlKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9KTsKLQotCQlvdmVycmlkZVByZWZlcmVuY2VzUmFkaW8gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUkFESU8pOwotCQlvdmVycmlkZVByZWZlcmVuY2VzUmFkaW8uc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JCbG9ja180KTsKLQkJb3ZlcnJpZGVQcmVmZXJlbmNlc1JhZGlvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkKLQkJewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotCQkJewotCQkJCW92ZXJyaWRlU2VsZWN0ZWQoKTsKLQkJCQl1cGRhdGVMYXVuY2hDb25maWd1cmF0aW9uRGlhbG9nKCk7Ci0JCQl9Ci0JCX0pOwotCi0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUFVTSCk7Ci0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24uc2V0VGV4dChQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JzQ29tYm9CbG9ja18xKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9FTkQpOwotCQlnZC53aWR0aEhpbnQgPSAxNTA7Ci0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWluc3RhbGxlZFByb2Nlc3NvcnNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKQotCQl7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpCi0JCQl7Ci0JCQkJSVByZWZlcmVuY2VQYWdlIHBhZ2UgPSBuZXcgUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlKCk7Ci0JCQkJc2hvd1ByZWZQYWdlKCJvcmcuZWNsaXBzZS53c3QueHNsdC5sYXVuY2hpbmcudWkucHJlZmVyZW5jZXMuUHJvY2Vzc29yUHJlZmVyZW5jZVBhZ2UiLCBwYWdlKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9KTsKLQotCQlDb21wb3NpdGUgc2V0dGluZ3NDb21wID0gbmV3IENvbXBvc2l0ZShncm91cCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpOwotCQlnbC5tYXJnaW5IZWlnaHQgPSAyOwotCQlzZXR0aW5nc0NvbXAuc2V0TGF5b3V0KGdsKTsKLQkJZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKLQkJZ2QuaG9yaXpvbnRhbEluZGVudCA9IDE1OwotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7Ci0JCXNldHRpbmdzQ29tcC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJc2V0dGluZ3NDb21wLnNldEZvbnQoZm9udCk7Ci0KLQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoc2V0dGluZ3NDb21wLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldFRleHQoUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yQmxvY2tfNik7Ci0JCXJ1bkNvbWJvID0gbmV3IENvbWJvKHNldHRpbmdzQ29tcCwgU1dULlJFQURfT05MWSB8IFNXVC5TSU5HTEUpOwotCQlydW5Db21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKLQkJcnVuQ29tYm9WaWV3ZXIgPSBuZXcgQ29tYm9WaWV3ZXIocnVuQ29tYm8pOwotCQlydW5Db21ib1ZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IENvbWJvQ29udGVudFByb3ZpZGVyKCkpOwotCQlydW5Db21ib1ZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBDb21ib0xhYmVsUHJvdmlkZXIoKSk7Ci0JCXJ1bkNvbWJvVmlld2VyLnNldElucHV0KEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcnMoKSk7Ci0JCXJ1bkNvbWJvVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpCi0JCXsKLQotCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpCi0JCQl7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlpZiAoIXNlbC5pc0VtcHR5KCkpCi0JCQkJewotCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBwcm9jZXNzb3IgPSAoSVByb2Nlc3Nvckluc3RhbGwpIHNlbC5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQkJCi0JCQkJCWlmIChwcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldFRyYW5zZm9ybWVyRmFjdG9yaWVzKCkubGVuZ3RoID4gMSkKLQkJCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5nZXRDb21ibygpLnNldFZpc2libGUodHJ1ZSk7Ci0JCQkJCWVsc2UKLQkJCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5nZXRDb21ibygpLnNldFZpc2libGUoZmFsc2UpOwotCi0JCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5zZXRJbnB1dChwcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpKTsKLQkJCQkJCi0JCQkJCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQkJCQkJZm9yIChJVHJhbnNmb3JtZXJGYWN0b3J5IHRmIDogcHJvY2Vzc29yLmdldFByb2Nlc3NvclR5cGUoKS5nZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpKQotCQkJCQl7Ci0JCQkJCQlpZiAodGYuZXF1YWxzKGN1cnJlbnRGYWN0b3J5KSkKLQkJCQkJCXsKLQkJCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJaWYgKCFmb3VuZCkKLQkJCQkJewotCQkJCQkJY3VycmVudEZhY3RvcnkgPSBwcm9jZXNzb3IuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCQkJCWlmIChjdXJyZW50RmFjdG9yeSE9bnVsbCkKLQkJCQkJCQlmYWN0b3J5Q29tYm9WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGN1cnJlbnRGYWN0b3J5KSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJfQotCQl9KTsKLQotCQlDb21ibyBmYWN0b3J5Q29tYm8gPSBuZXcgQ29tYm8oc2V0dGluZ3NDb21wLCBTV1QuUkVBRF9PTkxZIHwgU1dULlNJTkdMRSk7Ci0JCWZhY3RvcnlDb21iby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSg4MCxTV1QuREVGQVVMVCkpOwotCQlmYWN0b3J5Q29tYm9WaWV3ZXIgPSBuZXcgQ29tYm9WaWV3ZXIoZmFjdG9yeUNvbWJvKTsKLQkJZmFjdG9yeUNvbWJvVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIoKXsKLQotCQkJcHJpdmF0ZSBJUHJvY2Vzc29yVHlwZSB0eXBlOwotCQkJCi0JCQlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkKLQkJCXsKLQkJCQlyZXR1cm4gdHlwZS5nZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQkJCXsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KQotCQkJewotCQkJCXRoaXMudHlwZSA9IChJUHJvY2Vzc29yVHlwZSluZXdJbnB1dDsKLQkJCX0KLQkJCQotCQl9KTsKLQkJZmFjdG9yeUNvbWJvVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKXsKLQkJCUBPdmVycmlkZQotCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQkJewotCQkJCUlUcmFuc2Zvcm1lckZhY3RvcnkgZiA9IChJVHJhbnNmb3JtZXJGYWN0b3J5KWVsZW1lbnQ7Ci0JCQkJcmV0dXJuIGYuZ2V0TmFtZSgpOyAvLyArICIgLSAiICsgZi5nZXRGYWN0b3J5Q2xhc3MoKTsKLQkJCX0KLQkJfSk7Ci0JCWZhY3RvcnlDb21ib1ZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKQotCQl7Ci0KLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KQotCQkJewotCQkJCWN1cnJlbnRGYWN0b3J5ID0gKElUcmFuc2Zvcm1lckZhY3RvcnkpKChJU3RydWN0dXJlZFNlbGVjdGlvbilldmVudC5nZXRTZWxlY3Rpb24oKSkuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJdXBkYXRlTGF1bmNoQ29uZmlndXJhdGlvbkRpYWxvZygpOwotCQkJfQotCQl9KTsKLQotLy8JCW92ZXJyaWRlUHJlZmVyZW5jZXNCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLFNXVC5DSEVDSyk7Ci0vLwkJb3ZlcnJpZGVQcmVmZXJlbmNlc0J1dHRvbi5zZXRUZXh0KCJPdmVycmlkZSBwcmVmZXJlbmNlcyIpOwotLy8JCWdkID0gbmV3IEdyaWREYXRhKFNXVC5OT05FLFNXVC5OT05FLGZhbHNlLGZhbHNlKTsKLS8vCQlvdmVycmlkZVByZWZlcmVuY2VzQnV0dG9uLnNldExheW91dERhdGEoZ2QpOwotLy8JCW92ZXJyaWRlUHJlZmVyZW5jZXNCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCl7Ci0vLwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKQotLy8JCQl7fQotLy8JCQkKLS8vCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkKLS8vCQkJewotLy8JCQkJZmlyZVByZWZlcmVuY2VQcm9jZXNzb3JDaGFuZ2VkKG92ZXJyaWRlUHJlZmVyZW5jZXNCdXR0b24uZ2V0U2VsZWN0aW9uKCkpOwotLy8JCQl9Ci0vLwkJfSk7Ci0JfQotCQotCi0JcHJpdmF0ZSB2b2lkIHByZWZlcmVuY2VzU2VsZWN0ZWQoKQotCXsKLQkJYWx0ZXJQcmVmZXJlbmNlc0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOwotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQlydW5Db21iby5zZXRFbmFibGVkKGZhbHNlKTsKLQkJZmFjdG9yeUNvbWJvVmlld2VyLmdldENvbWJvKCkuc2V0RW5hYmxlZChmYWxzZSk7Ci0JCXJ1bkNvbWJvVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRSdW5Qcm9jZXNzb3JQcmVmZXJlbmNlKCkpLCB0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3ZlcnJpZGVTZWxlY3RlZCgpCi0JewotCQlhbHRlclByZWZlcmVuY2VzQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOwotCQlpbnN0YWxsZWRQcm9jZXNzb3JzQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCWZhY3RvcnlDb21ib1ZpZXdlci5nZXRDb21ibygpLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCXJ1bkNvbWJvLnNldEVuYWJsZWQodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNob3dQcmVmUGFnZShTdHJpbmcgaWQsIElQcmVmZXJlbmNlUGFnZSBwYWdlKQotCXsKLQkJWFNMRGVidWdVSVBsdWdpbi5zaG93UHJlZmVyZW5jZVBhZ2UoaWQsIHBhZ2UpOwotCQkvLyBub3cgcmVmcmVzaCBldmVyeXRoaW5nCi0JCXJ1bkNvbWJvVmlld2VyLnNldElucHV0KEpBWFBSdW50aW1lLmdldFByb2Nlc3NvcnMoKSk7Ci0JCXJ1bkNvbWJvVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihnZXRSdW5Qcm9jZXNzb3JQcmVmZXJlbmNlKCkpLCB0cnVlKTsKLQkJLy8gcHJlZmVyZW5jZXNTZWxlY3RlZCgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yQmxvY2tfNzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplRnJvbShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotCXsKLQkJdHJ5Ci0JCXsKLQkJCWJvb2xlYW4gdXNlRGVmYXVsdFByb2Nlc3NvciA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SLCB0cnVlKTsKLQkJCWlmICh1c2VEZWZhdWx0UHJvY2Vzc29yKQotCQkJewotCQkJCXVzZVByZWZlcmVuY2VzUmFkaW8uc2V0U2VsZWN0aW9uKHRydWUpOwotCQkJCW92ZXJyaWRlUHJlZmVyZW5jZXNSYWRpby5zZXRTZWxlY3Rpb24oZmFsc2UpOwotCQkJCXByZWZlcmVuY2VzU2VsZWN0ZWQoKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQl1c2VQcmVmZXJlbmNlc1JhZGlvLnNldFNlbGVjdGlvbihmYWxzZSk7Ci0JCQkJb3ZlcnJpZGVQcmVmZXJlbmNlc1JhZGlvLnNldFNlbGVjdGlvbih0cnVlKTsKLQkJCQlvdmVycmlkZVNlbGVjdGVkKCk7Ci0KLQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBydW5JbnN0YWxsID0gbnVsbDsKLQkJCQlTdHJpbmcgcnVuSWQgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BST0NFU1NPUiwgKFN0cmluZykgbnVsbCk7Ci0JCQkJaWYgKHJ1bklkICE9IG51bGwpCi0JCQkJCXJ1bkluc3RhbGwgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3IocnVuSWQpOwotCQkJCWlmIChydW5JbnN0YWxsID09IG51bGwpCi0JCQkJCXJ1bkluc3RhbGwgPSBnZXRSdW5Qcm9jZXNzb3JQcmVmZXJlbmNlKCk7Ci0JCQkJcnVuQ29tYm9WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHJ1bkluc3RhbGwpKTsKLQkJCQkKLQotCQkJCVN0cmluZyBmYWN0b3J5SWQgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1RSQU5TRk9STUVSX0ZBQ1RPUlksIChTdHJpbmcpIG51bGwpOwotCQkJCWlmIChmYWN0b3J5SWQgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWN1cnJlbnRGYWN0b3J5ID0gcnVuSW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0RGVmYXVsdFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlmb3IgKElUcmFuc2Zvcm1lckZhY3RvcnkgdGYgOiBydW5JbnN0YWxsLmdldFByb2Nlc3NvclR5cGUoKS5nZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpKQotCQkJCQl7Ci0JCQkJCQlpZiAodGYuZ2V0RmFjdG9yeUNsYXNzKCkuZXF1YWxzKGZhY3RvcnlJZCkpCi0JCQkJCQl7Ci0JCQkJCQkJY3VycmVudEZhY3RvcnkgPSB0ZjsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQlpZiAoY3VycmVudEZhY3RvcnkgPT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWN1cnJlbnRGYWN0b3J5ID0gcnVuSW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0RGVmYXVsdFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQkJCX0KLQkJCQlpZiAoY3VycmVudEZhY3RvcnkgIT0gbnVsbCkKLQkJCQl7Ci0JCQkJCWZhY3RvcnlDb21ib1ZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oY3VycmVudEZhY3RvcnkpLCB0cnVlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJewotCQkJWFNMRGVidWdVSVBsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElQcm9jZXNzb3JJbnN0YWxsIGdldFJ1blByb2Nlc3NvclByZWZlcmVuY2UoKQotCXsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldERlZmF1bHRQcm9jZXNzb3IoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBwZXJmb3JtQXBwbHkoSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSBjb25maWd1cmF0aW9uKQotCXsKLQkJYm9vbGVhbiB1c2VQcmVmZXJlbmNlcyA9IHVzZVByZWZlcmVuY2VzUmFkaW8uZ2V0U2VsZWN0aW9uKCk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SLCB1c2VQcmVmZXJlbmNlcyk7Ci0JCWlmICghdXNlUHJlZmVyZW5jZXMpCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIHJ1bnByb2Nlc3NvciA9IChJUHJvY2Vzc29ySW5zdGFsbCkgKChJU3RydWN0dXJlZFNlbGVjdGlvbikgcnVuQ29tYm9WaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpLmdldEZpcnN0RWxlbWVudCgpOwotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QUk9DRVNTT1IsIHJ1bnByb2Nlc3Nvci5nZXRJZCgpKTsKLQkJCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVFJBTlNGT1JNRVJfRkFDVE9SWSwgY3VycmVudEZhY3RvcnkgPT0gbnVsbCA/IG51bGwgOiBjdXJyZW50RmFjdG9yeS5nZXRGYWN0b3J5Q2xhc3MoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiwgdHJ1ZSk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfUFJPQ0VTU09SLCAoU3RyaW5nKSBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIGNsYXNzIENvbWJvQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIKLQl7Ci0JCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KQotCQl7Ci0JCQlyZXR1cm4gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29ycygpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZGlzcG9zZSgpCi0JCXsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkKLQkJewotCQl9Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBDb21ib0xhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyCi0JewotCQlAT3ZlcnJpZGUKLQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBlbGVtZW50OwotCQkJcmV0dXJuIGluc3RhbGwuZ2V0TmFtZSgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JEZXNjcmlwdG9yLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiZjkyZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRlc2NyaXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS5pbnRlcm5hbC50YWJzLnByb2Nlc3NvcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFByb2Nlc3NvckRlc2NyaXB0b3IKLXsKLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRldGFpbHNEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2MjFmNS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3NvckRldGFpbHNEaWFsb2cuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMRGVidWdVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZyBleHRlbmRzIERpYWxvZwotewotCXByaXZhdGUgZmluYWwgSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbDsKLQotCXB1YmxpYyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nKFNoZWxsIHNoZWxsLCBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsKQotCXsKLQkJc3VwZXIoc2hlbGwpOwotCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsU3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCQl0aGlzLmluc3RhbGwgPSBpbnN0YWxsOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNoZWxsKFNoZWxsIG5ld1NoZWxsKQotCXsKLQkJc3VwZXIuY29uZmlndXJlU2hlbGwobmV3U2hlbGwpOwotCQluZXdTaGVsbC5zZXRUZXh0KFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckRldGFpbHNEaWFsb2dfVGl0bGUpOwotCQkvLyBUT0RPIFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAuLi4KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBhbmNlc3RvcikKLQl7Ci0JCUNvbXBvc2l0ZSBwYXJlbnQgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKGFuY2VzdG9yKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgyLCBmYWxzZSk7Ci0JCXBhcmVudC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQkvLyB0eXBlCi0JCWNyZWF0ZUxhYmVsKHBhcmVudCwgUHJvY2Vzc29yTWVzc2FnZXMuUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsVHlwZSk7Ci0JCWNyZWF0ZUxhYmVsKHBhcmVudCwgaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuZ2V0TGFiZWwoKSk7Ci0KLQkJLy8gbmFtZQotCQljcmVhdGVMYWJlbChwYXJlbnQsIFByb2Nlc3Nvck1lc3NhZ2VzLlByb2Nlc3NvckRldGFpbHNEaWFsb2dfaW5zdGFsbE5hbWUpOwotCQljcmVhdGVMYWJlbChwYXJlbnQsIGluc3RhbGwuZ2V0TmFtZSgpKTsKLQotCQkvLyBqYXJzCi0JCUxhYmVsIGxhYmVsID0gY3JlYXRlTGFiZWwocGFyZW50LCBQcm9jZXNzb3JNZXNzYWdlcy5Qcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxDbGFzc3BhdGgpOwotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5WRVJUSUNBTF9BTElHTl9CRUdJTk5JTkcgfCBHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7Ci0JCWxhYmVsLnNldExheW91dERhdGEoZ2QpOwotCQlUYWJsZVZpZXdlciBsaWJyYXJ5Vmlld2VyID0gbmV3IFRhYmxlVmlld2VyKHBhcmVudCk7Ci0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCWdkLmhlaWdodEhpbnQgPSA2OwotCQlsaWJyYXJ5Vmlld2VyLmdldENvbnRyb2woKS5zZXRMYXlvdXREYXRhKGdkKTsKLQkJbGlicmFyeVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEphckNvbnRlbnRQcm92aWRlcigpKTsKLQkJbGlicmFyeVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBKYXJMYWJlbFByb3ZpZGVyKCkpOwotCQlsaWJyYXJ5Vmlld2VyLnNldElucHV0KGluc3RhbGwpOwotCi0JCWFwcGx5RGlhbG9nRm9udChwYXJlbnQpOwotCQlyZXR1cm4gcGFyZW50OwotCX0KLQotCXByaXZhdGUgTGFiZWwgY3JlYXRlTGFiZWwoQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIHRleHQpCi0JewotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKLQkJbGFiZWwuc2V0VGV4dCh0ZXh0KTsKLQkJcmV0dXJuIGxhYmVsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gdGhhdCB0aGlzIGRpYWxvZyBzdG9yZXMgaXRzIHNldHRpbmdzIGluCi0JICogCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldERpYWxvZ1NldHRpbmdzU2VjdGlvbk5hbWUoKQotCXsKLQkJcmV0dXJuICJYU0xfREVUQUlMU19ESUFMT0dfU0VDVElPTiI7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSURpYWxvZ1NldHRpbmdzIGdldERpYWxvZ0JvdW5kc1NldHRpbmdzKCkKLQl7Ci0JCUlEaWFsb2dTZXR0aW5ncyBzZXR0aW5ncyA9IFhTTERlYnVnVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7Ci0JCUlEaWFsb2dTZXR0aW5ncyBzZWN0aW9uID0gc2V0dGluZ3MuZ2V0U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotCQlpZiAoc2VjdGlvbiA9PSBudWxsKQotCQl7Ci0JCQlzZWN0aW9uID0gc2V0dGluZ3MuYWRkTmV3U2VjdGlvbihnZXREaWFsb2dTZXR0aW5nc1NlY3Rpb25OYW1lKCkpOwotCQl9Ci0JCXJldHVybiBzZWN0aW9uOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkKLQl7Ci0JCS8vIGNyZWF0ZSBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMgYnkgZGVmYXVsdAotCQljcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLk9LX0lELCBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLCB0cnVlKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0ZTE1OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3Nvck1lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotCi1jbGFzcyBQcm9jZXNzb3JNZXNzYWdlcyBleHRlbmRzIE5MUwotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3IuUHJvY2Vzc29yTWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JCbG9ja18wOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckJsb2NrXzE7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yQmxvY2tfMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JCbG9ja180OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckJsb2NrXzY7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yQmxvY2tfNzsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JzQ29tYm9CbG9ja18xOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckRldGFpbHNEaWFsb2dfVGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsTmFtZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQcm9jZXNzb3JEZXRhaWxzRGlhbG9nX2luc3RhbGxUeXBlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFByb2Nlc3NvckRldGFpbHNEaWFsb2dfaW5zdGFsbENsYXNzcGF0aDsKLQotCXN0YXRpYwotCXsKLQkJLy8gbG9hZCBtZXNzYWdlIHZhbHVlcyBmcm9tIGJ1bmRsZSBmaWxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIFByb2Nlc3Nvck1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvUHJvY2Vzc29yTWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FhNzI3NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1Byb2Nlc3Nvck1lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1Qcm9jZXNzb3JCbG9ja18wPVhTTFQgUHJvY2Vzc29yCi1Qcm9jZXNzb3JCbG9ja18xPVVzZSBwcm9jZXNzb3IgZnJvbSBwcmVmZXJlbmNlcwotUHJvY2Vzc29yQmxvY2tfMj1DaGFuZ2UgcHJlZmVyZW5jZXMuLi4KLVByb2Nlc3NvckJsb2NrXzQ9VXNlIHNwZWNpZmljIHByb2Nlc3NvcgotUHJvY2Vzc29yQmxvY2tfNj1Qcm9jZXNzb3I6Ci1Qcm9jZXNzb3JCbG9ja183PVByb2Nlc3NvcgotUHJvY2Vzc29yc0NvbWJvQmxvY2tfMT0mSW5zdGFsbGVkIHByb2Nlc3NvcnMuLi4KLQotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19UaXRsZT1CdWlsdC1pbiBYU0xUIFByb2Nlc3NvcgotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsTmFtZT1OYW1lOgotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsVHlwZT1UeXBlOgotUHJvY2Vzc29yRGV0YWlsc0RpYWxvZ19pbnN0YWxsQ2xhc3NwYXRoPUxpYnJhcmllczoKLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy51aS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL3VpL2ludGVybmFsL3RhYnMvcHJvY2Vzc29yL1hTTFByb2Nlc3NvclRhYjIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvWFNMUHJvY2Vzc29yVGFiMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmFiNTBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvWFNMUHJvY2Vzc29yVGFiMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDIyMzU1NyAtIEFkZGVkIGltYWdlcyBjb250cmlidXRlZCBieSBIb2xnZXIgVm9vcm1hbm4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkuaW50ZXJuYWwudGFicy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcudWkuSUxhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYkZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLkpBWFBEZWJ1Z1VJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckludm9rZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgWFNMUHJvY2Vzc29yVGFiMiBleHRlbmRzIFhTTExhdW5jaENvbmZpZ3VyYXRpb25UYWIKLXsKLQlwcml2YXRlIGZpbmFsIFByb2Nlc3NvckJsb2NrIHByb2Nlc3NvckJsb2NrOwotCXByaXZhdGUgZmluYWwgQXR0cmlidXRlc0Jsb2NrIGF0dHJpYnV0ZXNCbG9jazsKLQlwcml2YXRlIGZpbmFsIE91dHB1dFByb3BlcnRpZXNCbG9jayBvdXRwdXRQcm9wZXJ0aWVzQmxvY2s7Ci0JcHJpdmF0ZSBJbWFnZSBpbWFnZTsKLQotCXB1YmxpYyBYU0xQcm9jZXNzb3JUYWIyKCkKLQl7Ci0JCWF0dHJpYnV0ZXNCbG9jayA9IG5ldyBBdHRyaWJ1dGVzQmxvY2soKTsKLQkJb3V0cHV0UHJvcGVydGllc0Jsb2NrID0gbmV3IE91dHB1dFByb3BlcnRpZXNCbG9jaygpOwotCQlwcm9jZXNzb3JCbG9jayA9IG5ldyBQcm9jZXNzb3JCbG9jaygpOwotCQkKLQkJc2V0QmxvY2tzKG5ldyBJTGF1bmNoQ29uZmlndXJhdGlvblRhYltdCi0JCXsgcHJvY2Vzc29yQmxvY2sgLCBhdHRyaWJ1dGVzQmxvY2ssIG91dHB1dFByb3BlcnRpZXNCbG9jayB9KTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpCi0JewotCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7Ci0JCUNvbXBvc2l0ZSBjb21wID0gKENvbXBvc2l0ZSkgZ2V0Q29udHJvbCgpOwotCi0JCXByb2Nlc3NvckJsb2NrLmNyZWF0ZUNvbnRyb2woY29tcCk7Ci0JCQotCQlUYWJGb2xkZXIgdGFiRm9sZGVyID0gbmV3IFRhYkZvbGRlcihjb21wLFNXVC5OT05FKTsKLQkJdGFiRm9sZGVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLFNXVC5GSUxMLHRydWUsdHJ1ZSkpOwotCi0JCW91dHB1dFByb3BlcnRpZXNCbG9jay5jcmVhdGVDb250cm9sKHRhYkZvbGRlcik7CQkKLQkJYXR0cmlidXRlc0Jsb2NrLmNyZWF0ZUNvbnRyb2wodGFiRm9sZGVyKTsJCQotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24pCi0JewotCQlzdXBlci5wZXJmb3JtQXBwbHkoY29uZmlndXJhdGlvbik7Ci0JCUlQcm9jZXNzb3JJbnZva2VyIGludm9rZXIgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JJbnZva2VycygpWzBdOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5JTlZPS0VSX0RFU0NSSVBUT1IsIGludm9rZXIuZ2V0SWQoKSk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTFByb2Nlc3NvclRhYi4wIik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRJZCgpCi0JewotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcudWkuamF4cC50YWJzLnByb2Nlc3NvciI7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkKLQl7Ci0JCWlmIChpbWFnZSA9PSBudWxsKQotCQl7Ci0JCQlJbWFnZURlc2NyaXB0b3IgaWQgPSBKQVhQRGVidWdVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKEpBWFBEZWJ1Z1VJUGx1Z2luLlBMVUdJTl9JRCwgImljb25zL3hzbHRfcHJvY2Vzc29yLmdpZiIpOwotCQkJaW1hZ2UgPSBpZC5jcmVhdGVJbWFnZSgpOwotCQl9Ci0JCXJldHVybiBpbWFnZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCWlmIChpbWFnZSAhPSBudWxsKQotCQkJaW1hZ2UuZGlzcG9zZSgpOwotCQlzdXBlci5kaXNwb3NlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC90YWJzL3Byb2Nlc3Nvci9tZXNzYWdlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2ViZWY3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdGFicy9wcm9jZXNzb3IvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLUF0dHJpYnV0ZXNCbG9jay4xPUNoYW5nZSBQcmVmZXJlbmNlcy4uLgotQXR0cmlidXRlc0Jsb2NrLjEwPXR5cGUKLUF0dHJpYnV0ZXNCbG9jay4xMT12YWx1ZQotQXR0cmlidXRlc0Jsb2NrLjEyPXZhbHVlCi1BdHRyaWJ1dGVzQmxvY2suMTY9UHJvY2Vzc29yIEF0dHJpYnV0ZXMKLUF0dHJpYnV0ZXNCbG9jay4zPVVzZSBzcGVjaWZpYyBhdHRyaWJ1dGVzCi1BdHRyaWJ1dGVzQmxvY2suND1BdHRyaWJ1dGUKLUF0dHJpYnV0ZXNCbG9jay41PVR5cGUKLUF0dHJpYnV0ZXNCbG9jay42PVZhbHVlCi1BdHRyaWJ1dGVzQmxvY2suOT1uYW1lCi1YU0xQcm9jZXNzb3JUYWIuMD1Qcm9jZXNzb3IKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvdWkvaW50ZXJuYWwvdmlld3MvUmVzdWx0Vmlldy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOWYyZDYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcudWkvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy91aS9pbnRlcm5hbC92aWV3cy9SZXN1bHRWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpLmludGVybmFsLnZpZXdzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSURlYnVnRXZlbnRTZXRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklTb3VyY2VWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLklXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5tb2RlbC5KQVhQRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0w7Ci0KLS8qKgotICogVE9ETyBoYW5kbGUgbXVsdGlwbGUgY29uY3VycmVudCBkZWJ1Z2dpbmcgcHJvY2Vzc2VzIChhbmQgYnJpbmcgdGhlIGN1cnJlbnQgcmVzdWx0cyB0byB0aGUgdG9wIGRlcGVuZGluZyBvbiB3aGljaCBzZWxlY3RlZCBpbiBEZWJ1ZyB2aWV3KQotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXN1bHRWaWV3IGV4dGVuZHMgVmlld1BhcnQgaW1wbGVtZW50cyBJRGVidWdFdmVudFNldExpc3RlbmVyCi17Ci0JcHJpdmF0ZSBTb3VyY2VWaWV3ZXIgc3Y7Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkKLQl7Ci0JCURlYnVnUGx1Z2luLmdldERlZmF1bHQoKS5yZW1vdmVEZWJ1Z0V2ZW50TGlzdGVuZXIodGhpcyk7Ci0JCXN1cGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJdGhpcy5zdiA9IGNyZWF0ZVZpZXdlcihwYXJlbnQpOwotCQkKLQkJLy8gaGFuZGxlIGFueSBsYXVuY2hlcyBhbHJlYWR5IGFkZGVkCi0JCUlEZWJ1Z1RhcmdldFtdIHRhcmdldHMgPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0TGF1bmNoTWFuYWdlcigpLmdldERlYnVnVGFyZ2V0cygpOwotCQlmb3IgKElEZWJ1Z1RhcmdldCBkZWJ1Z1RhcmdldCA6IHRhcmdldHMpCi0JCXsKLQkJCWlmIChkZWJ1Z1RhcmdldCBpbnN0YW5jZW9mIEpBWFBEZWJ1Z1RhcmdldCkKLQkJCXsKLQkJCQloYW5kbGVEZWJ1Z1RhcmdldCgoSkFYUERlYnVnVGFyZ2V0KWRlYnVnVGFyZ2V0KTsKLQkJCX0JCQkKLQkJfQotCQkvLyBsaXN0ZW4gdG8gZnVydGhlciBsYXVuY2hlcwotCQlEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuYWRkRGVidWdFdmVudExpc3RlbmVyKHRoaXMpOwotCX0KLQotCXByaXZhdGUgU291cmNlVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgcGFyZW50KQotCXsKLQkJU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBzb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBiYXNlQ29uZmlndXJhdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0woKTsKLQotCQkJcHVibGljIFN0cmluZ1tdIGdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoSVNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIpIHsKLQkJCQlyZXR1cm4gYmFzZUNvbmZpZ3VyYXRpb24uZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhzb3VyY2VWaWV3ZXIpOwotCQkJfQotCi0JCQlwdWJsaWMgTGluZVN0eWxlUHJvdmlkZXJbXSBnZXRMaW5lU3R5bGVQcm92aWRlcnMoSVNvdXJjZVZpZXdlciBzb3VyY2VWaWV3ZXIsIFN0cmluZyBwYXJ0aXRpb25UeXBlKSB7Ci0JCQkJcmV0dXJuIGJhc2VDb25maWd1cmF0aW9uLmdldExpbmVTdHlsZVByb3ZpZGVycyhzb3VyY2VWaWV3ZXIsIHBhcnRpdGlvblR5cGUpOwotCQkJfQotCQl9OwotCQlTb3VyY2VWaWV3ZXIgdmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOwotCQkoKFN0cnVjdHVyZWRUZXh0Vmlld2VyKSB2aWV3ZXIpLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiKSk7IC8vJE5PTi1OTFMtMSQKLQkJdmlld2VyLmNvbmZpZ3VyZShzb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKTsKLQkJdmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJcmV0dXJuIHZpZXdlcjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpCi0Je30KLQotCXB1YmxpYyB2b2lkIGhhbmRsZURlYnVnRXZlbnRzKERlYnVnRXZlbnRbXSBldmVudHMpCi0JewotCQlmb3IgKERlYnVnRXZlbnQgZGVidWdFdmVudCA6IGV2ZW50cykKLQkJewotCQkJaWYgKGRlYnVnRXZlbnQuZ2V0S2luZCgpID09IERlYnVnRXZlbnQuQ1JFQVRFICYmIGRlYnVnRXZlbnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBKQVhQRGVidWdUYXJnZXQpCi0JCQl7Ci0JCQkJaGFuZGxlRGVidWdUYXJnZXQoKEpBWFBEZWJ1Z1RhcmdldClkZWJ1Z0V2ZW50LmdldFNvdXJjZSgpKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgaGFuZGxlRGVidWdUYXJnZXQoSkFYUERlYnVnVGFyZ2V0IHhkdCkKLQl7Ci0JCS8vIGZpcnN0LCBjbGVhciB0aGUgdmlld2VyCi0JCXN2LnNldERvY3VtZW50KG51bGwpOwotCQkKLQkJZmluYWwgUmVhZGVyIHJlYWRlciA9IHhkdC5nZXRHZW5lcmF0ZVJlYWRlcigpOwotCQlJV29ya2JlbmNoU2l0ZVByb2dyZXNzU2VydmljZSBzZXJ2aWNlID0gKElXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlKWdldFNpdGUoKS5nZXRTZXJ2aWNlKElXb3JrYmVuY2hTaXRlUHJvZ3Jlc3NTZXJ2aWNlLmNsYXNzKTsKLQkJc2VydmljZS5zY2hlZHVsZShuZXcgSm9iKCJSZXN1bHQgdmlldyBqb2IiKXsKLQkJCUBPdmVycmlkZQotCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCUlTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWNoYXJbXSBjID0gbmV3IGNoYXJbODE5Ml07IC8vIHRoaXMgaXMgdGhlIGRlZmF1bHQgQnVmZmVyZWRXcml0ZXIgc2l6ZSwgc28gd2Ugd2lsbCB1c3VhbGx5IGdldCBjaHVua3Mgb2YgdGhpcyBzaXplCi0JCQkJCWludCBzaXplOwotCQkJCQl3aGlsZSgoc2l6ZSA9IHJlYWRlci5yZWFkKGMpKSAhPSAtMSkKLQkJCQkJewotCQkJCQkJd3JpdGVTdHJpbmcobmV3IFN0cmluZyhjLDAsc2l6ZSkpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJLy8gaWdub3JlCi0JCQkJfQotCQkJCWZpbmFsbHkKLQkJCQl7Ci0JCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJCX0KLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQkJCi0JCQlwcml2YXRlIHZvaWQgd3JpdGVTdHJpbmcoZmluYWwgU3RyaW5nIHMpCi0JCQl7Ci0JCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpewotCi0JCQkJCXB1YmxpYyB2b2lkIHJ1bigpCi0JCQkJCXsKLQkJCQkJCS8vIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGxvdCBvZiBkYXRhLCBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgY29udGVudCB0eXBlIGFuZCBzZXQgdGhlIGFwcHJvcHJpYXRlIGRvY3VtZW50Ci0JCQkJCQlpZiAoc3YuZ2V0RG9jdW1lbnQoKSAgPT0gbnVsbCkKLQkJCQkJCXsKLQkJCQkJCQlJRG9jdW1lbnQgZG9jdW1lbnQ7Ci0JCQkJCQkJaWYgKHMuc3RhcnRzV2l0aCgiPCFET0NUWVBFIGh0bWwiKSkKLQkJCQkJCQl7Ci0JCQkJCQkJCVN0cmluZyBjb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiOwotCQkJCQkJCQlJU3RydWN0dXJlZE1vZGVsIHNjcmF0Y2hNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKGNvbnRlbnRUeXBlKTsKLQkJCQkJCQkJZG9jdW1lbnQgPSBzY3JhdGNoTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UgaWYgKHMuc3RhcnRzV2l0aCgiPD94bWwiKSkKLQkJCQkJCQl7Ci0JCQkJCQkJCVN0cmluZyBjb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIjsKLQkJCQkJCQkJSVN0cnVjdHVyZWRNb2RlbCBzY3JhdGNoTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihjb250ZW50VHlwZSk7Ci0JCQkJCQkJCWRvY3VtZW50ID0gc2NyYXRjaE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCQkJCX0KLQkJCQkJCQllbHNlCi0JCQkJCQkJewotCQkJCQkJCQkvLyBUT0RPIGhvdyB0byBjcmVhdGUgYSBwbGFpbiB0ZXh0IERvY3VtZW50Pz8KLQkJCQkJCQkJZG9jdW1lbnQgPSBudWxsOwotCQkJCQkJCX0KLQkJCQkJCQlzdi5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JCQkJCQl9Ci0JCQkJCQl0cnkKLQkJCQkJCXsKLQkJCQkJCQlzdi5nZXREb2N1bWVudCgpLnJlcGxhY2Uoc3YuZ2V0RG9jdW1lbnQoKS5nZXRMZW5ndGgoKSwgMCwgcyk7Ci0JCQkJCQl9Ci0JCQkJCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkKLQkJCQkJCXsKLQkJCQkJCQlYU0xEZWJ1Z1VJUGx1Z2luLmxvZyhlKTsKLQkJCQkJCX0KLQkJCQkJCXN2LnJldmVhbFJhbmdlKHN2LmdldERvY3VtZW50KCkuZ2V0TGVuZ3RoKCksMCk7Ci0JCQkJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5hY3RpdmF0ZShSZXN1bHRWaWV3LnRoaXMpOwotCQkJCQl9Ci0JCQkJfSk7Ci0JCQl9Ci0JCX0pOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmI3YTIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjM1OGMyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0Y2RlZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jTW9uIEF1ZyAwNCAxNTo1NDoxOCBCU1QgMjAwOAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzOTAxOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1WZW5kb3I6ICV2ZW5kb3JOYW1lCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLVJlcXVpcmUtQnVuZGxlOiBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZztidW5kbGUtdmVyc2lvbj0iWzEuMC40LDEuMi4wKSI7dmlzaWJpbGl0eTo9cmVleHBvcnQKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzAwMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkF1Z3VzdCwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9idWlsZC5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0NDY3NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBlMGNhMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnCi12ZW5kb3JOYW1lID0gRWNsaXBzZS5vcmcKLXBsdWdpbk5hbWUgPSBYU0wgSkFYUCBEZWJ1Z2dlciAoSW5jdWJhdGluZykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvbG9nNGoucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9sb2c0ai5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWJiNTUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9sb2c0ai5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIyBTZXQgcm9vdCBsb2dnZXIgbGV2ZWwgdG8gREVCVUcgYW5kIGl0cyBhcHBlbmRlcnMgYXJlIEExIGFuZCBBMgotbG9nNGoucm9vdExvZ2dlcj1ERUJVRywgQTIKLQotIyBBMiBpcyBzZXQgdG8gYmUgYSBDb25zb2xlQXBwZW5kZXIKLWxvZzRqLmFwcGVuZGVyLkEyPW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyCi0KLSMgQTIgdXNlcyBQYXR0ZXJuTGF5b3V0LgotbG9nNGouYXBwZW5kZXIuQTIubGF5b3V0PW9yZy5hcGFjaGUubG9nNGouUGF0dGVybkxheW91dAotbG9nNGouYXBwZW5kZXIuQTIubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVke0hIOm1tOnNzLFNTU30gJS01cCBbJXRdICVjezF9ICV4IC0gJW0lbgotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0Fic3RyYWN0RGVidWdnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvQWJzdHJhY3REZWJ1Z2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDk5OTA0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvQWJzdHJhY3REZWJ1Z2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5JWFNMRGVidWdnZXI8L2NvZGU+LgotICogCi0gKiBUaGlzIGNsYXNzIGNhbiBiZSBzdWJjbGFzc2VkIGluIG9yZGVyIHRvIHByb3ZpZGUgZGVidWdnaW5nIGZvciBhIHBhcnRpY3VsYXIgWFNMVCBwcm9jZXNzb3IuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGVidWdnZXIgaW1wbGVtZW50cyBJWFNMRGVidWdnZXIKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coQWJzdHJhY3REZWJ1Z2dlci5jbGFzcyk7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX0RPX05PVEhJTkcgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fU1RPUCA9IDE7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9RVUlUID0gMjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX1NVU1BFTkQgPSAzOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fUkVTVU1FID0gNDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX1NURVBfSU5UTyA9IDU7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9TVEVQX09WRVIgPSA2OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fU1RFUF9SRVRVUk4gPSA3OwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVWRU5UX1NUQVJURUQgPSAic3RhcnRlZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVZFTlRfU1RPUFBFRCA9ICJzdG9wcGVkIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFVkVOVF9TVVNQRU5ERUQgPSAic3VzcGVuZGVkIGNsaWVudCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVZFTlRfU1VTUEVOREVEX1NURVAgPSAic3VzcGVuZGVkIHN0ZXAiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVWRU5UX1JFU1VNRUQgPSAicmVzdW1lZCBjbGllbnQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVWRU5UX1JFU1VNRURfU1RFUCA9ICJyZXN1bWVkIHN0ZXAiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIElQcm9jZXNzb3JJbnZva2VyIGludm9rZXI7Ci0JcHJpdmF0ZSBpbnQgYWN0aW9uOwotCXByaXZhdGUgV3JpdGVyIGV2ZW50V3JpdGVyOwotCXByaXZhdGUgV3JpdGVyIGdlbmVyYXRlZFdyaXRlcjsKLQlwcml2YXRlIGZpbmFsIFNldCBicmVha3BvaW50cyA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZFNldChuZXcgSGFzaFNldCgpKTsKLQlwcml2YXRlIGZpbmFsIFN0YWNrIHN0YWNrID0gbmV3IFN0YWNrKCk7Ci0JcHJpdmF0ZSBTdHlsZUZyYW1lIHN0ZXBPdmVyRnJhbWU7Ci0JcHJpdmF0ZSBCcmVha1BvaW50IGJyZWFrcG9pbnQ7Ci0JcHJpdmF0ZSBVUkwgc291cmNlVVJMOwotCXByaXZhdGUgUmVzdWx0IHJlc3VsdDsKLQotCXByaXZhdGUgaW50IHN0ZXBPdmVyU3RhY2tTaXplOwotCi0JcHVibGljIHZvaWQgc2V0SW52b2tlcihJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyKQotCXsKLQkJdGhpcy5pbnZva2VyID0gaW52b2tlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRFdmVudFdyaXRlcihXcml0ZXIgd3JpdGVyKQotCXsKLQkJZXZlbnRXcml0ZXIgPSB3cml0ZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0R2VuZXJhdGVkV3JpdGVyKFdyaXRlciB3cml0ZXIpCi0JewotCQl0aGlzLmdlbmVyYXRlZFdyaXRlciA9IHdyaXRlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2UoVVJMIHNvdXJjZVVSTCkKLQl7Ci0JCXRoaXMuc291cmNlVVJMID0gc291cmNlVVJMOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhcmdldChmaW5hbCBXcml0ZXIgd3JpdGVyKQotCXsKLQkJcmVzdWx0ID0gbmV3IFN0cmVhbVJlc3VsdChuZXcgV3JpdGVyKCl7Ci0JCQlwdWJsaWMgdm9pZCB3cml0ZShjaGFyW10gY2J1ZiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0JCQl7Ci0JCQkJd3JpdGVyLndyaXRlKGNidWYsIG9mZiwgbGVuKTsKLQkJCQlnZW5lcmF0ZWRXcml0ZXIud3JpdGUoY2J1ZixvZmYsbGVuKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24KLQkJCXsKLQkJCQl3cml0ZXIuY2xvc2UoKTsKLQkJCQlnZW5lcmF0ZWRXcml0ZXIuY2xvc2UoKTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZmx1c2goKSB0aHJvd3MgSU9FeGNlcHRpb24KLQkJCXsKLQkJCQl3cml0ZXIuZmx1c2goKTsKLQkJCQlnZW5lcmF0ZWRXcml0ZXIuZmx1c2goKTsKLQkJCX0KLQkJfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcnVuKCkKLQl7Ci0JCWlmIChhY3Rpb24gIT0gQUNUSU9OX1FVSVQpCi0JCXsKLQkJCWRlYnVnZ2VyU3RhcnRlZCgpOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJaW52b2tlci50cmFuc2Zvcm0oc291cmNlVVJMLCByZXN1bHQpOwotCQkJfQotCQkJY2F0Y2ggKFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJbG9nLmVycm9yKCJUcmFuc2Zvcm0gZmFpbGVkIiwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWRlYnVnZ2VyU3RvcHBlZCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN1c3BlbmQoKQotCXsKLQkJYWN0aW9uID0gQUNUSU9OX1NVU1BFTkQ7Ci0JCW5vdGlmeSgpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXN1bWUoKQotCXsKLQkJYWN0aW9uID0gQUNUSU9OX1JFU1VNRTsKLQkJbm90aWZ5KCk7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0ZXBJbnRvKCkKLQl7Ci0JCWFjdGlvbiA9IEFDVElPTl9TVEVQX0lOVE87Ci0JCW5vdGlmeSgpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdGVwT3ZlcigpCi0JewotCQlhY3Rpb24gPSBBQ1RJT05fU1RFUF9PVkVSOwotCQlzdGVwT3ZlckZyYW1lID0gcGVla1N0eWxlRnJhbWUoKTsKLQkJc3RlcE92ZXJTdGFja1NpemUgPSBzdGFjay5zaXplKCk7Ci0JCW5vdGlmeSgpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdGVwUmV0dXJuKCkKLQl7Ci0JCWFjdGlvbiA9IEFDVElPTl9TVEVQX1JFVFVSTjsKLQkJc3RlcE92ZXJTdGFja1NpemUgPSBzdGFjay5zaXplKCk7Ci0JCW5vdGlmeSgpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBxdWl0KCkKLQl7Ci0JCWFjdGlvbiA9IEFDVElPTl9RVUlUOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgc3RhY2soKQotCXsKLQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzeW5jaHJvbml6ZWQgKHN0YWNrKQotCQl7Ci0JCQlmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBzdGFjay5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCQl7Ci0JCQkJU3R5bGVGcmFtZSBmcmFtZSA9IChTdHlsZUZyYW1lKSBpdGVyLm5leHQoKTsKLQkJCQlzYi5hcHBlbmQoZnJhbWUudG9TdHJpbmcoKSk7Ci0JCQkJZm9yIChJdGVyYXRvciBpdGVyMiA9IGZyYW1lLmdldFZhcmlhYmxlU3RhY2soKS5pdGVyYXRvcigpOyBpdGVyMi5oYXNOZXh0KCk7KQotCQkJCXsKLQkJCQkJc2IuYXBwZW5kKCJ8Iik7IC8vJE5PTi1OTFMtMSQKLQkJCQkJVmFyaWFibGUgdiA9IChWYXJpYWJsZSkgaXRlcjIubmV4dCgpOwotCQkJCQlzYi5hcHBlbmQodi5nZXRJZCgpKTsKLQkJCQl9Ci0JCQkJaWYgKGl0ZXIuaGFzTmV4dCgpKQotCQkJCQlzYi5hcHBlbmQoIiQkJCIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgd2hldGhlciB0aGUgZGVidWdnZXIgaGFzIGJlZW4gc3RvcHBlZCBhbmQgcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uIGlmIHNvLgotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjaGVja1N0b3BwZWQoKQotCXsKLQkJaWYgKGFjdGlvbiA9PSBBQ1RJT05fUVVJVCkKLQkJCWRlYnVnZ2VyUXVpdCgpOwotCQllbHNlIGlmIChhY3Rpb24gPT0gQUNUSU9OX1NUT1ApCi0JCQlkZWJ1Z2dlclN0b3BwZWQoKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayB3aGV0aGVyIHRoZSBkZWJ1Z2dlciBpcyBjdXJyZW50bHkgc3VzcGVuZGVkIG9yIHN0ZXBwaW5nIGF0IHRoZSBnaXZlbiBicmVha3BvaW50IGFuZCBzdHlsZSBmcmFtZSwgCi0JICogYW5kIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZiBzby4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVGcmFtZSB0aGUgc3R5bGVmcmFtZSB0byBjaGVjawotCSAqIEBwYXJhbSBicmVha3BvaW50IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNoZWNrU3VzcGVuZGVkKFN0eWxlRnJhbWUgc3R5bGVGcmFtZSwgQnJlYWtQb2ludCBicmVha3BvaW50KQotCXsKLQkJLy8gZG8gbm90IHN1c3BlbmQgdW5sZXNzIHRoZSBsaW5lIGFjdHVhbGx5IGNoYW5nZWQKLQkJaWYgKGJyZWFrcG9pbnQuZXF1YWxzKHRoaXMuYnJlYWtwb2ludCkpCi0JCQlyZXR1cm47Ci0JCWludCBzdGFja1NpemU7Ci0JCXN5bmNocm9uaXplZCAoc3RhY2spCi0JCXsKLQkJCXN0YWNrU2l6ZSA9IHN0YWNrLnNpemUoKTsKLQkJfQotCQkvLyBkbyBub3Qgc3VzcGVuZCBpZiB0aGVyZSBpcyBub3RoaW5nIGluIHRoZSBzdGFjawotCQlpZiAoc3RhY2tTaXplID09IDApCi0JCQlyZXR1cm47Ci0JCXN3aXRjaCAoYWN0aW9uKQotCQl7Ci0JCQljYXNlIEFDVElPTl9TVVNQRU5EOgotCQkJCWRlYnVnZ2VyU3VzcGVuZGVkQ2xpZW50KGJyZWFrcG9pbnQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBQ1RJT05fU1RFUF9PVkVSOgotCQkJCS8vIHN1c3BlbmQgaWYgd2UgYXJlIGluIHRoZSBzYW1lIHRlbXBsYXRlIG9yIHdlIGFyZSBtb3ZpbmcgdXAgdGhlIHN0YWNrCi0JCQkJaWYgKHN0eWxlRnJhbWUuZXF1YWxzKHN0ZXBPdmVyRnJhbWUpIHx8IHN0YWNrU2l6ZSA8IHN0ZXBPdmVyU3RhY2tTaXplKQotCQkJCQlkZWJ1Z2dlclN1c3BlbmRlZFN0ZXAoYnJlYWtwb2ludCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFDVElPTl9TVEVQX0lOVE86Ci0JCQkJZGVidWdnZXJTdXNwZW5kZWRTdGVwKGJyZWFrcG9pbnQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBQ1RJT05fU1RFUF9SRVRVUk46Ci0JCQkJLy8gc3VzcGVuZCBpZiB3ZSBtb3ZlZCB1cCB0aGUgc3RhY2sKLQkJCQlpZiAoc3RhY2tTaXplIDwgc3RlcE92ZXJTdGFja1NpemUpCi0JCQkJCWRlYnVnZ2VyU3VzcGVuZGVkU3RlcChicmVha3BvaW50KTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJY2hlY2tCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBjaGVja0JyZWFrcG9pbnQoQnJlYWtQb2ludCBicmVha3BvaW50KQotCXsKLQkJaWYgKGlzQnJlYWtwb2ludChicmVha3BvaW50KSkKLQkJCWRlYnVnZ2VyU3VzcGVuZGVkQnJlYWtwb2ludChicmVha3BvaW50KTsKLQl9Ci0KLQkvKioKLQkgKiBDYWxsZWQgd2hlbiB0aGUgbmV4dCB0cmFuc2Zvcm0gaW4gdGhlIHBpcGVsaW5lIGhhcyBiZWd1bi4KLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJUcmFuc2Zvcm1TdGFydGVkKCkKLQl7Ci0JCXN0YWNrLmNsZWFyKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHN5bmNocm9uaXplZCB2b2lkIGRlYnVnZ2VyU3RhcnRlZCgpCi0JewotCQlhY3Rpb24gPSBBQ1RJT05fRE9fTk9USElORzsKLQkJc2VuZEV2ZW50KEVWRU5UX1NUQVJURUQpOwotCX0KLQotCXByb3RlY3RlZCBzeW5jaHJvbml6ZWQgdm9pZCBkZWJ1Z2dlclN0b3BwZWQoKQotCXsKLQkJYWN0aW9uID0gQUNUSU9OX0RPX05PVEhJTkc7Ci0JCXNlbmRFdmVudChFVkVOVF9TVE9QUEVEKTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIGRlYnVnZ2VyUXVpdCgpCi0JewotCQkvLyBqdXN0IHdhaXQgaGVyZSBpbmRlZmluaXRlbHkgdW50aWwgdGhlIEpWTSBleGlzdHMsIGp1c3QgdG8gbWFrZSBzdXJlCi0JCS8vIHdlIGRvbid0IHNlbmQgYW55IGZ1cnRoZXIgZXZlbnRzCi0JCXRyeQotCQl7Ci0JCQl3YWl0KCk7Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0JCXsKLQkJfQotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJTdXNwZW5kZWRCcmVha3BvaW50KEJyZWFrUG9pbnQgYnJlYWtwb2ludCkKLQl7Ci0JCXNlbmRFdmVudCgic3VzcGVuZGVkIGJyZWFrcG9pbnQgIiArIGJyZWFrcG9pbnQpOyAvLyROT04tTkxTLTEkCi0JCWRlYnVnZ2VyU3VzcGVuZGVkKGJyZWFrcG9pbnQpOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJTdXNwZW5kZWRTdGVwKEJyZWFrUG9pbnQgYnJlYWtwb2ludCkKLQl7Ci0JCXNlbmRFdmVudChFVkVOVF9TVVNQRU5ERURfU1RFUCk7Ci0JCWRlYnVnZ2VyU3VzcGVuZGVkKGJyZWFrcG9pbnQpOwotCX0KLQotCXByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJTdXNwZW5kZWRDbGllbnQoQnJlYWtQb2ludCBicmVha3BvaW50KQotCXsKLQkJc2VuZEV2ZW50KEVWRU5UX1NVU1BFTkRFRCk7Ci0JCWRlYnVnZ2VyU3VzcGVuZGVkKGJyZWFrcG9pbnQpOwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkZWJ1Z2dlclN1c3BlbmRlZChCcmVha1BvaW50IGJyZWFrcG9pbnQpCi0JewotCQl0aGlzLmJyZWFrcG9pbnQgPSBicmVha3BvaW50OwotCQlkbwotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQl3YWl0KCk7Ci0JCQl9Ci0JCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLQkJCXsKLQkJCX0KLQkJfQotCQl3aGlsZSAoYWN0aW9uICE9IEFDVElPTl9SRVNVTUUgJiYgYWN0aW9uICE9IEFDVElPTl9TVEVQX0lOVE8gJiYgYWN0aW9uICE9IEFDVElPTl9TVEVQX09WRVIgJiYgYWN0aW9uICE9IEFDVElPTl9TVEVQX1JFVFVSTiAmJiBhY3Rpb24gIT0gQUNUSU9OX1NUT1ApOwotCQlkZWJ1Z2dlclJlc3VtZWQoKTsKLQl9Ci0KLQlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIGRlYnVnZ2VyUmVzdW1lZCgpCi0JewotCQlpZiAoYWN0aW9uID09IEFDVElPTl9TVEVQX0lOVE8gfHwgYWN0aW9uID09IEFDVElPTl9TVEVQX09WRVIgfHwgYWN0aW9uID09IEFDVElPTl9TVEVQX1JFVFVSTikKLQkJCXNlbmRFdmVudChFVkVOVF9SRVNVTUVEX1NURVApOwotCQllbHNlCi0JCQlzZW5kRXZlbnQoRVZFTlRfUkVTVU1FRCk7Ci0JfQotCi0JcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBzZW5kRXZlbnQoU3RyaW5nIGV2ZW50KQotCXsKLQkJdHJ5Ci0JCXsKLQkJCWxvZy5pbmZvKCJTZW5kaW5nIGV2ZW50OiAiICsgZXZlbnQrIiBldmVudFdyaXRlcj0iK2V2ZW50V3JpdGVyKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0JCQlldmVudFdyaXRlci53cml0ZShldmVudCArICJcbiIpOyAvLyROT04tTkxTLTEkCi0JCQlldmVudFdyaXRlci5mbHVzaCgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlsb2cuZXJyb3IoIkVycm9yIHNlbmRpbmcgZXZlbnQiLCBlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkQnJlYWtwb2ludChCcmVha1BvaW50IGJyZWFrcG9pbnQpCi0JewotCQlsb2cuaW5mbygiQWRkaW5nIGJyZWFrcG9pbnQ6ICIgKyBicmVha3BvaW50KTsgLy8kTk9OLU5MUy0xJAotCQlicmVha3BvaW50cy5hZGQoYnJlYWtwb2ludCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChCcmVha1BvaW50IGJyZWFrcG9pbnQpCi0JewotCQlsb2cuaW5mbygiUmVtb3ZpbmcgYnJlYWtwb2ludDogIiArIGJyZWFrcG9pbnQpOyAvLyROT04tTkxTLTEkCi0JCWJyZWFrcG9pbnRzLnJlbW92ZShicmVha3BvaW50KTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNCcmVha3BvaW50KEJyZWFrUG9pbnQgYnJlYWtwb2ludCkKLQl7Ci0JCS8vIGRvIG5vdCBjaGVjayBmb3IgYnJlYWtwb2ludCB1bmxlc3MgdGhlIGxpbmUgb3IgZmlsZW5hbWUgYWN0dWFsbHkgY2hhbmdlZAotCQlpZiAoYnJlYWtwb2ludC5lcXVhbHModGhpcy5icmVha3BvaW50KSkKLQkJCXJldHVybiBmYWxzZTsKLQkJdGhpcy5icmVha3BvaW50ID0gbnVsbDsKLQkJcmV0dXJuIGJyZWFrcG9pbnRzLmNvbnRhaW5zKGJyZWFrcG9pbnQpOwotCX0KLQkKLQkvKioKLQkgKiBQb3AgYSBzdHlsZSBmcmFtZSBmcm9tIHRoZSBzdGFjay4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBwb3BwZWQgc3R5bGUgZnJhbWUKLQkgKi8KLQlwdWJsaWMgU3R5bGVGcmFtZSBwb3BTdHlsZUZyYW1lKCkKLQl7Ci0JCXN5bmNocm9uaXplZCAoc3RhY2spCi0JCXsKLQkJCVN0eWxlRnJhbWUgc3R5bGVGcmFtZSA9IChTdHlsZUZyYW1lKSBzdGFjay5wb3AoKTsKLQkJCWlmIChzdHlsZUZyYW1lLmdldFBhcmVudCgpICE9IG51bGwpCi0JCQkJc3R5bGVGcmFtZS5nZXRQYXJlbnQoKS5yZW1vdmVDaGlsZChzdHlsZUZyYW1lKTsKLQkJCWxvZy50cmFjZSgiUG9wcGVkIGZyYW1lOiAiICsgc3R5bGVGcmFtZSArICIgKHNpemUgYWZ0ZXIgcG9wPSIgKyBzdGFjay5zaXplKCkgKyAiKSIpOyAgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0zJAotCQkJcmV0dXJuIHN0eWxlRnJhbWU7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBQdXNoIGEgc3R5bGUgZnJhbWUgb250byB0aGUgc3RhY2suCi0JICogCi0JICogQHBhcmFtIHN0eWxlRnJhbWUKLQkgKi8KLQlwdWJsaWMgdm9pZCBwdXNoU3R5bGVGcmFtZShTdHlsZUZyYW1lIHN0eWxlRnJhbWUpCi0JewotCQlzeW5jaHJvbml6ZWQgKHN0YWNrKQotCQl7Ci0JCQlzdGFjay5wdXNoKHN0eWxlRnJhbWUpOwotCQkJbG9nLnRyYWNlKCJQdXNoZWQgZnJhbWU6ICIgKyBzdHlsZUZyYW1lICsgIiAoc2l6ZSBhZnRlciBwdXNoPSIgKyBzdGFjay5zaXplKCkgKyAiKSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQl9Ci0JfQotCi0JLyoqCi0JICogUGVlayBhIHN0eWxlIGZyYW1lIGZyb20gdGhlIHN0YWNrLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHBlZWtlZCBzdHlsZSBmcmFtZQotCSAqLwotCXB1YmxpYyBTdHlsZUZyYW1lIHBlZWtTdHlsZUZyYW1lKCkKLQl7Ci0JCXN5bmNocm9uaXplZCAoc3RhY2spCi0JCXsKLQkJCWlmIChzdGFjay5zaXplKCkgPiAwKQotCQkJCXJldHVybiAoU3R5bGVGcmFtZSkgc3RhY2sucGVlaygpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQl9CQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9CcmVha1BvaW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0JyZWFrUG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI2MDAwZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0JyZWFrUG9pbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotLyoqCi0gKiBBIGxpbmUgbnVtYmVyIGluIGEgZmlsZS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgQnJlYWtQb2ludAotewotCXByaXZhdGUgU3RyaW5nIGZpbGU7Ci0JcHJpdmF0ZSBmaW5hbCBpbnQgbGluZTsKLQotCS8qKgotCSAqIENvbnN0cnVjdCBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGZvciB0aGUgZ2l2ZW4gZmlsZSBhbmQgbGluZSBudW1iZXIuCi0JICogCi0JICogQHBhcmFtIGZpbGUgdGhlIGZpbGUgcGF0aAotCSAqIEBwYXJhbSBsaW5lIHRoZSBsaW5lIG51bWJlcgotCSAqLwotCXB1YmxpYyBCcmVha1BvaW50KFN0cmluZyBmaWxlLCBpbnQgbGluZSkKLQl7Ci0JCXRoaXMuZmlsZSA9IGZpbGU7Ci0JCXRoaXMubGluZSA9IGxpbmU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBmaWxlIGxvY2F0aW9uLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGZpbGUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEZpbGUoKQotCXsKLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBsaW5lIG51bWJlcgotCSAqIAotCSAqIEByZXR1cm4gdGhlIGxpbmUgbnVtYmVyCi0JICovCi0JcHVibGljIGludCBnZXRMaW5lKCkKLQl7Ci0JCXJldHVybiBsaW5lOwotCX0KLQotCXB1YmxpYyBpbnQgaGFzaENvZGUoKQotCXsKLQkJaW50IGhhc2ggPSAzICogZmlsZS5oYXNoQ29kZSgpICsgNSAqIGxpbmU7Ci0JCXJldHVybiBoYXNoOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKQotCXsKLQkJaWYgKG9iaiA9PSB0aGlzKQotCQkJcmV0dXJuIHRydWU7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBCcmVha1BvaW50KQotCQl7Ci0JCQlCcmVha1BvaW50IGIgPSAoQnJlYWtQb2ludCkgb2JqOwotCQkJcmV0dXJuIGIuZmlsZS5lcXVhbHMoZmlsZSkgJiYgYi5saW5lID09IGxpbmU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCXsKLQkJcmV0dXJuIGZpbGUgKyAiICIgKyBsaW5lOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9EZWJ1Z0NvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9EZWJ1Z0NvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzgzYTI5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvRGVidWdDb25zdGFudHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlcjsKLQotLyoqCi0gKiBDb25zdGFudHMgdXNlZCBieSB0aGUgZGVidWdnZXIuCi0gKiAKLSAqIDxwPgotICogTm90ZSB0aGF0IGNsYXNzIGlzIGxvYWRlZCBib3RoIG9uIHRoZSBFY2xpcHNlIGNsYXNzcGF0aCBhbmQgdGhlIAotICogbGF1bmNoZWQgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcywgc3VjaCB0aGF0IHRoZXkgY2FuIHVzZSBleGFjdGx5IHRoZSBzYW1lIGNvbnN0YW50cwotICogZm9yIGNvbW11bmljYXRpb24uCi0gKiA8L3A+Ci0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIERlYnVnQ29uc3RhbnRzCi17Ci0JLyoqCi0JICogVGhlIGNvbnN0YW50IHVzZWQgdG8gbm90aWZ5IHRoZSBkZWJ1Z2dlciB0byBzdGFydC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUX1NUQVJUID0gInN0YXJ0IjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgYWRkaXRpb24gb2YgYSBicmVha3BvaW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfQUREX0JSRUFLUE9JTlQgPSAiYWRkIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgcmVtb3ZhbCBvZiBhIGJyZWFrcG9pbnQuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9SRU1PVkVfQlJFQUtQT0lOVCA9ICJyZW1vdmUiOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogVGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSBzdGVwIGludG8uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9TVEVQX0lOVE8gPSAic3RlcCBpbnRvIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3RlcCBvdmVyLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfU1RFUF9PVkVSID0gInN0ZXAgb3ZlciI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IHN1c3BlbnNpb24uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9TVVNQRU5EID0gInN1c3BlbmQiOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogVGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSByZXN1bWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9SRVNVTUUgPSAicmVzdW1lIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHJlcXVlc3QgdGhlIHN0YWNrLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfU1RBQ0sgPSAic3RhY2siOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogVGhlIGNvbnN0YW50IHVzZWQgdG8gcmVxdWVzdCBhIHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfVkFSSUFCTEUgPSAidmFyIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHJlcXVlc3QgYSB2YXJpYWJsZSB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUX1ZBTFVFID0gInZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCS8qKgotCSAqIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3RlcCByZXR1cm4uCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9TVEVQX1JFVFVSTiA9ICJzdGVwIHJldHVybiI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvRGVidWdSdW5uZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvRGVidWdSdW5uZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJlMWNlMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL0RlYnVnUnVubmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS5uZXQuU2VydmVyU29ja2V0OwotaW1wb3J0IGphdmEubmV0LlNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5VUklSZXNvbHZlcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnNheC5TQVhTb3VyY2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5QaXBlbGluZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuVHJhbnNmb3JtYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuSkFYUFNBWFByb2Nlc3Nvckludm9rZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci0KLS8qKgotICogVGhlIGVudHJ5IHBvaW50IHRvIHRoZSBkZWJ1ZyBwcm9jZXNzIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBhIGRlYnVnZ2VyIAotICogYW5kIHRoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBFY2xpcHNlIHByb2Nlc3MgdmlhIHNvY2tldHMgdXNpbmcgYSBjb21tb24gc2V0IG9mIGNvbW1hbmRzLgotICogCi0gKiA8dWw+Ci0gKiA8bGk+aW5zdGFudGlhdGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPklYU0xEZWJ1Z2dlcjwvY29kZT4KLSAqIDxsaT5jb25maWd1cmVzIHRoZSBkZWJ1Z2dlciB3aXRoIHRoZSB0cmFuc2Zvcm1hdGlvbiBwaXBlbGluZQotICogPGxpPnN0YXJ0cyB0aGUgZGVidWdnZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQKLSAqIDxsaT50aGUgbWFpbiB0aHJlYWQgaXMgdGhlbiB1c2VkIHRvIGxpc3RlbiB0byBpbmNvbWluZyByZXF1ZXN0cyBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgZGVidWdnZXIgbWV0aG9kcwotICogPC91bD4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgRGVidWdSdW5uZXIKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coRGVidWdSdW5uZXIuY2xhc3MpOwotCi0JcHJpdmF0ZSBmaW5hbCBCdWZmZXJlZFJlYWRlciByZXF1ZXN0SW47Ci0JcHJpdmF0ZSBmaW5hbCBXcml0ZXIgcmVxdWVzdE91dDsKLQlwcml2YXRlIGZpbmFsIFdyaXRlciBldmVudE91dDsKLQlwcml2YXRlIGZpbmFsIFdyaXRlciBnZW5lcmF0ZWRTdHJlYW07Ci0JcHJpdmF0ZSBTb2NrZXQgZXZlbnRTb2NrZXQ7Ci0JcHJpdmF0ZSBTb2NrZXQgcmVxdWVzdFNvY2tldDsKLQlwcml2YXRlIFNvY2tldCBnZW5lcmF0ZVNvY2tldDsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHVzaW5nIHRoZSBzdXBwbGllZCByZWFkZXJzIGFuZCB3cml0ZXJzLgotCSAqIAotCSAqIEBwYXJhbSByZXF1ZXN0SW4gdGhlIHJlYWRlciBmb3IgcmVhZGluZyBpbmNvbWluZyByZXF1ZXN0cwotCSAqIEBwYXJhbSByZXF1ZXN0T3V0IHRoZSB3cml0ZXIgZm9yIGFja25vd2xlZGdpbmcgcmVxdWVzdHMKLQkgKiBAcGFyYW0gZXZlbnRPdXQgdGhlIHdyaXRlciBmb3IgcHVibGlzaGluZyBkZWJ1ZyBldmVudHMKLQkgKi8KLQlwdWJsaWMgRGVidWdSdW5uZXIoQnVmZmVyZWRSZWFkZXIgcmVxdWVzdEluLCBQcmludFdyaXRlciByZXF1ZXN0T3V0LCBQcmludFdyaXRlciBldmVudE91dCwgUHJpbnRXcml0ZXIgZ2VuZXJhdGVkU3RyZWFtKQotCXsKLQkJdGhpcy5yZXF1ZXN0T3V0ID0gcmVxdWVzdE91dDsKLQkJdGhpcy5yZXF1ZXN0SW4gPSByZXF1ZXN0SW47Ci0JCXRoaXMuZXZlbnRPdXQgPSBldmVudE91dDsKLQkJdGhpcy5nZW5lcmF0ZWRTdHJlYW0gPSBnZW5lcmF0ZWRTdHJlYW07Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgZ2l2ZW4gYSByZXF1ZXN0IHBvcnQgYW5kIGFuIGV2ZW50IHBvcnQuCi0JICogCi0JICogQHBhcmFtIHJlcXVlc3RQb3J0IHRoZSBwb3J0IHRvIGxpc3RlbiB0byByZXF1ZXN0cyBhbmQgc2VuZCBhY2tub3dsZWRnZW1lbnRzCi0JICogQHBhcmFtIGV2ZW50UG9ydCB0aGUgcG9ydCBmb3IgcHVibGlzaGluZyBkZWJ1ZyBldmVudHMKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gb3BlbmluZyBhIHNvY2tldAotCSAqLwotCXB1YmxpYyBEZWJ1Z1J1bm5lcihpbnQgcmVxdWVzdFBvcnQsIGludCBldmVudFBvcnQsIGludCBnZW5lcmF0ZVBvcnQpIHRocm93cyBJT0V4Y2VwdGlvbgotCXsKLQkJcmVxdWVzdFNvY2tldCA9IGdldFNvY2tldChyZXF1ZXN0UG9ydCk7Ci0JCWV2ZW50U29ja2V0ID0gZ2V0U29ja2V0KGV2ZW50UG9ydCk7Ci0JCWdlbmVyYXRlU29ja2V0ID0gZ2V0U29ja2V0KGdlbmVyYXRlUG9ydCk7Ci0JCXJlcXVlc3RJbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocmVxdWVzdFNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCXJlcXVlc3RPdXQgPSBuZXcgUHJpbnRXcml0ZXIocmVxdWVzdFNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKSwgdHJ1ZSk7Ci0JCWV2ZW50T3V0ID0gbmV3IFByaW50V3JpdGVyKGV2ZW50U29ja2V0LmdldE91dHB1dFN0cmVhbSgpLCB0cnVlKTsKLQkJZ2VuZXJhdGVkU3RyZWFtID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBQcmludFdyaXRlcihnZW5lcmF0ZVNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKSwgdHJ1ZSkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgZ2l2ZW4gZGVidWdnZXIgaW4gaXRzIG93biB0aHJlYWQsIGFuZCBibG9ja3Mgd2hpbGUgd2FpdGluZyAKLQkgKiBmb3IgaW5jb21pbmcgcmVxdWVzdHMgZnJvbSB0aGUgcmVxdWVzdCBwb3J0LCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZXF1ZXN0cy4KLQkgKiAKLQkgKiBAcGFyYW0gZGVidWdnZXIgdGhlIGRlYnVnZ2VyIHRvIHN0YXJ0IGluIGEgdGhyZWFkCi0JICogQHRocm93cyBUcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbiBpZiBhIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdHJhbnNmb3JtaW5nCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLQkgKi8KLQlwdWJsaWMgdm9pZCBsb29wKElYU0xEZWJ1Z2dlciBkZWJ1Z2dlcikgdGhyb3dzIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotCXsKLQkJZGVidWdnZXIuc2V0RXZlbnRXcml0ZXIoZXZlbnRPdXQpOwotCQlkZWJ1Z2dlci5zZXRHZW5lcmF0ZWRXcml0ZXIoZ2VuZXJhdGVkU3RyZWFtKTsKLQkJU3RyaW5nIGlucHV0TGluZSwgcmVzcG9uc2U7Ci0JCS8vIHNpZ25hbCB3ZSBhcmUgcmVhZHkgdG8gcmVjZWl2ZSByZXF1ZXN0cwotCQlldmVudE91dC53cml0ZSgicmVhZHlcbiIpOyAvLyROT04tTkxTLTEkCi0JCWV2ZW50T3V0LmZsdXNoKCk7Ci0JCWxvZy5kZWJ1ZygiZW50ZXJpbmcgbG9vcCIpOyAvLyROT04tTkxTLTEkCi0JCXRyeQotCQl7Ci0JCQl3aGlsZSAoKGlucHV0TGluZSA9IHJlcXVlc3RJbi5yZWFkTGluZSgpKSAhPSBudWxsKQotCQkJewotCQkJCXJlc3BvbnNlID0gaW5wdXRMaW5lOwotCQkJCWxvZy5kZWJ1ZygiUkVRVUVTVDoiICsgaW5wdXRMaW5lKTsgLy8kTk9OLU5MUy0xJAotCQkJCVRocmVhZCBkZWJ1Z2dlclRocmVhZCA9IG51bGw7Ci0JCQkJaWYgKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RBUlQuZXF1YWxzKGlucHV0TGluZSkpCi0JCQkJewotCQkJCQlkZWJ1Z2dlclRocmVhZCA9IG5ldyBUaHJlYWQoZGVidWdnZXIsICJkZWJ1Z2dlciIpOyAvLyROT04tTkxTLTEkCi0JCQkJCWRlYnVnZ2VyVGhyZWFkLnN0YXJ0KCk7Ci0JCQkJfQotCQkJCS8qCi0JCQkJICogZWxzZSBpZiAoUkVRVUVTVF9RVUlULmVxdWFscyhpbnB1dExpbmUpKSB7IH0KLQkJCQkgKi8KLQkJCQllbHNlIGlmIChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NURVBfSU5UTy5lcXVhbHMoaW5wdXRMaW5lKSkKLQkJCQl7Ci0JCQkJCWRlYnVnZ2VyLnN0ZXBJbnRvKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RFUF9PVkVSLmVxdWFscyhpbnB1dExpbmUpKQotCQkJCXsKLQkJCQkJZGVidWdnZXIuc3RlcE92ZXIoKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEVQX1JFVFVSTi5lcXVhbHMoaW5wdXRMaW5lKSkKLQkJCQl7Ci0JCQkJCWRlYnVnZ2VyLnN0ZXBSZXR1cm4oKTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVVNQRU5ELmVxdWFscyhpbnB1dExpbmUpKQotCQkJCXsKLQkJCQkJZGVidWdnZXIuc3VzcGVuZCgpOwotCQkJCX0KLQkJCQllbHNlIGlmIChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1JFU1VNRS5lcXVhbHMoaW5wdXRMaW5lKSkKLQkJCQl7Ci0JCQkJCWRlYnVnZ2VyLnJlc3VtZSgpOwotCQkJCX0KLQkJCQllbHNlIGlmIChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NUQUNLLmVxdWFscyhpbnB1dExpbmUpKQotCQkJCXsKLQkJCQkJcmVzcG9uc2UgPSBkZWJ1Z2dlci5zdGFjaygpOwotCQkJCX0KLQkJCQllbHNlIGlmIChpbnB1dExpbmUuc3RhcnRzV2l0aChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1ZBUklBQkxFKSkKLQkJCQl7Ci0JCQkJCVN0cmluZyBkYXRhID0gaW5wdXRMaW5lLnN1YnN0cmluZyhEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1ZBUklBQkxFLmxlbmd0aCgpICsgMSk7Ci0JCQkJCWludCBpZCA9IEludGVnZXIucGFyc2VJbnQoZGF0YSk7Ci0JCQkJCVZhcmlhYmxlIHZhciA9IGRlYnVnZ2VyLmdldFZhcmlhYmxlKGlkKTsKLQkJCQkJbG9nLmRlYnVnKCJ2YXIgIitpZCsiID0gIit2YXIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQkJcmVzcG9uc2UgPSB2YXIuZ2V0U2NvcGUoKSArICImIiArIHZhci5nZXROYW1lKCk7IC8vJE5PTi1OTFMtMSQKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoaW5wdXRMaW5lLnN0YXJ0c1dpdGgoRGVidWdDb25zdGFudHMuUkVRVUVTVF9WQUxVRSkpCi0JCQkJewotCQkJCQlTdHJpbmcgZGF0YSA9IGlucHV0TGluZS5zdWJzdHJpbmcoRGVidWdDb25zdGFudHMuUkVRVUVTVF9WQUxVRS5sZW5ndGgoKSArIDEpOwotCQkJCQlpbnQgaWQgPSBJbnRlZ2VyLnBhcnNlSW50KGRhdGEpOwotCQkJCQlWYXJpYWJsZSB2YXIgPSBkZWJ1Z2dlci5nZXRWYXJpYWJsZShpZCk7Ci0JCQkJCXJlc3BvbnNlID0gIHZhci5nZXRUeXBlKCkgKyAiJiIgKyB2YXIuZ2V0VmFsdWVGaXJzdExpbmUoKTsgLy8kTk9OLU5MUy0xJAotCQkJCX0KLQkJCQllbHNlIGlmIChpbnB1dExpbmUuc3RhcnRzV2l0aChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX0FERF9CUkVBS1BPSU5UKSkKLQkJCQl7Ci0JCQkJCWludCBpbmRleCA9IGlucHV0TGluZS5sYXN0SW5kZXhPZignICcpOwotCQkJCQlTdHJpbmcgZmlsZSA9IGlucHV0TGluZS5zdWJzdHJpbmcoRGVidWdDb25zdGFudHMuUkVRVUVTVF9BRERfQlJFQUtQT0lOVC5sZW5ndGgoKSArIDEsIGluZGV4KTsKLQkJCQkJU3RyaW5nIGxpbmUgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JCQkJCUJyZWFrUG9pbnQgYnJlYWtwb2ludCA9IG5ldyBCcmVha1BvaW50KGZpbGUsIEludGVnZXIucGFyc2VJbnQobGluZSkpOwotCQkJCQlkZWJ1Z2dlci5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotCQkJCX0KLQkJCQllbHNlIGlmIChpbnB1dExpbmUuc3RhcnRzV2l0aChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1JFTU9WRV9CUkVBS1BPSU5UKSkKLQkJCQl7Ci0JCQkJCWludCBpbmRleCA9IGlucHV0TGluZS5sYXN0SW5kZXhPZignICcpOwotCQkJCQlTdHJpbmcgZmlsZSA9IGlucHV0TGluZS5zdWJzdHJpbmcoRGVidWdDb25zdGFudHMuUkVRVUVTVF9SRU1PVkVfQlJFQUtQT0lOVC5sZW5ndGgoKSArIDEsIGluZGV4KTsKLQkJCQkJU3RyaW5nIGxpbmUgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0JCQkJCUJyZWFrUG9pbnQgYnJlYWtwb2ludCA9IG5ldyBCcmVha1BvaW50KGZpbGUsIEludGVnZXIucGFyc2VJbnQobGluZSkpOwotCQkJCQlkZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlyZXNwb25zZSA9ICJXaGF0PyI7IC8vJE5PTi1OTFMtMSQKLQkJCQl9Ci0JCQkJLy8gY29uZmlybSByZXF1ZXN0Ci0JCQkJbG9nLmRlYnVnKCJSRVNQT05TRToiICsgcmVzcG9uc2UpOyAvLyROT04tTkxTLTEkCi0JCQkJcmVxdWVzdE91dC53cml0ZShyZXNwb25zZSArICJcbiIpOyAvLyROT04tTkxTLTEkCi0JCQkJcmVxdWVzdE91dC5mbHVzaCgpOwotCi0JCQkJLyoKLQkJCQkgKiBpZiAoUkVRVUVTVF9RVUlULmVxdWFscyhpbnB1dExpbmUpKSB7IHdhaXRGb3JGaW5pc2goZGVidWdnZXJUaHJlYWQpOyBicmVhazsgfQotCQkJCSAqLwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCQlsb2cuZGVidWcoImV4aXRlZCBsb29wIik7IC8vJE5PTi1OTFMtMSQKLQkJZXZlbnRPdXQud3JpdGUoInRlcm1pbmF0ZWRcbiIpOyAvLyROT04tTkxTLTEkCi0JCWV2ZW50T3V0LmZsdXNoKCk7Ci0JfQotCi0JLyoqCi0JICogRGlzcG9zZSBvZiB0aGlzIC0gY2xvc2UgYWxsIG9wZW4gc29ja2V0cy4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIAotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCWlmIChyZXF1ZXN0SW4gIT0gbnVsbCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJcmVxdWVzdEluLmNsb3NlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlsb2cuZXJyb3IoIkNvdWxkIG5vdCBjbG9zZSByZXF1ZXN0IGlucHV0IHN0cmVhbSIsIGUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJaWYgKHJlcXVlc3RPdXQgIT0gbnVsbCkKLQkJewotCQkJcmVxdWVzdE91dC5jbG9zZSgpOwotCQl9Ci0JCWlmIChldmVudE91dCAhPSBudWxsKQotCQl7Ci0JCQlldmVudE91dC5jbG9zZSgpOwotCQl9Ci0JCWlmIChyZXF1ZXN0U29ja2V0ICE9IG51bGwpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCXJlcXVlc3RTb2NrZXQuY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCWxvZy5lcnJvcigiQ291bGQgbm90IGNsb3NlIHJlcXVlc3Qgc29ja2V0IiwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCQlpZiAoZXZlbnRTb2NrZXQgIT0gbnVsbCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJZXZlbnRTb2NrZXQuY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJewotCQkJCWxvZy5lcnJvcigiQ291bGQgbm90IGNsb3NlIGV2ZW50IHNvY2tldCIsIGUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTb2NrZXQgZ2V0U29ja2V0KGludCBwb3J0KSB0aHJvd3MgSU9FeGNlcHRpb24KLQl7Ci0JCUluZXRBZGRyZXNzIGxvY2FsaG9zdCA9IEluZXRBZGRyZXNzLmdldEJ5TmFtZSgibG9jYWxob3N0Iik7IC8vJE5PTi1OTFMtMSQKLQkJU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQocG9ydCwgNSwgbG9jYWxob3N0KTsKLQkJU29ja2V0IGNsaWVudFNvY2tldCA9IHNlcnZlclNvY2tldC5hY2NlcHQoKTsKLQkJc2VydmVyU29ja2V0LmNsb3NlKCk7Ci0JCXJldHVybiBjbGllbnRTb2NrZXQ7Ci0JfQotCi0JLyoqCi0JICogRXhwZWN0ZWQgYXJndW1lbnRzOgotCSAqIAotCSAqIDxvbD4KLQkgKiA8bGk+dGhlIGNsYXNzIG5hbWUgb2YgdGhlIGludm9rZXIKLQkgKiA8bGk+dGhlIGZpbGUgbmFtZSBvZiB0aGUgWE1MIGxhdW5jaCBjb25maWd1cmF0aW9uIGZpbGUKLQkgKiA8bGk+dGhlIFVSTCBvZiB0aGUgc291cmNlIGRvY3VtZW50Ci0JICogPGxpPnRoZSBmaWxlIG9mIHRoZSBvdXRwdXQgZG9jdW1lbnQKLQkgKiA8bGk+bm90IHVzZWQgKGFueXRoaW5nKQotCSAqIDxsaT50aGUgY2xhc3MgbmFtZSBvZiB0aGUgPGNvZGU+SVhTTERlYnVnZ2VyPC9jb2RlPiBpbnN0YW5jZQotCSAqIDxsaT50aGUgcG9ydCB1c2VkIGZvciByZXF1ZXN0cwotCSAqIDxsaT50aGUgcG9ydCB1c2VkIGZvciBkZWJ1ZyBldmVudHMKLQkgKiA8bGk+dGhlIHBvcnQgdXNlZCBmb3IgZ2VuZXJhdGUgZXZlbnRzCi0JICogPC9vbD4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0JewotCQlsb2cuaW5mbygiamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk9IiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnkiKSk7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQlsb2cuaW5mbygiamF2YS5lbmRvcnNlZC5kaXJzPSIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuZW5kb3JzZWQuZGlycyIpKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0KLQkJU3RyaW5nIGludm9rZXJDbGFzc05hbWUgPSBhcmdzWzBdOwotCQlGaWxlIGxhdW5jaEZpbGUgPSBuZXcgRmlsZShhcmdzWzFdKTsKLQkJU3RyaW5nIHNyYyA9IGFyZ3NbMl07Ci0JCVN0cmluZyB0YXJnZXQgPSBhcmdzWzNdOwotCQlTdHJpbmcgZGVidWdnZXJDbGFzc05hbWUgPSBhcmdzWzVdOwotCi0JCWxvZy5pbmZvKCJzcmM6ICIgKyBzcmMpOyAvLyROT04tTkxTLTEkCi0JCWxvZy5pbmZvKCJ0YXJnZXQ6ICIgKyB0YXJnZXQpOyAvLyROT04tTkxTLTEkCi0JCWxvZy5pbmZvKCJsYXVuY2hGaWxlOiAiICsgbGF1bmNoRmlsZSk7IC8vJE5PTi1OTFMtMSQKLQkJbG9nLmluZm8oImRlYnVnZ2VyOiAiICsgZGVidWdnZXJDbGFzc05hbWUpOyAvLyROT04tTkxTLTEkCi0KLQkJRGVidWdSdW5uZXIgZGVidWdSdW5uZXIgPSBudWxsOwotCQl0cnkKLQkJewotCQkJZmluYWwgSVhTTERlYnVnZ2VyIGRlYnVnZ2VyID0gY3JlYXRlRGVidWdnZXIoZGVidWdnZXJDbGFzc05hbWUpOwotCQkJLy8gY3JlYXRlIHRoZSBpbnZva2VyCi0JCQlJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyID0gbmV3IEpBWFBTQVhQcm9jZXNzb3JJbnZva2VyKCkKLQkJCXsKLQotCQkJCXByb3RlY3RlZCBUcmFuc2Zvcm1lckZhY3RvcnkgY3JlYXRlVHJhbnNmb3JtZXJGYWN0b3J5KCkKLQkJCQl7Ci0JCQkJCVRyYW5zZm9ybWVyRmFjdG9yeSB0RmFjdG9yeSA9IHN1cGVyLmNyZWF0ZVRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQkJCQlkZWJ1Z2dlci5zZXRUcmFuc2Zvcm1lckZhY3RvcnkodEZhY3RvcnkpOwotCQkJCQlyZXR1cm4gdEZhY3Rvcnk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgYWRkU3R5bGVzaGVldChVUkwgc3R5bGVzaGVldCwgTWFwIHBhcmFtZXRlcnMsIFByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcywgVVJJUmVzb2x2ZXIgcmVzb2x2ZXIpIHRocm93cyBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQkJCQl7Ci0JCQkJCUlucHV0U291cmNlIGlucHV0c291cmNlID0gbmV3IElucHV0U291cmNlKHN0eWxlc2hlZXQudG9TdHJpbmcoKSk7Ci0JCQkJCS8vIGlmIHJlcXVpcmVkIGluIGZ1dHVyZSwgcGFyc2UgdGhlIGRvY3VtZW50IHdpdGggbGluZSBudW1iZXJzICh0byBnZXQgdGhlIGVuZCBsaW5lIG51bWJlcnMpCi0vLwkJCQkJWE1MUmVhZGVyV3JhcHBlciByZWFkZXIgPSBuZXcgWE1MUmVhZGVyV3JhcHBlcihjcmVhdGVSZWFkZXIoKSk7Ci0vLwkJCQkJU0FYU291cmNlIHNvdXJjZSA9IG5ldyBTQVhTb3VyY2UocmVhZGVyLGlucHV0c291cmNlKTsKLQkJCQkJYWRkU3R5bGVzaGVldChuZXcgU0FYU291cmNlKGlucHV0c291cmNlKSwgcmVzb2x2ZXIsIHBhcmFtZXRlcnMsIG91dHB1dFByb3BlcnRpZXMpOwotCQkJCX0KLQkJCQkKLQkJCQlwcm90ZWN0ZWQgVHJhbnNmb3JtZXIgYWRkU3R5bGVzaGVldChTb3VyY2Ugc291cmNlLCBVUklSZXNvbHZlciByZXNvbHZlciwgTWFwIHBhcmFtZXRlcnMsIFByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcykgdGhyb3dzIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCQkJCXsKLQkJCQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBzdXBlci5hZGRTdHlsZXNoZWV0KHNvdXJjZSwgcmVzb2x2ZXIsIHBhcmFtZXRlcnMsIG91dHB1dFByb3BlcnRpZXMpOwotCQkJCQlkZWJ1Z2dlci5hZGRUcmFuc2Zvcm1lcih0cmFuc2Zvcm1lcik7Ci0JCQkJCXJldHVybiB0cmFuc2Zvcm1lcjsKLQkJCQl9Ci0JCQl9OwotCi0JCQlpZiAoYXJncy5sZW5ndGggPT0gOSkKLQkJCXsKLQkJCQlpbnQgcmVxdWVzdFBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbNl0pOwotCQkJCWludCBldmVudFBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbN10pOwotCQkJCWludCBnZW5lcmF0ZVBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbOF0pOwotCi0JCQkJbG9nLmRlYnVnKCJyZXF1ZXN0UG9ydDogIiArIHJlcXVlc3RQb3J0KTsgLy8kTk9OLU5MUy0xJAotCQkJCWxvZy5kZWJ1ZygiZXZlbnRQb3J0OiAiICsgZXZlbnRQb3J0KTsgLy8kTk9OLU5MUy0xJAotCQkJCWxvZy5kZWJ1ZygiZ2VuZXJhdGVQb3J0OiAiICsgZ2VuZXJhdGVQb3J0KTsgLy8kTk9OLU5MUy0xJAotCi0JCQkJdHJ5Ci0JCQkJewotCQkJCQlkZWJ1Z1J1bm5lciA9IG5ldyBEZWJ1Z1J1bm5lcihyZXF1ZXN0UG9ydCwgZXZlbnRQb3J0LCBnZW5lcmF0ZVBvcnQpOwotCQkJCX0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQloYW5kbGVGYXRhbEVycm9yKCJDb3VsZCBub3QgaW5zdGFudGlhdGUgaW52b2tlcjogIiArIGludm9rZXJDbGFzc05hbWUsIGUpOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKLQkJCQlkZWJ1Z1J1bm5lciA9IG5ldyBEZWJ1Z1J1bm5lcihiciwgbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQpLCBuZXcgUHJpbnRXcml0ZXIoU3lzdGVtLmVyciksIG51bGwpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigieHNsPiIpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0KLQkJCVBpcGVsaW5lRGVmaW5pdGlvbiBwaXBlbGluZSA9IG5ldyBQaXBlbGluZURlZmluaXRpb24obGF1bmNoRmlsZSk7Ci0JCQlwaXBlbGluZS5jb25maWd1cmUoaW52b2tlcik7Ci0KLQkJCWRlYnVnZ2VyLnNldEludm9rZXIoaW52b2tlcik7Ci0JCQlkZWJ1Z2dlci5zZXRTb3VyY2UobmV3IFVSTChzcmMpKTsKLQkJCWRlYnVnZ2VyLnNldFRhcmdldChuZXcgRmlsZVdyaXRlcihuZXcgRmlsZSh0YXJnZXQpKSk7Ci0KLQkJCWRlYnVnUnVubmVyLmxvb3AoZGVidWdnZXIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJaGFuZGxlRmF0YWxFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlpZiAoZGVidWdSdW5uZXIgIT0gbnVsbCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWRlYnVnUnVubmVyLmRpc3Bvc2UoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQloYW5kbGVGYXRhbEVycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJWFNMRGVidWdnZXIgY3JlYXRlRGVidWdnZXIoU3RyaW5nIGNsYXNzbmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluc3RhbnRpYXRpb25FeGNlcHRpb24sIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24KLQl7Ci0JCUNsYXNzIGNsYXp6ID0gQ2xhc3MuZm9yTmFtZShjbGFzc25hbWUpOwotCQlyZXR1cm4gKElYU0xEZWJ1Z2dlcikgY2xhenoubmV3SW5zdGFuY2UoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGhhbmRsZUZhdGFsRXJyb3IoU3RyaW5nIG1zZywgVGhyb3dhYmxlIHQpCi0JewotCQlsb2cuZmF0YWwobXNnLCB0KTsKLQkJU3lzdGVtLmV4aXQoMSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9JWFNMRGVidWdnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvSVhTTERlYnVnZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YjdmNjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9JWFNMRGVidWdnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSB0byBYU0wgZGVidWdnZXIgaW5zdGFuY2VzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSVhTTERlYnVnZ2VyIGV4dGVuZHMgUnVubmFibGUKLXsKLQkvKioKLQkgKiBTZXQgdGhlIGludm9rZXIgdG8gdXNlLgotCSAqIAotCSAqIEBwYXJhbSBpbnZva2VyIHRoZSBpbnZva2VyIHRvIHNldAotCSAqLwotCXZvaWQgc2V0SW52b2tlcihJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyKTsKLQotCS8qKgotCSAqIFNldCB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yeSB0byB1c2UuCi0JICogCi0JICogQHBhcmFtIGZhY3RvcnkgdGhlIGZhY3RvcnkgdG8gdXNlCi0JICovCi0Jdm9pZCBzZXRUcmFuc2Zvcm1lckZhY3RvcnkoVHJhbnNmb3JtZXJGYWN0b3J5IGZhY3RvcnkpOwotCi0JLyoqCi0JICogQWRkIGEgdHJhbnNmb3JtZXIgdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdHJhbnNmb3JtZXIKLQkgKi8KLQl2b2lkIGFkZFRyYW5zZm9ybWVyKFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKTsKLQotCS8qKgotCSAqIFNldCB0aGUgV3JpdGVyIGZvciB0aGlzIHRvIHdyaXRlIGV2ZW50cyB0by4KLQkgKiAKLQkgKiBAcGFyYW0gd3JpdGVyIHRoZSB3cml0ZXIgdG8gd3JpdGUgZXZlbnRzIHRvCi0JICovCi0Jdm9pZCBzZXRFdmVudFdyaXRlcihXcml0ZXIgd3JpdGVyKTsKLQotCS8qKgotCSAqIFNldCB0aGUgT2JqZWN0T3V0cHV0U3RyZWFtIGZvciB0aGlzIHRvIHdyaXRlIGdlbmVyYXRlZCBldmVudHMgdG8uCi0JICogCi0JICogQHBhcmFtIHdyaXRlciB0aGUgc3RyZWFtIHRvIHdyaXRlIGdlbmVyYXRlIGV2ZW50cyB0bwotCSAqLwotCXZvaWQgc2V0R2VuZXJhdGVkV3JpdGVyKFdyaXRlciB3cml0ZXIpOwotCi0JLyoqCi0JICogU2V0IHRoZSBVUkwgb2YgdGhlIHRyYW5zZm9ybWF0aW9uIHNvdXJjZSBmaWxlLgotCSAqIAotCSAqIEBwYXJhbSBzb3VyY2VVUkwgdGhlIHNvdXJjZSBVUkwKLQkgKi8KLQl2b2lkIHNldFNvdXJjZShVUkwgc291cmNlVVJMKTsKLQotCS8qKgotCSAqIFNldCB0aGUgdHJhbnNmb3JtYXRpb24gUmVzdWx0LgotCSAqIAotCSAqIEBwYXJhbSB3cml0ZXIgdGhlIHJlc3VsdAotCSAqLwotCXZvaWQgc2V0VGFyZ2V0KFdyaXRlciB3cml0ZXIpOwotCi0JLyoqCi0JICogQWRkIGEgYnJlYWtwb2ludCB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBicmVha3BvaW50Ci0JICovCi0Jdm9pZCBhZGRCcmVha3BvaW50KEJyZWFrUG9pbnQgYnJlYWtwb2ludCk7Ci0KLQkvKioKLQkgKiBSZW1vdmUgYSBicmVha3BvaW50IGZyb20gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gYnJlYWtwb2ludAotCSAqLwotCXZvaWQgcmVtb3ZlQnJlYWtwb2ludChCcmVha1BvaW50IGJyZWFrcG9pbnQpOwotCi0JLyoqCi0JICogUGVyZm9ybSBhICdzdGVwIGludG8nIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lkIHN0ZXBJbnRvKCk7Ci0KLQkvKioKLQkgKiBQZXJmb3JtIGEgJ3N0ZXAgb3Zlcicgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgc3RlcE92ZXIoKTsKLQotCS8qKgotCSAqIFBlcmZvcm0gYSAnc3RlcCByZXR1cm4nIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lkIHN0ZXBSZXR1cm4oKTsKLQotCS8qKgotCSAqIFBlcmZvcm0gYSAnc3VzcGVuZCcgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgc3VzcGVuZCgpOwotCi0JLyoqCi0JICogUGVyZm9ybSBhICdyZXN1bWUnIG9wZXJhdGlvbi4KLQkgKi8KLQl2b2lkIHJlc3VtZSgpOwotCi0JLyoqCi0JICogUXVpdCBkZWJ1Z2dpbmcuCi0JICovCi0Jdm9pZCBxdWl0KCk7Ci0KLQkvKioKLQkgKiBHZW5lcmF0ZSBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBvZiBmcmFtZXMgYW5kIHRoZWlyIHZhcmlhYmxlcy4KLQkgKiA8cD4KLQkgKiBGcmFtZXMgYXJlIGdlbmVyYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiA8aT5maWxlPC9pPnw8aT5mcmFtZUlkPC9pPnw8aT5saW5lTnVtYmVyPC9pPnw8aT5uYW1lPC9pPgotCSAqIFRoaXMgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgd2l0aCB0aGUgaWQncyBvZiB0aGUgZnJhbWUncyB2YXJpYWJsZXMgKGVhY2ggdmFyaWFibGUgaWQgYmVpbmcgdW5pcXVlIGZvciB0aGUgd2hvbGUgcHJvY2VzcykuCi0JICogPC9wPgotCSAqIDxwPgotCSAqIFRoZSBzZXBhcmF0b3IgZm9yIGZyYW1lcyBpcyAkJCQuIFdpdGhpbiBhIGZyYW1lLCB0aGUgc2VwYXJhdG9yIGZvciB2YXJpYWJsZSBpZCdzIGlzIHwuCi0JICogPC9wPgotCSAqIDxwPgotCSAqIGUuZy4gZmlsZTovdHJhbjEueHNsfDF8MTJ8eHNsOnRlbXBsYXRlIG5hbWU9InRlbXAxInwxfDJ8MyQkJGZpbGU6L3RyYW4yLnhzbHwyfDM0fHhzbDp0ZW1wbGF0ZSBuYW1lPSJ0ZW1wMiJ8NHw1fDYKLQkgKiAKLQkgKiBUaGlzIGRlZmluZXMgMiBmcmFtZXMgd2l0aCBpZCdzIDEgYW5kIDIsIHdoaWNoIGFyZSBvY2N1ciBpbiBmaWxlcyB0cmFuMS54c2wgYW5kIHRyYW4yLnhzbCByZXNwZWN0aXZlbHkuCi0JICogRnJhbWUgMSBpcyBjdXJyZW50bHkgYXQgbGluZSAxMiwgaW4gYSB0ZW1wbGF0ZSB3aXRoIG5hbWUgdGVtcDEsIGFuZCBpdCBkZWZpbmVzIDMgdmFyaWFibGVzIHdpdGggaWQncyAxLCAyIGFuZCAzLiAKLQkgKiA8L3A+Ci0JICogCi0JICogQHJldHVybiB0aGUgZ2VuZXJhdGVkIHN0cmluZwotCSAqLwotCVN0cmluZyBzdGFjaygpOwotCi0JLyoqCi0JICogR2V0IHRoZSB2YXJpYWJsZSB3aXRoIHRoZSBnaXZlbiBpZC4KLQkgKiAKLQkgKiBAcGFyYW0gaWQgdGhlIGlkIG9mIHRoZSB2YXJpYWJsZQotCSAqIEByZXR1cm4gdGhlIHZhcmlhYmxlCi0JICovCi0JVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IGlkKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvU3R5bGVGcmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9TdHlsZUZyYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3N2VmOWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9kZWJ1Z2dlci9TdHlsZUZyYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBBbiA8Y29kZT54c2w6dGVtcGxhdGU8L2NvZGU+IHRoYXQgZm9ybXMgcGFydCBvZiB0aGUgY2FsbCBzdGFjay4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3R5bGVGcmFtZQotewotCXByaXZhdGUgc3RhdGljIGludCBuZXh0SWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHlsZUZyYW1lIHBhcmVudDsKLQlwcml2YXRlIGZpbmFsIExpc3QgY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHJpdmF0ZSBmaW5hbCBpbnQgaWQ7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB1c2luZyB0aGUgZ2l2ZW4gZnJhbWUgYXMgaXRzIHBhcmVudCAobWF5IGJlIG51bGwgaWYgdGhpcyBpcyB0aGUgcm9vdCBmcmFtZSkuCi0JICogCi0JICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IGZyYW1lCi0JICovCi0JcHVibGljIFN0eWxlRnJhbWUoU3R5bGVGcmFtZSBwYXJlbnQpCi0JewotCQl0aGlzLmlkID0gbmV4dElkKys7Ci0JCXRoaXMucGFyZW50ID0gcGFyZW50OwotCQlpZiAocGFyZW50ICE9IG51bGwpCi0JCQlwYXJlbnQuYWRkQ2hpbGQodGhpcyk7Ci0JfQotCQotCS8qKgotCSAqIEEgdW5pcXVlIGlkIGZvciB0aGlzIGZyYW1lCi0JICogCi0JICogQHJldHVybiBhIHVuaXF1ZSBpZCBmb3IgdGhpcyBmcmFtZQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SWQoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIGZyYW1lLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcwotCSAqLwotCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBmaWxlIGluIHdoaWNoIHRoaXMgZnJhbWUgaXMgZm91bmQuCi0JICogCi0JICogQHJldHVybiB0aGUgZmlsZW5hbWUgZm9yIHRoaXMKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldEZpbGVuYW1lKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpbmUgbnVtYmVyIGF0IHdoaWNoIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgbG9jYXRlZC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaW5lIG51bWJlciBhdCB3aGljaCB0aGlzIGlzIGhlbGQKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgaW50IGdldEN1cnJlbnRMaW5lKCk7Ci0KLQkvKioKLQkgKiBHZXQgYSBsaXN0IG9mIDxjb2RlPlZhcmlhYmxlczwvY29kZT4ncwotCSAqIAotCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgdmFyaWFibGVzIGZvciB0aGlzIGZyYW1lCi0JICovCi0JcHVibGljIGFic3RyYWN0IExpc3QgZ2V0VmFyaWFibGVTdGFjaygpOwotCi0JLyoqCi0JICogR2V0IHRoZSBwYXJlbnQgb2YgdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBwYXJlbnQgZnJhbWUKLQkgKi8KLQlwdWJsaWMgU3R5bGVGcmFtZSBnZXRQYXJlbnQoKQotCXsKLQkJcmV0dXJuIHBhcmVudDsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYSBjaGlsZCBmcmFtZSB0byB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBjaGlsZCB0aGUgZnJhbWUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkQ2hpbGQoU3R5bGVGcmFtZSBjaGlsZCkKLQl7Ci0JCWNoaWxkcmVuLmFkZChjaGlsZCk7Ci0JfQotCi0JLyoqCi0JICogUmVtb3ZlIGEgY2hpbGQgZnJhbWUgZnJvbSB0aGlzLgotCSAqIAotCSAqIEBwYXJhbSBjaGlsZCB0aGUgZnJhbWUgdG8gcmVtb3ZlCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlQ2hpbGQoU3R5bGVGcmFtZSBjaGlsZCkKLQl7Ci0JCWNoaWxkcmVuLnJlbW92ZShjaGlsZCk7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBjaGlsZHJlbiBvZiB0aGlzCi0JICogCi0JICogQHJldHVybiBhIGxpc3Qgb2YgPGNvZGU+U3R5bGVGcmFtZTwvY29kZT4ncwotCSAqLwotCXB1YmxpYyBMaXN0IGdldENoaWxkcmVuKCkKLQl7Ci0JCXJldHVybiBjaGlsZHJlbjsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQgPGk+ZmlsZTwvaT58PGk+ZnJhbWVJZDwvaT58PGk+bGluZU51bWJlcjwvaT58PGk+bmFtZTwvaT4uCi0JICogU2luY2UgcGlwZSBpcyB1c2VkIGFzIGEgc2VwYXJhdG9yLCB0aGUgbmFtZSBoYXMgYW55IHBpcGUgKHwpIGNoYXJhY3RlcnMgcmVwbGFjZWQgd2l0aCB0aGUgbGl0ZXJhbCAnJUBfUElQRV9AJScKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCVN0cmluZyBzYWZlbmFtZSA9IGdldE5hbWUoKS5yZXBsYWNlQWxsKCJcXHwiLCAiJUBfUElQRV9AJSIpOyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKLQkJcmV0dXJuIGdldEZpbGVuYW1lKCkgKyAifCIgKyBnZXRJZCgpICsgInwiICsgZ2V0Q3VycmVudExpbmUoKSArICJ8IiArIHNhZmVuYW1lOyAgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0zJAotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvVmFyaWFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvZGVidWdnZXIvVmFyaWFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM3ZmMyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2RlYnVnZ2VyL1ZhcmlhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyOwotCi0vKioKLSAqIEFuIGFic3RyYWN0IGNsYXNzIHRoYXQgWFNMIHByb2Nlc3NvciBpbXBsZW1lbnRhdGlvbnMgY2FuIHN1YmNsYXNzIGZvciB0aGVpciB2YXJpYWJsZXMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFZhcmlhYmxlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IGlkU2VxdWVuY2UgPSAwOwotCi0JLyoqCi0JICogVGhlIGNvbnN0YW50IGRlbm90aW5nIGEgbG9jYWwgc2NvcGUgdmFyaWFibGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfU0NPUEUgPSAiTCI7IC8vJE5PTi1OTFMtMSQKLQkvKioKLQkgKiBUaGUgY29uc3RhbnQgZGVub3RpbmcgYSB0dW5uZWwgc2NvcGUgdmFyaWFibGUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFVOTkVMX1NDT1BFID0gIlQiOyAvLyROT04tTkxTLTEkCi0JLyoqCi0JICogVGhlIGNvbnN0YW50IGRlbm90aW5nIGEgZ2xvYmFsIHNjb3BlIHZhcmlhYmxlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdMT0JBTF9TQ09QRSA9ICJHIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBpbnQgTUFYSU1VTV9WQUxVRV9TSVpFID0gMTAwOwotCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5SRVNPTFZFRCA9ICJ1bnJlc29sdmVkIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEJPT0xFQU4gPSAiYm9vbGVhbiI7IC8vJE5PTi1OTFMtMSQKLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBOVU1CRVIgPSAibnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklORyA9ICJzdHJpbmciOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERVNFVCA9ICJub2Rlc2V0IjsgLy8kTk9OLU5MUy0xJAotCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE9CSkVDVCA9ICJvYmplY3QiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5LTk9XTiA9ICJ1bmtub3duIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBuYW1lOwotCXByb3RlY3RlZCBmaW5hbCBTdHJpbmcgc2NvcGU7Ci0JcHJvdGVjdGVkIGZpbmFsIGludCBzbG90TnVtYmVyOwotCi0JcHJpdmF0ZSBpbnQgaWQ7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB3aXRoIHRoZSBnaXZlbiBuYW1lLCBzY29wZSBhbmQgc2xvdCBudW1iZXIuCi0JICogCi0JICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhpcwotCSAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgb2YgdGhpcwotCSAqIEBwYXJhbSBzbG90TnVtYmVyIHRoZSBzbG90IG51bWJlciBvZiB0aGlzCi0JICovCi0JcHVibGljIFZhcmlhYmxlKFN0cmluZyBuYW1lLCBTdHJpbmcgc2NvcGUsIGludCBzbG90TnVtYmVyKQotCXsKLQkJdGhpcy5uYW1lID0gbmFtZTsKLQkJdGhpcy5zY29wZSA9IHNjb3BlOwotCQl0aGlzLnNsb3ROdW1iZXIgPSBzbG90TnVtYmVyOwotCQl0aGlzLmlkID0gaWRTZXF1ZW5jZSsrOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgaWQgdXNlZCBmb3IgdGhpcy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB2YXJpYWJsZSBpZAotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SWQoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLQkKLQkvKioKLQkgKiBHZXQgdGhlIHZhcmlhYmxlIG5hbWUuCi0JICogCi0JICogQHJldHVybiB0aGUgdmFyaWFibGUgbmFtZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHR5cGUgb2YgdGhpcyB2YXJpYWJsZSBlLmcuIHN0cmluZywgb3Igbm9kZQotCSAqIAotCSAqIEByZXR1cm4gdGhlIHZhcmlhYmxlIHR5cGUKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFR5cGUoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgc2NvcGUgb2YgdGhpcyB2YXJpYWJsZSAtIG9uZSBvZiA8Y29kZT5MT0NBTF9TQ09QRTwvY29kZT4sIDxjb2RlPlRVTk5FTF9TQ09QRTwvY29kZT4gb3IgPGNvZGU+R0xPQkFMX1NDT1BFPC9jb2RlPi4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB2YXJpYWJsZSBzY29wZQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U2NvcGUoKQotCXsKLQkJcmV0dXJuIHNjb3BlOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGFzIGEgU3RyaW5nLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMKLQkgKi8KLQlwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFZhbHVlKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhbHVlIHRydW5jYXRpbmcgdG8gPGNvZGU+TUFYSU1VTV9WQUxVRV9TSVpFPC9jb2RlPiB3aGVyZSBuZWNlc3NhcnkuCi0JICogCi0JICogQHJldHVybiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFsdWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlRmlyc3RMaW5lKCkKLQl7Ci0JCVN0cmluZyB2YWx1ZSA9IGdldFZhbHVlKCk7Ci0JCWlmICh2YWx1ZSAhPSBudWxsKQotCQl7Ci0JCQkvLyBtYWtlIHN1cmUgaXQgaXMgbm90IHRvbyBsb25nCi0JCQl2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ1xuJywgJy4nKTsKLQkJCWlmICh2YWx1ZS5sZW5ndGgoKSA+IE1BWElNVU1fVkFMVUVfU0laRSkKLQkJCQl2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBNQVhJTVVNX1ZBTFVFX1NJWkUpOwotCQl9Ci0JCWVsc2UKLQkJCXZhbHVlID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgc2xvdCBudW1iZXIgZm9yIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgc2xvdCBudW1iZXIKLQkgKi8KLQlwdWJsaWMgaW50IGdldFNsb3ROdW1iZXIoKQotCXsKLQkJcmV0dXJuIHNsb3ROdW1iZXI7Ci0JfQotCi0JcHVibGljIGludCBoYXNoQ29kZSgpCi0JewotCQlyZXR1cm4gMyAqIHNjb3BlLmhhc2hDb2RlKCkgKyA1ICogc2xvdE51bWJlcjsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0JewotCQlpZiAob2JqID09IHRoaXMpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKG9iaiBpbnN0YW5jZW9mIFZhcmlhYmxlKQotCQl7Ci0JCQlWYXJpYWJsZSB2ID0gKFZhcmlhYmxlKSBvYmo7Ci0JCQlyZXR1cm4gdi5zY29wZS5lcXVhbHMoc2NvcGUpICYmIHNsb3ROdW1iZXIgPT0gdi5zbG90TnVtYmVyOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9JUHJvY2Vzc29ySW52b2tlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL0lQcm9jZXNzb3JJbnZva2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxYjY1N2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL0lQcm9jZXNzb3JJbnZva2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlcjsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5VUklSZXNvbHZlcjsKLQotCi0vKioKLSAqIEludGVyZmFjZSB1c2VkIGJ5IHRoZSBsYXVuY2hlZCBwcm9jZXNzIHRvIGRlZmluZSB0aGUgWFNMIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5lLgotICogVGhlIDxjb2RlPnNldEF0dHJpYnV0ZXM8L2NvZGU+IGFuZCA8Y29kZT5hZGRTdHlsZXNoZWV0PC9jb2RlPiBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQKLSAqIGJlZm9yZSBjYWxsaW5nIDxjb2RlPnRyYW5zZm9ybTwvY29kZT4gdG8gZG8gdGhlIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbi4KLSAqIAotICogPHA+Ci0gKiBJZiA8Y29kZT5hZGRTdHlsZXNoZWV0PC9jb2RlPiBpcyBub3QgY2FsbGVkIGJlZm9yZSA8Y29kZT50cmFuc2Zvcm08L2NvZGU+LCB0aGVuCi0gKiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHNvdXJjZSBkb2N1bWVudCBjb250YWlucyBhbmQgZW1iZWRkZWQgc3R5bGVzaGVldCBpbnN0cnVjdGlvbi4KLSAqIDwvcD4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQcm9jZXNzb3JJbnZva2VyCi17Ci0JLyoqCi0JICogU2V0IHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgYXR0cmlidXRlcyB0byB1c2UuCi0JICogCi0JICogQHBhcmFtIGF0dHJpYnV0ZXMgYSBtYXAgb2YgU3RyaW5nIHYuIFN0cmluZyBhdHRyaWJ1dGVzCi0JICovCi0Jdm9pZCBzZXRBdHRyaWJ1dGVzKE1hcCBhdHRyaWJ1dGVzKTsKLQotCS8qKgotCSAqIEFkZCBhIHN0eWxlc2hlZXQgdG8gdGhlIHBpcGVsaW5lIChvcmRlciBpcyBpbXBvcnRhbnQpLgotCSAqIAotCSAqIEBwYXJhbSBzdHlsZXNoZWV0IHRoZSBVUkwgb2YgdGhlIHN0eWxlc2hlZXQgdG8gYWRkCi0JICogQHBhcmFtIHBhcmFtZXRlcnMgdGhlIG1hcCBvZiBwYXJhbWV0ZXJzIGZvciB0aGUgc3R5bGVzaGVldAotCSAqIEBwYXJhbSBvdXRwdXRQcm9wZXJ0aWVzIHRoZSBvdXRwdXQgcHJvcGVydGllcwotCSAqIEBwYXJhbSByZXNvbHZlciB0aGUgPGNvZGU+VVJJUmVzb2x2ZXI8L2NvZGU+IHRvIHVzZQotCSAqIEB0aHJvd3MgVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGlmIHN0eWxlc2hlZXQgY291bGQgbm90IGJlIGFkZGVkCi0JICovCi0Jdm9pZCBhZGRTdHlsZXNoZWV0KFVSTCBzdHlsZXNoZWV0LCBNYXAgcGFyYW1ldGVycywgUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzLCBVUklSZXNvbHZlciByZXNvbHZlcikgdGhyb3dzIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotCS8qKgotCSAqIFBlcmZvcm0gdGhlIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gc291cmNlIHRoZSBVUkwgb2YgdGhlIFhNTCBzb3VyY2UgZG9jdW1lbnQKLQkgKiBAcGFyYW0gcmVzIHRoZSB0cmFuc2Zvcm1hdGlvbiByZXN1bHQKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBmYWlsZWQKLQkgKi8KLQl2b2lkIHRyYW5zZm9ybShVUkwgc291cmNlLCBSZXN1bHQgcmVzKSB0aHJvd3MgVHJhbnNmb3JtYXRpb25FeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTY5NDJhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLyoqCi0gKiBNZXNzYWdlcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotY2xhc3MgTWVzc2FnZXMKLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoQlVORExFX05BTUUpOwotCi0JcHJpdmF0ZSBNZXNzYWdlcygpCi0JewotCX0KLQotCS8qKgotCSAqIEdldCBhIG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBrZXkuCi0JICogCi0JICogQHBhcmFtIGtleSB0aGUgbWVzc2FnZSBrZXkKLQkgKiBAcmV0dXJuIHRoZSBtZXNzYWdlCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpCi0JewotCQl0cnkKLQkJewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvUGlwZWxpbmVEZWZpbml0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvUGlwZWxpbmVEZWZpbml0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OGY5OTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL1BpcGVsaW5lRGVmaW5pdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLkNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuQ3JlYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIGRlZmluaXRpb24gb2YgdGhlIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5lLgotICogPHA+Ci0gKiBUaGlzIGNsYXNzIGlzIGxvYWRlZCBvbiBib3RoIHRoZSBFY2xpcHNlIGNsYXNzcGF0aCBhbmQgdGhlIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MncyBjbGFzc3BhdGguCi0gKiBUaGUgd2hvbGUgZGVmaW5pdGlvbiBpcyBzZXJpYWxpemVkIHRvIGFuIFhNTCBkb2N1bWVudCBieSB0aGUgRWNsaXBzZSBsYXVuY2hlciwgYW5kIGlzIHRoZW4gCi0gKiByZWFkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzIHdoZW4gbGF1bmNoZWQuCi0gKiA8L3A+Ci0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIFBpcGVsaW5lRGVmaW5pdGlvbgotewotCXByaXZhdGUgU3RyaW5nIHNvdXJjZVVSTDsKLQlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlOwotCXByaXZhdGUgZmluYWwgTGlzdCB0cmFuc2Zvcm1EZWZzID0gbmV3IEFycmF5TGlzdCgpOwotCXByaXZhdGUgZmluYWwgU2V0IGF0dHJpYnV0ZXMgPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgYm9vbGVhbiB1c2VFbWJlZGRlZDsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiB0aGlzLgotCSAqLwotCXB1YmxpYyBQaXBlbGluZURlZmluaXRpb24oKQotCXsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBieSByZWFkaW5nIHRoZSBzcGVjaWZpZWQgWE1MIGZpbGUuCi0JICogCi0JICogQHBhcmFtIGxhdW5jaEZpbGUgdGhlIFhTTCBmaWxlIHRvIGxvYWQKLQkgKiBAdGhyb3dzIFNBWEV4Y2VwdGlvbiBpZiBwcm9ibGVtcyBvY2N1ciBkdXJpbmcgcGFyc2luZwotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHBhcnNpbmcKLQkgKiBAdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHBhcnNpbmcKLQkgKi8KLQlwdWJsaWMgUGlwZWxpbmVEZWZpbml0aW9uKEZpbGUgbGF1bmNoRmlsZSkgdGhyb3dzIFNBWEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQl7Ci0JCXRoaXMoRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpLnBhcnNlKG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0obGF1bmNoRmlsZSkpKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRvY3VtZW50Ci0JICogCi0JICogQHBhcmFtIGRvYyB0aGUgRG9jdW1lbnQgdG8gY3JlYXRlIHRoaXMgZnJvbQotCSAqLwotCXB1YmxpYyBQaXBlbGluZURlZmluaXRpb24oRG9jdW1lbnQgZG9jKQotCXsKLQkJRWxlbWVudCByb290RWwgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJRWxlbWVudCBhdHRyaWJ1dGVzRWwgPSAoRWxlbWVudCkgcm9vdEVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBdHRyaWJ1dGVzIikuaXRlbSgwKTsgLy8kTk9OLU5MUy0xJAotCQlOb2RlTGlzdCBhdHRyaWJ1dGVFbHMgPSBhdHRyaWJ1dGVzRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkF0dHJpYnV0ZSIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlRWxzLmdldExlbmd0aCgpOyBpKyspCi0JCXsKLQkJCUVsZW1lbnQgYXR0cmlidXRlRWwgPSAoRWxlbWVudCkgYXR0cmlidXRlRWxzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IGF0dHJpYnV0ZUVsLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdHlwZSA9IGF0dHJpYnV0ZUVsLmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdmFsdWUgPSBhdHRyaWJ1dGVFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCWFkZEF0dHJpYnV0ZShuZXcgVHlwZWRWYWx1ZShuYW1lLCB0eXBlLCB2YWx1ZSkpOwotCQl9Ci0KLQkJRWxlbWVudCB0cmFuc2Zvcm1zRWwgPSAoRWxlbWVudCkgcm9vdEVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUcmFuc2Zvcm1zIikuaXRlbSgwKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgdXNlRW1iZWRkZWQgPSB0cmFuc2Zvcm1zRWwuZ2V0QXR0cmlidXRlKCJ1c2VFbWJlZGRlZCIpOyAvLyROT04tTkxTLTEkCi0JCWJvb2xlYW4gZW1iZWRkZWQgPSBCb29sZWFuLmdldEJvb2xlYW4odXNlRW1iZWRkZWQpOwotCQlzZXRVc2VFbWJlZGRlZChlbWJlZGRlZCk7Ci0JCWlmICghZW1iZWRkZWQpCi0JCXsKLQkJCU5vZGVMaXN0IHRyYW5zZm9ybUVscyA9IHRyYW5zZm9ybXNFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVHJhbnNmb3JtIik7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNmb3JtRWxzLmdldExlbmd0aCgpOyBpKyspCi0JCQl7Ci0JCQkJRWxlbWVudCB0cmFuc2Zvcm1FbCA9IChFbGVtZW50KSB0cmFuc2Zvcm1FbHMuaXRlbShpKTsKLQkJCQlUcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYgPSBUcmFuc2Zvcm1EZWZpbml0aW9uLmZyb21YTUwodHJhbnNmb3JtRWwpOwotCQkJCWFkZFRyYW5zZm9ybURlZih0ZGVmKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIENvbmZpZ3VyZSB0aGUgaW52b2tlciBmcm9tIHRoaXMuCi0JICogCi0JICogQHBhcmFtIGludm9rZXIgdGhlIGludm9rZXIgdG8gY29uZmlndXJlCi0JICogQHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgZHVyaW5nIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25maWd1cmUoSVByb2Nlc3Nvckludm9rZXIgaW52b2tlcikgdGhyb3dzIENvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQl7Ci0JCU1hcCBhdHRWYWxzID0gbmV3IEhhc2hNYXAoKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCVR5cGVkVmFsdWUgYXR0ID0gKFR5cGVkVmFsdWUpIGl0ZXIubmV4dCgpOwotCQkJT2JqZWN0IHZhbHVlOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJdmFsdWUgPSBhdHQuY3JlYXRlVmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChDcmVhdGlvbkV4Y2VwdGlvbiBlKQotCQkJewotCQkJCXRocm93IG5ldyBDb25maWd1cmF0aW9uRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJCX0KLQkJCWF0dFZhbHMucHV0KGF0dC51cmksIHZhbHVlKTsKLQkJfQotCQlpbnZva2VyLnNldEF0dHJpYnV0ZXMoYXR0VmFscyk7Ci0KLQkJZm9yIChJdGVyYXRvciBpdGVyID0gdHJhbnNmb3JtRGVmcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCVRyYW5zZm9ybURlZmluaXRpb24gdGRlZiA9IChUcmFuc2Zvcm1EZWZpbml0aW9uKSBpdGVyLm5leHQoKTsKLQkJCU1hcCBwYXJhbXMgPSBudWxsOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJcGFyYW1zID0gdGRlZi5nZXRQYXJhbWV0ZXJzQXNNYXAoKTsKLQkJCX0KLQkJCWNhdGNoIChDcmVhdGlvbkV4Y2VwdGlvbiBlKQotCQkJewotCQkJCXRocm93IG5ldyBDb25maWd1cmF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiUGlwZWxpbmVEZWZpbml0aW9uLjgiKSwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCVVSTCB1cmwgPSBudWxsOwotCQkJdHJ5Ci0JCQl7Ci0JCQkJdXJsID0gbmV3IFVSTCh0ZGVmLmdldFN0eWxlc2hlZXRVUkwoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJQaXBlbGluZURlZmluaXRpb24uOSIpICsgdGRlZi5nZXRTdHlsZXNoZWV0VVJMKCksIGUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSB0ZGVmLmdldE91dHB1dFByb3BlcnRpZXMoKTsKLQkJCXRyeQotCQkJewotCQkJCWludm9rZXIuYWRkU3R5bGVzaGVldCh1cmwsIHBhcmFtcywgcHJvcGVydGllcywgbnVsbCk7Ci0JCQl9Ci0JCQljYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FeGNlcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJQaXBlbGluZURlZmluaXRpb24uMTAiKSArIHRkZWYuZ2V0U3R5bGVzaGVldFVSTCgpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBzZXQgb2YgYXR0cmlidXRlcyBkZWZpbmVkLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNldCBvZiBhdHRyaWJ1dGVzCi0JICovCi0JcHVibGljIFNldCBnZXRBdHRyaWJ1dGVzKCkKLQl7Ci0JCXJldHVybiBhdHRyaWJ1dGVzOwotCX0KLQotCS8qKgotCSAqIEFkZCBhIGF0dHJpYnV0ZSB0byB0aGlzIGNvbmZpZ3VyYXRpb24KLQkgKiAKLQkgKiBAcGFyYW0gYXR0cmlidXRlIHRoZSBhdHRyaWJ1dGUgdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkQXR0cmlidXRlKFR5cGVkVmFsdWUgYXR0cmlidXRlKQotCXsKLQkJYXR0cmlidXRlcy5hZGQoYXR0cmlidXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBSZW1vdmUgYSBhdHRyaWJ1dGUgZnJvbSB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMKLQkgKiAKLQkgKiBAcGFyYW0gYXR0cmlidXRlIHRoZSBhdHRyaWJ1dGUgdG8gcmVtb3ZlCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlQXR0cmlidXRlKFR5cGVkVmFsdWUgYXR0cmlidXRlKQotCXsKLQkJYXR0cmlidXRlcy5yZW1vdmUoYXR0cmlidXRlKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGxpc3Qgb2YgPGNvZGU+VHJhbnNmb3JtRGVmaW5pdGlvbjwvY29kZT4ncy4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHRyYW5zZm9ybSBkZWZpbml0aW9ucwotCSAqLwotCXB1YmxpYyBMaXN0IGdldFRyYW5zZm9ybURlZnMoKQotCXsKLQkJcmV0dXJuIHRyYW5zZm9ybURlZnM7Ci0JfQotCi0JLyoqCi0JICogQWRkIGEgdHJhbnNmb3JtIGRlZmluaXRpb24gdG8gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdGRlZiB0aGUgdHJhbnNmb3JtIGRlZmluaXRpb24gdG8gYWRkCi0JICovCi0JcHVibGljIHZvaWQgYWRkVHJhbnNmb3JtRGVmKFRyYW5zZm9ybURlZmluaXRpb24gdGRlZikKLQl7Ci0JCXRyYW5zZm9ybURlZnMuYWRkKHRkZWYpOwotCX0KLQotCS8qKgotCSAqIFJlbW92ZSBhIHRyYW5zZm9ybSBkZWZpbml0aW9uIGZyb20gdGhpcy4KLQkgKiAKLQkgKiBAcGFyYW0gdGRlZiB0aGUgdHJhbnNmb3JtIGRlZmluaXRpb24gdG8gcmVtb3ZlCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVHJhbnNmb3JtRGVmKFRyYW5zZm9ybURlZmluaXRpb24gdGRlZikKLQl7Ci0JCXRyYW5zZm9ybURlZnMucmVtb3ZlKHRkZWYpOwotCX0KLQotCS8qKgotCSAqIFNldCB3aGV0aGVyIHRvIHVzZSBhbiBYU0wgZGVjbGFyYXRpb24gZW1iZWRkZWQgaW4gdGhlIFhNTCBmaWxlIAotCSAqIAotCSAqIEBwYXJhbSBlbWJlZGRlZCB0cnVlIHRvIHVzZSBlbWJlZGRlZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldFVzZUVtYmVkZGVkKGJvb2xlYW4gZW1iZWRkZWQpCi0JewotCQl1c2VFbWJlZGRlZCA9IGVtYmVkZGVkOwotCX0KLQotCS8qKgotCSAqIEdldCB3aGV0aGVyIHRvIHVzZSBhbiBYU0wgZGVjbGFyYXRpb24gZW1iZWRkZWQgaW4gdGhlIFhNTCBmaWxlIAotCSAqIAotCSAqIEByZXR1cm4gdHJ1ZSBpZiBlbWJlZGRlZAotCSAqLwotCXB1YmxpYyBib29sZWFuIHVzZUVtYmVkZGVkKCkKLQl7Ci0JCXJldHVybiB1c2VFbWJlZGRlZDsKLQl9Ci0KLQkvKioKLQkgKiBTZXJpYWxpemUgdGhpcyB0byBhIERPTSBEb2N1bWVudC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzZXJpYWxpemVkIGRvY3VtZW50Ci0JICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGlmIGEgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHNlcmlhbGl6YXRpb24KLQkgKi8KLQlwdWJsaWMgRG9jdW1lbnQgdG9YTUwoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gbmV3RG9jdW1lbnQoKTsKLQkJRWxlbWVudCByb290RWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUGlwZWxpbmUiKTsgLy8kTk9OLU5MUy0xJAotCQlyb290RWwuc2V0QXR0cmlidXRlKCJzb3VyY2UiLCBzb3VyY2VVUkwpOyAvLyROT04tTkxTLTEkCi0JCXJvb3RFbC5zZXRBdHRyaWJ1dGUoInRhcmdldCIsIHRhcmdldEZpbGUpOyAvLyROT04tTkxTLTEkCi0JCWRvYy5hcHBlbmRDaGlsZChyb290RWwpOwotCi0JCUVsZW1lbnQgYXR0cmlidXRlc0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIkF0dHJpYnV0ZXMiKTsgLy8kTk9OLU5MUy0xJAotCQlyb290RWwuYXBwZW5kQ2hpbGQoYXR0cmlidXRlc0VsKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCVR5cGVkVmFsdWUgYXR0cmlidXRlID0gKFR5cGVkVmFsdWUpIGl0ZXIubmV4dCgpOwotCQkJRWxlbWVudCBhdHRyaWJ1dGVFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJBdHRyaWJ1dGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJYXR0cmlidXRlRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgYXR0cmlidXRlLnVyaSk7IC8vJE5PTi1OTFMtMSQKLQkJCWF0dHJpYnV0ZUVsLnNldEF0dHJpYnV0ZSgidHlwZSIsIGF0dHJpYnV0ZS50eXBlKTsgLy8kTk9OLU5MUy0xJAotCQkJYXR0cmlidXRlRWwuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIGF0dHJpYnV0ZS52YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWF0dHJpYnV0ZXNFbC5hcHBlbmRDaGlsZChhdHRyaWJ1dGVFbCk7Ci0JCX0KLQotCQlyb290RWwuc2V0QXR0cmlidXRlKCJ1c2VFbWJlZGRlZCIsIFN0cmluZy52YWx1ZU9mKHVzZUVtYmVkZGVkKSk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKCF1c2VFbWJlZGRlZCkKLQkJewotCQkJRWxlbWVudCB0cmFuc2Zvcm1zRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiVHJhbnNmb3JtcyIpOyAvLyROT04tTkxTLTEkCi0JCQlyb290RWwuYXBwZW5kQ2hpbGQodHJhbnNmb3Jtc0VsKTsKLQkJCWZvciAoSXRlcmF0b3IgaXRlciA9IHRyYW5zZm9ybURlZnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQkJewotCQkJCVRyYW5zZm9ybURlZmluaXRpb24gdGRlZiA9IChUcmFuc2Zvcm1EZWZpbml0aW9uKSBpdGVyLm5leHQoKTsKLQkJCQlFbGVtZW50IHRkZWZFbCA9IHRkZWYuYXNYTUwoZG9jKTsKLQkJCQl0cmFuc2Zvcm1zRWwuYXBwZW5kQ2hpbGQodGRlZkVsKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiBkb2M7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRG9jdW1lbnQgbmV3RG9jdW1lbnQoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJRG9jdW1lbnRCdWlsZGVyIGRvY0J1aWxkZXIgPSBkZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJRG9jdW1lbnQgZG9jID0gZG9jQnVpbGRlci5uZXdEb2N1bWVudCgpOwotCQlyZXR1cm4gZG9jOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UcmFuc2Zvcm1EZWZpbml0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvVHJhbnNmb3JtRGVmaW5pdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njc5ZDkwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UcmFuc2Zvcm1EZWZpbml0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuQ3JlYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBBIGRlZmluaXRpb24gb2YgYSBwYXJ0aWN1bGFyIHN0ZXAgaW4gdGhlIHRyYW5zZm9ybWF0aW9uIHBpcGVsaW5lLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc2Zvcm1EZWZpbml0aW9uCi17Ci0JcHJpdmF0ZSBTdHJpbmcgc3R5bGVzaGVldFVSTDsKLQlwcml2YXRlIFN0cmluZyByZXNvbHZlckNsYXNzOwotCXByaXZhdGUgUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKLQlwcml2YXRlIGZpbmFsIFNldCBwYXJhbWV0ZXJzID0gbmV3IEhhc2hTZXQoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgcGFyYW1ldGVycyBhcyBhIG1hcCBvZiBuYW1lICg8Y29kZT5TdHJpbmc8L2NvZGU+KSB2LiB2YWx1ZSA8Y29kZT5UeXBlZFZhbHVlPC9jb2RlPi4KLQkgKiAKLQkgKiBAcmV0dXJuIGEgbWFwIG9mIG5hbWVzIGFuZCB2YWx1ZXMKLQkgKiBAdGhyb3dzIENyZWF0aW9uRXhjZXB0aW9uIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBkdXJpbmcgb2JqZWN0IGNyZWF0aW9uCi0JICovCi0JcHVibGljIE1hcCBnZXRQYXJhbWV0ZXJzQXNNYXAoKSB0aHJvd3MgQ3JlYXRpb25FeGNlcHRpb24KLQl7Ci0JCU1hcCBtID0gbmV3IEhhc2hNYXAoKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gcGFyYW1ldGVycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCVR5cGVkVmFsdWUgdHYgPSAoVHlwZWRWYWx1ZSkgaXRlci5uZXh0KCk7Ci0JCQlTdHJpbmcga2V5ID0gdHYudXJpOwotCQkJT2JqZWN0IHZhbHVlID0gdHYuY3JlYXRlVmFsdWUoKTsKLQkJCW0ucHV0KGtleSwgdmFsdWUpOwotCQl9Ci0JCXJldHVybiBtOwotCX0KLQotCS8qKgotCSAqIFRoZSBzZXQgb2YgcGFyYW1ldGVycwotCSAqIAotCSAqIEByZXR1cm4gYSBzZXQgb2YgPGNvZGU+VHlwZWRWYWx1ZTwvY29kZT4ncwotCSAqLwotCXB1YmxpYyBTZXQgZ2V0UGFyYW1ldGVycygpCi0JewotCQlyZXR1cm4gcGFyYW1ldGVyczsKLQl9Ci0KLQkvKioKLQkgKiBBZGQgYSBwYXJhbWV0ZXIgdG8gdGhlIHNldCBvZiBwYXJhbWV0ZXJzCi0JICogCi0JICogQHBhcmFtIHBhcmFtZXRlciB0aGUgcGFyYW1ldGVyIHRvIGFkZAotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcihUeXBlZFZhbHVlIHBhcmFtZXRlcikKLQl7Ci0JCXBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7Ci0JfQotCi0JLyoqCi0JICogUmVtb3ZlIGEgcGFyYW1ldGVyLgotCSAqIAotCSAqIEBwYXJhbSBwYXJhbWV0ZXIgdGhlIHBhcmFtZXRlciB0byByZW1vdmUKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVQYXJhbWV0ZXIoVHlwZWRWYWx1ZSBwYXJhbWV0ZXIpCi0JewotCQlwYXJhbWV0ZXJzLnJlbW92ZShwYXJhbWV0ZXIpOwotCX0KLQotCS8qKgotCSAqIEdldCB0aGUgb3V0cHV0IHByb3BlcnRpZXMgZm9yIHRoaXMuCi0JICogCi0JICogQHJldHVybiB0aGUgb3V0cHV0IHByb3BlcnRpZXMKLQkgKi8KLQlwdWJsaWMgUHJvcGVydGllcyBnZXRPdXRwdXRQcm9wZXJ0aWVzKCkKLQl7Ci0JCXJldHVybiBvdXRwdXRQcm9wZXJ0aWVzOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgb3V0cHV0IHByb3BlcnRpZXMgZm9yIHRoaXMuCi0JICogCi0JICogQHBhcmFtIG91dHB1dFByb3BlcnRpZXMgdGhlIG91dHB1dCBwcm9wZXJ0aWVzIHRvIHNldAotCSAqLwotCXB1YmxpYyB2b2lkIHNldE91dHB1dFByb3BlcnRpZXMoUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzKQotCXsKLQkJdGhpcy5vdXRwdXRQcm9wZXJ0aWVzID0gb3V0cHV0UHJvcGVydGllczsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWMgb3V0cHV0IHByb3BlcnR5LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBvdXRwdXQgcHJvcGVydHkKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlCi0JICovCi0JcHVibGljIHZvaWQgc2V0T3V0cHV0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkKLQl7Ci0JCW91dHB1dFByb3BlcnRpZXMucHV0KG5hbWUsIHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBSZW1vdmUgYW4gb3V0cHV0IHByb3BlcnR5LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBvdXRwdXQgcHJvcGVydHkgdG8gcmVtb3ZlCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlT3V0cHV0UHJvcGVydHkoU3RyaW5nIG5hbWUpCi0JewotCQlvdXRwdXRQcm9wZXJ0aWVzLnJlbW92ZShuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIDxjb2RlPlVSSVJlc29sdmVyPC9jb2RlPiBjbGFzcyB0byB1c2UuCi0JICogCi0JICogQHJldHVybiB0aGUgcmVzb2x2ZXIncyBjbGFzcyBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRSZXNvbHZlckNsYXNzKCkKLQl7Ci0JCXJldHVybiByZXNvbHZlckNsYXNzOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgbmFtZSBvZiB0aGUgPGNvZGU+VVJJUmVzb2x2ZXI8L2NvZGU+IGNsYXNzIHRvIHVzZS4KLQkgKiAKLQkgKiAgQHBhcmFtIHJlc29sdmVyIHRoZSByZXNvbHZlcidzIGNsYXNzIG5hbWUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRSZXNvbHZlckNsYXNzKFN0cmluZyByZXNvbHZlcikKLQl7Ci0JCXJlc29sdmVyQ2xhc3MgPSByZXNvbHZlcjsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIFVSTCBvZiB0aGUgc3R5bGVzaGVldC4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBzdHlsZXNoZWV0IFVSTAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0U3R5bGVzaGVldFVSTCgpCi0JewotCQlyZXR1cm4gc3R5bGVzaGVldFVSTDsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdGhlIFVSTCBvZiB0aGUgc3R5bGVzaGVldC4KLQkgKiAKLQkgKiBAcGFyYW0gc3R5bGVzaGVldCB0aGUgc3R5bGVzaGVldCBVUkwKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTdHlsZXNoZWV0VVJMKFN0cmluZyBzdHlsZXNoZWV0KQotCXsKLQkJc3R5bGVzaGVldFVSTCA9IHN0eWxlc2hlZXQ7Ci0JfQotCi0JLyoqCi0JICogU2VyaWFsaXplIHRoaXMgdG8gYSBEb2N1bWVudCBmcmFnbWVudC4KLQkgKiAKLQkgKiBAcGFyYW0gZG9jIHRoZSBkb2N1bWVudCB0byBhdHRhY2ggdG8KLQkgKiBAcmV0dXJuIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGZyYWdtZW50Ci0JICovCi0JcHVibGljIEVsZW1lbnQgYXNYTUwoRG9jdW1lbnQgZG9jKQotCXsKLQkJRWxlbWVudCB0ZGVmRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiVHJhbnNmb3JtIik7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZkVsLnNldEF0dHJpYnV0ZShNZXNzYWdlcy5nZXRTdHJpbmcoIlRyYW5zZm9ybURlZmluaXRpb24uMSIpLCBzdHlsZXNoZWV0VVJMKTsgLy8kTk9OLU5MUy0xJAotCQlpZiAocmVzb2x2ZXJDbGFzcyAhPSBudWxsKQotCQkJdGRlZkVsLnNldEF0dHJpYnV0ZSgidXJpUmVzb2x2ZXIiLCByZXNvbHZlckNsYXNzKTsgLy8kTk9OLU5MUy0xJAotCQlFbGVtZW50IG9wRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiT3V0cHV0UHJvcGVydGllcyIpOyAvLyROT04tTkxTLTEkCi0JCXRkZWZFbC5hcHBlbmRDaGlsZChvcEVsKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gb3V0cHV0UHJvcGVydGllcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSkgaXRlci5uZXh0KCk7Ci0JCQlFbGVtZW50IHByb3BFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJQcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgKFN0cmluZykgZW50cnkuZ2V0S2V5KCkpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIChTdHJpbmcpIGVudHJ5LmdldFZhbHVlKCkpOyAvLyROT04tTkxTLTEkCi0JCQlvcEVsLmFwcGVuZENoaWxkKHByb3BFbCk7Ci0JCX0KLQkJRWxlbWVudCBwYXJhbXNFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJQYXJhbWV0ZXJzIik7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZkVsLmFwcGVuZENoaWxkKHBhcmFtc0VsKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gcGFyYW1ldGVycy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUVsZW1lbnQgcHJvcEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBhcmFtZXRlciIpOyAvLyROT04tTkxTLTEkCi0JCQlUeXBlZFZhbHVlIHBhcmFtID0gKFR5cGVkVmFsdWUpIGl0ZXIubmV4dCgpOwotCQkJcHJvcEVsLnNldEF0dHJpYnV0ZSgibmFtZSIsIHBhcmFtLnVyaSk7IC8vJE5PTi1OTFMtMSQKLQkJCXByb3BFbC5zZXRBdHRyaWJ1dGUoInR5cGUiLCBwYXJhbS50eXBlKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcEVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBwYXJhbS52YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCXBhcmFtc0VsLmFwcGVuZENoaWxkKHByb3BFbCk7Ci0JCX0KLQkJcmV0dXJuIHRkZWZFbDsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmcm9tIGl0cyBzZXJpYWxpemVkIGZvcm0uCi0JICogCi0JICogQHBhcmFtIHRyYW5zZm9ybUVsIHRoZSBlbGVtZW50IHRvIGNyZWF0ZSB0aGlzIGZyb20KLQkgKiBAcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRyYW5zZm9ybURlZmluaXRpb24gZnJvbVhNTChFbGVtZW50IHRyYW5zZm9ybUVsKQotCXsKLQkJVHJhbnNmb3JtRGVmaW5pdGlvbiB0ZGVmID0gbmV3IFRyYW5zZm9ybURlZmluaXRpb24oKTsKLQkJU3RyaW5nIHVybCA9IHRyYW5zZm9ybUVsLmdldEF0dHJpYnV0ZSgidXJsIik7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZi5zZXRTdHlsZXNoZWV0VVJMKHVybCk7Ci0JCVN0cmluZyB1cmlSZXNvbHZlciA9IHRyYW5zZm9ybUVsLmdldEF0dHJpYnV0ZSgidXJpUmVzb2x2ZXIiKTsgLy8kTk9OLU5MUy0xJAotCQl0ZGVmLnNldFJlc29sdmVyQ2xhc3ModXJpUmVzb2x2ZXIpOwotCi0JCUVsZW1lbnQgb3BFbCA9IChFbGVtZW50KSB0cmFuc2Zvcm1FbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiT3V0cHV0UHJvcGVydGllcyIpLml0ZW0oMCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG9wRWwgIT0gbnVsbCkKLQkJewotCQkJTm9kZUxpc3QgcHJvcEVscyA9IG9wRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlByb3BlcnR5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcEVscy5nZXRMZW5ndGgoKTsgaSsrKQotCQkJewotCQkJCUVsZW1lbnQgcHJvcEVsID0gKEVsZW1lbnQpIHByb3BFbHMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IHByb3BFbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJCVN0cmluZyB2YWx1ZSA9IHByb3BFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQl0ZGVmLnNldE91dHB1dFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLQkJCX0KLQkJfQotCi0JCUVsZW1lbnQgcGFyYW1zRWwgPSAoRWxlbWVudCkgdHJhbnNmb3JtRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJUcmFuc2Zvcm1EZWZpbml0aW9uLjE4IikpLml0ZW0oMCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHBhcmFtc0VsICE9IG51bGwpCi0JCXsKLQkJCU5vZGVMaXN0IHBhcmFtRWxzID0gcGFyYW1zRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJUcmFuc2Zvcm1EZWZpbml0aW9uLjE5IikpOyAvLyROT04tTkxTLTEkCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtRWxzLmdldExlbmd0aCgpOyBpKyspCi0JCQl7Ci0JCQkJRWxlbWVudCBwYXJhbUVsID0gKEVsZW1lbnQpIHBhcmFtRWxzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBwYXJhbUVsLmdldEF0dHJpYnV0ZShNZXNzYWdlcy5nZXRTdHJpbmcoIlRyYW5zZm9ybURlZmluaXRpb24uMjAiKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlTdHJpbmcgdHlwZSA9IHBhcmFtRWwuZ2V0QXR0cmlidXRlKE1lc3NhZ2VzLmdldFN0cmluZygiVHJhbnNmb3JtRGVmaW5pdGlvbi4yMSIpKTsgLy8kTk9OLU5MUy0xJAotCQkJCVN0cmluZyB2YWx1ZSA9IHBhcmFtRWwuZ2V0QXR0cmlidXRlKE1lc3NhZ2VzLmdldFN0cmluZygiVHJhbnNmb3JtRGVmaW5pdGlvbi4yMiIpKTsgLy8kTk9OLU5MUy0xJAotCQkJCXRkZWYuYWRkUGFyYW1ldGVyKG5ldyBUeXBlZFZhbHVlKG5hbWUsIHR5cGUsIHZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gdGRlZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvVHJhbnNmb3JtYXRpb25FeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTBhY2FmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXI7Ci0KLS8qKgotICogQ2hlY2tlZCBFeGNlcHRpb24gZm9yIHRyYW5zZm9ybWF0aW9uIGVycm9ycy4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNmb3JtYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuCi0JICogCi0JICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgVHJhbnNmb3JtYXRpb25FeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpCi0JewotCQlzdXBlcihtZXNzYWdlKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlIGFuZCBjYXVzZS4KLQkgKiAKLQkgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZQotCSAqIEBwYXJhbSBjYXVzZSB0aGUgY2F1c2UKLQkgKi8KLQlwdWJsaWMgVHJhbnNmb3JtYXRpb25FeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBjYXVzZSkKLQl7Ci0JCXN1cGVyKG1lc3NhZ2UsIGNhdXNlKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL1R5cGVkVmFsdWUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9UeXBlZFZhbHVlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNTFjNGQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL1R5cGVkVmFsdWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLkNyZWF0aW9uRXhjZXB0aW9uOwotCi0vKioKLSAqIEEgdmFsdWUgdGhhdCBpcyB0byBiZSBpbnN0YW50aWF0ZWQgZnJvbSBhIHBhcnRpY3VsYXIgdHlwZSBlLmcuIERvdWJsZSwgT2JqZWN0LgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBUeXBlZFZhbHVlCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9TVFJJTkcgPSAic3RyaW5nIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0JPT0xFQU4gPSAiYm9vbGVhbiI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9JTlQgPSAiaW50IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX0RPVUJMRSA9ICJkb3VibGUiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfRkxPQVQgPSAiZmxvYXQiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfQ0xBU1MgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRZUEVfT0JKRUNUID0gIm9iamVjdCI7IC8vJE5PTi1OTFMtMSQKLQotCWZpbmFsIFN0cmluZyB1cmk7Ci0JZmluYWwgU3RyaW5nIHR5cGU7Ci0JZmluYWwgU3RyaW5nIHZhbHVlOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgZnJvbSB0aGUgZ2l2ZW4gaW5mb3JtYXRpb24uIAotCSAqIAotCSAqIEBwYXJhbSB1cmkgdGhlIFVSSQotCSAqIEBwYXJhbSB0eXBlIHRoZSB0eXBlIG9mIHZhbHVlCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZQotCSAqLwotCXB1YmxpYyBUeXBlZFZhbHVlKFN0cmluZyB1cmksIFN0cmluZyB0eXBlLCBTdHJpbmcgdmFsdWUpCi0JewotCQl0aGlzLnVyaSA9IHVyaTsKLQkJdGhpcy50eXBlID0gdHlwZTsKLQkJdGhpcy52YWx1ZSA9IHZhbHVlOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSB0aGUgdHlwZSBvZiBvYmplY3QgZGVmaW5lZCBieSB0aGlzLiAKLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZQotCSAqIEB0aHJvd3MgQ3JlYXRpb25FeGNlcHRpb24gaWYgYSBwcm9ibGVtIG9jY3VycmVkCi0JICovCi0JcHVibGljIE9iamVjdCBjcmVhdGVWYWx1ZSgpIHRocm93cyBDcmVhdGlvbkV4Y2VwdGlvbgotCXsKLQkJT2JqZWN0IG8gPSBudWxsOwotCQlpZiAoVFlQRV9TVFJJTkcuZXF1YWxzKHR5cGUpKQotCQl7Ci0JCQlvID0gdmFsdWU7Ci0JCX0KLQkJZWxzZSBpZiAoVFlQRV9CT09MRUFOLmVxdWFscyh0eXBlKSkKLQkJewotCQkJYm9vbGVhbiBiID0gInllcyIuZXF1YWxzSWdub3JlQ2FzZSh2YWx1ZSkgfHwgInRydWUiLmVxdWFsc0lnbm9yZUNhc2UodmFsdWUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCW8gPSBuZXcgQm9vbGVhbihiKTsKLQkJfQotCQllbHNlIGlmIChUWVBFX0lOVC5lcXVhbHModHlwZSkpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCW8gPSBuZXcgSW50ZWdlcih2YWx1ZSk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IENyZWF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS45IikgKyB2YWx1ZSArIE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4xMCIpLCBlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoVFlQRV9ET1VCTEUuZXF1YWxzKHR5cGUpKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlvID0gbmV3IERvdWJsZSh2YWx1ZSk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IENyZWF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4xMSIpICsgdmFsdWUgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTIiKSwgZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKFRZUEVfRkxPQVQuZXF1YWxzKHR5cGUpKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlvID0gbmV3IEZsb2F0KHZhbHVlKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjEzIikgKyB2YWx1ZSArIE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4xNCIpLCBlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoVFlQRV9DTEFTUy5lcXVhbHModHlwZSkpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCW8gPSBDbGFzcy5mb3JOYW1lKHZhbHVlKTsKLQkJCX0KLQkJCWNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IENyZWF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4xNSIpICsgdmFsdWUgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTYiKSwgZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKFRZUEVfT0JKRUNULmVxdWFscyh0eXBlKSkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJQ2xhc3MgYyA9IENsYXNzLmZvck5hbWUodmFsdWUpOwotCQkJCW8gPSBjLm5ld0luc3RhbmNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCXRocm93IG5ldyBDcmVhdGlvbkV4Y2VwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMTciKSArIHZhbHVlICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjE4IiksIGUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCX0KLQkJCWNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJdGhyb3cgbmV3IENyZWF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4xOSIpICsgdmFsdWUgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlR5cGVkVmFsdWUuMjAiKSwgZSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCQkJY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjIxIikgKyB2YWx1ZSArIE1lc3NhZ2VzLmdldFN0cmluZygiVHlwZWRWYWx1ZS4yMiIpLCBlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQl0aHJvdyBuZXcgQ3JlYXRpb25FeGNlcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjIzIikgKyB0eXBlICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJUeXBlZFZhbHVlLjI0IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfQotCQlyZXR1cm4gbzsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL0NvbmZpZ3VyYXRpb25FeGNlcHRpb24uamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9Db25maWd1cmF0aW9uRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MjZjNzMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL0NvbmZpZ3VyYXRpb25FeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsOwotCi0vKioKLSAqIEFuIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBjb25maWd1cmF0aW9uIG9mIGFuIFhTTCB0cmFuc2Zvcm0gcGlwZWxpbmUgZmFpbHMuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIENvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQotCS8qKgotCSAqIENyZWF0ZSB0aGUgZXhjZXB0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBtc2cgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlCi0JICogQHBhcmFtIHQgdGhlIHVuZGVybHlpbmcgY2F1c2UKLQkgKi8KLQlwdWJsaWMgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihTdHJpbmcgbXNnLCBUaHJvd2FibGUgdCkKLQl7Ci0JCXN1cGVyKG1zZywgdCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL0NyZWF0aW9uRXhjZXB0aW9uLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvQ3JlYXRpb25FeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJhMDdiZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvQ3JlYXRpb25FeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsOwotCi0vKioKLSAqIENoZWNrZWQgRXhjZXB0aW9uIGZvciBvYmplY3QgY3JlYXRpb24gZXJyb3JzLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBDcmVhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0JLyoqCi0JICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS4KLQkgKiAKLQkgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZQotCSAqLwotCXB1YmxpYyBDcmVhdGlvbkV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkKLQl7Ci0JCXN1cGVyKG1lc3NhZ2UpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UgYW5kIGNhdXNlLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlCi0JICogQHBhcmFtIGNhdXNlIHRoZSBjYXVzZQotCSAqLwotCXB1YmxpYyBDcmVhdGlvbkV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGNhdXNlKQotCXsKLQkJc3VwZXIobWVzc2FnZSwgY2F1c2UpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9KQVhQU0FYUHJvY2Vzc29ySW52b2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjQxYWM1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9KQVhQU0FYUHJvY2Vzc29ySW52b2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLkVycm9yTGlzdGVuZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zYXguU0FYUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc2F4LlNBWFNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnNheC5TQVhUcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zYXguVHJhbnNmb3JtZXJIYW5kbGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuSVByb2Nlc3Nvckludm9rZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuVHJhbnNmb3JtYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5JUHJvY2Vzc29ySW52b2tlcjwvY29kZT4gdGhhdCB1c2VzIEpBWFAgYXMgdGhlIHVuZGVybHlpbmcKLSAqIHRyYW5zZm9ybWF0aW9uIG1lY2hhbmlzbS4KLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgY2xhc3MgSkFYUFNBWFByb2Nlc3Nvckludm9rZXIgaW1wbGVtZW50cyBJUHJvY2Vzc29ySW52b2tlcgotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhKQVhQU0FYUHJvY2Vzc29ySW52b2tlci5jbGFzcyk7Ci0KLQlwcml2YXRlIFhNTFJlYWRlciByZWFkZXI7Ci0JcHJpdmF0ZSBTQVhUcmFuc2Zvcm1lckZhY3RvcnkgdEZhY3Rvcnk7Ci0JcHJpdmF0ZSBUcmFuc2Zvcm1lckhhbmRsZXIgdGg7Ci0KLQkvKioKLQkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy4KLQkgKiAKLQkgKiBAdGhyb3dzIFNBWEV4Y2VwdGlvbiBpZiBlcnJvcnMgb2NjdXIgd2hpbGUgY3JlYXRpbmcgYW4gPGNvZGU+WE1MUmVhZGVyPC9jb2RlPgotCSAqIEB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiBlcnJvcnMgb2NjdXIgd2hpbGUgY3JlYXRpbmcgYW4gPGNvZGU+WE1MUmVhZGVyPC9jb2RlPgotCSAqLwotCXB1YmxpYyBKQVhQU0FYUHJvY2Vzc29ySW52b2tlcigpIHRocm93cyBTQVhFeGNlcHRpb24sIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQl7Ci0JCXJlYWRlciA9IGNyZWF0ZVJlYWRlcigpOwotCX0KLQotCXByb3RlY3RlZCBYTUxSZWFkZXIgY3JlYXRlUmVhZGVyKCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiwgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCXsKLQkJU0FYUGFyc2VyRmFjdG9yeSBzcGYgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCXNwZi5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJcmV0dXJuIHNwZi5uZXdTQVhQYXJzZXIoKS5nZXRYTUxSZWFkZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGVzKE1hcCBhdHRyaWJ1dGVzKSB0aHJvd3MgVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yCi0JewotCQljcmVhdGVUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5lbnRyeVNldCgpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJewotCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSkgaXRlci5uZXh0KCk7Ci0JCQlTdHJpbmcgdXJpID0gKFN0cmluZykgZW50cnkuZ2V0S2V5KCk7Ci0JCQlPYmplY3QgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpOwotCQkJbG9nLmluZm8oTWVzc2FnZXMuZ2V0U3RyaW5nKCJKQVhQU0FYUHJvY2Vzc29ySW52b2tlci4wIikgKyB1cmkgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjEiKSArIHZhbHVlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQl0RmFjdG9yeS5zZXRBdHRyaWJ1dGUodXJpLCB2YWx1ZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgVHJhbnNmb3JtZXJGYWN0b3J5IGNyZWF0ZVRyYW5zZm9ybWVyRmFjdG9yeSgpCi0JewotCQl0RmFjdG9yeSA9IChTQVhUcmFuc2Zvcm1lckZhY3RvcnkpIFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQl0RmFjdG9yeS5zZXRFcnJvckxpc3RlbmVyKG5ldyBFcnJvckxpc3RlbmVyKCkKLQkJewotCi0JCQlwdWJsaWMgdm9pZCBlcnJvcihUcmFuc2Zvcm1lckV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCQkJewotCQkJCWxvZy5lcnJvcihleGNlcHRpb24uZ2V0TWVzc2FnZUFuZExvY2F0aW9uKCkpOwotCQkJfQotCi0JCQlwdWJsaWMgdm9pZCBmYXRhbEVycm9yKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGV4Y2VwdGlvbikgdGhyb3dzIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JCQl7Ci0JCQkJbG9nLmVycm9yKGV4Y2VwdGlvbi5nZXRNZXNzYWdlQW5kTG9jYXRpb24oKSwgZXhjZXB0aW9uKTsKLQkJCQl0aHJvdyBleGNlcHRpb247Ci0JCQl9Ci0KLQkJCXB1YmxpYyB2b2lkIHdhcm5pbmcoVHJhbnNmb3JtZXJFeGNlcHRpb24gZXhjZXB0aW9uKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQkJCXsKLQkJCQlsb2cud2FybihleGNlcHRpb24uZ2V0TWVzc2FnZUFuZExvY2F0aW9uKCkpOwotCQkJfQotCi0JCX0pOwotCQlyZXR1cm4gdEZhY3Rvcnk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkU3R5bGVzaGVldChVUkwgc3R5bGVzaGVldCwgTWFwIHBhcmFtZXRlcnMsIFByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcywgVVJJUmVzb2x2ZXIgcmVzb2x2ZXIpIHRocm93cyBUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24KLQl7Ci0JCUlucHV0U291cmNlIGlucHV0c291cmNlID0gbmV3IElucHV0U291cmNlKHN0eWxlc2hlZXQudG9TdHJpbmcoKSk7Ci0KLQkJLy8gVE9ETyBwYXJzZSBkb2N1bWVudCB3aXRoIGxpbmVudW1iZXJzCi0KLQkJLy8gWE1MUmVhZGVyIHJlYWRlciA9IGNyZWF0ZVJlYWRlcigpOwotCQkvLyBMaW5lUmVhZGluZ0NvbnRlbnRIYW5kbGVyIGNoID0gbmV3IExpbmVSZWFkaW5nQ29udGVudEhhbmRsZXIoKTsKLQkJLy8gcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGNoKTsKLQkJU0FYU291cmNlIHNvdXJjZSA9IG5ldyBTQVhTb3VyY2UoaW5wdXRzb3VyY2UpOwotCi0JCWFkZFN0eWxlc2hlZXQoc291cmNlLCByZXNvbHZlciwgcGFyYW1ldGVycywgb3V0cHV0UHJvcGVydGllcyk7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgVHJhbnNmb3JtZXIgYWRkU3R5bGVzaGVldChTb3VyY2Ugc291cmNlLCBVUklSZXNvbHZlciByZXNvbHZlciwgTWFwIHBhcmFtZXRlcnMsIFByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcykgdGhyb3dzIFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbgotCXsKLQkJaWYgKHRGYWN0b3J5ID09IG51bGwpCi0JCQljcmVhdGVUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQotCQlUcmFuc2Zvcm1lckhhbmRsZXIgbmV3VGggPSB0RmFjdG9yeS5uZXdUcmFuc2Zvcm1lckhhbmRsZXIoc291cmNlKTsKLQkJVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBuZXdUaC5nZXRUcmFuc2Zvcm1lcigpOwotCi0JCWlmIChyZXNvbHZlciAhPSBudWxsKQotCQkJdHJhbnNmb3JtZXIuc2V0VVJJUmVzb2x2ZXIocmVzb2x2ZXIpOwotCi0JCWlmIChwYXJhbWV0ZXJzICE9IG51bGwpCi0JCXsKLQkJCWZvciAoSXRlcmF0b3IgaXRlciA9IHBhcmFtZXRlcnMuZW50cnlTZXQoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCQl7Ci0JCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSkgaXRlci5uZXh0KCk7Ci0JCQkJU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBlbnRyeS5nZXRLZXkoKTsKLQkJCQlPYmplY3QgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpOwotCQkJCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuMiIpICsgbmFtZSArIE1lc3NhZ2VzLmdldFN0cmluZygiSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuMyIpICsgdmFsdWUpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl0cmFuc2Zvcm1lci5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsdWUpOwotCQkJfQotCQl9Ci0JCWlmIChvdXRwdXRQcm9wZXJ0aWVzICE9IG51bGwpCi0JCXsKLQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCWZvciAoSXRlcmF0b3IgaXRlciA9IG91dHB1dFByb3BlcnRpZXMuZW50cnlTZXQoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCQl7Ci0JCQkJTWFwLkVudHJ5IGVudHJ5ID0gKE1hcC5FbnRyeSkgaXRlci5uZXh0KCk7Ci0JCQkJc2IuYXBwZW5kKGVudHJ5LmdldEtleSgpKS5hcHBlbmQoIj0iKS5hcHBlbmQoZW50cnkuZ2V0VmFsdWUoKSkuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCQkJaWYgKG91dHB1dFByb3BlcnRpZXMuc2l6ZSgpID4gMCkKLQkJCXsKLQkJCQlsb2cuaW5mbyhNZXNzYWdlcy5nZXRTdHJpbmcoIkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjYiKSArIHNiLnRvU3RyaW5nKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydGllcyhvdXRwdXRQcm9wZXJ0aWVzKTsKLQkJCX0KLQkJfQotCi0JCWlmICh0aCAhPSBudWxsKQotCQkJdGguc2V0UmVzdWx0KG5ldyBTQVhSZXN1bHQobmV3VGgpKTsKLQkJZWxzZQotCQkJcmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKG5ld1RoKTsKLQkJdGggPSBuZXdUaDsKLQkJcmV0dXJuIHRoLmdldFRyYW5zZm9ybWVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdHJhbnNmb3JtKFVSTCBzb3VyY2VVUkwsIFJlc3VsdCByZXMpIHRocm93cyBUcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbgotCXsKLQkJdHJhbnNmb3JtKG5ldyBJbnB1dFNvdXJjZShzb3VyY2VVUkwudG9FeHRlcm5hbEZvcm0oKSksIHJlcyk7Ci0JfQotCi0JLyoqCi0JICogVHJhbnNmb3JtIHVzaW5nIGFuIElucHV0U291cmNlIHJhdGhlciB0aGFuIGEgVVJMCi0JICogCi0JICogQHBhcmFtIGlucHV0c291cmNlIHRoZSBJbnB1dFNvdXJjZSB0byB1c2UKLQkgKiBAcGFyYW0gcmVzIHRoZSBSZXN1bHQKLQkgKiBAdGhyb3dzIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0cmFuc2Zvcm1hdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRyYW5zZm9ybShJbnB1dFNvdXJjZSBpbnB1dHNvdXJjZSwgUmVzdWx0IHJlcykgdGhyb3dzIFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uCi0JewotCQl0cnkKLQkJewotCQkJaWYgKHRoID09IG51bGwpCi0JCQl7Ly8gbm8gc3R5bGVzaGVldHMgaGF2ZSBiZWVuIGFkZGVkLCBzbyB0cnkgdG8gdXNlIGVtYmVkZGVkLi4uCi0JCQkJU0FYU291cmNlIHNheFNvdXJjZSA9IG5ldyBTQVhTb3VyY2UoaW5wdXRzb3VyY2UpOwotCQkJCVNvdXJjZSBzcmMgPSBzYXhTb3VyY2U7Ci0JCQkJU3RyaW5nIG1lZGlhID0gbnVsbCwgdGl0bGUgPSBudWxsLCBjaGFyc2V0ID0gbnVsbDsKLQkJCQl3aGlsZSAodHJ1ZSkKLQkJCQl7Ci0JCQkJCXNyYyA9IHRGYWN0b3J5LmdldEFzc29jaWF0ZWRTdHlsZXNoZWV0KHNyYywgbWVkaWEsIHRpdGxlLCBjaGFyc2V0KTsKLQkJCQkJaWYgKHNyYyAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlhZGRTdHlsZXNoZWV0KHNheFNvdXJjZSwgbnVsbCwgQ29sbGVjdGlvbnMuRU1QVFlfTUFQLCBuZXcgUHJvcGVydGllcygpKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCXRocm93IG5ldyBUcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjciKSArIGlucHV0c291cmNlLmdldFN5c3RlbUlkKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl0aC5zZXRSZXN1bHQocmVzKTsKLQkJCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuOCIpKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVhZGVyLnBhcnNlKGlucHV0c291cmNlKTsKLQkJCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuOSIpKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IFRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NYWluLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvTWFpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2NkY2U4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NYWluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuSVByb2Nlc3Nvckludm9rZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuUGlwZWxpbmVEZWZpbml0aW9uOwotCi0vKioKLSAqIFRoZSBjbGFzcyB3aG9zZSA8Y29kZT5tYWluPC9jb2RlPiBtZXRob2QgaXMgY2FsbGVkIHdoZW4gbGF1bmNoaW5nIHRoZSB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzIGZyb20KLSAqIEVjbGlwc2UuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGNsYXNzIE1haW4KLXsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coTWFpbi5jbGFzcyk7Ci0KLQkvKioKLQkgKiBUaGUgPGNvZGU+bWFpbjwvY29kZT4gbWV0aG9kIGNhbGxlZCB3aGVuIGxhdW5jaGluZyB0aGUgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcy4KLQkgKiBUaGVyZSBhcmUgNCByZXF1aXJlZCBhcmd1bWVudHM6Ci0JICogPG9sPgotCSAqIDxsaT5UaGUgY2xhc3MgbmFtZSBvZiB0aGUgPGNvZGU+SVByb2Nlc3Nvckludm9rZXI8L2NvZGU+IHRvIHVzZQotCSAqIDxsaT5UaGUgbGF1bmNoIGZpbGUgKHNlcmlhbGl6ZWQgPGNvZGU+UGlwZWxpbmVEZWZpbml0aW9uPC9jb2RlPikKLQkgKiA8bGk+VGhlIFVSTCBvZiB0aGUgc291cmNlIFhNTCBkb2N1bWVudAotCSAqIDxsaT5UaGUgZmlsZSB3aGVyZSBvdXRwdXQgd2lsbCBiZSB3cml0dGVuCi0JICogPC9vbD4KLQkgKiAKLQkgKiBAcGFyYW0gYXJncyB0aGUgNCByZXF1aXJlZCBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotCXsKLQkJbG9nLmluZm8oImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5PSIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJbG9nLmluZm8oImphdmEuZW5kb3JzZWQuZGlycz0iICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmVuZG9yc2VkLmRpcnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkKLQkJU3RyaW5nIGludm9rZXJDbGFzc05hbWUgPSBhcmdzWzBdOwotCQlGaWxlIGxhdW5jaEZpbGUgPSBuZXcgRmlsZShhcmdzWzFdKTsKLQkJU3RyaW5nIHNyYyA9IGFyZ3NbMl07Ci0JCVN0cmluZyB0YXJnZXQgPSBhcmdzWzNdOwotCi0JCWxvZy5pbmZvKE1lc3NhZ2VzLmdldFN0cmluZygiTWFpbi40IikgKyBsYXVuY2hGaWxlKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNyZWF0ZSB0aGUgaW52b2tlcgotCQlJUHJvY2Vzc29ySW52b2tlciBpbnZva2VyID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCUNsYXNzIGNsYXp6ID0gQ2xhc3MuZm9yTmFtZShpbnZva2VyQ2xhc3NOYW1lKTsKLQkJCWludm9rZXIgPSAoSVByb2Nlc3Nvckludm9rZXIpIGNsYXp6Lm5ld0luc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQloYW5kbGVGYXRhbEVycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiTWFpbi41IikgKyBpbnZva2VyQ2xhc3NOYW1lLCBlKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXRyeQotCQl7Ci0JCQlQaXBlbGluZURlZmluaXRpb24gcGlwZWxpbmUgPSBuZXcgUGlwZWxpbmVEZWZpbml0aW9uKGxhdW5jaEZpbGUpOwotCQkJcGlwZWxpbmUuY29uZmlndXJlKGludm9rZXIpOwotCQkJaW52b2tlci50cmFuc2Zvcm0obmV3IFVSTChzcmMpLCBuZXcgU3RyZWFtUmVzdWx0KG5ldyBGaWxlT3V0cHV0U3RyZWFtKG5ldyBGaWxlKHRhcmdldCkpKSk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQloYW5kbGVGYXRhbEVycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgaGFuZGxlRmF0YWxFcnJvcihTdHJpbmcgbXNnLCBUaHJvd2FibGUgdCkKLQl7Ci0JCWxvZy5mYXRhbChtc2csIHQpOwotCQlTeXN0ZW0uZXhpdCgxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvaW50ZXJuYWwvTWVzc2FnZXMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWUzOTk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotLyoqCi0gKiBNZXNzYWdlcyBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uLgotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcwotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkKLQl7Ci0JfQotCi0JLyoqCi0JICogR2V0IGEgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGtleS4KLQkgKiAKLQkgKiBAcGFyYW0ga2V5IHRoZSBtZXNzYWdlIGtleQotCSAqIEByZXR1cm4gdGhlIG1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkKLQl7Ci0JCXRyeQotCQl7Ci0JCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkKLQkJewotCQkJcmV0dXJuICchJyArIGtleSArICchJzsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvZGVidWcvaW52b2tlci9pbnRlcm5hbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOGY5YTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1KQVhQU0FYUHJvY2Vzc29ySW52b2tlci4wPVNldHRpbmcgYXR0cmlidXRlICcKLUpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjE9JyB0byB2YWx1ZSAKLUpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjI9U2V0dGluZyBwYXJhbWV0ZXIgJwotSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuMz0nIHRvIHZhbHVlIAotSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuNj1TZXR0aW5nIHByb3BlcnRpZXM6IAotSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuNz1ObyBlbWJlZGRlZCBzdHlsZXNoZWV0IGluc3RydWN0aW9uIGZvciBmaWxlOiAKLUpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLjg9VHJhbnNmb3JtaW5nLi4uCi1KQVhQU0FYUHJvY2Vzc29ySW52b2tlci45PURvbmUuCi1NYWluLjQ9bGF1bmNoRmlsZTogCi1NYWluLjU9Q291bGQgbm90IGluc3RhbnRpYXRlIGludm9rZXI6IApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9kZWJ1Zy9pbnZva2VyL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVhOWIzYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2RlYnVnL2ludm9rZXIvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVBpcGVsaW5lRGVmaW5pdGlvbi4xMD1FcnJvciB3aXRoIHN0eWxlc2hlZXQ6IAotUGlwZWxpbmVEZWZpbml0aW9uLjg9Q291bGQgbm90IGluc3RhbnRpYXRlIHBhcmFtZXRlcgotUGlwZWxpbmVEZWZpbml0aW9uLjk9SW52YWxpZCBzdHlsZXNoZWV0IFVSTDogCi1UcmFuc2Zvcm1EZWZpbml0aW9uLjE9dXJsCi1UcmFuc2Zvcm1EZWZpbml0aW9uLjE4PVBhcmFtZXRlcnMKLVRyYW5zZm9ybURlZmluaXRpb24uMTk9UGFyYW1ldGVyCi1UcmFuc2Zvcm1EZWZpbml0aW9uLjIwPW5hbWUKLVRyYW5zZm9ybURlZmluaXRpb24uMjE9dHlwZQotVHJhbnNmb3JtRGVmaW5pdGlvbi4yMj12YWx1ZQotVHlwZWRWYWx1ZS4xMD0nIHRvIGFuIEludGVnZXIKLVR5cGVkVmFsdWUuMTE9Q291bGQgbm90IGNvbnZlcnQgdmFsdWUgJwotVHlwZWRWYWx1ZS4xMj0nIHRvIGEgRG91YmxlCi1UeXBlZFZhbHVlLjEzPUNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlICcKLVR5cGVkVmFsdWUuMTQ9JyB0byBhIEZsb2F0Ci1UeXBlZFZhbHVlLjE1PUNsYXNzICcKLVR5cGVkVmFsdWUuMTY9JyBjb3VsZCBub3QgYmUgbG9jYXRlZCAoY2hlY2sgdGhlIGNsYXNzcGF0aCkKLVR5cGVkVmFsdWUuMTc9Q2xhc3MgJwotVHlwZWRWYWx1ZS4xOD0nIGNvdWxkIG5vdCBiZSBsb2NhdGVkIChjaGVjayB0aGUgY2xhc3NwYXRoKQotVHlwZWRWYWx1ZS4xOT1PYmplY3QgJwotVHlwZWRWYWx1ZS4yMD0nIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQKLVR5cGVkVmFsdWUuMjE9T2JqZWN0ICcKLVR5cGVkVmFsdWUuMjI9XCBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkCi1UeXBlZFZhbHVlLjIzPUF0dHJpYnV0ZSB0eXBlICcKLVR5cGVkVmFsdWUuMjQ9JyBpcyBub3QgcmVjb2duaXNlZAotVHlwZWRWYWx1ZS45PUNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlICcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGVhN2VjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGQ5MzY5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNXZWQgSnVsIDMwIDE2OjM4OjUxIEJTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9KUkVEZWZhdWx0QXR0cmlidXRlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMjQ0ZDIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRBdHRyaWJ1dGVzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9KUkVEZWZhdWx0T3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMjNlOWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL0pSRURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1tZXRob2Q9bWV0aG9kCi1tZXRob2QuREVTQz0ieG1sIiB8ICJodG1sIiB8ICJ0ZXh0IiB8IHFuYW1lLWJ1dC1ub3QtbmNuYW1lIAotCi12ZXJzaW9uPXZlcnNpb24KLXZlcnNpb24uREVTQz1zcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIG91dHB1dCBtZXRob2QKLQotaW5kZW50PWluZGVudAotaW5kZW50LkRFU0M9c3BlY2lmaWVzIHdoZXRoZXIgdGhlIFhTTFQgcHJvY2Vzc29yIG1heSBhZGQgYWRkaXRpb25hbCB3aGl0ZXNwYWNlIHdoZW4gb3V0cHV0dGluZyB0aGUgcmVzdWx0IHRyZWU7IHRoZSB2YWx1ZSBtdXN0IGJlIHllcyBvciBubwotCi1lbmNvZGluZz1lbmNvZGluZwotZW5jb2RpbmcuREVTQz1zcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBjaGFyYWN0ZXIgZW5jb2RpbmcgdGhhdCB0aGUgWFNMVCBwcm9jZXNzb3Igc2hvdWxkIHVzZSB0byBlbmNvZGUgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgYXMgc2VxdWVuY2VzIG9mIGJ5dGVzOyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBzaG91bGQgYmUgdHJlYXRlZCBjYXNlLWluc2Vuc2l0aXZlbHk7IHRoZSB2YWx1ZSBtdXN0IGNvbnRhaW4gb25seSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSAjeDIxIHRvICN4N0UgKGkuZS4gcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMpOyB0aGUgdmFsdWUgc2hvdWxkIGVpdGhlciBiZSBhIGNoYXJzZXQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBJbnRlcm5ldCBBc3NpZ25lZCBOdW1iZXJzIEF1dGhvcml0eSBbSUFOQV0sIFtSRkMyMjc4XSBvciBzdGFydCB3aXRoIFgtCi0KLW1lZGlhLXR5cGU9bWVkaWEtdHlwZQotbWVkaWEtdHlwZS5ERVNDPXNwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSAoTUlNRSBjb250ZW50IHR5cGUpIG9mIHRoZSBkYXRhIHRoYXQgcmVzdWx0cyBmcm9tIG91dHB1dHRpbmcgdGhlIHJlc3VsdCB0cmVlOyB0aGUgY2hhcnNldCBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgZXhwbGljaXRseTsgaW5zdGVhZCwgd2hlbiB0aGUgdG9wLWxldmVsIG1lZGlhIHR5cGUgaXMgdGV4dCwgYSBjaGFyc2V0IHBhcmFtZXRlciBzaG91bGQgYmUgYWRkZWQgYWNjb3JkaW5nIHRvIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgYWN0dWFsbHkgdXNlZCBieSB0aGUgb3V0cHV0IG1ldGhvZAotCi1kb2N0eXBlLXN5c3RlbT1kb2N0eXBlLXN5c3RlbQotZG9jdHlwZS1zeXN0ZW0uREVTQz1zcGVjaWZpZXMgdGhlIHN5c3RlbSBpZGVudGlmaWVyIHRvIGJlIHVzZWQgaW4gdGhlIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24KLQotZG9jdHlwZS1wdWJsaWM9ZG9jdHlwZS1wdWJsaWMKLWRvY3R5cGUtcHVibGljLkRFU0M9c3BlY2lmaWVzIHRoZSBwdWJsaWMgaWRlbnRpZmllciB0byBiZSB1c2VkIGluIHRoZSBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9uCi0KLW9taXQteG1sLWRlY2xhcmF0aW9uPW9taXQteG1sLWRlY2xhcmF0aW9uCi1vbWl0LXhtbC1kZWNsYXJhdGlvbi5ERVNDPXNwZWNpZmllcyB3aGV0aGVyIHRoZSBYU0xUIHByb2Nlc3NvciBzaG91bGQgb3V0cHV0IGFuIFhNTCBkZWNsYXJhdGlvbjsgdGhlIHZhbHVlIG11c3QgYmUgeWVzIG9yIG5vCi0KLXN0YW5kYWxvbmU9c3RhbmRhbG9uZQotc3RhbmRhbG9uZS5ERVNDPXNwZWNpZmllcyB3aGV0aGVyIHRoZSBYU0xUIHByb2Nlc3NvciBzaG91bGQgb3V0cHV0IGEgc3RhbmRhbG9uZSBkb2N1bWVudCBkZWNsYXJhdGlvbjsgdGhlIHZhbHVlIG11c3QgYmUgeWVzIG9yIG5vCi0KLWNkYXRhLXNlY3Rpb24tZWxlbWVudHM9Y2RhdGEtc2VjdGlvbi1lbGVtZW50cwotY2RhdGEtc2VjdGlvbi1lbGVtZW50cy5ERVNDPXNwZWNpZmllcyBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIGVsZW1lbnRzIHdob3NlIHRleHQgbm9kZSBjaGlsZHJlbiBzaG91bGQgYmUgb3V0cHV0IHVzaW5nIENEQVRBIHNlY3Rpb25zClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjY5YjQ0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4xMDAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZztidW5kbGUtdmVyc2lvbj0iWzEuMC4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZmFjZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41Ci1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZywKLSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLm1vZGVsCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9hYm91dC5odG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkMzAwMDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5BdWd1c3QsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiNjYzYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgc2NoZW1hLyxcCi0gICAgICAgICAgICAgICBKUkVEZWZhdWx0QXR0cmlidXRlcy5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIEpSRURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgbG9nNGouZGVidWcucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL2xvZzRqLmRlYnVnLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvbG9nNGouZGVidWcucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkZmI2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvbG9nNGouZGVidWcucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMgU2V0IHJvb3QgbG9nZ2VyIGxldmVsIHRvIERFQlVHIGFuZCBpdHMgYXBwZW5kZXJzIGFyZSBBMSBhbmQgQTIKLWxvZzRqLnJvb3RMb2dnZXI9RVJST1IsIEEyCi0KLSMgQTIgaXMgc2V0IHRvIGJlIGEgQ29uc29sZUFwcGVuZGVyCi1sb2c0ai5hcHBlbmRlci5BMj1vcmcuYXBhY2hlLmxvZzRqLkNvbnNvbGVBcHBlbmRlcgotCi0jIEEyIHVzZXMgUGF0dGVybkxheW91dC4KLWxvZzRqLmFwcGVuZGVyLkEyLmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQKLWxvZzRqLmFwcGVuZGVyLkEyLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHtISDptbTpzcyxTU1N9ICUtNXAgWyV0XSAlY3sxfSAleCAtICVtJW4KLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2I0ODIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBYU0wgSkFYUCBMYXVuY2hpbmcgKEluY3ViYXRpbmcpCi1sYXVuY2hEZWxlZ2F0ZS5uYW1lLjAgPSBKYXZhCi1wcm9jZXNzb3JUeXBlLmxhYmVsLjEgPSBKUkUgRGVmYXVsdAotcHJvY2Vzc29yLmxhYmVsLjEgPSBKUkUgSW5zdGFuY2UgRGVmYXVsdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZTI2NDMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImRlYnVnZ2VyIiBuYW1lPSJkZWJ1Z2dlciIgc2NoZW1hPSJzY2hlbWEvZGVidWdnZXIuZXhzZCIvPgotICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iaW52b2tlIiBuYW1lPSJpbnZva2UiIHNjaGVtYT0ic2NoZW1hL2ludm9rZS5leHNkIi8+Ci0gICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJwcm9jZXNzb3IiIG5hbWU9InByb2Nlc3NvciIgc2NoZW1hPSJzY2hlbWEvcHJvY2Vzc29yLmV4c2QiLz4KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InByb2Nlc3NvclR5cGUiIG5hbWU9InByb2Nlc3NvclR5cGUiIHNjaGVtYT0ic2NoZW1hL3Byb2Nlc3NvclR5cGUuZXhzZCIvPgotIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5sYXVuY2hEZWxlZ2F0ZXMiPgotICAgIDxsYXVuY2hEZWxlZ2F0ZQotICAgICAgICAgIGRlbGVnYXRlPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIgotICAgICAgICAgIGRlbGVnYXRlRGVzY3JpcHRpb249IlRoZSBYU0xUIExhdW5jaGVyIGZvciBKQVhQIHN1cHBvcnRzIHJ1bm5pbmcgYW5kIGRlYnVnZ2luZyB0cmFuc2Zvcm1hdGlvbnMgdXNpbmcgSkFYUC1jb21wbGlhbnQgWFNMVCBwcm9jZXNzb3JzIgotICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5pbnRlcm5hbC5qYXhwLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUiCi0gICAgICAgICAgbW9kZXM9InJ1biwgZGVidWciCi0gICAgICAgICAgbmFtZT0iJWxhdW5jaERlbGVnYXRlLm5hbWUuMCIKLSAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5sYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Ci0gICAgPC9sYXVuY2hEZWxlZ2F0ZT4gICAgCi0gPC9leHRlbnNpb24+Ci0gICAgIAkKLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPgotCQk8aW5pdGlhbGl6ZXIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLlByZWZlcmVuY2VJbml0aWFsaXplciI+Ci0JCTwvaW5pdGlhbGl6ZXI+Ci0JPC9leHRlbnNpb24+Ci0gCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnZva2UiPgotCQk8aW52b2tlciBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cC5pbnZva2UiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmludm9rZXIuaW50ZXJuYWwuSkFYUFNBWFByb2Nlc3Nvckludm9rZXIiCi0JCQljbGFzc3BhdGg9IiR7ZWNsaXBzZV9vcmJpdDpvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWd9OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZ307JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUubG9nNGp9IiAvPgotCTwvZXh0ZW5zaW9uPgotCi0gIAk8ZXh0ZW5zaW9uCi0JICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvclR5cGUiPgotICAgICA8cHJvY2Vzc29yVHlwZQotICAgICAgICAgICAgYXR0cmlidXRlUHJvcGVydGllcz0iSlJFRGVmYXVsdEF0dHJpYnV0ZXMucHJvcGVydGllcyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlLmpyZURlZmF1bHQiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3NvclR5cGUubGFiZWwuMSIKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9IkpSRURlZmF1bHRPdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMiIC8+Ci0JIDwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvciI+Ci0gICAgICAgIDxwcm9jZXNzb3IKLSAgICAgICAgICAgICAgY2xhc3NwYXRoPSIiCi0gICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qcmUuZGVmYXVsdCIKLSAgICAgICAgICAgICAgbGFiZWw9IiVwcm9jZXNzb3IubGFiZWwuMSIKLSAgICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5wcm9jZXNzb3JUeXBlLmpyZURlZmF1bHQiCi0gICAgICAgICAgICAgIHN1cHBvcnRzPSIxLjAiLz4KLQkgPC9leHRlbnNpb24+Ci0gCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvZGVidWdnZXIuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvZGVidWdnZXIuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4MGYwNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL2RlYnVnZ2VyLmV4c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiBpZD0iZGVidWdnZXIiIG5hbWU9IlhTTFQgRGVidWdnZXIiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29udHJpYnV0ZSBhIGRlYnVnZ2VyIGZvciBhIHBhcnRpY3VsYXIgSkFYUCBwcm9jZXNzb3IgdHlwZSAoZS5nLiBTYXhvbikuIFRoZSBleHRlbnNpb24gcG9pbnQgcHJpbWFyaWx5IGRlZmluZXMgdGhlIGNsYXNzcGF0aCBhbmQgdHJhbnNmb3JtZXIgZmFjdG9yeSB0byBiZSB1c2VkIHdoZW4gZGVidWdnaW5nLgotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KLSAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZGVidWdnZXIiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iZGVidWdnZXIiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIEEgZGVidWdnZXIgZm9yIGEgcHJvY2Vzc29yIHR5cGUKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSB1bmlxdWUgaWQgZm9yIHRoaXMgZGVidWdnZXIKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgbmFtZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIFVJCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3NwYXRoIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgJmFwb3M7OyZhcG9zOy1zZXBhcmF0ZWQgY2xhc3NwYXRoIHJlcXVpcmVkIHRvIHJ1biB0aGUgZGVidWdnZXIgKGluIGFkZGl0aW9uIHRvIHRoYXQgYWxyZWFkeSBhZGRlZCBieSB0aGUgcHJvY2Vzc29yIGl0c2VsZikuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvY2Vzc29yVHlwZUlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFRoZSBwcm9jZXNzb3IgdHlwZSB0aGF0IHRoaXMgZGVidWdnZXIgd29ya3Mgd2l0aAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzTmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyB0aGF0IGltcGxlbWVudCB0aGUgSVhTTERlYnVnZ2VyIGludGVyZmFjZS4gSXQgaXMgZWFzaWVyIHRvIGV4dGVuZCBBYnN0cmFjdFhTTERlYnVnZ2VyLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iOm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5JWFNMRGVidWdnZXIiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0cmFuc2Zvcm1lckZhY3RvcnlDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgZnVsbHktcXVhbGlmaWVkIGNsYXNzIG5hbWUgb2YgdGhlIHRyYW5zZm9ybWVyIGZhY3RvcnkgdG8gdXNlIGZvciBkZWJ1Z2dpbmcuIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIHRyYW5zZm9ybWVyIGZhY3RvcmllcyBiZWxvbmdpbmcgdG8gdGhlIHByb2Nlc3NvciB0eXBlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk6Ii8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuZGVidWdnZXImcXVvdDsmZ3Q7Ci0gICAgICAmbHQ7ZGVidWdnZXIKLSAgICAgICAgICAgIGNsYXNzTmFtZT0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXImcXVvdDsKLSAgICAgICAgICAgIGNsYXNzcGF0aD0mcXVvdDske2VjbGlwc2Vfb3JiaXQ6b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbn0mcXVvdDsKLSAgICAgICAgICAgIGlkPSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXImcXVvdDsKLSAgICAgICAgICAgIG5hbWU9JnF1b3Q7WGFsYW4gMi41LjEgb3IgZ3JlYXRlciZxdW90OwotICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4ucHJvY2Vzc29yVHlwZSZxdW90OwotICAgICAgICAgICAgdHJhbnNmb3JtZXJGYWN0b3J5Q2xhc3M9JnF1b3Q7b3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCZxdW90OyZndDsKLSAgICAgICZsdDsvZGVidWdnZXImZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmcXVvdDsmZ3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmbHQ7L2EmZ3Q7LiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL2ludm9rZS5leHNkIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9pbnZva2UuZXhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwYzFmMi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL2ludm9rZS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KLTwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLTxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiBpZD0iaW52b2tlIiBuYW1lPSJYU0xUIFByb2Nlc3NvciBJbnZva2VyIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICZsdDtiJmd0O1RoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIHBsdWdpbnMuJmx0Oy9iJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0gICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgaW50ZXJuYWw9InRydWUiIC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9Imludm9rZXIiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0iaW52b2tlciI+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIFVuaXF1ZSBpZCBmb3IgdGhpcyBpbnZva2VyCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIElQcm9jZXNzb3JJbnZva2VyIGludGVyZmFjZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzcGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBBIHNlbWktY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgamFycyByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgY29udHJpYnV0aW5nIHBsdWdpbi4gT25lIG9mIHRoZSBqYXJzIG11c3QgY29udGFpbiB0aGUgSW52b2tlciBjbGFzcyBuYW1lZCBpbiB0aGUgY2xhc3MgYXR0cmlidXRlLgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0KLQotCi0KLSAgIDxhbm5vdGF0aW9uPgotICAgICAgPGFwcGluZm8+Ci0gICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgotICAgICAgPC9hcHBpbmZvPgotICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrJmx0Oy9hJmd0Oy4mbHQ7YnImZ3Q7Ci1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIAotYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIAotdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgJmx0O2EKLWhyZWY9JnF1b3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmcXVvdDsmZ3Q7aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwmbHQ7L2EmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9wcm9jZXNzb3IuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvcHJvY2Vzc29yLmV4c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OWUwOGMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NjaGVtYS9wcm9jZXNzb3IuZXhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5qYXhwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIGlkPSJwcm9jZXNzb3IiIG5hbWU9IlhTTFQgUHJvY2Vzc29yIi8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvbnRyaWJ1dGUgYSBKYXZhIFhTTFQgcHJvY2Vzc29yIGluc3RhbmNlIChlLmcuIFhhbGFuIDIuNy4wKS4gVGhlIGV4dGVuc2lvbiBwb2ludCBwcmltYXJpbHkgZGVmaW5lcyB0aGUgY2xhc3NwYXRoIHRvIGJlIHVzZWQgd2hlbiBsYXVuY2hpbmcgYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InByb2Nlc3NvciIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8ZWxlbWVudCBuYW1lPSJwcm9jZXNzb3IiPgotICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgbGFiZWxBdHRyaWJ1dGU9ImxhYmVsIi8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIEFuIGluc3RhbmNlIG9mIGEgSkFYUC1jb21wbGlhbnQgWFNMVCBwcm9jZXNzb3IKLSAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSB1bmlxdWUgaWQgZm9yIHRoaXMgcHJvY2Vzc29yIGluc3RhbmNlCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBsYWJlbCBmb3IgdGhpcyBpbnN0YW5jZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIFVJCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwcm9jZXNzb3JUeXBlSWQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGlkIGZvciB0aGUgcHJvY2Vzc29yIHR5cGUKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzc3BhdGgiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGNsYXNzcGF0aCB0byB1c2Ugd2hlbiB0aGlzIHByb2Nlc3NvciBpcyBsYXVuY2hlZAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlYnVnZ2VySWQiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgVGhlIGlkIG9mIGEgZGVidWdnZXIgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb2Nlc3NvcgotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InN1cHBvcnRzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIFhTTFQgdmVyc2lvbnMgZS5nLiAxLjAsMi4wCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcucHJvY2Vzc29yJnF1b3Q7Jmd0OwotICAgICAgJmx0OyEtLSBBbiBhZG9wdGVyIGNhbiBzcGVjaWZ5IHRoZSAke2VjbGlwc2Vfb3JiaXQ6IH0gdmFyaWFibGUgdG8gaW5kaWNhdGUgd2hpY2ggZWNsaXBzZQotICAgICAgICAgICBidW5kbGUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjbGFzcyBwYXRoLiAtLSZndDsKLSAgICAgICZsdDtwcm9jZXNzb3IKLSAgICAgIGNsYXNzcGF0aD0mcXVvdDske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS54YWxhbn07JHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXJ9OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLmJjZWx9OyR7ZWNsaXBzZV9vcmJpdDpqYXZhX2N1cC5ydW50aW1lfSZxdW90OwotICAgICAgICAgICAgaWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcueGFsYW4ucHJvY2Vzc29yJnF1b3Q7Ci0gICAgICAgICAgICBsYWJlbD0mcXVvdDslcHJvY2Vzc29yLmxhYmVsLjEmcXVvdDsKLSAgICAgICAgICAgIHByb2Nlc3NvclR5cGVJZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUmcXVvdDsKLSAgICAgICAgICAgIGRlYnVnZ2VySWQ9JnF1b3Q7b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlciZxdW90OwotICAgICAgICAgICAgc3VwcG9ydHM9JnF1b3Q7MS4wJnF1b3Q7Jmd0OwotICAgICAgJmx0Oy9wcm9jZXNzb3ImZ3Q7Ci0gICAmbHQ7L2V4dGVuc2lvbiZndDsKLSZsdDsvcHJlJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi0KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+Ci0gICAgICA8L2FwcGluZm8+Ci0gICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmcXVvdDsmZ3Q7aHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsmbHQ7L2EmZ3Q7LiZsdDticiZndDsKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgCi1hdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi10aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAmbHQ7YQotaHJlZj0mcXVvdDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZxdW90OyZndDtodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCZsdDsvYSZndDsKLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc2NoZW1hL3Byb2Nlc3NvclR5cGUuZXhzZCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvcHJvY2Vzc29yVHlwZS5leHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWFkYTVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zY2hlbWEvcHJvY2Vzc29yVHlwZS5leHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpheHAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci08YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cCIgaWQ9InByb2Nlc3NvclR5cGUiIG5hbWU9IlhTTFQgUHJvY2Vzc29yIFR5cGUiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29udHJpYnV0ZSBhIEphdmEgWFNMVCBwcm9jZXNzb3IgdHlwZSAoZS5nLiBYYWxhbiwgU2F4b24pLiBUaGUgcHJvY2Vzc29yIHR5cGUgZGVmaW5lcyB3aGljaCBKQVhQIGF0dHJpYnV0ZXMgYW5kIG91dHB1dCBwcm9wZXJpZXMgYXJlIHN1cHBvcnRlZCwgYW5kIGFsc28gdGhlIHRyYW5zZm9ybWVyIGZhY3RvcnkgY2xhc3NlcyBpdCBjb250YWlucy4KLSAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgIDwvYW5ub3RhdGlvbj4KLQotICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+Ci0gICAgICAgICA8L2FwcGluZm8+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InByb2Nlc3NvclR5cGUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0icHJvY2Vzc29yVHlwZSI+Ci0gICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgPG1ldGEuZWxlbWVudCBsYWJlbEF0dHJpYnV0ZT0ibGFiZWwiLz4KLSAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IHJlZj0idHJhbnNmb3JtZXJGYWN0b3J5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBVbmlxdWUgaWQgZm9yIHRoZSBwcm9jZXNzb3IgdHlwZQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIE5hbWUgZm9yIGRpc3BsYXkgaW4gdGhlIFVJCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICA8YXBwaW5mbz4KLSAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KLSAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJvdXRwdXRQcm9wZXJ0aWVzIiB0eXBlPSJzdHJpbmciPgotICAgICAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICAgIExvY2F0aW9uIG9mIGEgcHJvcGVydGllcyBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdGhlIHByb2Nlc3NvcnMgb3V0cHV0IHByb3BlcnRpZXMuIE11c3QgYmUgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBidW5kbGUuCi0gICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYXR0cmlidXRlUHJvcGVydGllcyIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBMb2NhdGlvbiBvZiBhIHByb3BlcnRpZXMgZmlsZSBjb250YWluaW5nIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBieSB0aGlzIHByb2Nlc3Nvci4gTXVzdCBiZSBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGJ1bmRsZS4KLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KLSAgICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLQotICAgPGVsZW1lbnQgbmFtZT0idHJhbnNmb3JtZXJGYWN0b3J5Ij4KLSAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBBIFRyYW5zZm9ybWVyRmFjdG9yeSBmb3IgdGhpcyB0eXBlCi0gICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImZhY3RvcnlDbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgICAgICBUaGUgZnVsbHktcXVhbGlmaWVkIHRyYW5zZm9ybWVyIGZhY3RvcnkgY2xhc3MKLSAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcHBpbmZvPgotICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249ImphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OiIvPgotICAgICAgICAgICAgICAgPC9hcHBpbmZvPgotICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgotICAgICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgICAgQSBuYW1lIGZvciB0aGlzIHRyYW5zZm9ybWVyIGZhY3RvcnkgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBVSQotICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICAgPGFwcGluZm8+Ci0gICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICA8L2FwcGluZm8+Ci0gICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0KLQotICAgPGFubm90YXRpb24+Ci0gICAgICA8YXBwaW5mbz4KLSAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgJmx0O3ByZSZndDsKLSAgICZsdDtleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSZxdW90O29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZSZxdW90OyZndDsKLSAgICAgICZsdDtwcm9jZXNzb3JUeXBlCi0gICAgICAgICAgICBhdHRyaWJ1dGVQcm9wZXJ0aWVzPSZxdW90O1hhbGFuQXR0cmlidXRlcy5wcm9wZXJ0aWVzJnF1b3Q7Ci0gICAgICAgICAgICBpZD0mcXVvdDtvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUmcXVvdDsKLSAgICAgICAgICAgIGxhYmVsPSZxdW90OyVwcm9jZXNzb3JUeXBlLmxhYmVsLjAmcXVvdDsKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9JnF1b3Q7WGFsYW5PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMmcXVvdDsmZ3Q7Ci0gICAgICAgICAmbHQ7dHJhbnNmb3JtZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICBmYWN0b3J5Q2xhc3M9JnF1b3Q7b3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCZxdW90OwotICAgICAgICAgICAgICAgbmFtZT0mcXVvdDtJbnRlcnByZXRpdmUmcXVvdDsmZ3Q7Ci0gICAgICAgICAmbHQ7L3RyYW5zZm9ybWVyRmFjdG9yeSZndDsKLSAgICAgICAgICZsdDt0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0mcXVvdDtvcmcuYXBhY2hlLnhhbGFuLnhzbHRjLnRyYXguVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCZxdW90OwotICAgICAgICAgICAgICAgbmFtZT0mcXVvdDtDb21waWxpbmcmcXVvdDsmZ3Q7Ci0gICAgICAgICAmbHQ7L3RyYW5zZm9ybWVyRmFjdG9yeSZndDsKLSAgICAgICZsdDsvcHJvY2Vzc29yVHlwZSZndDsKLSAgICZsdDsvZXh0ZW5zaW9uJmd0OwotJmx0Oy9wcmUmZ3Q7Ci0gICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICA8L2Fubm90YXRpb24+Ci0KLQotCi0gICA8YW5ub3RhdGlvbj4KLSAgICAgIDxhcHBpbmZvPgotICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KLSAgICAgIDwvYXBwaW5mbz4KLSAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZxdW90OyZndDtodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayZsdDsvYSZndDsuJmx0O2JyJmd0OwotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSAKLWF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0ICZsdDthCi1ocmVmPSZxdW90O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJnF1b3Q7Jmd0O2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sJmx0Oy9hJmd0OwotICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgPC9hbm5vdGF0aW9uPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JQXR0cmlidXRlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSUF0dHJpYnV0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njc5MTRiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JQXR0cmlidXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci0KLS8qKgotICogQSBhdHRyaWJ1dGUgc3VwcG9ydGVkIGJ5IGFuIFhTTFQgcHJvY2Vzc29yLiAKLSAqIAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElBdHRyaWJ1dGUKLXsKLQkvKioKLQkgKiBDb25zdGFudCBmb3IgYXR0cmlidXRlcyBvZiB0eXBlIDxjb2RlPnN0cmluZzwvY29kZT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKLQkgKi8KLQlTdHJpbmcgVFlQRV9TVFJJTkcgPSAic3RyaW5nIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIENvbnN0YW50IGZvciBhdHRyaWJ1dGVzIG9mIHR5cGUgPGNvZGU+Ym9vbGVhbjwvY29kZT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKLQkgKi8KLQlTdHJpbmcgVFlQRV9CT09MRUFOID0gImJvb2xlYW4iOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQ29uc3RhbnQgZm9yIGF0dHJpYnV0ZXMgb2YgdHlwZSA8Y29kZT5pbnQ8L2NvZGU+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCi0JICovCi0JU3RyaW5nIFRZUEVfSU5UID0gImludCI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBDb25zdGFudCBmb3IgYXR0cmlidXRlcyBvZiB0eXBlIDxjb2RlPmRvdWJsZTwvY29kZT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKLQkgKi8KLQlTdHJpbmcgVFlQRV9ET1VCTEUgPSAiZG91YmxlIjsgLy8kTk9OLU5MUy0xJAotCQotCS8qKgotCSAqIENvbnN0YW50IGZvciBhdHRyaWJ1dGVzIG9mIHR5cGUgPGNvZGU+ZmxvYXQ8L2NvZGU+Ci0JICogQHNlZSAjZ2V0VHlwZSgpCi0JICovCi0JU3RyaW5nIFRZUEVfRkxPQVQgPSAiZmxvYXQiOyAvLyROT04tTkxTLTEkCi0JCi0JLyoqCi0JICogQ29uc3RhbnQgZm9yIGF0dHJpYnV0ZXMgb2YgdHlwZSA8Y29kZT5jbGFzczwvY29kZT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKLQkgKi8KLQlTdHJpbmcgVFlQRV9DTEFTUyA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBDb25zdGFudCBmb3IgYXR0cmlidXRlcyBvZiB0eXBlIDxjb2RlPm9iamVjdDwvY29kZT4KLQkgKiBAc2VlICNnZXRUeXBlKCkKLQkgKi8KLQlTdHJpbmcgVFlQRV9PQkpFQ1QgPSAib2JqZWN0IjsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogR2V0IHRoZSBVUkkgZm9yIHRoaXMgYXR0cmlidXRlCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIFVSSQotCSAqLwotCVN0cmluZyBnZXRVUkkoKTsKLQotCS8qKgotCSAqIEdldCBhIGRlc2NyaXB0aW9uIGZvciB0aGlzIGF0dHJpYnV0ZQotCSAqIEByZXR1cm4gdGhlIGF0dHJpYnV0ZSBkZXNjcmlwdGlvbgotCSAqLwotCVN0cmluZyBnZXREZXNjcmlwdGlvbigpOwotCi0JLyoqCi0JICogR2V0IHRoZSB0eXBlIG9mIHRoaXMgYXR0cmlidXRlLiBXaWxsIG1hdGNoIG9uZSBvZiB0aGUgVFlQRSBjb25zdGFudHMgaW4gdGhpcyBpbnRlcmZhY2UuCi0JICogQHJldHVybiB0aGUgYXR0cmlidXRlIHR5cGU6IG9uZSBvZiA8Y29kZT5UWVBFX1NUUklORzwvY29kZT4sIDxjb2RlPlRZUEVfQk9PTEVBTjwvY29kZT4sIAotCSAqIDxjb2RlPlRZUEVfSU5UPC9jb2RlPiwgPGNvZGU+VFlQRV9ET1VCTEU8L2NvZGU+LCA8Y29kZT5UWVBFX0ZMT0FUPC9jb2RlPiwgPGNvZGU+VFlQRV9DTEFTUzwvY29kZT4sIAotCSAqIG9yIDxjb2RlPlRZUEVfT0JKRUNUPC9jb2RlPgotCSAqLwotCVN0cmluZyBnZXRUeXBlKCk7Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSB2YWxpZCBvbmUgZm9yIHRoaXMgYXR0cmlidXRlLgotCSAqIEByZXR1cm4gYW4gPGNvZGU+SVN0YXR1czwvY29kZT4gd2l0aCBzZXZlcml0eSA8Y29kZT5PSzwvY29kZT4gaWYgdmFsaWQsIG9yIDxjb2RlPkVSUk9SPC9jb2RlPiBpZiBpbnZhbGlkLgotCSAqLwotCUlTdGF0dXMgdmFsaWRhdGVWYWx1ZShTdHJpbmcgdmFsdWUpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lEZWJ1Z2dlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lEZWJ1Z2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTAyZjk1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JRGVidWdnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLS8qKgotICogQW4gWFNMVCBkZWJ1Z2dlci4gVHlwaWNhbGx5IHRoaXMgd2lsbCBoYXZlIGJlZW4gCi0gKiBjb250cmlidXRlZCB2aWEgdGhlIDxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmRlYnVnZ2VyPC9jb2RlPiBleHRlbnNpb24gcG9pbnQuCi0gKiAKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGludGVyZmFjZSBJRGVidWdnZXIKLXsKLQkvKioKLQkgKiBHZXQgdGhlIHVuaXF1ZSBpZCBmb3IgdGhpcyBkZWJ1Z2dlci4KLQkgKiBAcmV0dXJuIGRlYnVnZ2VyIGlkCi0JICovCi0JU3RyaW5nIGdldElkKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHNldCBvZiBidW5kbGUtcmVsYXRpdmUgamFyIGZpbGVzIHRvIGFkZCB0byB0aGUgY2xhc3NwYXRoLiAKLQkgKiBAcmV0dXJuIGFycmF5IG9mIGJ1bmRsZS1yZWxhdGl2ZSBqYXJzCi0JICovCi0JU3RyaW5nW10gZ2V0Q2xhc3NQYXRoKCk7Ci0KLQkvKioKLQkgKiBHZXQgYSB1bmlxdWUgbmFtZSBmb3IgdGhpcyBkZWJ1Z2dlcgotCSAqIEByZXR1cm4gdGhlIG5hbWUgZm9yIHRoZSBkZWJ1Z2dlcgotCSAqLwotCVN0cmluZyBnZXROYW1lKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIHByb2Nlc3NvciB0eXBlIHRoYXQgdGhpcyBkZWJ1Z2dlciBpcyBhc3NvY2lhdGVkIHdpdGgKLQkgKiBAcmV0dXJuIHRoZSBwcm9jZXNzb3IgdHlwZQotCSAqLwotCUlQcm9jZXNzb3JUeXBlIGdldFByb2Nlc3NvclR5cGUoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgY2xhc3MgbmFtZSBmb3IgdGhpcyBkZWJ1Z2dlcgotCSAqIEByZXR1cm4gdGhlIGNsYXNzIG5hbWUKLQkgKi8KLQlTdHJpbmcgZ2V0Q2xhc3NOYW1lKCk7Ci0JCi0JLyoqCi0JICogR2V0IHRoZSB0cmFuc2Zvcm1lciBmYWN0b3J5IHRoaXMgZGVidWdnZXIgaXMgYXNzb2NpYXRlZCB3aXRoCi0JICogQHJldHVybiB0aGUgdHJhbnNmb3JtZXIgZmFjdG9yeQotCSAqLwotCVN0cmluZyBnZXRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JT3V0cHV0UHJvcGVydHkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JT3V0cHV0UHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJkMmM3Ni4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSU91dHB1dFByb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi0vKioKLSAqIEFuIG91dHB1dCBwcm9wZXJ0eSBzdXBwb3J0ZWQgYnkgYW4gWFNMVCBwcm9jZXNzb3IuIAotICogCi0gKiBAYXV0aG9yIERvdWcgU2F0Y2h3ZWxsCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSU91dHB1dFByb3BlcnR5Ci17Ci0JLyoqCi0JICogR2V0IHRoZSBVUkkgb2YgdGhpcyBvdXRwdXQgcHJvcGVydHkuIAotCSAqIEByZXR1cm4gYSB1bmlxdWUgVVJJCi0JICovCi0JU3RyaW5nIGdldFVSSSgpOwotCi0JLyoqCi0JICogR2V0IGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgb3V0cHV0IHByb3BlcnR5LiAKLQkgKiBAcmV0dXJuIGEgZGVzY3JpcHRpb24KLQkgKi8KLQlTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySW5zdGFsbC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JJbnN0YWxsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYWIyN2IuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JJbnN0YWxsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi0vKioKLSAqIEFuIGluc3RhbmNlIG9mIGFuIFhTTFQgcHJvY2Vzc29yIChlLmcuIFhhbGFuIDIuNy4wKS4KLSAqIAotICogQHNlZSBJUHJvY2Vzc29ySW5zdGFsbAotICogQGF1dGhvciBEb3VnIFNhdGNod2VsbAotICovCi1wdWJsaWMgaW50ZXJmYWNlIElQcm9jZXNzb3JJbnN0YWxsCi17Ci0JLyoqCi0JICogR2V0IHRoZSB1bnFpdWUgaWQgb2YgdGhpcyBpbnN0YWxsCi0JICogQHJldHVybiB0aGUgdW5pcXVlIGlkCi0JICovCi0JU3RyaW5nIGdldElkKCk7Ci0KLQkvKioKLQkgKiBHZXQgdGhlIG5hbWUgb2YgdGhpcyBpbnN0YWxsCi0JICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGlzIGluc3RhbGwKLQkgKi8KLQlTdHJpbmcgZ2V0TmFtZSgpOwotCi0JLyoqCi0JICogR2V0IHRoZSB0aGUgcHJvY2Vzc29yIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFsbAotCSAqIEByZXR1cm4gdGhlIHByb2Nlc3NvciB0eXBlIGlkCi0JICovCi0JSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZSgpOwotCi0JLyoqCi0JICogR2V0IHRoZSBqYXIgZmlsZXMgZm9yIHRoaXMgcHJvY2Vzc29yCi0JICogQHJldHVybiBhIHNldCBvZiBqYXIgZmlsZXMKLQkgKi8KLQlJUHJvY2Vzc29ySmFyW10gZ2V0UHJvY2Vzc29ySmFycygpOwotCi0JLyoqCi0JICogR2V0IHdoZXRoZXIgdGhpcyBpbnN0YWxsIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIHZpYSB0aGUgPGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcucHJvY2Vzc29yPC9jb2RlPiBleHRlbnNpb24gcG9pbnQuCi0JICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiBjb250cmlidXRlZCB2aWEgdGhlIGV4dGVuc2lvbiBwb2ludCwgb3RoZXJ3aXNlIDxjb2RlPmZhbHNlPC9jb2RlPi4KLQkgKi8KLQlib29sZWFuIGlzQ29udHJpYnV0ZWQoKTsKLQotCS8qKgotCSAqIEdldCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgWFNMVCB2ZXJzaW9ucwotCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpbnN0YWxsIGhhcyBhIGRlYnVnZ2VyLCBvdGhlcndpc2UgPGNvZGU+ZmFsc2U8L2NvZGU+LgotCSAqLwotCS8vIFRPRE8gZGVwcmVjYXRlIGFuZCB1c2UgYm9vbGVhbiBzdXBwb3J0cyBpbnN0YWVkCi0JU3RyaW5nIGdldFN1cHBvcnRzKCk7Ci0KLQkvKioKLQkgKiBHZXQgd2hldGhlciB0aGlzIGluc3RhbGwgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCB4c2x0IHZlcnNpb24uCi0JICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGlzIGluc3RhbGwgc3VwcG9ydHMgdGhlIHZlcnNpb24sIG90aGVyd2lzZSA8Y29kZT5mYWxzZTwvY29kZT4uCi0JICovCi0JYm9vbGVhbiBzdXBwb3J0cyhTdHJpbmcgeHNsdFZlcnNpb24pOwotCi0JLyoqCi0JICogR2V0IHRoZSBkZWJ1Z2dlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YWxsCi0JICogQHJldHVybiB0aGUgZGVidWdnZXIsIG9yIG51bGwgaWYgbm8gZGVidWdnZXIgaGFzIGJlZW4gc2V0Ci0JICovCi0JSURlYnVnZ2VyIGdldERlYnVnZ2VyKCk7Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckludm9rZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySW52b2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDAxMDFhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySW52b2tlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotcHVibGljIGludGVyZmFjZSBJUHJvY2Vzc29ySW52b2tlcgotewotCVN0cmluZyBnZXRJZCgpOwotCi0JU3RyaW5nIGdldEludm9rZXJDbGFzc05hbWUoKTsKLQotCVN0cmluZ1tdIGdldENsYXNzcGF0aEVudHJpZXMoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySmFyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3Nvckphci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzA1MmJiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JUHJvY2Vzc29ySmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotCi0vKioKLSAqIEEgamFyIGZpbGUgZm9yIGFuIFhTTFQgcHJvY2Vzc29yCi0gKiAKLSAqIEBzZWUgSVByb2Nlc3Nvckluc3RhbGwKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGludGVyZmFjZSBJUHJvY2Vzc29ySmFyCi17Ci0JLyoqCi0JICogVGhlIHBhdGggbWF5IGJlIHJlbGF0aXZlIG9yIGFic29sdXRlOyBpbiB0aGUgd29ya3NwYWNlIG9yIGV4dGVybmFsLgotCSAqIEByZXR1cm4gdGhlIHBhdGggdG8gdGhpcyBqYXIKLQkgKi8KLQlJUGF0aCBnZXRQYXRoKCk7Ci0KLQkvKioKLQkgKiBUaGUgVVJMIHdpbGwgYWx3YXlzIGJlIGFic29sdXRlIGFuZCBjYW4gYmUgb3BlbmVkLgotCSAqIEByZXR1cm4gYSBVUkwgdG8gdGhlIGphcgotCSAqLwotCVVSTCBhc1VSTCgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lQcm9jZXNzb3JUeXBlLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3NvclR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEzZTcwMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvSVByb2Nlc3NvclR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEEgcGFydGljdWxhciB0eXBlIG9mIFhTTFQgUHJvY2Vzc29yIChlLmcuIFhhbGFuKSBmb3Igd2hpY2ggdGhlcmUgbWF5IGJlIGFueSBudW1iZXIgb2YgaW5zdGFsbHMuCi0gKiAKLSAqIEBzZWUgSVByb2Nlc3Nvckluc3RhbGwKLSAqIEBhdXRob3IgRG91ZyBTYXRjaHdlbGwKLSAqLwotcHVibGljIGludGVyZmFjZSBJUHJvY2Vzc29yVHlwZQotewotCVN0cmluZyBnZXRJZCgpOwotCi0JU3RyaW5nIGdldExhYmVsKCk7Ci0KLQlib29sZWFuIGlzSlJFRGVmYXVsdCgpOwotCi0JSVRyYW5zZm9ybWVyRmFjdG9yeVtdIGdldFRyYW5zZm9ybWVyRmFjdG9yaWVzKCk7Ci0KLQlJQXR0cmlidXRlW10gZ2V0QXR0cmlidXRlcygpOwotCi0JTWFwPFN0cmluZywgU3RyaW5nPiBnZXRBdHRyaWJ1dGVWYWx1ZXMoKTsKLQotCUlPdXRwdXRQcm9wZXJ0eVtdIGdldE91dHB1dFByb3BlcnRpZXMoKTsKLQotCU1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoKTsKLQotCUlUcmFuc2Zvcm1lckZhY3RvcnkgZ2V0RGVmYXVsdFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lUcmFuc2Zvcm1lckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9JVHJhbnNmb3JtZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NzE2YWIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0lUcmFuc2Zvcm1lckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1wdWJsaWMgaW50ZXJmYWNlIElUcmFuc2Zvcm1lckZhY3RvcnkKLXsKLQlTdHJpbmcgZ2V0TmFtZSgpOwotCVN0cmluZyBnZXRGYWN0b3J5Q2xhc3MoKTsKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0pBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExY2Y4MmQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0pBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlZPS0VSX0RFU0NSSVBUT1IgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuSU5WT0tFUl9ERVNDUklQVE9SIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUFJPQ0VTU09SID0gSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfUFJPQ0VTU09SIjsgLy8kTk9OLU5MUy0xJAkKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX09VVFBVVF9QUk9QRVJUSUVTID0gSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfT1VUUFVUX1BST1BFUlRJRVMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9BVFRSSUJVVEVTID0gSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfQVRUUklCVVRFUyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0RFRkFVTFRfREVCVUdHSU5HX0lOU1RBTExfSUQgPSBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9ERUZBVUxUX0RFQlVHR0lOR19JTlNUQUxMX0lEIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SID0gSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVFJBTlNGT1JNRVJfRkFDVE9SWSA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX1RSQU5TRk9STUVSX0ZBQ1RPUlkiOwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWEFMQU5fVFlQRV9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FYT05fVFlQRV9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLnByb2Nlc3NvclR5cGUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FYT05fMV8wX1RZUEVfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbl8xXzAucHJvY2Vzc29yVHlwZSI7IC8vJE5PTi1OTFMtMSQKLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9KQVhQUnVudGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0pBWFBSdW50aW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWRkMTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL0pBWFBSdW50aW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuRmVhdHVyZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLk91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5LkRlYnVnZ2VyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeS5JbnZva2VyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeS5Qcm9jZXNzb3JSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5LlByb2Nlc3NvclR5cGVSZWdpc3RyeTsKLQotcHVibGljIGNsYXNzIEpBWFBSdW50aW1lCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRl9QUk9DRVNTT1JfWE1MID0gIlBSRUZfUFJPQ0VTU09SX1hNTCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGX0ZFQVRVUkVfWE1MID0gIlBSRUZfRkVBVFVSRV9YTUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwgPSAiUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlJFX0RFRkFVTFRfUFJPQ0VTU09SX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmpyZS5kZWZhdWx0IjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpSRV9ERUZBVUxUX1BST0NFU1NPUl9UWVBFX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnByb2Nlc3NvclR5cGUuanJlRGVmYXVsdCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBORVhUX0lEX0xPQ0sgPSBuZXcgYnl0ZVswXTsKLQlwcml2YXRlIHN0YXRpYyBieXRlW10gUkVHSVNUUllfTE9DSyA9IG5ldyBieXRlWzBdOwotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGxhc3RTdGFuZGluSUQ7Ci0JcHJpdmF0ZSBzdGF0aWMgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5IHByb2Nlc3NvclR5cGVSZWdpc3RyeTsKLQlwcml2YXRlIHN0YXRpYyBQcm9jZXNzb3JSZWdpc3RyeSBwcm9jZXNzb3JSZWdpc3RyeTsKLQlwcml2YXRlIHN0YXRpYyBJbnZva2VyUmVnaXN0cnkgaW52b2tlclJlZ2lzdHJ5OwotCXByaXZhdGUgc3RhdGljIERlYnVnZ2VyUmVnaXN0cnkgZGVidWdnZXJSZWdpc3RyeTsKLQotCXByaXZhdGUgc3RhdGljIFByb2Nlc3NvclR5cGVSZWdpc3RyeSBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKQotCXsKLQkJc3luY2hyb25pemVkIChSRUdJU1RSWV9MT0NLKQotCQl7Ci0JCQlpZiAocHJvY2Vzc29yVHlwZVJlZ2lzdHJ5ID09IG51bGwpCi0JCQkJcHJvY2Vzc29yVHlwZVJlZ2lzdHJ5ID0gbmV3IFByb2Nlc3NvclR5cGVSZWdpc3RyeSgpOwotCQl9Ci0JCXJldHVybiBwcm9jZXNzb3JUeXBlUmVnaXN0cnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBQcm9jZXNzb3JSZWdpc3RyeSBnZXRQcm9jZXNzb3JSZWdpc3RyeSgpCi0JewotCQlzeW5jaHJvbml6ZWQgKFJFR0lTVFJZX0xPQ0spCi0JCXsKLQkJCWlmIChwcm9jZXNzb3JSZWdpc3RyeSA9PSBudWxsKQotCQkJCXByb2Nlc3NvclJlZ2lzdHJ5ID0gbmV3IFByb2Nlc3NvclJlZ2lzdHJ5KCk7Ci0JCX0KLQkJcmV0dXJuIHByb2Nlc3NvclJlZ2lzdHJ5OwotCX0KLQotCXByaXZhdGUgc3RhdGljIEludm9rZXJSZWdpc3RyeSBnZXRJbnZva2VyUmVnaXN0cnkoKQotCXsKLQkJc3luY2hyb25pemVkIChSRUdJU1RSWV9MT0NLKQotCQl7Ci0JCQlpZiAoaW52b2tlclJlZ2lzdHJ5ID09IG51bGwpCi0JCQkJaW52b2tlclJlZ2lzdHJ5ID0gbmV3IEludm9rZXJSZWdpc3RyeSgpOwotCQl9Ci0JCXJldHVybiBpbnZva2VyUmVnaXN0cnk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRGVidWdnZXJSZWdpc3RyeSBnZXREZWJ1Z2dlclJlZ2lzdHJ5KCkKLQl7Ci0JCXN5bmNocm9uaXplZCAoUkVHSVNUUllfTE9DSykKLQkJewotCQkJaWYgKGRlYnVnZ2VyUmVnaXN0cnkgPT0gbnVsbCkKLQkJCQlkZWJ1Z2dlclJlZ2lzdHJ5ID0gbmV3IERlYnVnZ2VyUmVnaXN0cnkoKTsKLQkJfQotCQlyZXR1cm4gZGVidWdnZXJSZWdpc3RyeTsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUHJlZmVyZW5jZXMoKQotCXsKLQkJSkFYUExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXN5bmNocm9uaXplZCAoUkVHSVNUUllfTE9DSykKLQkJewotCQkJLy8gZm9yY2UgdGhlIHJlZ2lzdHJpZXMgdG8gYmUgcmUtaW5pdGlhbGlzZWQgbmV4dCB0aW1lIGl0IGlzIHJlcXVpcmVkCi0JCQlwcm9jZXNzb3JSZWdpc3RyeSA9IG51bGw7Ci0JCQlwcm9jZXNzb3JUeXBlUmVnaXN0cnkgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogRmluZCBhIHVuaXF1ZSBwcm9jZXNzb3IgaW5zdGFsbCBpZC4gQ2hlY2sgZXhpc3RpbmcgJ3JlYWwnIHByb2Nlc3NvcnMsIGFzCi0JICogd2VsbCBhcyB0aGUgbGFzdCBpZCB1c2VkIGZvciBhIHN0YW5kaW4uCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlVW5pcXVlUHJvY2Vzc29ySWQoSVByb2Nlc3NvclR5cGUgdHlwZSkKLQl7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsW10gaW5zdGFsbHMgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3JzKHR5cGUuZ2V0SWQoKSk7Ci0JCVN0cmluZyBpZCA9IG51bGw7Ci0JCXN5bmNocm9uaXplZCAoTkVYVF9JRF9MT0NLKQotCQl7Ci0JCQlkbwotCQkJewotCQkJCWlkID0gU3RyaW5nLnZhbHVlT2YoKytsYXN0U3RhbmRpbklEKTsKLQkJCX0KLQkJCXdoaWxlIChpc1Rha2VuKGlkLCBpbnN0YWxscykpOwotCQl9Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JKYXIgY3JlYXRlUHJvY2Vzc29ySmFyKElQYXRoIHBhdGgpCi0JewotCQlyZXR1cm4gbmV3IFByb2Nlc3NvckphcihwYXRoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVGFrZW4oU3RyaW5nIGlkLCBJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzKQotCXsKLQkJZm9yIChJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsIDogaW5zdGFsbHMpCi0JCXsKLQkJCWlmIChpbnN0YWxsLmdldElkKCkuZXF1YWxzKGlkKSkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRGVidWdnZXJbXSBnZXREZWJ1Z2dlcnMoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnZ2VyUmVnaXN0cnkoKS5nZXREZWJ1Z2dlcnMoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElEZWJ1Z2dlciBnZXREZWJ1Z2dlcihTdHJpbmcgaWQpCi0JewotCQlyZXR1cm4gZ2V0RGVidWdnZXJSZWdpc3RyeSgpLmdldERlYnVnZ2VyKGlkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsW10gZ2V0UHJvY2Vzc29ycygpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JzKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW5zdGFsbFtdIGdldFByb2Nlc3NvcnMoU3RyaW5nIHR5cGVJZCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JSZWdpc3RyeSgpLmdldFByb2Nlc3NvcnModHlwZUlkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldFByb2Nlc3NvcihTdHJpbmcgcHJvY2Vzc29ySWQpCi0JewotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIHByb2Nlc3NvcnMgPSBnZXRQcm9jZXNzb3JzKCk7Ci0JCWZvciAoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA6IHByb2Nlc3NvcnMpCi0JCXsKLQkJCWlmIChpbnN0YWxsLmdldElkKCkuZXF1YWxzKHByb2Nlc3NvcklkKSkKLQkJCQlyZXR1cm4gaW5zdGFsbDsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldERlZmF1bHRQcm9jZXNzb3IoKQotCXsKLQkJcmV0dXJuIGdldFByb2Nlc3NvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdFByb2Nlc3NvcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3Nvckluc3RhbGwgZ2V0SlJFRGVmYXVsdFByb2Nlc3NvcigpCi0JewotCQlyZXR1cm4gZ2V0UHJvY2Vzc29yUmVnaXN0cnkoKS5nZXRKUkVEZWZhdWx0UHJvY2Vzc29yKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29yVHlwZVtdIGdldFByb2Nlc3NvclR5cGVzKCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JUeXBlcygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVByb2Nlc3NvclR5cGVbXSBnZXRQcm9jZXNzb3JUeXBlc0V4Y2xKUkVEZWZhdWx0KCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JUeXBlc0V4Y2xKUkVEZWZhdWx0KCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29yVHlwZSBnZXRQcm9jZXNzb3JUeXBlKFN0cmluZyBpZCkKLQl7Ci0JCXJldHVybiBnZXRQcm9jZXNzb3JUeXBlUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JUeXBlKGlkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnZva2VyIGdldFByb2Nlc3Nvckludm9rZXIoU3RyaW5nIGludm9rZXJJZCkKLQl7Ci0JCXJldHVybiBnZXRJbnZva2VyUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JJbnZva2VyKGludm9rZXJJZCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJUHJvY2Vzc29ySW52b2tlcltdIGdldFByb2Nlc3Nvckludm9rZXJzKCkKLQl7Ci0JCXJldHVybiBnZXRJbnZva2VyUmVnaXN0cnkoKS5nZXRQcm9jZXNzb3JJbnZva2VycygpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFByZWZlcmVuY2VzIGdldFByZWZlcmVuY2VzKCkKLQl7Ci0JCXJldHVybiBKQVhQTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlRmVhdHVyZVByZWZlcmVuY2VzKE1hcDxJUHJvY2Vzc29yVHlwZSwgTWFwPFN0cmluZywgU3RyaW5nPj4gdHlwZUZlYXR1cmVzLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQlyZXR1cm47Ci0JCXRyeQotCQl7Ci0JCQltb25pdG9yLmJlZ2luVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTFRSdW50aW1lLjUiKSwgMTAwKTsgLy8kTk9OLU5MUy0xJAotCQkJRmVhdHVyZVByZWZlcmVuY2VzIHByZWZzID0gbmV3IEZlYXR1cmVQcmVmZXJlbmNlcygpOwotCQkJTWFwPFN0cmluZyxNYXA8U3RyaW5nLFN0cmluZz4+IHR5cGVJZEZlYXR1cmVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLE1hcDxTdHJpbmcsU3RyaW5nPj4odHlwZUZlYXR1cmVzLnNpemUoKSk7Ci0JCQlmb3IgKElQcm9jZXNzb3JUeXBlIHR5cGUgOiB0eXBlRmVhdHVyZXMua2V5U2V0KCkpCi0JCQl7Ci0JCQkJTWFwPFN0cmluZyxTdHJpbmc+IHZhbHVlcyA9IHR5cGVGZWF0dXJlcy5nZXQodHlwZSk7Ci0JCQkJdHlwZUlkRmVhdHVyZXMucHV0KHR5cGUuZ2V0SWQoKSwgdmFsdWVzKTsKLQkJCX0KLQkJCXByZWZzLnNldFR5cGVGZWF0dXJlcyh0eXBlSWRGZWF0dXJlcyk7Ci0JCQlTdHJpbmcgeG1sID0gcHJlZnMuZ2V0QXNYTUwoKTsKLQkJCW1vbml0b3Iud29ya2VkKDQwKTsKLQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCQlyZXR1cm47Ci0JCQlKQVhQUnVudGltZS5nZXRQcmVmZXJlbmNlcygpLnNldFZhbHVlKEpBWFBSdW50aW1lLlBSRUZfRkVBVFVSRV9YTUwsIHhtbCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuc2F2ZVByZWZlcmVuY2VzKCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsTWVzc2FnZXMuZ2V0U3RyaW5nKCJYU0xUUnVudGltZS42IiksZSkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQltb25pdG9yLmRvbmUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcyhNYXA8SVByb2Nlc3NvclR5cGUsIE1hcDxTdHJpbmcsU3RyaW5nPj4gdHlwZVByb3BlcnRpZXMsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCXJldHVybjsKLQkJdHJ5Ci0JCXsKLQkJCW1vbml0b3IuYmVnaW5UYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiWFNMVFJ1bnRpbWUuNyIpLCAxMDApOyAvLyROT04tTkxTLTEkCi0JCQlPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzIHByZWZzID0gbmV3IE91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMoKTsKLQkJCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IHR5cGVQcm9wZXJ0aWVzLmtleVNldCgpKQotCQkJewotCQkJCXByZWZzLnNldE91dHB1dFByb3BlcnR5VmFsdWVzKHR5cGUuZ2V0SWQoKSwgdHlwZVByb3BlcnRpZXMuZ2V0KHR5cGUpKTsKLQkJCX0KLQkJCVN0cmluZyB4bWwgPSBwcmVmcy5nZXRBc1hNTCgpOwotCQkJbW9uaXRvci53b3JrZWQoNDApOwotCQkJaWYgKG1vbml0b3IuaXNDYW5jZWxlZCgpKQotCQkJCXJldHVybjsKLQkJCUpBWFBSdW50aW1lLmdldFByZWZlcmVuY2VzKCkuc2V0VmFsdWUoSkFYUFJ1bnRpbWUuUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwsIHhtbCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuc2F2ZVByZWZlcmVuY2VzKCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsTWVzc2FnZXMuZ2V0U3RyaW5nKCJYU0xUUnVudGltZS44IiksZSkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQltb25pdG9yLmRvbmUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzYXZlUHJvY2Vzc29yUHJlZmVyZW5jZXMoSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxscywgSVByb2Nlc3Nvckluc3RhbGwgZGVmYXVsdEluc3RhbGwsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkKLQkJCXJldHVybjsKLQkJdHJ5Ci0JCXsKLQkJCW1vbml0b3IuYmVnaW5UYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiWFNMVFJ1bnRpbWUuOSIpLCAxMDApOyAvLyROT04tTkxTLTEkCi0JCQlQcm9jZXNzb3JQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBQcm9jZXNzb3JQcmVmZXJlbmNlcygpOwotCQkJaWYgKGRlZmF1bHRJbnN0YWxsICE9IG51bGwpCi0JCQkJcHJlZnMuc2V0RGVmYXVsdFByb2Nlc3NvcklkKGRlZmF1bHRJbnN0YWxsLmdldElkKCkpOwotCQkJcHJlZnMuc2V0UHJvY2Vzc29ycyhuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPihBcnJheXMuYXNMaXN0KGluc3RhbGxzKSkpOwotCQkJU3RyaW5nIHhtbCA9IHByZWZzLmdldEFzWE1MKCk7Ci0JCQltb25pdG9yLndvcmtlZCg0MCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuZ2V0UHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShKQVhQUnVudGltZS5QUkVGX1BST0NFU1NPUl9YTUwsIHhtbCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGVkKCkpCi0JCQkJcmV0dXJuOwotCQkJSkFYUFJ1bnRpbWUuc2F2ZVByZWZlcmVuY2VzKCk7Ci0JCQltb25pdG9yLndvcmtlZCgzMCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsTWVzc2FnZXMuZ2V0U3RyaW5nKCJYU0xUUnVudGltZS4xMCIpLGUpKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJbW9uaXRvci5kb25lKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsU3RyaW5nPiBjcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhTdHJpbmcgdHlwZUlkKQotCXsKLQkJTWFwPFN0cmluZyxTdHJpbmc+IHByb3BzID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsKLQkJaWYgKEpSRV9ERUZBVUxUX1BST0NFU1NPUl9UWVBFX0lELmVxdWFscyh0eXBlSWQpKQotCQkJcHJvcHMucHV0KCJpbmRlbnQiLCAieWVzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQllbHNlIGlmIChKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5YQUxBTl9UWVBFX0lELmVxdWFscyh0eXBlSWQpKQotCQl7Ci0JCQlwcm9wcy5wdXQoImluZGVudCIsICJ5ZXMiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlwcm9wcy5wdXQoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQkJZWxzZSBpZiAoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuU0FYT05fVFlQRV9JRC5lcXVhbHModHlwZUlkKSkKLQkJewotCQkJcHJvcHMucHV0KCJpbmRlbnQiLCAieWVzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJcHJvcHMucHV0KCJ7aHR0cDovL3NheG9uLnNmLm5ldC99aW5kZW50LXNwYWNlcyIsICI0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9Ci0JCWVsc2UgaWYgKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OXzFfMF9UWVBFX0lELmVxdWFscyh0eXBlSWQpKQotCQl7Ci0JCQlwcm9wcy5wdXQoImluZGVudCIsICJ5ZXMiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlwcm9wcy5wdXQoIntodHRwOi8vc2F4b24uc2YubmV0L31pbmRlbnQtc3BhY2VzIiwgIjQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0KLQkJcmV0dXJuIHByb3BzOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hBdHRyaWJ1dGVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoQXR0cmlidXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjMzMzViLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hBdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLlByZWZlcmVuY2VVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hBdHRyaWJ1dGVzCi17Ci0JcHJpdmF0ZSBmaW5hbCBTZXQ8TGF1bmNoQXR0cmlidXRlPiBhdHRyaWJ1dGVzID0gbmV3IEhhc2hTZXQ8TGF1bmNoQXR0cmlidXRlPigpOwotCi0JcHVibGljIFNldDxMYXVuY2hBdHRyaWJ1dGU+IGdldEF0dHJpYnV0ZXMoKQotCXsKLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkQXR0cmlidXRlKExhdW5jaEF0dHJpYnV0ZSBhdHRyaWJ1dGUpCi0JewotCQlhdHRyaWJ1dGVzLmFkZChhdHRyaWJ1dGUpOwotCX0KLQotCXB1YmxpYyBMYXVuY2hBdHRyaWJ1dGUgZ2V0QXR0cmlidXRlKFN0cmluZyB1cmkpCi0JewotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlciA9IGF0dHJpYnV0ZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgdHYgPSAoTGF1bmNoQXR0cmlidXRlKSBpdGVyLm5leHQoKTsKLQkJCWlmICh0di51cmkuZXF1YWxzKHVyaSkpCi0JCQkJcmV0dXJuIHR2OwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUF0cmlidXRlKFN0cmluZyB1cmkpCi0JewotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlciA9IGF0dHJpYnV0ZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgYXR0cmlidXRlID0gKExhdW5jaEF0dHJpYnV0ZSkgaXRlci5uZXh0KCk7Ci0JCQlpZiAoYXR0cmlidXRlLnVyaS5lcXVhbHModXJpKSkKLQkJCQlpdGVyLnJlbW92ZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIFN0cmluZyB0b1hNTCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBhdHRyaWJ1dGVzRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiQXR0cmlidXRlcyIpOyAvLyROT04tTkxTLTEkCi0JCWRvYy5hcHBlbmRDaGlsZChhdHRyaWJ1dGVzRWwpOwotCi0JCWZvciAoSXRlcmF0b3I8TGF1bmNoQXR0cmlidXRlPiBpdGVyID0gYXR0cmlidXRlcy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUxhdW5jaEF0dHJpYnV0ZSBhdHRyaWJ1dGUgPSAoTGF1bmNoQXR0cmlidXRlKSBpdGVyLm5leHQoKTsKLQkJCUVsZW1lbnQgYXR0cmlidXRlRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiQXR0cmlidXRlIik7IC8vJE5PTi1OTFMtMSQKLQkJCWF0dHJpYnV0ZUVsLnNldEF0dHJpYnV0ZSgibmFtZSIsIGF0dHJpYnV0ZS51cmkpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVFbC5zZXRBdHRyaWJ1dGUoInR5cGUiLCBhdHRyaWJ1dGUudHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWF0dHJpYnV0ZUVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBhdHRyaWJ1dGUudmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQlhdHRyaWJ1dGVzRWwuYXBwZW5kQ2hpbGQoYXR0cmlidXRlRWwpOwotCQl9Ci0KLQkJcmV0dXJuIFByZWZlcmVuY2VVdGlsLnNlcmlhbGl6ZURvY3VtZW50KGRvYyk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMYXVuY2hBdHRyaWJ1dGVzIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudChpbnB1dFN0cmVhbSk7Ci0KLQkJTGF1bmNoQXR0cmlidXRlcyBwZGVmID0gbmV3IExhdW5jaEF0dHJpYnV0ZXMoKTsKLQotCQlFbGVtZW50IGF0dHJpYnV0ZXNFbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQlOb2RlTGlzdCBhdHRyaWJ1dGVFbHMgPSBhdHRyaWJ1dGVzRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkF0dHJpYnV0ZSIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlRWxzLmdldExlbmd0aCgpOyBpKyspCi0JCXsKLQkJCUVsZW1lbnQgYXR0cmlidXRlRWwgPSAoRWxlbWVudCkgYXR0cmlidXRlRWxzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IGF0dHJpYnV0ZUVsLmdldEF0dHJpYnV0ZSgibmFtZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdHlwZSA9IGF0dHJpYnV0ZUVsLmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmcgdmFsdWUgPSBhdHRyaWJ1dGVFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCXBkZWYuYWRkQXR0cmlidXRlKG5ldyBMYXVuY2hBdHRyaWJ1dGUobmFtZSwgdHlwZSwgdmFsdWUpKTsKLQkJfQotCi0JCXJldHVybiBwZGVmOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hQcm9wZXJ0aWVzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvTGF1bmNoUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTk5ZWIxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9MYXVuY2hQcm9wZXJ0aWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIExhdW5jaFByb3BlcnRpZXMKLXsKLQlwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCi0JcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0UHJvcGVydGllcygpCi0JewotCQlyZXR1cm4gcHJvcGVydGllczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKQotCXsKLQkJcHJvcGVydGllcy5wdXQobmFtZSwgdmFsdWUpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHkoU3RyaW5nIG5hbWUpCi0JewotCQlyZXR1cm4gKFN0cmluZykgcHJvcGVydGllcy5nZXQobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlUHJvcGVydHkoU3RyaW5nIG5hbWUpCi0JewotCQlwcm9wZXJ0aWVzLnJlbW92ZShuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvWE1MKCkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IHByb3BlcnR5c0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlByb3BlcnRpZXMiKTsgLy8kTk9OLU5MUy0xJAotCQlkb2MuYXBwZW5kQ2hpbGQocHJvcGVydHlzRWwpOwotCi0JCWZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBwcm9wZXJ0eSA6IHByb3BlcnRpZXMuZW50cnlTZXQoKSkKLQkJewotCQkJU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eS5nZXRLZXkoKTsKLQkJCVN0cmluZyB2YWx1ZSA9IHByb3BlcnR5LmdldFZhbHVlKCk7Ci0JCQlFbGVtZW50IHByb3BlcnR5RWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUHJvcGVydHkiKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcGVydHlFbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcGVydHlFbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wZXJ0eXNFbC5hcHBlbmRDaGlsZChwcm9wZXJ0eUVsKTsKLQkJfQotCi0JCXJldHVybiBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGF1bmNoUHJvcGVydGllcyBmcm9tWE1MKElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoaW5wdXRTdHJlYW0pOwotCi0JCUxhdW5jaFByb3BlcnRpZXMgcGRlZiA9IG5ldyBMYXVuY2hQcm9wZXJ0aWVzKCk7Ci0KLQkJRWxlbWVudCBwcm9wZXJ0eXNFbCA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQlOb2RlTGlzdCBwcm9wZXJ0eUVscyA9IHByb3BlcnR5c0VsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJQcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydHlFbHMuZ2V0TGVuZ3RoKCk7IGkrKykKLQkJewotCQkJRWxlbWVudCBwcm9wZXJ0eUVsID0gKEVsZW1lbnQpIHByb3BlcnR5RWxzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IHByb3BlcnR5RWwuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyB2YWx1ZSA9IHByb3BlcnR5RWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCi0JCQlwZGVmLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLQkJfQotCi0JCXJldHVybiBwZGVmOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NTRmYjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCi0JCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJdHJ5IHsKLQkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL1Byb2Nlc3Nvckluc3RhbGwuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9Qcm9jZXNzb3JJbnN0YWxsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZTg3MTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL1Byb2Nlc3Nvckluc3RhbGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5QbHVnaW5Qcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5VdGlsczsKLQotcHVibGljIGNsYXNzIFByb2Nlc3Nvckluc3RhbGwgaW1wbGVtZW50cyBJUHJvY2Vzc29ySW5zdGFsbAotewotCXByaXZhdGUgZmluYWwgU3RyaW5nIGlkOwotCXByaXZhdGUgU3RyaW5nIG5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgdHlwZTsKLQlwcml2YXRlIElQcm9jZXNzb3JKYXJbXSBqYXJzOwotCXByaXZhdGUgZmluYWwgYm9vbGVhbiBjb250cmlidXRlZDsKLQlwcml2YXRlIFN0cmluZyBkZWJ1Z2dlcklkOwotCXByaXZhdGUgU3RyaW5nIHN1cHBvcnRzOwotCi0JcHVibGljIFByb2Nlc3Nvckluc3RhbGwoU3RyaW5nIGlkLCBTdHJpbmcgbGFiZWwsIFN0cmluZyB0eXBlSWQsIElQcm9jZXNzb3JKYXJbXSBqYXJzLCBTdHJpbmcgZGVidWdnZXJJZCwgU3RyaW5nIHN1cHBvcnRzLCBib29sZWFuIGNvbnRyaWJ1dGVkKQotCXsKLQkJdGhpcy5pZCA9IGlkOwotCQluYW1lID0gbGFiZWw7Ci0JCXR5cGUgPSB0eXBlSWQ7Ci0JCXRoaXMuZGVidWdnZXJJZCA9IGRlYnVnZ2VySWQ7Ci0JCXRoaXMuY29udHJpYnV0ZWQgPSBjb250cmlidXRlZDsKLQkJdGhpcy5qYXJzID0gamFyczsKLQkJdGhpcy5zdXBwb3J0cyA9IHN1cHBvcnRzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKQotCXsKLQkJdGhpcy5uYW1lID0gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvckphcltdIGdldFByb2Nlc3NvckphcnMoKQotCXsKLQkJcmV0dXJuIGphcnM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvY2Vzc29ySmFycyhJUHJvY2Vzc29ySmFyW10gamFycykKLQl7Ci0JCXRoaXMuamFycyA9IGphcnM7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRQcm9jZXNzb3JUeXBlSWQoKQotCXsKLQkJcmV0dXJuIHR5cGU7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JUeXBlIGdldFByb2Nlc3NvclR5cGUoKQotCXsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldFByb2Nlc3NvclR5cGUodHlwZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0UHJvY2Vzc29yVHlwZUlkKFN0cmluZyBpZCkKLQl7Ci0JCXR5cGUgPSBpZDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0NvbnRyaWJ1dGVkKCkKLQl7Ci0JCXJldHVybiBjb250cmlidXRlZDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JKYXJbXSBjcmVhdGVKYXJzKFN0cmluZyBidW5kbGVJZCwgU3RyaW5nIGNsYXNzcGF0aCkKLQl7Ci0JCUlQcm9jZXNzb3JKYXJbXSBqYXJzOwotCQlpZiAoY2xhc3NwYXRoID09IG51bGwpCi0JCQlyZXR1cm4gbmV3IElQcm9jZXNzb3JKYXJbMF07Ci0JCVN0cmluZ1tdIGphcnN0cmluZyA9IGNsYXNzcGF0aC5zcGxpdCgiOyIpOyAvLyROT04tTkxTLTEkCi0JCWphcnMgPSBuZXcgSVByb2Nlc3NvckphcltqYXJzdHJpbmcubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBqYXJzdHJpbmcubGVuZ3RoOyBpKyspCi0JCXsKLQkJCVN0cmluZyBqYXIgPSBqYXJzdHJpbmdbaV07Ci0JCQl0cnkKLQkJCXsKLQkJCQlpZiAoamFyLnN0YXJ0c1dpdGgoIiR7ZWNsaXBzZV9vcmJpdDoiKSAmJiBqYXIuZW5kc1dpdGgoIn0iKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJewotCQkJCQlqYXIgPSBqYXIuc3Vic3RyaW5nKCIke2VjbGlwc2Vfb3JiaXQ6Ii5sZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJamFyID0gamFyLnN1YnN0cmluZygwLGphci5sZW5ndGgoKS0xKTsKLQkJCQkJLy9qYXIgPSBVdGlscy5nZXRGaWxlTG9jYXRpb24oamFyLCIiKTsKLQkJCQkJamFyc1tpXSA9IG5ldyBQbHVnaW5Qcm9jZXNzb3JKYXIoamFyLCBudWxsKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJamFyID0gVXRpbHMuZ2V0RmlsZUxvY2F0aW9uKGJ1bmRsZUlkLGphcik7Ci0JCQkJCWphcnNbaV0gPSBuZXcgUGx1Z2luUHJvY2Vzc29ySmFyKGJ1bmRsZUlkLCBuZXcgUGF0aChqYXIpKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKQotCQkJewotCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBqYXJzOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc0RlYnVnZ2VyKCkKLQl7Ci0JCXJldHVybiBkZWJ1Z2dlcklkICE9IG51bGw7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gc3VwcG9ydHMoU3RyaW5nIHhzbHRWZXJzaW9uKQotCXsKLQkJcmV0dXJuIHN1cHBvcnRzLmluZGV4T2YoeHNsdFZlcnNpb24pID49IDA7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRTdXBwb3J0cygpCi0JewotCQlyZXR1cm4gc3VwcG9ydHM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0U3VwcG9ydHMoU3RyaW5nIHN1cHBvcnRzKQotCXsKLQkJdGhpcy5zdXBwb3J0cyA9IHN1cHBvcnRzOwotCX0KLQotCXB1YmxpYyBJRGVidWdnZXIgZ2V0RGVidWdnZXIoKQotCXsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldERlYnVnZ2VyKGRlYnVnZ2VySWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldERlYnVnZ2VySWQoU3RyaW5nIGRlYnVnZ2VySWQpCi0JewotCQl0aGlzLmRlYnVnZ2VySWQgPSBkZWJ1Z2dlcklkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9BdHRyaWJ1dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9BdHRyaWJ1dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JlMzU0MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvQXR0cmlidXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JQXR0cmlidXRlOwotCi1wdWJsaWMgY2xhc3MgQXR0cmlidXRlIGltcGxlbWVudHMgSUF0dHJpYnV0ZSwgQ29tcGFyYWJsZTxPYmplY3Q+Ci17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXJpOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIHR5cGU7Ci0KLQlwdWJsaWMgQXR0cmlidXRlKFN0cmluZyB1cmksIFN0cmluZyB0eXBlLCBTdHJpbmcgZGVzY3JpcHRpb24pCi0JewotCQl0aGlzLnVyaSA9IHVyaTsKLQkJdGhpcy50eXBlID0gdHlwZTsKLQkJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotCXsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpCi0JewotCQlyZXR1cm4gdHlwZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFVSSSgpCi0JewotCQlyZXR1cm4gdXJpOwotCX0KLQotCXB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlVmFsdWUoU3RyaW5nIHZhbHVlKQotCXsKLQkJSVN0YXR1cyBzdGF0dXMgPSBudWxsOwotCQlpZiAoVFlQRV9CT09MRUFOLmVxdWFscyh0eXBlKSkKLQkJewotCQkJYm9vbGVhbiB2YWxpZCA9ICJ0cnVlIi5lcXVhbHModmFsdWUpIHx8ICJmYWxzZSIuZXF1YWxzKHZhbHVlKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQlpZiAoIXZhbGlkKQotCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlLjIiKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQllbHNlIGlmIChUWVBFX0lOVC5lcXVhbHModHlwZSkpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCUludGVnZXIucGFyc2VJbnQodmFsdWUpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotCQkJewotCQkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIE1lc3NhZ2VzLmdldFN0cmluZygiQXR0cmlidXRlLjEiKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJfQotCQllbHNlIGlmIChUWVBFX0RPVUJMRS5lcXVhbHModHlwZSkpCi0JCXsKLQkJCXRyeQotCQkJewotCQkJCURvdWJsZS5wYXJzZURvdWJsZSh2YWx1ZSk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJc3RhdHVzID0gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJBdHRyaWJ1dGUuMCIpLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKFRZUEVfRkxPQVQuZXF1YWxzKHR5cGUpKQotCQl7Ci0JCQl0cnkKLQkJCXsKLQkJCQlGbG9hdC5wYXJzZUZsb2F0KHZhbHVlKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLQkJCXsKLQkJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBNZXNzYWdlcy5nZXRTdHJpbmcoIkF0dHJpYnV0ZS41IiksIG51bGwpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoVFlQRV9DTEFTUy5lcXVhbHModHlwZSkgfHwgVFlQRV9PQkpFQ1QuZXF1YWxzKHR5cGUpKQotCQl7Ci0JCQkvL3N0YXR1cyA9IEphdmFDb252ZW50aW9ucy52YWxpZGF0ZUphdmFUeXBlTmFtZSh2YWx1ZSk7Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlwdWJsaWMgaW50IGNvbXBhcmVUbyhPYmplY3QgbykKLQl7Ci0JCWlmIChvIGluc3RhbmNlb2YgSUF0dHJpYnV0ZSkKLQkJewotCQkJSUF0dHJpYnV0ZSBmID0gKElBdHRyaWJ1dGUpIG87Ci0JCQlyZXR1cm4gZi5nZXRVUkkoKS5jb21wYXJlVG8oZ2V0VVJJKCkpOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9EZWJ1Z2dlckRlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9EZWJ1Z2dlckRlc2NyaXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxZGM3MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvRGVidWdnZXJEZXNjcmlwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JRGVidWdnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgRGVidWdnZXJEZXNjcmlwdG9yIGltcGxlbWVudHMgSURlYnVnZ2VyCi17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBjbGFzc3BhdGg7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYnVuZGxlSWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBwcm9jZXNzb3JUeXBlSWQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIHRyYW5zZm9ybWVyRmFjdG9yeTsKLQotCXB1YmxpYyBEZWJ1Z2dlckRlc2NyaXB0b3IoU3RyaW5nIGlkLCBTdHJpbmcgYnVuZGxlSWQsIFN0cmluZyBjbGFzc05hbWUsIFN0cmluZ1tdIGNsYXNzcGF0aCwgU3RyaW5nIG5hbWUsIFN0cmluZyBwcm9jZXNzb3JUeXBlSWQsIFN0cmluZyB0cmFuc2Zvcm1lckZhY3RvcnkpCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMuY2xhc3NwYXRoID0gY2xhc3NwYXRoOwotCQl0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JCXRoaXMucHJvY2Vzc29yVHlwZUlkID0gcHJvY2Vzc29yVHlwZUlkOwotCQl0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLQkJdGhpcy50cmFuc2Zvcm1lckZhY3RvcnkgPSB0cmFuc2Zvcm1lckZhY3Rvcnk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKQotCXsKLQkJcmV0dXJuIGNsYXNzTmFtZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nW10gZ2V0Q2xhc3NQYXRoKCkKLQl7Ci0JCXJldHVybiBQcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci5jcmVhdGVFbnRyaWVzKGJ1bmRsZUlkLCBjbGFzc3BhdGgpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JewotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZSgpCi0JewotCQlyZXR1cm4gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yVHlwZShwcm9jZXNzb3JUeXBlSWQpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNmb3JtZXJGYWN0b3J5KCkKLQl7Ci0JCXJldHVybiB0cmFuc2Zvcm1lckZhY3Rvcnk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0ZlYXR1cmVQcmVmZXJlbmNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0ZlYXR1cmVQcmVmZXJlbmNlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTE3YzVmLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9GZWF0dXJlUHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEZlYXR1cmVQcmVmZXJlbmNlcwotewotCXByaXZhdGUgTWFwPFN0cmluZywgTWFwPFN0cmluZywgU3RyaW5nPj4gdHlwZUZlYXR1cmVzOwotCi0JcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0RmVhdHVyZXNWYWx1ZXMoU3RyaW5nIHR5cGVJZCkKLQl7Ci0JCXJldHVybiB0eXBlRmVhdHVyZXMuZ2V0KHR5cGVJZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VHlwZUZlYXR1cmVzKE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHR5cGVGZWF0dXJlcykKLQl7Ci0JCXRoaXMudHlwZUZlYXR1cmVzID0gdHlwZUZlYXR1cmVzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0QXNYTUwoKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudCgpOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5jcmVhdGVFbGVtZW50KCJmZWF0dXJlUHJlZmVyZW5jZXMiKTsgIC8vJE5PTi1OTFMtMSQKLQkJZG9jLmFwcGVuZENoaWxkKGNvbmZpZyk7Ci0JCQotCQlmb3IgKFN0cmluZyB0eXBlSWQgOiB0eXBlRmVhdHVyZXMua2V5U2V0KCkpCi0JCXsKLQkJCUVsZW1lbnQgcHJvY2Vzc29yVHlwZUVsZW1lbnQgPSB0eXBlQXNFbGVtZW50KGRvYywgdHlwZUlkKTsKLQkJCU1hcDxTdHJpbmcsIFN0cmluZz4gZmVhdHVyZVZhbHVlcyA9IHR5cGVGZWF0dXJlcy5nZXQodHlwZUlkKTsKLQkJCWZlYXR1cmVWYWx1ZXNBc0VsZW1lbnQoZG9jLCBwcm9jZXNzb3JUeXBlRWxlbWVudCwgZmVhdHVyZVZhbHVlcyk7Ci0JCQljb25maWcuYXBwZW5kQ2hpbGQocHJvY2Vzc29yVHlwZUVsZW1lbnQpOwotCQl9Ci0KLQkJLy8gU2VyaWFsaXplIHRoZSBEb2N1bWVudCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgU3RyaW5nCi0JCXJldHVybiBQcmVmZXJlbmNlVXRpbC5zZXJpYWxpemVEb2N1bWVudChkb2MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmVhdHVyZVByZWZlcmVuY2VzIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlGZWF0dXJlUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgRmVhdHVyZVByZWZlcmVuY2VzKCk7Ci0KLQkJLy8gRG8gdGhlIHBhcnNpbmcgYW5kIG9idGFpbiB0aGUgdG9wLWxldmVsIG5vZGUKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoaW5wdXRTdHJlYW0pOwotCQlFbGVtZW50IGNvbmZpZyA9IGRvYy5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQotCQlNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0eXBlRmVhdHVyZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIFN0cmluZz4+KCk7Ci0JCUVsZW1lbnRbXSBwcm9jZXNzb3JUeXBlRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhjb25maWcsICJwcm9jZXNzb3JUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZXNzb3JUeXBlRWxzLmxlbmd0aDsgKytpKQotCQl7Ci0JCQlFbGVtZW50IHByb2Nlc3NvclR5cGVFbCA9IHByb2Nlc3NvclR5cGVFbHNbaV07Ci0JCQlTdHJpbmcgdHlwZSA9IGVsZW1lbnRBc1R5cGUocHJvY2Vzc29yVHlwZUVsKTsKLQkJCU1hcDxTdHJpbmcsIFN0cmluZz4gZmVhdHVyZVZhbHVlcyA9IGVsZW1lbnRBc0ZlYXR1cmVWYWx1ZXMocHJvY2Vzc29yVHlwZUVsKTsKLQkJCXR5cGVGZWF0dXJlcy5wdXQodHlwZSwgZmVhdHVyZVZhbHVlcyk7Ci0JCX0KLQotCQlwcmVmcy5zZXRUeXBlRmVhdHVyZXModHlwZUZlYXR1cmVzKTsKLQotCQlyZXR1cm4gcHJlZnM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGVsZW1lbnRBc1R5cGUoRWxlbWVudCBwYXJlbnQpCi0JewotCQlTdHJpbmcgaWQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJpZCIpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBpZDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBFbGVtZW50IHR5cGVBc0VsZW1lbnQoRG9jdW1lbnQgZG9jLCBTdHJpbmcgdHlwZSkKLQl7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJwcm9jZXNzb3JUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIiwgdHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBlbGVtZW50QXNGZWF0dXJlVmFsdWVzKEVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCUVsZW1lbnRbXSBmZWF0dXJlRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhlbGVtZW50LCAiZmVhdHVyZSIpOyAvLyROT04tTkxTLTEkCi0JCU1hcDxTdHJpbmcsIFN0cmluZz4gZmVhdHVyZVZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPihmZWF0dXJlRWxzLmxlbmd0aCk7Ci0JCWZvciAoRWxlbWVudCBmZWF0dXJlRWwgOiBmZWF0dXJlRWxzKQotCQl7Ci0JCQlTdHJpbmcgdXJpID0gZmVhdHVyZUVsLmdldEF0dHJpYnV0ZSgidXJpIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyB2YWx1ZSA9IGZlYXR1cmVFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCWZlYXR1cmVWYWx1ZXMucHV0KHVyaSwgdmFsdWUpOwotCQl9Ci0JCXJldHVybiBmZWF0dXJlVmFsdWVzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZmVhdHVyZVZhbHVlc0FzRWxlbWVudChEb2N1bWVudCBkb2MsIEVsZW1lbnQgZmVhdHVyZXNFbCwgTWFwPFN0cmluZywgU3RyaW5nPiBmZWF0dXJlVmFsdWVzKQotCXsKLQkJaWYgKGZlYXR1cmVWYWx1ZXMgIT0gbnVsbCkKLQkJewotCQkJZm9yIChNYXAuRW50cnk8U3RyaW5nLFN0cmluZz4gZW50cnkyIDogZmVhdHVyZVZhbHVlcy5lbnRyeVNldCgpKQotCQkJewotCQkJCVN0cmluZyB1cmkgPSAoU3RyaW5nKSBlbnRyeTIuZ2V0S2V5KCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gKFN0cmluZykgZW50cnkyLmdldFZhbHVlKCk7Ci0JCQkJRWxlbWVudCBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoImZlYXR1cmUiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ1cmkiLCB1cmkpOyAvLyROT04tTkxTLTEkCi0JCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOyAvLyROT04tTkxTLTEkCi0JCQkJZmVhdHVyZXNFbC5hcHBlbmRDaGlsZChlbGVtZW50KTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9KQVhQSmF2YUxhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNmM2NTAuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL0pBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklCcmVha3BvaW50TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklEZWJ1Z0V2ZW50U2V0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklCcmVha3BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVNvdXJjZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JU3RhY2tGcmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLklWTVJ1bm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkphdmFMYXVuY2hEZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklEZWJ1Z2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckludm9rZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySmFyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSkFYUFJ1bnRpbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5tb2RlbC5KQVhQRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuSVhTTENvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEpBWFBKYXZhTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlIGV4dGVuZHMgSmF2YUxhdW5jaERlbGVnYXRlIGltcGxlbWVudHMgSURlYnVnRXZlbnRTZXRMaXN0ZW5lcgotewotCXByaXZhdGUgU3RyaW5nIG1vZGU7Ci0JTGF1bmNoSGVscGVyIGxhdW5jaEhlbHBlcjsKLQkKLQlAT3ZlcnJpZGUKLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgbGF1bmNoKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIGZpbmFsIFN0cmluZyBtb2RlLCBmaW5hbCBJTGF1bmNoIGxhdW5jaCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJdGhpcy5tb2RlID0gbW9kZTsKLQkJbGF1bmNoSGVscGVyLnNhdmUoZ2V0TGF1bmNoQ29uZmlnRmlsZSgpKTsKLQkJCi0JCS8vIHNldCB0aGUgbGF1bmNoIG5hbWUKLQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbiwgbW9kZSk7Ci0JCVN0cmluZyB0ZmFjdG9yeSA9IGdldFRyYW5zZm9ybWVyRmFjdG9yeShpbnN0YWxsKTsKLQkJU3RyaW5nIG5hbWUgPSBpbnN0YWxsLmdldE5hbWUoKTsKLQkJaWYgKHRmYWN0b3J5ICE9IG51bGwpCi0JCQluYW1lICs9ICJbIiArIHRmYWN0b3J5ICsgIl0iOwotCQlsYXVuY2guc2V0QXR0cmlidXRlKCJsYXVuY2hOYW1lIiwgbmFtZSk7Ci0KLQkJLy8gdGhlIHN1cGVyLmxhdW5jaCB3aWxsIGFkZCBhIEphdmEgc291cmNlIGRpcmVjdG9yIGlmIHdlIHNldCBpdCB0byBudWxsIGhlcmUKLQkJZmluYWwgSVNvdXJjZUxvY2F0b3IgY29uZmlndXJlZExvY2F0b3IgPSBsYXVuY2guZ2V0U291cmNlTG9jYXRvcigpOwotCQlsYXVuY2guc2V0U291cmNlTG9jYXRvcihudWxsKTsKLQotCQlzdXBlci5sYXVuY2goY29uZmlndXJhdGlvbiwgbW9kZSwgbGF1bmNoLCBtb25pdG9yKTsKLQkJCi0JCS8vIG5vdyBnZXQgdGhlIGphdmEgc291cmNlIGxvY2F0b3IKLQkJZmluYWwgSVNvdXJjZUxvY2F0b3IgamF2YVNvdXJjZUxvb2t1cERpcmVjdG9yID0gKElTb3VyY2VMb2NhdG9yKWxhdW5jaC5nZXRTb3VyY2VMb2NhdG9yKCk7Ci0JCS8vIG5vdyBhZGQgb3VyIG93biBwYXJ0aWNpcGFudCB0byB0aGUgamF2YSBkaXJlY3RvcgotCQlsYXVuY2guc2V0U291cmNlTG9jYXRvcihuZXcgSVNvdXJjZUxvY2F0b3IoKXsKLQotCQkJcHVibGljIE9iamVjdCBnZXRTb3VyY2VFbGVtZW50KElTdGFja0ZyYW1lIHN0YWNrRnJhbWUpIAotCQkJewotCQkJCS8vIHNpbXBseSBsb29rIGF0IG9uZSBhbmQgdGhlbiB0aGUgb3RoZXIKLQkJCQlPYmplY3Qgc291cmNlRWxlbWVudCA9IGphdmFTb3VyY2VMb29rdXBEaXJlY3Rvci5nZXRTb3VyY2VFbGVtZW50KHN0YWNrRnJhbWUpOwotCQkJCWlmIChzb3VyY2VFbGVtZW50ID09IG51bGwpCi0JCQkJCXNvdXJjZUVsZW1lbnQgPSBjb25maWd1cmVkTG9jYXRvci5nZXRTb3VyY2VFbGVtZW50KHN0YWNrRnJhbWUpOwotCQkJCXJldHVybiBzb3VyY2VFbGVtZW50OwotCQkJfX0pOwotCQkKLS8vCQlJSmF2YURlYnVnVGFyZ2V0IGphdmFUYXJnZXQgPSAoSUphdmFEZWJ1Z1RhcmdldClsYXVuY2guZ2V0RGVidWdUYXJnZXQoKTsKLS8vCQlsYXVuY2gucmVtb3ZlRGVidWdUYXJnZXQoamF2YVRhcmdldCk7Ci0JCQotCQlJRGVidWdUYXJnZXQgamF2YVRhcmdldCA9IGxhdW5jaC5nZXREZWJ1Z1RhcmdldCgpOwotCQlJRGVidWdUYXJnZXQgeHNsVGFyZ2V0ID0gbmV3IEpBWFBEZWJ1Z1RhcmdldChsYXVuY2gsIGxhdW5jaC5nZXRQcm9jZXNzZXMoKVswXSwgbGF1bmNoSGVscGVyKTsKLQkJCi0JCS8vIHJlbW92ZSBqYXZhIGFzIHRoZSBwcmltYXJ5IHRhcmdldCBhbmQgbWFrZSB4c2wgdGhlIHByaW1hcnkgdGFyZ2V0Ci0JCWxhdW5jaC5yZW1vdmVEZWJ1Z1RhcmdldChqYXZhVGFyZ2V0KTsKLQkJbGF1bmNoLmFkZERlYnVnVGFyZ2V0KHhzbFRhcmdldCk7Ci0JCS8vIGFkZCB0aGlzIGhlcmUgdG8gbWFrZSBqYXZhIHRoZSBub24tcHJpbWFyeSB0YXJnZXQKLQkvLwlsYXVuY2guYWRkRGVidWdUYXJnZXQoamF2YVRhcmdldCk7Ci0JCQotCS8vCWxhdW5jaC5hZGREZWJ1Z1RhcmdldChuZXcgSmF2YVhTTERlYnVnVGFyZ2V0KGxhdW5jaCwgbGF1bmNoLmdldFByb2Nlc3NlcygpWzBdLCBsYXVuY2hIZWxwZXIsIGphdmFUYXJnZXQpKTsKLQkJCi0KLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIEphdmEgYnJlYWtwb2ludCBhbmQgdGhlIFhTTCBicmVha3BvaW50cwotCSAqLwotCUBPdmVycmlkZQotCXByb3RlY3RlZCBJQnJlYWtwb2ludFtdIGdldEJyZWFrcG9pbnRzKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0JewotCQlJQnJlYWtwb2ludE1hbmFnZXIgYnJlYWtwb2ludE1hbmFnZXIgPSBEZWJ1Z1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnJlYWtwb2ludE1hbmFnZXIoKTsKLQkJaWYgKCFicmVha3BvaW50TWFuYWdlci5pc0VuYWJsZWQoKSkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJSUJyZWFrcG9pbnRbXSBqYXZhQnJlYWtwb2ludHMgPSBzdXBlci5nZXRCcmVha3BvaW50cyhjb25maWd1cmF0aW9uKTsKLQkJSUJyZWFrcG9pbnRbXSB4c2xCcmVha3BvaW50cyA9IGJyZWFrcG9pbnRNYW5hZ2VyLmdldEJyZWFrcG9pbnRzKElYU0xDb25zdGFudHMuSURfWFNMX0RFQlVHX01PREVMKTsKLQkJSUJyZWFrcG9pbnRbXSBicmVha3BvaW50cyA9IG5ldyBJQnJlYWtwb2ludFtqYXZhQnJlYWtwb2ludHMubGVuZ3RoK3hzbEJyZWFrcG9pbnRzLmxlbmd0aF07Ci0JCVN5c3RlbS5hcnJheWNvcHkoamF2YUJyZWFrcG9pbnRzLCAwLCBicmVha3BvaW50cywgMCwgamF2YUJyZWFrcG9pbnRzLmxlbmd0aCk7Ci0JCVN5c3RlbS5hcnJheWNvcHkoeHNsQnJlYWtwb2ludHMsIDAsIGJyZWFrcG9pbnRzLCBqYXZhQnJlYWtwb2ludHMubGVuZ3RoLCB4c2xCcmVha3BvaW50cy5sZW5ndGgpOwotCQkKLQkJcmV0dXJuIGJyZWFrcG9pbnRzOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHByZUxhdW5jaENoZWNrKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIFN0cmluZyBtb2RlLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQl0aGlzLmxhdW5jaEhlbHBlciA9IG5ldyBMYXVuY2hIZWxwZXIoY29uZmlndXJhdGlvbik7Ci0JCWlmIChtb2RlLmVxdWFscyhJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFKSkKLQkJewotCQkJLy8gVE9ETyBkb24ndCBsaWtlIGhhdmluZyBVSSBjb2RlIGluIHRoZSBsYXVuY2hpbmcgcGx1Z2luLi4ud2hlcmUgZWxzZSBjYW4gaXQgZ28/Ci0JCQlmaW5hbCBJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uLCBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSk7Ci0JCQlpZiAoaW5zdGFsbC5nZXREZWJ1Z2dlcigpID09IG51bGwpCi0JCQl7Ci0JCQkJZmluYWwgYm9vbGVhbltdIHJlc3VsdCA9IG5ldyBib29sZWFuW10KLQkJCQl7IGZhbHNlIH07Ci0JCQkJLy8gb3BlbiBhIGRpYWxvZyBmb3IgY2hvb3NpbmcgYSBkaWZmZXJlbnQgaW5zdGFsbCB0aGF0IGRvZXMgaGF2ZQotCQkJCS8vIGFuIGFzc29jaWF0ZWQgZGVidWdnZXIKLQkJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5zeW5jRXhlYyhuZXcgUnVubmFibGUoKQotCQkJCXsKLQkJCQkJcHVibGljIHZvaWQgcnVuKCkKLQkJCQkJewotCQkJCQkJU3RyaW5nIGRlYnVnZ2luZ0luc3RhbGxJZCA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfREVGQVVMVF9ERUJVR0dJTkdfSU5TVEFMTF9JRCk7Ci0JCQkJCQlJUHJvY2Vzc29ySW5zdGFsbCBwcm9jZXNzb3IgPSBKQVhQUnVudGltZS5nZXRQcm9jZXNzb3IoZGVidWdnaW5nSW5zdGFsbElkKTsKLQotCQkJCQkJSVdvcmtiZW5jaFdpbmRvdyBkdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJCQkKLQkJCQkJCVN0cmluZyB0aXRsZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS4wIik7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCVN0cmluZyBtZXNzYWdlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLjEiKSArIGluc3RhbGwuZ2V0TmFtZSgpICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJYU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLjIiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQkJCQkJKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUuMyIpICsgcHJvY2Vzc29yLmdldE5hbWUoKSArIE1lc3NhZ2VzLmdldFN0cmluZygiWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS40Iik7Ly8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJCQkKLQkJCQkJCU1lc3NhZ2VEaWFsb2cgZGlhbG9nID0gbmV3IE1lc3NhZ2VEaWFsb2coZHcuZ2V0U2hlbGwoKSwgdGl0bGUsIG51bGwsIG1lc3NhZ2UsIE1lc3NhZ2VEaWFsb2cuUVVFU1RJT04sCi0JCQkJCQkJCW5ldyBTdHJpbmdbXSB7IElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMIH0sIDApOyAvLyB5ZXMgaXMgdGhlIGRlZmF1bHQKLQkJCQkJCQotCQkJCSAgICAgICAgcmVzdWx0WzBdID0gZGlhbG9nLm9wZW4oKSA9PSAwOwotCQkJCQl9Ci0JCQkJfSk7Ci0JCQkJcmV0dXJuIHJlc3VsdFswXTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlTdHJpbmcgZGVidWdnZXJURiA9IGluc3RhbGwuZ2V0RGVidWdnZXIoKS5nZXRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCQlTdHJpbmcgaW5zdGFsbFRGID0gbGF1bmNoSGVscGVyLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpID09IG51bGwgPyBudWxsIDogbGF1bmNoSGVscGVyLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpLmdldEZhY3RvcnlDbGFzcygpOwotCQkJCWlmICghZGVidWdnZXJURi5lcXVhbHMoaW5zdGFsbFRGKSkKLQkJCQl7Ci0JCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpCi0JCQkJCXsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpCi0JCQkJCQl7Ci0JCQkJCQkJSVdvcmtiZW5jaFdpbmRvdyBkdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQkJCQkJCi0JCQkJCQkJU3RyaW5nIHRpdGxlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDaGFuZ2UgVHJhbnNmb3JtZXIgRmFjdG9yeSIpOwotCQkJCQkJCVN0cmluZyBtZXNzYWdlID0gaW5zdGFsbC5nZXROYW1lKCkgKyAiIG11c3QgdXNlIHRoZSAiICsgbGF1bmNoSGVscGVyLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpLmdldE5hbWUoKSArICIgdHJhbnNmb3JtZXIgZmFjdG9yeSB3aGVuIGRlYnVnZ2luZy5cbiIKLQkJCQkJCQkJCSsgIkJlIGF3YXJlIHRoYXQgdGhpcyBtYXkgZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyB0byB0aGUgIiArIGxhdW5jaEhlbHBlci5nZXRUcmFuc2Zvcm1lckZhY3RvcnkoKS5nZXROYW1lKCkgKyAiIHRyYW5zZm9ybWVyIGZhY3RvcnkgY29uZmlndXJlZCBmb3IgdGhpcyBsYXVuY2ggY29uZmlndXJhdGlvbi4iOwotCQkJCQkJCQotCQkJCQkJCU1lc3NhZ2VEaWFsb2cgZGlhbG9nID0gbmV3IE1lc3NhZ2VEaWFsb2coZHcuZ2V0U2hlbGwoKSwgdGl0bGUsIG51bGwsIG1lc3NhZ2UsIE1lc3NhZ2VEaWFsb2cuV0FSTklORywKLQkJCQkJCQkJCW5ldyBTdHJpbmdbXSB7IElEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMIH0sIDApOyAvLyB5ZXMgaXMgdGhlIGRlZmF1bHQKLQkJCQkJCQlkaWFsb2cub3BlbigpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHN1cGVyLnByZUxhdW5jaENoZWNrKGNvbmZpZ3VyYXRpb24sIG1vZGUsIG1vbml0b3IpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJVk1SdW5uZXIgZ2V0Vk1SdW5uZXIoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgU3RyaW5nIG1vZGUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQkvLyBjb21tZW50IHRoaXMgb3V0IGluIG9yZGVyIHRvIGdldCBqYXZhIGRlYnVnZ2luZyBhcyB3ZWxsIGFzIFhTTCBkZWJ1Z2dpbmcKLS8vCQlpZiAoSUxhdW5jaE1hbmFnZXIuREVCVUdfTU9ERS5lcXVhbHMobW9kZSkpCi0vLwkJCXJldHVybiBzdXBlci5nZXRWTVJ1bm5lcihjb25maWd1cmF0aW9uLCBJTGF1bmNoTWFuYWdlci5SVU5fTU9ERSk7Ci0JCXJldHVybiBzdXBlci5nZXRWTVJ1bm5lcihjb25maWd1cmF0aW9uLCBtb2RlKTsKLQl9Ci0KLQlwcml2YXRlIEZpbGUgZ2V0TGF1bmNoQ29uZmlnRmlsZSgpCi0JewotCQlJUGF0aCBsYXVuY2hQYXRoID0gUGxhdGZvcm0uZ2V0U3RhdGVMb2NhdGlvbihKQVhQTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKSkuYXBwZW5kKCJsYXVuY2giKTsgLy8kTk9OLU5MUy0xJAotCQlGaWxlIGxhdW5jaERpciA9IGxhdW5jaFBhdGgudG9GaWxlKCk7Ci0JCWlmICghbGF1bmNoRGlyLmV4aXN0cygpKQotCQkJbGF1bmNoRGlyLm1rZGlyKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGxhdW5jaERpciwgImxhdW5jaC54bWwiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgSVBhdGggZ2V0V29ya2luZ0RpcmVjdG9yeVBhdGgoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCS8vIFRPRE8gY2hhbmdlcyBhcmUgYWZvb3Qgc28gdGhhdCB3b3JraW5nIGRpcmVjdG9yeSBjYW4gYmUgZ290dGVuIGZyb20gdGhlIENvbW1vbiBsYXVuY2ggdGFiCi0JCQotLy8JCVN0cmluZyBwYXRoID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QUk9DRVNTT1JfV09SS0lOR19ESVIsIChTdHJpbmcpIG51bGwpOwotLy8JCWlmIChwYXRoICE9IG51bGwpCi0vLwkJewotLy8JCQlwYXRoID0gVmFyaWFibGVzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRTdHJpbmdWYXJpYWJsZU1hbmFnZXIoKS5wZXJmb3JtU3RyaW5nU3Vic3RpdHV0aW9uKHBhdGgpOwotLy8JCQlyZXR1cm4gbmV3IFBhdGgocGF0aCk7Ci0vLwkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIElQcm9jZXNzb3JJbnZva2VyIGdldFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgaW52b2tlcklkID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuSU5WT0tFUl9ERVNDUklQVE9SLCAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuamF4cC5pbnZva2UiKTsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLmdldFByb2Nlc3Nvckludm9rZXIoaW52b2tlcklkKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldFByb2Nlc3Nvckluc3RhbGwoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgU3RyaW5nIG1vZGUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gTGF1bmNoSGVscGVyLmdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbik7Ci0JCWlmIChtb2RlLmVxdWFscyhJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFKSAmJiBpbnN0YWxsLmdldERlYnVnZ2VyKCkgPT0gbnVsbCkKLQkJewotCQkJU3RyaW5nIGRlYnVnZ2luZ0luc3RhbGxJZCA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfREVGQVVMVF9ERUJVR0dJTkdfSU5TVEFMTF9JRCk7Ci0JCQlpbnN0YWxsID0gSkFYUFJ1bnRpbWUuZ2V0UHJvY2Vzc29yKGRlYnVnZ2luZ0luc3RhbGxJZCk7Ci0JCX0KLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRNYWluVHlwZU5hbWUoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFLmVxdWFscyhtb2RlKSkKLQkJCXJldHVybiAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLkRlYnVnUnVubmVyIjsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLmludGVybmFsLk1haW4iOyAvLyROT04tTkxTLTEkCi0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZyBnZXRQcm9ncmFtQXJndW1lbnRzKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQkvLyBjbGFzc25hbWUsIHNvdXJjZXVybCwgb3V0cHV0IGZpbGUKLQkJSVByb2Nlc3Nvckludm9rZXIgaW52b2tlciA9IGdldFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKGNvbmZpZ3VyYXRpb24pOwotCQlTdHJpbmcgY2xhenogPSBpbnZva2VyLmdldEludm9rZXJDbGFzc05hbWUoKTsKLQotCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXNiLmFwcGVuZChjbGF6eik7Ci0JCXNiLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCi0JCXNiLmFwcGVuZCgiXCIiICsgZ2V0TGF1bmNoQ29uZmlnRmlsZSgpLmdldEFic29sdXRlUGF0aCgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlzYi5hcHBlbmQoIiAiKTsgLy8kTk9OLU5MUy0xJAotCQlzYi5hcHBlbmQoIlwiIiArIGxhdW5jaEhlbHBlci5nZXRTb3VyY2UoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJc2IuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJc2IuYXBwZW5kKCJcIiIgKyBsYXVuY2hIZWxwZXIuZ2V0VGFyZ2V0KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCWlmIChJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFLmVxdWFscyhtb2RlKSkKLQkJewotCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IGdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbiwgbW9kZSk7Ci0JCQlpZiAoaW5zdGFsbC5nZXREZWJ1Z2dlcigpICE9IG51bGwpCi0JCQl7Ci0JCQkJSURlYnVnZ2VyIGRlYnVnZ2VyID0gaW5zdGFsbC5nZXREZWJ1Z2dlcigpOwotCQkJCVN0cmluZyBjbGFzc05hbWUgPSBkZWJ1Z2dlci5nZXRDbGFzc05hbWUoKTsKLQkJCQlzYi5hcHBlbmQoIiAtZGVidWcgIikuYXBwZW5kKGNsYXNzTmFtZSkuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCXNiLmFwcGVuZChsYXVuY2hIZWxwZXIuZ2V0UmVxdWVzdFBvcnQoKSk7Ci0JCQkJc2IuYXBwZW5kKCIgIikuYXBwZW5kKGxhdW5jaEhlbHBlci5nZXRFdmVudFBvcnQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlzYi5hcHBlbmQoIiAiKS5hcHBlbmQobGF1bmNoSGVscGVyLmdldEdlbmVyYXRlUG9ydCgpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIFN0cmluZ1tdIGdldENsYXNzcGF0aChJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJLy8gZ2V0IHRoZSBjbGFzc3BhdGggZGVmaW5lZCBieSB0aGUgdXNlcgotCQlTdHJpbmdbXSB1c2VyQ2xhc3NwYXRoID0gc3VwZXIuZ2V0Q2xhc3NwYXRoKGNvbmZpZ3VyYXRpb24pOwotCi0JCS8vIGdldCB0aGUgY2xhc3NwYXRoIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNmb3JtYXRpb24KLQkJSVByb2Nlc3Nvckludm9rZXIgaW52b2tlciA9IGdldFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKGNvbmZpZ3VyYXRpb24pOwotCQlMaXN0PFN0cmluZz4gaW52b2tlckNQID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCWZvciAoU3RyaW5nIGVudHJ5IDogaW52b2tlci5nZXRDbGFzc3BhdGhFbnRyaWVzKCkpCi0JCXsKLQkJCWludm9rZXJDUC5hZGQoZW50cnkpOwotCQl9Ci0KLQkJLy8gYWRkIHRoZSBkZWJ1Z2dlci4uLgotCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uLCBtb2RlKTsKLQkJaWYgKElMYXVuY2hNYW5hZ2VyLkRFQlVHX01PREUuZXF1YWxzKG1vZGUpICYmIGluc3RhbGwuZ2V0RGVidWdnZXIoKSAhPSBudWxsKQotCQl7Ci0JCQlTdHJpbmdbXSBqYXJzID0gaW5zdGFsbC5nZXREZWJ1Z2dlcigpLmdldENsYXNzUGF0aCgpOwotCQkJZm9yIChTdHJpbmcgamFyIDogamFycykKLQkJCXsKLQkJCQlpbnZva2VyQ1AuYWRkKGphcik7Ci0JCQl9Ci0JCX0KLQotCQlTdHJpbmdbXSBpbnZva2VyQ2xhc3NwYXRoID0gKFN0cmluZ1tdKSBpbnZva2VyQ1AudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLQotCQkvLyBhZGQgdGhlbSB0b2dldGhlcgotCQlTdHJpbmdbXSBjbGFzc3BhdGggPSBuZXcgU3RyaW5nW3VzZXJDbGFzc3BhdGgubGVuZ3RoICsgaW52b2tlckNsYXNzcGF0aC5sZW5ndGhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGludm9rZXJDbGFzc3BhdGgsIDAsIGNsYXNzcGF0aCwgMCwgaW52b2tlckNsYXNzcGF0aC5sZW5ndGgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KHVzZXJDbGFzc3BhdGgsIDAsIGNsYXNzcGF0aCwgaW52b2tlckNsYXNzcGF0aC5sZW5ndGgsIHVzZXJDbGFzc3BhdGgubGVuZ3RoKTsKLQotCQlyZXR1cm4gY2xhc3NwYXRoOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgZ2V0Vk1Bcmd1bWVudHMoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyB2bWFyZ3MgPSBzdXBlci5nZXRWTUFyZ3VtZW50cyhjb25maWd1cmF0aW9uKTsKLQotCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uLCBtb2RlKTsKLQkJaWYgKGluc3RhbGwgIT0gbnVsbCAmJiAhaW5zdGFsbC5nZXRQcm9jZXNzb3JUeXBlKCkuaXNKUkVEZWZhdWx0KCkpCi0JCXsKLQkJCS8vIGNsZWFyIHRoZSBlbmRvcnNlZCBkaXIKLQkJCUZpbGUgdGVtcERpciA9IGdldEVuZG9yc2VkRGlyKCk7Ci0JCQlpZiAodGVtcERpci5leGlzdHMoKSkKLQkJCXsKLQkJCQlGaWxlW10gY2hpbGRyZW4gPSB0ZW1wRGlyLmxpc3RGaWxlcygpOwotCQkJCWZvciAoRmlsZSBjaGlsZCA6IGNoaWxkcmVuKQotCQkJCXsKLQkJCQkJY2hpbGQuZGVsZXRlKCk7Ci0JCQkJfQotCQkJCXRlbXBEaXIuZGVsZXRlKCk7Ci0JCQl9Ci0JCQl0ZW1wRGlyLm1rZGlyKCk7Ci0KLQkJCS8vIG1vdmUgdGhlIHJlcXVpcmVkIGphcnMgdG8gdGhlIGVuZG9yc2VkIGRpcgotCQkJSVByb2Nlc3NvckphcltdIGphcnMgPSBpbnN0YWxsLmdldFByb2Nlc3NvckphcnMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgamFycy5sZW5ndGg7IGkrKykKLQkJCXsKLQkJCQlVUkwgZW50cnkgPSBqYXJzW2ldLmFzVVJMKCk7Ci0JCQkJaWYgKGVudHJ5ID09IG51bGwpCi0JCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIE1lc3NhZ2VzLmdldFN0cmluZygiWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS4yMyIpICsgamFyc1tpXSwgbnVsbCkpOyAvLyROT04tTkxTLTEkCi0JCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUodGVtcERpciwgIkVORF8iICsgaSArICIuamFyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCW1vdmVGaWxlKGVudHJ5LCBmaWxlKTsKLQkJCX0KLQkJCS8vIGFkZCB0aGUgZW5kb3JzZWQgZGlyCi0JCQl2bWFyZ3MgKz0gIiAtRGphdmEuZW5kb3JzZWQuZGlycz1cIiIgKyB0ZW1wRGlyLmdldEFic29sdXRlUGF0aCgpICsgIlwiIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkKLQkJCVN0cmluZyB0ZmFjdG9yeSA9IGdldFRyYW5zZm9ybWVyRmFjdG9yeShpbnN0YWxsKTsKLQkJCWlmICh0ZmFjdG9yeSAhPSBudWxsKQotCQkJCXZtYXJncyArPSAiIC1EamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk9IiArIHRmYWN0b3J5OyAvLyROT04tTkxTLTEkCi0JCQkKLQkJCWlmIChJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFLmVxdWFscyhtb2RlKSkKLQkJCXsKLQkJCQkvLyBpbiBkZWJ1ZyBtb2RlLCBzZXQgdGhlIGxvZ2dpbmcgdG8gRVJST1IuIFRoaXMgcHJldmVudHMgdGhlIGNvbnNvbGUgZnJvbSBwb3BwaW5nIHVwIG9uIHRvcCBvZiB0aGUgcmVzdWx0IHZpZXchCi0JCQkJdHJ5Ci0JCQkJewotCQkJCQlVUkwgdXJsID0gRmlsZUxvY2F0b3IucmVzb2x2ZShGaWxlTG9jYXRvci5maW5kKFBsYXRmb3JtLmdldEJ1bmRsZShKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCksIG5ldyBQYXRoKCIvbG9nNGouZGVidWcucHJvcGVydGllcyIpLCBudWxsKSk7Ci0JCQkJCXZtYXJncyArPSAiIC1EbG9nNGouY29uZmlndXJhdGlvbj1cIiIrdXJsLnRvRXh0ZXJuYWxGb3JtKCkrIlwiIjsgLy8kTk9OLU5MUy0xJAotCQkJCX0KLQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gdm1hcmdzOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBnZXRUcmFuc2Zvcm1lckZhY3RvcnkoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCVN0cmluZyB0ZmFjdG9yeSA9IG51bGw7Ci0JCWlmIChJTGF1bmNoTWFuYWdlci5ERUJVR19NT0RFLmVxdWFscyhtb2RlKSkKLQkJCXRmYWN0b3J5ID0gaW5zdGFsbC5nZXREZWJ1Z2dlcigpLmdldFRyYW5zZm9ybWVyRmFjdG9yeSgpOwotCQllbHNlCi0JCXsKLQkJCUlUcmFuc2Zvcm1lckZhY3RvcnkgdCA9IGxhdW5jaEhlbHBlci5nZXRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCWlmICh0ICE9IG51bGwpCi0JCQkJdGZhY3RvcnkgPSB0LmdldEZhY3RvcnlDbGFzcygpOwotCQl9Ci0JCXJldHVybiB0ZmFjdG9yeTsKLQl9Ci0KLQlwcml2YXRlIEZpbGUgZ2V0RW5kb3JzZWREaXIoKQotCXsKLQkJSVBhdGggdGVtcExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0U3RhdGVMb2NhdGlvbihKQVhQTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKSkuYXBwZW5kKCJlbmRvcnNlZCIpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiB0ZW1wTG9jYXRpb24udG9GaWxlKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBtb3ZlRmlsZShVUkwgc3JjLCBGaWxlIHRhcmdldCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUJ1ZmZlcmVkT3V0cHV0U3RyZWFtIGJvcyA9IG51bGw7Ci0JCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gYmlzID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCWJvcyA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbSh0YXJnZXQpKTsKLQkJCWJpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHNyYy5vcGVuU3RyZWFtKCkpOwotCQkJd2hpbGUgKGJpcy5hdmFpbGFibGUoKSA+IDApCi0JCQl7Ci0JCQkJaW50IHNpemUgPSBiaXMuYXZhaWxhYmxlKCk7Ci0JCQkJaWYgKHNpemUgPiAxMDI0KQotCQkJCQlzaXplID0gMTAyNDsKLQkJCQlieXRlW10gYiA9IG5ldyBieXRlW3NpemVdOwotCQkJCWJpcy5yZWFkKGIsIDAsIGIubGVuZ3RoKTsKLQkJCQlib3Mud3JpdGUoYik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIE1lc3NhZ2VzLmdldFN0cmluZygiWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS43IikgKyBzcmMgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUuMzEiKSArIHRhcmdldCwgZSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCWlmIChiaXMgIT0gbnVsbCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWJpcy5jbG9zZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChib3MgIT0gbnVsbCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCWJvcy5jbG9zZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9KQVhQTGF1bmNoaW5nUGx1Z2luLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvSkFYUExhdW5jaGluZ1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2RkZGE3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9KQVhQTGF1bmNoaW5nUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBKQVhQTGF1bmNoaW5nUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQotCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmciOwotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEpBWFBMYXVuY2hpbmdQbHVnaW4gcGx1Z2luOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBKQVhQTGF1bmNoaW5nUGx1Z2luKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgSkFYUExhdW5jaGluZ1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coRXhjZXB0aW9uIGUpCi0JewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgUExVR0lOX0lELCAwLCAiIiwgZSkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhDb3JlRXhjZXB0aW9uIGUpCi0JewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKGUuZ2V0U3RhdHVzKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9MYXVuY2hIZWxwZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9MYXVuY2hIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiZjNiMS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvTGF1bmNoSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlBpcGVsaW5lRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuaW52b2tlci5UcmFuc2Zvcm1EZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5pbnZva2VyLlR5cGVkVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29yVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklUcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuTGF1bmNoQXR0cmlidXRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkxhdW5jaFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkJhc2VMYXVuY2hIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuUHJlZmVyZW5jZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hIZWxwZXIgZXh0ZW5kcyBCYXNlTGF1bmNoSGVscGVyCi17Ci0JcHJpdmF0ZSBmaW5hbCBMYXVuY2hBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0JcHJpdmF0ZSBmaW5hbCBMYXVuY2hQcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXM7Ci0JcHJpdmF0ZSBmaW5hbCBJVHJhbnNmb3JtZXJGYWN0b3J5IHRyYW5zZm9ybWVyRmFjdG9yeTsKLQotCXB1YmxpYyBMYXVuY2hIZWxwZXIoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCXN1cGVyKGNvbmZpZ3VyYXRpb24pOwotCQlhdHRyaWJ1dGVzID0gaHlkcmF0ZUF0dHJpYnV0ZXMoY29uZmlndXJhdGlvbik7Ci0JCW91dHB1dFByb3BlcnRpZXMgPSBoeWRyYXRlT3V0cHV0UHJvcGVydGllcyhjb25maWd1cmF0aW9uKTsKLQkJdHJhbnNmb3JtZXJGYWN0b3J5ID0gaHlkcmF0ZVRyYW5zZm9ybWVyRmFjdG9yeShjb25maWd1cmF0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgTGF1bmNoUHJvcGVydGllcyBnZXRQcm9wZXJ0aWVzKCkKLQl7Ci0JCXJldHVybiBvdXRwdXRQcm9wZXJ0aWVzOwotCX0KLQotCXB1YmxpYyBMYXVuY2hBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKQotCXsKLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JcHVibGljIHZvaWQgc2F2ZShGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlCdWZmZXJlZFdyaXRlciB3cml0ZXIgPSBudWxsOwotCQl0cnkKLQkJewotCQkJLy8gZW5zdXJlIGl0IGV4aXN0cwotCQkJZmlsZS5jcmVhdGVOZXdGaWxlKCk7Ci0JCQl3cml0ZXIgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoZmlsZSkpOwotCQkJUGlwZWxpbmVEZWZpbml0aW9uIHBkZWYgPSBuZXcgUGlwZWxpbmVEZWZpbml0aW9uKCk7Ci0JCQlmb3IgKEl0ZXJhdG9yPD8+IGl0ZXIgPSBhdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZXMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCQl7Ci0JCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIGl0ZXIubmV4dCgpOwotCQkJCXBkZWYuYWRkQXR0cmlidXRlKG5ldyBUeXBlZFZhbHVlKGF0dC51cmksIFR5cGVkVmFsdWUuVFlQRV9TVFJJTkcsIGF0dC52YWx1ZSkpOwotCQkJfQotCQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyID0gcGlwZWxpbmUuZ2V0VHJhbnNmb3JtRGVmcygpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJCXsKLQkJCQlMYXVuY2hUcmFuc2Zvcm0gbHQgPSAoTGF1bmNoVHJhbnNmb3JtKSBpdGVyLm5leHQoKTsKLQkJCQlUcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYgPSBuZXcgVHJhbnNmb3JtRGVmaW5pdGlvbigpOwotCQkJCVVSTCB1cmwgPSBwYXRoVG9VUkwobHQuZ2V0TG9jYXRpb24oKSk7Ci0JCQkJdGRlZi5zZXRTdHlsZXNoZWV0VVJMKHVybC50b0V4dGVybmFsRm9ybSgpKTsKLQkJCQl0ZGVmLnNldFJlc29sdmVyQ2xhc3MobHQuZ2V0UmVzb2x2ZXIoKSk7Ci0JCQkJZm9yIChJdGVyYXRvcjw/PiBpdGVyYXRvciA9IGx0LmdldFBhcmFtZXRlcnMoKS5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KQotCQkJCXsKLQkJCQkJTGF1bmNoQXR0cmlidXRlIGF0dCA9IChMYXVuY2hBdHRyaWJ1dGUpIGl0ZXJhdG9yLm5leHQoKTsKLQkJCQkJdGRlZi5hZGRQYXJhbWV0ZXIobmV3IFR5cGVkVmFsdWUoYXR0LnVyaSwgVHlwZWRWYWx1ZS5UWVBFX1NUUklORywgYXR0LmdldFJlc29sdmVkVmFsdWUoKSkpOwotCQkJCX0KLQkJCQkvLyBzZXQgdGhlIG91dHB1dCBwcm9wcyBmb3IgdGhlIExBU1QgdHJhbnNmb3JtIG9ubHkKLQkJCQlpZiAoIWl0ZXIuaGFzTmV4dCgpKQotCQkJCXsKLQkJCQkJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5IDogb3V0cHV0UHJvcGVydGllcy5nZXRQcm9wZXJ0aWVzKCkuZW50cnlTZXQoKSkKLQkJCQkJewotCQkJCQkJU3RyaW5nIG5hbWUgPSBlbnRyeS5nZXRLZXkoKTsKLQkJCQkJCVN0cmluZyB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCk7Ci0JCQkJCQlpZiAobmFtZSAhPSBudWxsICYmIHZhbHVlICE9IG51bGwpCi0JCQkJCQkJdGRlZi5zZXRPdXRwdXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcGRlZi5hZGRUcmFuc2Zvcm1EZWYodGRlZik7Ci0JCQl9Ci0KLQkJCURvY3VtZW50IGRvYyA9IHBkZWYudG9YTUwoKTsKLQkJCVN0cmluZyBzID0gUHJlZmVyZW5jZVV0aWwuc2VyaWFsaXplRG9jdW1lbnQoZG9jKTsKLQkJCXdyaXRlci53cml0ZShzKTsKLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIE1lc3NhZ2VzLmdldFN0cmluZygiTGF1bmNoSGVscGVyLjAiKSwgZSkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIE1lc3NhZ2VzLmdldFN0cmluZygiTGF1bmNoSGVscGVyLjEiKSwgZSkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwgIlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24iLCBlKSk7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgSVN0YXR1cy5FUlJPUiwgIlRyYW5zZm9ybWVyRXhjZXB0aW9uIiwgZSkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJZmluYWxseQotCQl7Ci0JCQlpZiAod3JpdGVyICE9IG51bGwpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQl3cml0ZXIuY2xvc2UoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExhdW5jaFByb3BlcnRpZXMgaHlkcmF0ZU91dHB1dFByb3BlcnRpZXMoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUxhdW5jaFByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBMYXVuY2hQcm9wZXJ0aWVzKCk7Ci0JCWJvb2xlYW4gdXNlUHJlZmVyZW5jZVByb3BlcnRpZXMgPSBmYWxzZTsgLy9jb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9QUk9QRVJUSUVTX0ZST01fUFJFRkVSRU5DRVMsIHRydWUpOwotCQlJUHJvY2Vzc29yVHlwZSBwdCA9IGdldFByb2Nlc3Nvckluc3RhbGwoY29uZmlndXJhdGlvbikuZ2V0UHJvY2Vzc29yVHlwZSgpOwotCQlpZiAodXNlUHJlZmVyZW5jZVByb3BlcnRpZXMpCi0JCXsKLQkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IHB0LmdldE91dHB1dFByb3BlcnR5VmFsdWVzKCkuZW50cnlTZXQoKSkKLQkJCXsKLQkJCQlTdHJpbmcgbmFtZSA9IChTdHJpbmcpIGVudHJ5LmdldEtleSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IChTdHJpbmcpIGVudHJ5LmdldFZhbHVlKCk7Ci0JCQkJcHJvcGVydGllcy5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlTdHJpbmcgcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX1BST1BFUlRJRVMsIChTdHJpbmcpIG51bGwpOwotCQkJaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLQkJCXsKLQkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShzLmdldEJ5dGVzKCkpOwotCQkJCXByb3BlcnRpZXMgPSBMYXVuY2hQcm9wZXJ0aWVzLmZyb21YTUwoaW5wdXRTdHJlYW0pOwotCQkJfQotCQl9Ci0JCXJldHVybiBwcm9wZXJ0aWVzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIExhdW5jaEF0dHJpYnV0ZXMgaHlkcmF0ZUF0dHJpYnV0ZXMoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUxhdW5jaEF0dHJpYnV0ZXMgYXR0cmlidXRlcyAgPSBuZXcgTGF1bmNoQXR0cmlidXRlcygpOwotCQlib29sZWFuIHVzZURlZmF1bHRBdHRyaWJ1dGVzID0gZmFsc2U7IC8vY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9VU0VfRkVBVFVSRVNfRlJPTV9QUkVGRVJFTkNFUywgdHJ1ZSk7Ci0JCWlmICh1c2VEZWZhdWx0QXR0cmlidXRlcykKLQkJewotCQkJSVByb2Nlc3NvclR5cGUgcHQgPSBnZXRQcm9jZXNzb3JJbnN0YWxsKGNvbmZpZ3VyYXRpb24pLmdldFByb2Nlc3NvclR5cGUoKTsKLQkJCU1hcDxTdHJpbmcsIFN0cmluZz4gZnZhbHMgPSBwdC5nZXRBdHRyaWJ1dGVWYWx1ZXMoKTsKLQkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IGZ2YWxzLmVudHJ5U2V0KCkpCi0JCQl7Ci0JCQkJU3RyaW5nIHVyaSA9IChTdHJpbmcpIGVudHJ5LmdldEtleSgpOwotCQkJCUlBdHRyaWJ1dGUgYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlKHB0LmdldEF0dHJpYnV0ZXMoKSwgdXJpKTsKLQkJCQlhdHRyaWJ1dGVzLmFkZEF0dHJpYnV0ZShuZXcgTGF1bmNoQXR0cmlidXRlKHVyaSwgInN0cmluZyIsIChTdHJpbmcpIGVudHJ5LmdldFZhbHVlKCkpKTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9BVFRSSUJVVEVTLCAoU3RyaW5nKSBudWxsKTsKLQkJCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApCi0JCQl7Ci0JCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocy5nZXRCeXRlcygpKTsKLQkJCQlhdHRyaWJ1dGVzID0gTGF1bmNoQXR0cmlidXRlcy5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYXR0cmlidXRlczsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJQXR0cmlidXRlIGdldEF0dHJpYnV0ZShJQXR0cmlidXRlW10gYXR0cmlidXRlcywgU3RyaW5nIHVyaSkKLQl7Ci0JCWZvciAoSUF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKQotCQl7Ci0JCQlpZiAoYXR0cmlidXRlLmdldFVSSSgpLmVxdWFscyh1cmkpKQotCQkJCXJldHVybiBhdHRyaWJ1dGU7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0KLQlwdWJsaWMgc3RhdGljIElQcm9jZXNzb3JJbnN0YWxsIGdldFByb2Nlc3Nvckluc3RhbGwoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWJvb2xlYW4gdXNlRGVmYXVsdFByb2Nlc3NvciA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfUFJPQ0VTU09SLCB0cnVlKTsKLQkJaWYgKHVzZURlZmF1bHRQcm9jZXNzb3IpCi0JCQlyZXR1cm4gSkFYUFJ1bnRpbWUuZ2V0RGVmYXVsdFByb2Nlc3NvcigpOwotCQlTdHJpbmcgcHJvY2Vzc29ySWQgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BST0NFU1NPUiwgIiIpOyAvLyROT04tTkxTLTEkCi0JCUlQcm9jZXNzb3JJbnN0YWxsIHByb2Nlc3NvciA9IEpBWFBSdW50aW1lLmdldFByb2Nlc3Nvcihwcm9jZXNzb3JJZCk7Ci0JCXJldHVybiBwcm9jZXNzb3I7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVRyYW5zZm9ybWVyRmFjdG9yeSBoeWRyYXRlVHJhbnNmb3JtZXJGYWN0b3J5KElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUHJvY2Vzc29yVHlwZSB0eXBlID0gZ2V0UHJvY2Vzc29ySW5zdGFsbChjb25maWd1cmF0aW9uKS5nZXRQcm9jZXNzb3JUeXBlKCk7Ci0JCWJvb2xlYW4gdXNlRGVmYXVsdEZhY3RvcnkgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1VTRV9ERUZBVUxUX1BST0NFU1NPUiwgdHJ1ZSk7Ci0JCWlmICh1c2VEZWZhdWx0RmFjdG9yeSkKLQkJCXJldHVybiB0eXBlLmdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKTsKLQkJCi0JCVN0cmluZyBmYWN0b3J5SWQgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1RSQU5TRk9STUVSX0ZBQ1RPUlksIChTdHJpbmcpbnVsbCk7Ci0JCWlmIChmYWN0b3J5SWQgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQkKLQkJZm9yIChJVHJhbnNmb3JtZXJGYWN0b3J5IGZhY3RvcnkgOiB0eXBlLmdldFRyYW5zZm9ybWVyRmFjdG9yaWVzKCkpCi0JCXsKLQkJCWlmIChmYWN0b3J5LmdldEZhY3RvcnlDbGFzcygpLmVxdWFscyhmYWN0b3J5SWQpKQotCQkJCXJldHVybiBmYWN0b3J5OwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJVHJhbnNmb3JtZXJGYWN0b3J5IGdldFRyYW5zZm9ybWVyRmFjdG9yeSgpCi0JewotCQlyZXR1cm4gdHJhbnNmb3JtZXJGYWN0b3J5OwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL01lc3NhZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNTg3MDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCi0JCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJdHJ5IHsKLQkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL091dHB1dFByb3BlcnR5LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvT3V0cHV0UHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAwYzk2Zi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvT3V0cHV0UHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklPdXRwdXRQcm9wZXJ0eTsKLQotcHVibGljIGNsYXNzIE91dHB1dFByb3BlcnR5IGltcGxlbWVudHMgSU91dHB1dFByb3BlcnR5Ci17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBkZXNjOwotCi0JcHVibGljIE91dHB1dFByb3BlcnR5KFN0cmluZyBrZXksIFN0cmluZyBkZXNjKQotCXsKLQkJdGhpcy5uYW1lID0ga2V5OwotCQl0aGlzLmRlc2MgPSBkZXNjOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKQotCXsKLQkJcmV0dXJuIGRlc2M7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRVUkkoKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL091dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3MzEzMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5QcmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcwotewotCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgTWFwPFN0cmluZyxTdHJpbmc+PiB0eXBlUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTWFwPFN0cmluZyxTdHJpbmc+PigpOwotCi0JcHVibGljIE1hcDxTdHJpbmcsU3RyaW5nPiBnZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhTdHJpbmcgdHlwZUlkKQotCXsKLQkJcmV0dXJuIHR5cGVQcm9wZXJ0aWVzLmdldCh0eXBlSWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldE91dHB1dFByb3BlcnR5VmFsdWVzKFN0cmluZyB0eXBlSWQsIE1hcDxTdHJpbmcsU3RyaW5nPiBwcm9wZXJ0aWVzKQotCXsKLQkJdHlwZVByb3BlcnRpZXMucHV0KHR5cGVJZCwgcHJvcGVydGllcyk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRBc1hNTCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KCk7Ci0JCUVsZW1lbnQgY29uZmlnID0gZG9jLmNyZWF0ZUVsZW1lbnQoIm91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMiKTsgLy8kTk9OLU5MUy0xJAotCQlkb2MuYXBwZW5kQ2hpbGQoY29uZmlnKTsKLQotCQlmb3IgKFN0cmluZyB0eXBlIDogdHlwZVByb3BlcnRpZXMua2V5U2V0KCkpCi0JCXsKLQkJCUVsZW1lbnQgcHJvY2Vzc29yVHlwZUVsZW1lbnQgPSB0eXBlQXNFbGVtZW50KGRvYywgdHlwZSk7Ci0JCQlNYXA8U3RyaW5nLFN0cmluZz4gcHJvcGVydHlWYWx1ZXMgPSB0eXBlUHJvcGVydGllcy5nZXQodHlwZSk7Ci0JCQlmZWF0dXJlVmFsdWVzQXNFbGVtZW50KGRvYywgcHJvY2Vzc29yVHlwZUVsZW1lbnQsIHByb3BlcnR5VmFsdWVzKTsKLQkJCWNvbmZpZy5hcHBlbmRDaGlsZChwcm9jZXNzb3JUeXBlRWxlbWVudCk7Ci0JCX0KLQotCQkvLyBTZXJpYWxpemUgdGhlIERvY3VtZW50IGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBTdHJpbmcKLQkJcmV0dXJuIFByZWZlcmVuY2VVdGlsLnNlcmlhbGl6ZURvY3VtZW50KGRvYyk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzIHByZWZzID0gbmV3IE91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMoKTsKLQotCQkvLyBEbyB0aGUgcGFyc2luZyBhbmQgb2J0YWluIHRoZSB0b3AtbGV2ZWwgbm9kZQotCQlEb2N1bWVudCBkb2MgPSBQcmVmZXJlbmNlVXRpbC5nZXREb2N1bWVudChpbnB1dFN0cmVhbSk7Ci0JCUVsZW1lbnQgY29uZmlnID0gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOwotCi0JCUVsZW1lbnRbXSBwcm9jZXNzb3JUeXBlRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhjb25maWcsICJwcm9jZXNzb3JUeXBlIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZXNzb3JUeXBlRWxzLmxlbmd0aDsgKytpKQotCQl7Ci0JCQlFbGVtZW50IHByb2Nlc3NvclR5cGVFbCA9IHByb2Nlc3NvclR5cGVFbHNbaV07Ci0JCQlTdHJpbmcgdHlwZSA9IGVsZW1lbnRBc1R5cGUocHJvY2Vzc29yVHlwZUVsKTsKLQkJCU1hcDxTdHJpbmcsU3RyaW5nPiBmZWF0dXJlVmFsdWVzID0gZWxlbWVudEFzUHJvcGVydHlWYWx1ZXMocHJvY2Vzc29yVHlwZUVsKTsKLQkJCXByZWZzLnNldE91dHB1dFByb3BlcnR5VmFsdWVzKHR5cGUsIGZlYXR1cmVWYWx1ZXMpOwotCQl9Ci0KLQkJcmV0dXJuIHByZWZzOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBlbGVtZW50QXNUeXBlKEVsZW1lbnQgcGFyZW50KQotCXsKLQkJU3RyaW5nIGlkID0gcGFyZW50LmdldEF0dHJpYnV0ZSgiaWQiKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gaWQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRWxlbWVudCB0eXBlQXNFbGVtZW50KERvY3VtZW50IGRvYywgU3RyaW5nIHR5cGUpCi0JewotCQlFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgicHJvY2Vzc29yVHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsIHR5cGUpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBlbGVtZW50OwotCX0KLQotCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZWxlbWVudEFzUHJvcGVydHlWYWx1ZXMoRWxlbWVudCBlbGVtZW50KQotCXsKLQkJRWxlbWVudFtdIHByb3BlcnR5RWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhlbGVtZW50LCAicHJvcGVydHkiKTsgLy8kTk9OLU5MUy0xJAotCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnR5VmFsdWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsKLQkJZm9yIChFbGVtZW50IGZlYXR1cmVFbCA6IHByb3BlcnR5RWxzKQotCQl7Ci0JCQlTdHJpbmcgbmFtZSA9IGZlYXR1cmVFbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHZhbHVlID0gZmVhdHVyZUVsLmdldEF0dHJpYnV0ZSgidmFsdWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcGVydHlWYWx1ZXMucHV0KG5hbWUsIHZhbHVlKTsKLQkJfQotCQlyZXR1cm4gcHJvcGVydHlWYWx1ZXM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBmZWF0dXJlVmFsdWVzQXNFbGVtZW50KERvY3VtZW50IGRvYywgRWxlbWVudCBmZWF0dXJlc0VsLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnR5VmFsdWVzKQotCXsKLQkJaWYgKHByb3BlcnR5VmFsdWVzICE9IG51bGwpCi0JCXsKLQkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IHByb3BlcnR5VmFsdWVzLmVudHJ5U2V0KCkpCi0JCQl7Ci0JCQkJU3RyaW5nIG5hbWUgPSBlbnRyeS5nZXRLZXkoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBlbnRyeS5nZXRWYWx1ZSgpOwotCQkJCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJwcm9wZXJ0eSIpOyAvLyROT04tTkxTLTEkCi0JCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsgLy8kTk9OLU5MUy0xJAotCQkJCWZlYXR1cmVzRWwuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUGx1Z2luUHJvY2Vzc29ySmFyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUGx1Z2luUHJvY2Vzc29ySmFyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZjEwMjYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1BsdWdpblByb2Nlc3Nvckphci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySmFyOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBQbHVnaW5Qcm9jZXNzb3JKYXIgaW1wbGVtZW50cyBJUHJvY2Vzc29ySmFyCi17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGx1Z2luSWQ7Ci0JcHJpdmF0ZSBmaW5hbCBJUGF0aCBwYXRoOwotCi0JcHVibGljIFBsdWdpblByb2Nlc3NvckphcihTdHJpbmcgcGx1Z2luSWQsIElQYXRoIHBhdGgpCi0JewotCQl0aGlzLnBsdWdpbklkID0gcGx1Z2luSWQ7Ci0JCXRoaXMucGF0aCA9IHBhdGg7Ci0JfQotCi0JcHVibGljIFVSTCBhc1VSTCgpCi0JewotCQlVUkwgdXJsID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCS8vIEZJWE1FIHZlcnkgY2x1bXN5IHdheSB0byBnZXQgbG9jYXRpb24gb3JiaXQgamFyIGZpbGUKLQkJCS8vIFRoZXJlIGlzIHN1cmVseSBhIGJldHRlciB3YXksIGJ1dCBJIGNhbidkIGZpbmQgaXQuCi0JCQlpZiAocGF0aCA9PSBudWxsKQotCQkJewotCQkJCXVybCA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5JZCkuZ2V0RW50cnkoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQkJCXVybCA9IEZpbGVMb2NhdG9yLnJlc29sdmUodXJsKTsKLQkJCQlTdHJpbmcgcyA9IHVybC5nZXRQYXRoKCk7Ci0JCQkJaWYgKHMuZW5kc1dpdGgoIiEvIikpIC8vJE5PTi1OTFMtMSQKLQkJCQl7Ci0JCQkJCXMgPSBzLnN1YnN0cmluZygwLHMubGVuZ3RoKCktMik7Ci0JCQkJfQotCQkJCXVybCA9IG5ldyBVUkwocyk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShwbHVnaW5JZCk7Ci0JCQkJSVBhdGggamFyUGF0aCA9IG5ldyBQYXRoKCIvIiArIHBhdGgpOyAvLyROT04tTkxTLTEkCi0JCQkJdXJsID0gRmlsZUxvY2F0b3IuZmluZChidW5kbGUsIGphclBhdGgsIG51bGwpOwotCQkJCWlmICh1cmwgIT0gbnVsbCkKLQkJCQkJdXJsID0gRmlsZUxvY2F0b3IucmVzb2x2ZSh1cmwpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCQlyZXR1cm4gdXJsOwotCX0KLQotCXB1YmxpYyBJUGF0aCBnZXRQYXRoKCkKLQl7Ci0JCXJldHVybiBwYXRoOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotCXsKLQkJcmV0dXJuICJQbHVnaW4gIiArIHBsdWdpbklkICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJQbHVnaW5Qcm9jZXNzb3JKYXIuMCIpICsgcGF0aDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmYxYmNhLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi0vKioKLSAqIENsYXNzIHVzZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWVzLgotICovCi1wdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKLXsKLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQotCXsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQpOwotCi0JCVByb2Nlc3NvclByZWZlcmVuY2VzIHByZWZzID0gbmV3IFByb2Nlc3NvclByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldERlZmF1bHRQcm9jZXNzb3JJZChKQVhQUnVudGltZS5KUkVfREVGQVVMVF9QUk9DRVNTT1JfSUQpOwotCi0JCU91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXMgb3V0cHV0UHJlZnMgPSBuZXcgT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcygpOwotCQlvdXRwdXRQcmVmcy5zZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhKQVhQUnVudGltZS5KUkVfREVGQVVMVF9QUk9DRVNTT1JfVFlQRV9JRCwgSkFYUFJ1bnRpbWUuY3JlYXRlRGVmYXVsdE91dHB1dFByb3BlcnRpZXMoSkFYUFJ1bnRpbWUuSlJFX0RFRkFVTFRfUFJPQ0VTU09SX1RZUEVfSUQpKTsKLQkJb3V0cHV0UHJlZnMuc2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuWEFMQU5fVFlQRV9JRCwgSkFYUFJ1bnRpbWUuY3JlYXRlRGVmYXVsdE91dHB1dFByb3BlcnRpZXMoSkFYUExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuWEFMQU5fVFlQRV9JRCkpOwotCQlvdXRwdXRQcmVmcy5zZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5TQVhPTl9UWVBFX0lELCBKQVhQUnVudGltZS5jcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5TQVhPTl9UWVBFX0lEKSk7Ci0JCW91dHB1dFByZWZzLnNldE91dHB1dFByb3BlcnR5VmFsdWVzKEpBWFBMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLlNBWE9OXzFfMF9UWVBFX0lELCBKQVhQUnVudGltZS5jcmVhdGVEZWZhdWx0T3V0cHV0UHJvcGVydGllcyhKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5TQVhPTl8xXzBfVFlQRV9JRCkpOwotCi0JCXRyeQotCQl7Ci0JCQlTdHJpbmcgeG1sID0gcHJlZnMuZ2V0QXNYTUwoKTsKLQkJCW5vZGUucHV0KEpBWFBSdW50aW1lLlBSRUZfUFJPQ0VTU09SX1hNTCwgeG1sKTsKLQotCQkJeG1sID0gb3V0cHV0UHJlZnMuZ2V0QXNYTUwoKTsKLQkJCW5vZGUucHV0KEpBWFBSdW50aW1lLlBSRUZfT1VUUFVUX1BST1BFUlRJRVNfWE1MLCB4bWwpOwotCi0JCQlub2RlLnB1dChKQVhQTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0RFRkFVTFRfREVCVUdHSU5HX0lOU1RBTExfSUQsICJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54YWxhbi5wcm9jZXNzb3IiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0JCXsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkKLQkJewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjkzYWQ5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JJbnZva2VyOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IgaW1wbGVtZW50cyBJUHJvY2Vzc29ySW52b2tlcgotewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgaW52b2tlckNsYXNzOwotCXByaXZhdGUgZmluYWwgU3RyaW5nW10gY2xhc3NwYXRoOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGlkOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGJ1bmRsZUlkOwotCi0JcHVibGljIFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKFN0cmluZyBpZCwgU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmcgaW52b2tlckNsYXNzLCBTdHJpbmdbXSBjbGFzc3BhdGgpCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDsKLQkJdGhpcy5pbnZva2VyQ2xhc3MgPSBpbnZva2VyQ2xhc3M7Ci0JCXRoaXMuY2xhc3NwYXRoID0gY2xhc3NwYXRoOwotCX0KLQotCXB1YmxpYyBTdHJpbmdbXSBnZXRDbGFzc3BhdGhFbnRyaWVzKCkKLQl7Ci0JCXJldHVybiBjcmVhdGVFbnRyaWVzKGJ1bmRsZUlkLGNsYXNzcGF0aCk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nW10gY3JlYXRlRW50cmllcyhTdHJpbmcgYnVuZGxlSWQsIFN0cmluZ1tdIGNsYXNzcGF0aCkKLQl7Ci0JCUxpc3Q8U3RyaW5nPiBlbnRyaWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCXRyeSB7Ci0JCQkvLyBpZiBpbiBkZXYgbW9kZSwgdXNlIHRoZSBiaW4gZGlyCi0JCQlpZiAoUGxhdGZvcm0uaW5EZXZlbG9wbWVudE1vZGUoKSkKLQkJCQllbnRyaWVzLmFkZChVdGlscy5nZXRGaWxlTG9jYXRpb24oYnVuZGxlSWQsICIvYmluIikpOyAvLyROT04tTkxTLTEkCi0JCQlmb3IgKFN0cmluZyBqYXIgOiBjbGFzc3BhdGgpCi0JCQl7Ci0JCQkJU3RyaW5nIGVudHJ5ID0gbnVsbDsKLQkJCQlpZiAoamFyLnN0YXJ0c1dpdGgoIiR7ZWNsaXBzZV9vcmJpdDoiKSAmJiBqYXIuZW5kc1dpdGgoIn0iKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCQkJewotCQkJCQlqYXIgPSBqYXIuc3Vic3RyaW5nKCIke2VjbGlwc2Vfb3JiaXQ6Ii5sZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJamFyID0gamFyLnN1YnN0cmluZygwLGphci5sZW5ndGgoKS0xKTsKLQkJCQkJdHJ5Ci0JCQkJCXsKLQkJCQkJCUZpbGUgYnVuZGxlRmlsZSA9IEZpbGVMb2NhdG9yLmdldEJ1bmRsZUZpbGUoUGxhdGZvcm0uZ2V0QnVuZGxlKGphcikpOwotCQkJCQkJaWYgKGJ1bmRsZUZpbGUuaXNEaXJlY3RvcnkoKSkKLQkJCQkJCQllbnRyeSA9IFV0aWxzLmdldFBsdWdpbkxvY2F0aW9uKGphcikgKyAiL2JpbiI7Ci0JCQkJCQllbHNlCi0JCQkJCQkJZW50cnkgPSBVdGlscy5nZXRQbHVnaW5Mb2NhdGlvbihqYXIpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQkJCQl7fQotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQllbnRyeSA9IFV0aWxzLmdldEZpbGVMb2NhdGlvbihidW5kbGVJZCxqYXIpOwotCQkJCX0KLQkJCQlpZiAoZW50cnkhPW51bGwpCi0JCQkJCWVudHJpZXMuYWRkKGVudHJ5KTsKLQkJCX0KLQkJfSAKLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgCi0JCXsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCXJldHVybiBlbnRyaWVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7Ci0JfQotCi0JLyoqCi0JICogVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBJUHJvY2Vzc29ySW52b2tlcgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0SW52b2tlckNsYXNzTmFtZSgpCi0JewotCQlyZXR1cm4gaW52b2tlckNsYXNzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JKYXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9Qcm9jZXNzb3JKYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxYzc2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29ySmFyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVByb2Nlc3NvckphcjsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvckphciBpbXBsZW1lbnRzIElQcm9jZXNzb3JKYXIKLXsKLQlwcml2YXRlIGZpbmFsIElQYXRoIHBhdGg7Ci0KLQlwdWJsaWMgUHJvY2Vzc29ySmFyKElQYXRoIHBhdGgpCi0JewotCQl0aGlzLnBhdGggPSBwYXRoOwotCX0KLQotCXB1YmxpYyBVUkwgYXNVUkwoKQotCXsKLQkJVVJMIHVybCA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQkvLyBmaXJzdCB0cnkgdG8gcmVzb2x2ZSBhcyB3b3Jrc3BhY2UtcmVsYXRpdmUgcGF0aAotCQkJSVBhdGggcm9vdFBhdGggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShyb290UGF0aC5hcHBlbmQocGF0aCkudG9PU1N0cmluZygpKTsKLQkJCWlmIChmaWxlLmV4aXN0cygpKQotCQkJCXVybCA9IGZpbGUudG9VUkwoKTsKLQkJCWVsc2UKLQkJCXsKLQkJCQkvLyBub3cgdHJ5IHRvIHJlc29sdmUgYXMgYW4gYWJzb2x1dGUgcGF0aAotCQkJCWZpbGUgPSBuZXcgRmlsZShwYXRoLnRvT1NTdHJpbmcoKSk7Ci0JCQkJdXJsID0gZmlsZS50b1VSTCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkJewotCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCX0KLQkJcmV0dXJuIHVybDsKLQl9Ci0KLQlwdWJsaWMgSVBhdGggZ2V0UGF0aCgpCi0JewotCQlyZXR1cm4gcGF0aDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLQl7Ci0JCXJldHVybiBwYXRoLnRvU3RyaW5nKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3NvclByZWZlcmVuY2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yUHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3MjI3OC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yUHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5Qcm9jZXNzb3JJbnN0YWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5QcmVmZXJlbmNlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFByb2Nlc3NvclByZWZlcmVuY2VzCi17Ci0JcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdFByb2Nlc3NvcklkOwotCXByaXZhdGUgTGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4gcHJvY2Vzc29ycyA9IG5ldyBBcnJheUxpc3Q8SVByb2Nlc3Nvckluc3RhbGw+KCk7Ci0KLQlwdWJsaWMgdm9pZCBzZXRQcm9jZXNzb3JzKExpc3Q8SVByb2Nlc3Nvckluc3RhbGw+IHByb2Nlc3NvcnMpCi0JewotCQl0aGlzLnByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzOwotCX0KLQotCXB1YmxpYyBMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiBnZXRQcm9jZXNzb3JzKCkKLQl7Ci0JCXJldHVybiBwcm9jZXNzb3JzOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFByb2Nlc3NvcklkKCkKLQl7Ci0JCXJldHVybiBkZWZhdWx0UHJvY2Vzc29ySWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdFByb2Nlc3NvcklkKFN0cmluZyBkZWZhdWx0UHJvY2Vzc29ySWQpCi0JewotCQl0aGlzLmRlZmF1bHRQcm9jZXNzb3JJZCA9IGRlZmF1bHRQcm9jZXNzb3JJZDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldEFzWE1MKCkgdGhyb3dzIFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoKTsKLQkJRWxlbWVudCBjb25maWcgPSBkb2MuY3JlYXRlRWxlbWVudCgicHJvY2Vzc29yU2V0dGluZ3MiKTsgIC8vJE5PTi1OTFMtMSQKLQkJZG9jLmFwcGVuZENoaWxkKGNvbmZpZyk7Ci0KLQkJLy8gU2V0IHRoZSBkZWZhdWx0Vk0gYXR0cmlidXRlIG9uIHRoZSB0b3AtbGV2ZWwgbm9kZQotCQlpZiAoZGVmYXVsdFByb2Nlc3NvcklkICE9IG51bGwpCi0JCXsKLQkJCWNvbmZpZy5zZXRBdHRyaWJ1dGUoImRlZmF1bHRQcm9jZXNzb3IiLCBkZWZhdWx0UHJvY2Vzc29ySWQpOyAgLy8kTk9OLU5MUy0xJAotCQl9Ci0KLQkJZm9yIChJdGVyYXRvcjxJUHJvY2Vzc29ySW5zdGFsbD4gaXRlciA9IHByb2Nlc3NvcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBpbnN0YWxsID0gKElQcm9jZXNzb3JJbnN0YWxsKSBpdGVyLm5leHQoKTsKLQkJCWlmICghaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpCi0JCQl7Ci0JCQkJRWxlbWVudCB2bVR5cGVFbGVtZW50ID0gaW5zdGFsbEFzRWxlbWVudChkb2MsIGluc3RhbGwpOwotCQkJCWNvbmZpZy5hcHBlbmRDaGlsZCh2bVR5cGVFbGVtZW50KTsKLQkJCX0KLQkJfQotCi0JCS8vIFNlcmlhbGl6ZSB0aGUgRG9jdW1lbnQgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIFN0cmluZwotCQlyZXR1cm4gUHJlZmVyZW5jZVV0aWwuc2VyaWFsaXplRG9jdW1lbnQoZG9jKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFByb2Nlc3NvclByZWZlcmVuY2VzIGZyb21YTUwoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlQcm9jZXNzb3JQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBQcm9jZXNzb3JQcmVmZXJlbmNlcygpOwotCi0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KGlucHV0U3RyZWFtKTsKLQkJRWxlbWVudCBjb25maWcgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJLy8gUG9wdWxhdGUgdGhlIGRlZmF1bHQgVk0tcmVsYXRlZCBmaWVsZHMKLQkJcHJlZnMuc2V0RGVmYXVsdFByb2Nlc3NvcklkKGNvbmZpZy5nZXRBdHRyaWJ1dGUoImRlZmF1bHRQcm9jZXNzb3IiKSk7IC8vJE5PTi1OTFMtMSQKLQotCQlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiBwcm9jZXNzb3JzID0gbmV3IEFycmF5TGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4oKTsKLQkJLy8gVHJhdmVyc2UgdGhlIHBhcnNlZCBzdHJ1Y3R1cmUgYW5kIHBvcHVsYXRlIHRoZSBWTVR5cGUgdG8gVk0gTWFwCi0JCUVsZW1lbnRbXSBwcm9jZXNzb3JFbHMgPSBQcmVmZXJlbmNlVXRpbC5nZXRDaGlsZEVsZW1lbnRzKGNvbmZpZywgInByb2Nlc3NvciIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2Vzc29yRWxzLmxlbmd0aDsgKytpKQotCQl7Ci0JCQlJUHJvY2Vzc29ySW5zdGFsbCBwcm9jZXNzb3IgPSBlbGVtZW50QXNJbnN0YWxsKHByb2Nlc3NvckVsc1tpXSk7Ci0JCQlwcm9jZXNzb3JzLmFkZChwcm9jZXNzb3IpOwotCQl9Ci0KLQkJcHJlZnMuc2V0UHJvY2Vzc29ycyhwcm9jZXNzb3JzKTsKLQotCQlyZXR1cm4gcHJlZnM7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2Nlc3Nvckluc3RhbGwgZWxlbWVudEFzSW5zdGFsbChFbGVtZW50IHBhcmVudCkKLQl7Ci0JCVN0cmluZyBpZCA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoImlkIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIGxhYmVsID0gcGFyZW50LmdldEF0dHJpYnV0ZSgibGFiZWwiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgdHlwZUlkID0gcGFyZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyBzdXBwb3J0cyA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoInN1cHBvcnRzIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIGRlYnVnZ2VySWQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJkZWJ1Z2dlcklkIik7IC8vJE5PTi1OTFMtMSQKLQotCQlJUHJvY2Vzc29ySmFyW10gamFycyA9IG51bGw7Ci0JCUVsZW1lbnRbXSBqYXJzRWxzID0gUHJlZmVyZW5jZVV0aWwuZ2V0Q2hpbGRFbGVtZW50cyhwYXJlbnQsICJqYXJzIik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGphcnNFbHMubGVuZ3RoID09IDEpCi0JCXsKLQkJCWphcnMgPSBlbGVtZW50QXNKYXJzKGphcnNFbHNbMF0pOwotCQl9Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSBuZXcgUHJvY2Vzc29ySW5zdGFsbChpZCwgbGFiZWwsIHR5cGVJZCwgamFycywgZGVidWdnZXJJZCwgc3VwcG9ydHMsIGZhbHNlKTsKLQkJcmV0dXJuIGluc3RhbGw7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRWxlbWVudCBpbnN0YWxsQXNFbGVtZW50KERvY3VtZW50IGRvYywgSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCJwcm9jZXNzb3IiKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCBpbnN0YWxsLmdldElkKCkpOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJsYWJlbCIsIGluc3RhbGwuZ2V0TmFtZSgpKTsgLy8kTk9OLU5MUy0xJAotCQllbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsIGluc3RhbGwuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldElkKCkpOyAvLyROT04tTkxTLTEkCi0JCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdXBwb3J0cyIsIGluc3RhbGwuZ2V0U3VwcG9ydHMoKSk7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRlYnVnZ2VySWQiLCBpbnN0YWxsLmdldERlYnVnZ2VyKCkgIT0gbnVsbCA/IGluc3RhbGwuZ2V0RGVidWdnZXIoKS5nZXRJZCgpIDogbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJZWxlbWVudC5hcHBlbmRDaGlsZChqYXJzQXNFbGVtZW50KGRvYywgaW5zdGFsbC5nZXRQcm9jZXNzb3JKYXJzKCkpKTsKLQkJcmV0dXJuIGVsZW1lbnQ7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVByb2Nlc3NvckphcltdIGVsZW1lbnRBc0phcnMoRWxlbWVudCBlbGVtZW50KQotCXsKLQkJRWxlbWVudFtdIGphckVscyA9IFByZWZlcmVuY2VVdGlsLmdldENoaWxkRWxlbWVudHMoZWxlbWVudCwgImphciIpOyAvLyROT04tTkxTLTEkCi0JCUxpc3Q8UHJvY2Vzc29ySmFyPiBqYXJzID0gbmV3IEFycmF5TGlzdDxQcm9jZXNzb3JKYXI+KGphckVscy5sZW5ndGgpOwotCQlmb3IgKEVsZW1lbnQgamFyRWwgOiBqYXJFbHMpCi0JCXsKLQkJCU5vZGUgbm9kZSA9IGphckVsLmdldEZpcnN0Q2hpbGQoKTsKLQkJCWlmIChub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuVEVYVF9OT0RFKQotCQkJewotCQkJCVN0cmluZyBwYXRoID0gKChUZXh0KSBub2RlKS5nZXROb2RlVmFsdWUoKTsKLQkJCQlqYXJzLmFkZChuZXcgUHJvY2Vzc29ySmFyKFBhdGguZnJvbVBvcnRhYmxlU3RyaW5nKHBhdGgpKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChJUHJvY2Vzc29ySmFyW10pIGphcnMudG9BcnJheShuZXcgSVByb2Nlc3NvckphclswXSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgRWxlbWVudCBqYXJzQXNFbGVtZW50KERvY3VtZW50IGRvYywgSVByb2Nlc3NvckphcltdIGphcnMpCi0JewotCQlFbGVtZW50IGphcnNFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJqYXJzIik7ICAvLyROT04tTkxTLTEkCi0JCWZvciAoSVByb2Nlc3NvckphciBqYXIgOiBqYXJzKQotCQl7Ci0JCQlpZiAoamFyICE9IG51bGwgJiYgamFyLmdldFBhdGgoKSAhPSBudWxsKQotCQkJewotCQkJCUVsZW1lbnQgamFyRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiamFyIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlUZXh0IHRleHQgPSBkb2MuY3JlYXRlVGV4dE5vZGUoamFyLmdldFBhdGgoKS50b1BvcnRhYmxlU3RyaW5nKCkpOwotCQkJCWphckVsLmFwcGVuZENoaWxkKHRleHQpOwotCQkJCWphcnNFbC5hcHBlbmRDaGlsZChqYXJFbCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGphcnNFbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yVHlwZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL1Byb2Nlc3NvclR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEzNjkyOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvUHJvY2Vzc29yVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklPdXRwdXRQcm9wZXJ0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yVHlwZSBpbXBsZW1lbnRzIElQcm9jZXNzb3JUeXBlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NfU1VGRklYID0gIi5ERVNDIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUWVBFX1NVRkZJWCA9ICIuVFlQRSI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGlkOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0JcHJpdmF0ZSBmaW5hbCBJVHJhbnNmb3JtZXJGYWN0b3J5W10gdHJhbnNmb3JtZXJGYWN0b3JpZXM7Ci0JcHJpdmF0ZSBmaW5hbCBVUkwgYXR0cmlidXRlUHJvcGVydGllc1VSTDsKLQlwcml2YXRlIGZpbmFsIFVSTCBvdXRwdXRQcm9wZXJ0aWVzVVJMOwotCi0JcHJpdmF0ZSBJQXR0cmlidXRlW10gYXR0cmlidXRlczsKLQlwcml2YXRlIElPdXRwdXRQcm9wZXJ0eVtdIG91dHB1dFByb3BlcnRpZXM7Ci0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBTdHJpbmc+IG91dHB1dFByb3BlcnR5VmFsdWVzOwotCXByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVWYWx1ZXM7Ci0KLQlwdWJsaWMgUHJvY2Vzc29yVHlwZShTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBVUkwgYXR0cmlidXRlUHJvcGVydGllc1VSTCwgVVJMIG91dHB1dFByb3BlcnRpZXNVUkwsIE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cmlidXRlVmFsdWVzLCBNYXA8U3RyaW5nLCBTdHJpbmc+IG91dHB1dFByb3BlcnR5VmFsdWVzLCBJVHJhbnNmb3JtZXJGYWN0b3J5W10gdHJhbnNmb3JtZXJGYWN0b3JpZXMpCi0JewotCQl0aGlzLmlkID0gaWQ7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JCXRoaXMuYXR0cmlidXRlUHJvcGVydGllc1VSTCA9IGF0dHJpYnV0ZVByb3BlcnRpZXNVUkw7Ci0JCXRoaXMub3V0cHV0UHJvcGVydGllc1VSTCA9IG91dHB1dFByb3BlcnRpZXNVUkw7Ci0JCXRoaXMuYXR0cmlidXRlVmFsdWVzID0gYXR0cmlidXRlVmFsdWVzOwotCQl0aGlzLnRyYW5zZm9ybWVyRmFjdG9yaWVzID0gdHJhbnNmb3JtZXJGYWN0b3JpZXM7Ci0JCXRoaXMub3V0cHV0UHJvcGVydHlWYWx1ZXMgPSBvdXRwdXRQcm9wZXJ0eVZhbHVlczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldElkKCkKLQl7Ci0JCXJldHVybiBpZDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldExhYmVsKCkKLQl7Ci0JCXJldHVybiBuYW1lOwotCX0KLQotCXB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldEF0dHJpYnV0ZVZhbHVlcygpCi0JewotCQlyZXR1cm4gYXR0cmlidXRlVmFsdWVzOwotCX0KLQotCXB1YmxpYyBJQXR0cmlidXRlW10gZ2V0QXR0cmlidXRlcygpCi0JewotCQlpZiAoYXR0cmlidXRlcyA9PSBudWxsKQotCQl7Ci0JCQlpZiAoYXR0cmlidXRlUHJvcGVydGllc1VSTCAhPSBudWxsKQotCQkJCWF0dHJpYnV0ZXMgPSBsb2FkQXR0cmlidXRlcygpOwotCQkJZWxzZQotCQkJCWF0dHJpYnV0ZXMgPSBuZXcgSUF0dHJpYnV0ZVswXTsKLQkJfQotCQlyZXR1cm4gYXR0cmlidXRlczsKLQl9Ci0KLQlwdWJsaWMgTWFwPFN0cmluZyxTdHJpbmc+IGdldE91dHB1dFByb3BlcnR5VmFsdWVzKCkKLQl7Ci0JCXJldHVybiBvdXRwdXRQcm9wZXJ0eVZhbHVlczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0pSRURlZmF1bHQoKQotCXsKLQkJcmV0dXJuIEpBWFBSdW50aW1lLkpSRV9ERUZBVUxUX1BST0NFU1NPUl9UWVBFX0lELmVxdWFscyhpZCk7Ci0JfQotCi0JcHVibGljIElUcmFuc2Zvcm1lckZhY3RvcnlbXSBnZXRUcmFuc2Zvcm1lckZhY3RvcmllcygpCi0JewotCQlyZXR1cm4gdHJhbnNmb3JtZXJGYWN0b3JpZXM7Ci0JfQotCQotCXB1YmxpYyBJVHJhbnNmb3JtZXJGYWN0b3J5IGdldERlZmF1bHRUcmFuc2Zvcm1lckZhY3RvcnkoKQotCXsKLQkJaWYgKHRyYW5zZm9ybWVyRmFjdG9yaWVzLmxlbmd0aCA+IDApCi0JCQlyZXR1cm4gdHJhbnNmb3JtZXJGYWN0b3JpZXNbMF07Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBJT3V0cHV0UHJvcGVydHlbXSBnZXRPdXRwdXRQcm9wZXJ0aWVzKCkKLQl7Ci0JCWlmIChvdXRwdXRQcm9wZXJ0aWVzID09IG51bGwpCi0JCXsKLQkJCWlmIChvdXRwdXRQcm9wZXJ0aWVzVVJMICE9IG51bGwpCi0JCQkJb3V0cHV0UHJvcGVydGllcyA9IGxvYWRPdXRwdXRQcm9wZXJ0aWVzKCk7Ci0JCQllbHNlCi0JCQkJb3V0cHV0UHJvcGVydGllcyA9IG5ldyBJT3V0cHV0UHJvcGVydHlbMF07Ci0JCX0KLQkJcmV0dXJuIG91dHB1dFByb3BlcnRpZXM7Ci0JfQotCi0JcHJpdmF0ZSBJT3V0cHV0UHJvcGVydHlbXSBsb2FkT3V0cHV0UHJvcGVydGllcygpCi0JewotCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbnVsbDsKLQkJTGlzdDxPdXRwdXRQcm9wZXJ0eT4gb3V0cHV0cyA9IG5ldyBBcnJheUxpc3Q8T3V0cHV0UHJvcGVydHk+KCk7Ci0JCVByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCQl0cnkKLQkJewotCi0JCQlpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG91dHB1dFByb3BlcnRpZXNVUkwub3BlblN0cmVhbSgpKTsKLQkJCXByb3BzLmxvYWQoaXMpOwotCQkJZm9yIChPYmplY3QgZWxlbWVudCA6IHByb3BzLmtleVNldCgpKQotCQkJewotCQkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBlbGVtZW50OwotCQkJCWlmICgha2V5LmVuZHNXaXRoKERFU0NfU1VGRklYKSkKLQkJCQl7Ci0JCQkJCVN0cmluZyBuYW1lID0ga2V5OwotCQkJCQlTdHJpbmcgdXJpID0gcHJvcHMuZ2V0UHJvcGVydHkoa2V5KTsKLQkJCQkJU3RyaW5nIGRlc2MgPSBwcm9wcy5nZXRQcm9wZXJ0eShrZXkgKyBERVNDX1NVRkZJWCk7Ci0JCQkJCWlmICh1cmkgIT0gbnVsbCAmJiBuYW1lICE9IG51bGwgJiYgZGVzYyAhPSBudWxsKQotCQkJCQl7Ci0JCQkJCQlPdXRwdXRQcm9wZXJ0eSBwcm9wID0gbmV3IE91dHB1dFByb3BlcnR5KHVyaS50cmltKCksIGRlc2MpOwotCQkJCQkJb3V0cHV0cy5hZGQocHJvcCk7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIE1lc3NhZ2VzLmdldFN0cmluZygiUHJvY2Vzc29yVHlwZS4yIikgKyBvdXRwdXRQcm9wZXJ0aWVzVVJMIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQkJKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlByb2Nlc3NvclR5cGUuMyIpICsga2V5KSkpOyAvLyROT04tTkxTLTEkCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJaWYgKGlzICE9IG51bGwpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlpcy5jbG9zZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gKElPdXRwdXRQcm9wZXJ0eVtdKSBvdXRwdXRzLnRvQXJyYXkobmV3IElPdXRwdXRQcm9wZXJ0eVswXSk7Ci0JfQotCi0JcHJpdmF0ZSBJQXR0cmlidXRlW10gbG9hZEF0dHJpYnV0ZXMoKQotCXsKLQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JCUxpc3Q8QXR0cmlidXRlPiBhdHRyaWJ1dGVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8QXR0cmlidXRlPigpOwotCQl0cnkKLQkJewotCQkJaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShhdHRyaWJ1dGVQcm9wZXJ0aWVzVVJMLm9wZW5TdHJlYW0oKSk7Ci0JCQlQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJCXByb3BzLmxvYWQoaXMpOwotCi0JCQlmb3IgKE9iamVjdCBlbGVtZW50IDogcHJvcHMua2V5U2V0KCkpCi0JCQl7Ci0JCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGVsZW1lbnQ7Ci0JCQkJaWYgKCFrZXkuZW5kc1dpdGgoREVTQ19TVUZGSVgpICYmICFrZXkuZW5kc1dpdGgoVFlQRV9TVUZGSVgpKQotCQkJCXsKLQkJCQkJU3RyaW5nIHVyaSA9IHByb3BzLmdldFByb3BlcnR5KGtleSk7Ci0JCQkJCVN0cmluZyB0eXBlID0gcHJvcHMuZ2V0UHJvcGVydHkoa2V5ICsgVFlQRV9TVUZGSVgpOwotCQkJCQlTdHJpbmcgZGVzYyA9IHByb3BzLmdldFByb3BlcnR5KGtleSArIERFU0NfU1VGRklYKTsKLQkJCQkJaWYgKHVyaSAhPSBudWxsICYmIHR5cGUgIT0gbnVsbCAmJiBkZXNjICE9IG51bGwpCi0JCQkJCXsKLQkJCQkJCUF0dHJpYnV0ZSBhdHRyaWJ1dGUgPSBuZXcgQXR0cmlidXRlKHVyaS50cmltKCksIHR5cGUudHJpbSgpLCBkZXNjKTsKLQkJCQkJCWF0dHJpYnV0ZXNMaXN0LmFkZChhdHRyaWJ1dGUpOwotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2cobmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBNZXNzYWdlcy5nZXRTdHJpbmcoIlByb2Nlc3NvclR5cGUuNCIpICsgYXR0cmlidXRlUHJvcGVydGllc1VSTCAvLyROT04tTkxTLTEkCi0JCQkJCQkJCSsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJQcm9jZXNzb3JUeXBlLjUiKSArIGtleSkpKTsgLy8kTk9OLU5MUy0xJAotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JCWZpbmFsbHkKLQkJewotCQkJaWYgKGlzICE9IG51bGwpCi0JCQl7Ci0JCQkJdHJ5Ci0JCQkJewotCQkJCQlpcy5jbG9zZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlJQXR0cmlidXRlW10gYXR0cmlidXRlcyA9IChJQXR0cmlidXRlW10pIGF0dHJpYnV0ZXNMaXN0LnRvQXJyYXkobmV3IElBdHRyaWJ1dGVbMF0pOwotCQlBcnJheXMuc29ydChhdHRyaWJ1dGVzKTsKLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9UcmFuc2Zvcm1lckZhY3RvcnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9UcmFuc2Zvcm1lckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA0OWQ0Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVHJhbnNmb3JtZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklUcmFuc2Zvcm1lckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBUcmFuc2Zvcm1lckZhY3RvcnkgaW1wbGVtZW50cyBJVHJhbnNmb3JtZXJGYWN0b3J5Ci17Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmFjdG9yeUNsYXNzOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0JCi0JcHVibGljIFRyYW5zZm9ybWVyRmFjdG9yeShTdHJpbmcgbmFtZSxTdHJpbmcgZmFjdG9yeUNsYXNzKQotCXsKLQkJc3VwZXIoKTsKLQkJdGhpcy5mYWN0b3J5Q2xhc3MgPSBmYWN0b3J5Q2xhc3M7Ci0JCXRoaXMubmFtZSA9IG5hbWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRGYWN0b3J5Q2xhc3MoKQotCXsKLQkJcmV0dXJuIGZhY3RvcnlDbGFzczsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotCXsKLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTJlYmM0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1wdWJsaWMgY2xhc3MgVXRpbHMKLXsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEZpbGVMb2NhdGlvbihTdHJpbmcgYnVuZGxlSWQsIFN0cmluZyBwYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBGaWxlTG9jYXRvci5maW5kKFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVJZCksIG5ldyBQYXRoKHBhdGgpLCBudWxsKTsKLQkJCWlmICh1cmwgIT0gbnVsbCkKLQkJCXsKLQkJCQlVUkwgZmlsZVVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbGVVcmwuZ2V0RmlsZSgpKTsKLQkJCQlsb2NhdGlvbiA9IGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIElTdGF0dXMuRVJST1IsIE1lc3NhZ2VzLmdldFN0cmluZygiVXRpbHMuMCIpICsgcGF0aCArIE1lc3NhZ2VzLmdldFN0cmluZygiVXRpbHMuMSIpICsgYnVuZGxlSWQsIGUpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0JCX0gCi0JCXJldHVybiBsb2NhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQbHVnaW5Mb2NhdGlvbihTdHJpbmcgYnVuZGxlSWQpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgbG9jYXRpb24gPSBudWxsOwotCQl0cnkKLQkJewotCQkJVVJMIHVybCA9IG5ldyBVUkwoInBsYXRmb3JtOi9wbHVnaW4vIitidW5kbGVJZCk7Ci0JCQlpZiAodXJsICE9IG51bGwpCi0JCQl7Ci0JCQkJVVJMIGZpbGVVcmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlVXJsLmdldEZpbGUoKSk7Ci0JCQkJbG9jYXRpb24gPSBmaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5nZXRTdHJpbmcoIlV0aWxzLjAiKSArIGJ1bmRsZUlkICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJVdGlscy4xIikgKyBidW5kbGVJZCwgZSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfSAKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRmMmFmMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLUF0dHJpYnV0ZS4wPVZhbHVlIG11c3QgYmUgYSBkb3VibGUKLUF0dHJpYnV0ZS4xPVZhbHVlIG11c3QgYmUgYW4gaW50ZWdlcgotQXR0cmlidXRlLjI9VmFsaWQgdmFsdWVzIGFyZSAndHJ1ZScgb3IgJ2ZhbHNlJwotQXR0cmlidXRlLjU9VmFsdWUgbXVzdCBiZSBhIGZsb2F0Ci1QbHVnaW5Qcm9jZXNzb3JKYXIuMD0sIHBhdGggCi1Qcm9jZXNzb3JUeXBlLjI9T3V0cHV0IHByb3BlcnRpZXMgZmlsZSAKLVByb2Nlc3NvclR5cGUuMz1cIG5vdCBjb25maWd1cmVkIHByb3Blcmx5IGZvciBrZXkgCi1Qcm9jZXNzb3JUeXBlLjQ9QXR0cmlidXRlIHByb3BlcnRpZXMgZmlsZSAKLVByb2Nlc3NvclR5cGUuNT1cIG5vdCBjb25maWd1cmVkIHByb3Blcmx5IGZvciBrZXkgCi1VdGlscy4wPUVycm9yIGRldGVybWluaW5nIGphciBmaWxlIGxvY2F0aW9uOiAKLVV0aWxzLjE9XCBmcm9tIGJ1bmRsZTogCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLjA9U3dpdGNoIHRvIERlZmF1bHQgRGVidWdnZXIKLVhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUuMT1UaGUgCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLjI9XCBYU0xUIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IGRlYnVnZ2luZy5cbgotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS4yMz1Db3VsZCBub3QgbG9jYXRlIGphciBmaWxlIAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS4zPVdvdWxkIHlvdSBsaWtlIHRvIGRlYnVnIHVzaW5nIHRoZSBkZWZhdWx0IAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS4zMT1cIHRvIAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS40PVwgcHJvY2Vzc29yIGluc3RlYWQ/Ci1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLjU9bGF1bmNoCi1YU0xUTGF1bmNoQ29uZmlndXJhdGlvbkRlbGVnYXRlLjY9bGF1bmNoLnhtbAotWFNMVExhdW5jaENvbmZpZ3VyYXRpb25EZWxlZ2F0ZS43PUVycm9yIGNvcHlpbmcgdXJsIApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0Fic3RyYWN0UmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMzgwMmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0Fic3RyYWN0UmVnaXN0cnlSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmVnaXN0cnlSZWFkZXIKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1MgPSAiY2xhc3MiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0RFU0NSSVBUSU9OID0gImRlc2NyaXB0aW9uIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgdGV4dCkKLQl7Ci0JCUlFeHRlbnNpb24gZXh0ZW5zaW9uID0gZWxlbWVudC5nZXREZWNsYXJpbmdFeHRlbnNpb24oKTsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYnVmLmFwcGVuZCgiUGx1Z2luICIgKyBleHRlbnNpb24uZ2V0TmFtZXNwYWNlSWRlbnRpZmllcigpICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyLjMiKSArIGV4dGVuc2lvbi5nZXRFeHRlbnNpb25Qb2ludFVuaXF1ZUlkZW50aWZpZXIoKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQlidWYuYXBwZW5kKCJcbiIgKyB0ZXh0KTsgLy8kTk9OLU5MUy0xJAotCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLk9LLCBidWYudG9TdHJpbmcoKSwgbnVsbCkpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nTWlzc2luZ0F0dHJpYnV0ZShJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGF0dHJpYnV0ZU5hbWUpCi0JewotCQlsb2dFcnJvcihlbGVtZW50LCBNZXNzYWdlcy5nZXRTdHJpbmcoIkFic3RyYWN0UmVnaXN0cnlSZWFkZXIuNSIpICsgYXR0cmlidXRlTmFtZSArIE1lc3NhZ2VzLmdldFN0cmluZygiQWJzdHJhY3RSZWdpc3RyeVJlYWRlci42IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nTWlzc2luZ0VsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQsIFN0cmluZyBlbGVtZW50TmFtZSkKLQl7Ci0JCWxvZ0Vycm9yKGVsZW1lbnQsIE1lc3NhZ2VzLmdldFN0cmluZygiQWJzdHJhY3RSZWdpc3RyeVJlYWRlci43IikgKyBlbGVtZW50TmFtZSArIE1lc3NhZ2VzLmdldFN0cmluZygiQWJzdHJhY3RSZWdpc3RyeVJlYWRlci44IikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgbG9nVW5rbm93bkVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlsb2dFcnJvcihlbGVtZW50LCBNZXNzYWdlcy5nZXRTdHJpbmcoIkFic3RyYWN0UmVnaXN0cnlSZWFkZXIuOSIpICsgZWxlbWVudC5nZXROYW1lKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHN0YXRpYyBJRXh0ZW5zaW9uW10gb3JkZXJFeHRlbnNpb25zKElFeHRlbnNpb25bXSBleHRlbnNpb25zKQotCXsKLQkJSUV4dGVuc2lvbltdIHNvcnRlZEV4dGVuc2lvbiA9IG5ldyBJRXh0ZW5zaW9uW2V4dGVuc2lvbnMubGVuZ3RoXTsKLQkJU3lzdGVtLmFycmF5Y29weShleHRlbnNpb25zLCAwLCBzb3J0ZWRFeHRlbnNpb24sIDAsIGV4dGVuc2lvbnMubGVuZ3RoKTsKLQkJQ29tcGFyYXRvcjxJRXh0ZW5zaW9uPiBjb21wYXJlciA9IG5ldyBDb21wYXJhdG9yPElFeHRlbnNpb24+KCkKLQkJewotCQkJcHVibGljIGludCBjb21wYXJlKElFeHRlbnNpb24gYXJnMCwgSUV4dGVuc2lvbiBhcmcxKQotCQkJewotCQkJCVN0cmluZyBzMSA9IGFyZzAuZ2V0TmFtZXNwYWNlSWRlbnRpZmllcigpOwotCQkJCVN0cmluZyBzMiA9IGFyZzEuZ2V0TmFtZXNwYWNlSWRlbnRpZmllcigpOwotCQkJCXJldHVybiBzMS5jb21wYXJlVG9JZ25vcmVDYXNlKHMyKTsKLQkJCX0KLQkJfTsKLQkJQ29sbGVjdGlvbnMuc29ydChBcnJheXMuYXNMaXN0KHNvcnRlZEV4dGVuc2lvbiksIGNvbXBhcmVyKTsKLQkJcmV0dXJuIHNvcnRlZEV4dGVuc2lvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiByZWFkRWxlbWVudChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCk7Ci0KLQlwcm90ZWN0ZWQgdm9pZCByZWFkRWxlbWVudENoaWxkcmVuKElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJcmVhZEVsZW1lbnRzKGVsZW1lbnQuZ2V0Q2hpbGRyZW4oKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgcmVhZEVsZW1lbnRzKElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzKQotCXsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLQkJewotCQkJaWYgKCFyZWFkRWxlbWVudChlbGVtZW50c1tpXSkpCi0JCQkJbG9nVW5rbm93bkVsZW1lbnQoZWxlbWVudHNbaV0pOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgcmVhZEV4dGVuc2lvbihJRXh0ZW5zaW9uIGV4dGVuc2lvbikKLQl7Ci0JCXJlYWRFbGVtZW50cyhleHRlbnNpb24uZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRSZWdpc3RyeShJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnksIFN0cmluZyBwbHVnaW5JZCwgU3RyaW5nIGV4dGVuc2lvblBvaW50KQotCXsKLQkJSUV4dGVuc2lvblBvaW50IHBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQocGx1Z2luSWQsIGV4dGVuc2lvblBvaW50KTsKLQkJaWYgKHBvaW50ID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCUlFeHRlbnNpb25bXSBleHRlbnNpb25zID0gcG9pbnQuZ2V0RXh0ZW5zaW9ucygpOwotCQlleHRlbnNpb25zID0gb3JkZXJFeHRlbnNpb25zKGV4dGVuc2lvbnMpOwotCQlmb3IgKElFeHRlbnNpb24gZWxlbWVudCA6IGV4dGVuc2lvbnMpCi0JCQlyZWFkRXh0ZW5zaW9uKGVsZW1lbnQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KQotCXsKLQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gY2hpbGRyZW4gPSBjb25maWdFbGVtZW50LmdldENoaWxkcmVuKFRBR19ERVNDUklQVElPTik7Ci0JCWlmIChjaGlsZHJlbi5sZW5ndGggPj0gMSkKLQkJewotCQkJcmV0dXJuIGNoaWxkcmVuWzBdLmdldFZhbHVlKCk7Ci0JCX0KLQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q2xhc3NWYWx1ZShJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCwgU3RyaW5nIGNsYXNzQXR0cmlidXRlTmFtZSkKLQl7Ci0JCVN0cmluZyBjbGFzc05hbWUgPSBjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZShjbGFzc0F0dHJpYnV0ZU5hbWUpOwotCQlpZiAoY2xhc3NOYW1lICE9IG51bGwpCi0JCQlyZXR1cm4gY2xhc3NOYW1lOwotCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjYW5kaWRhdGVDaGlsZHJlbiA9IGNvbmZpZ0VsZW1lbnQuZ2V0Q2hpbGRyZW4oY2xhc3NBdHRyaWJ1dGVOYW1lKTsKLQkJaWYgKGNhbmRpZGF0ZUNoaWxkcmVuLmxlbmd0aCA9PSAwKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJcmV0dXJuIGNhbmRpZGF0ZUNoaWxkcmVuWzBdLmdldEF0dHJpYnV0ZShBVFRfQ0xBU1MpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvRGVidWdnZXJSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0RlYnVnZ2VyUmVnaXN0cnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxNDJhYi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvRGVidWdnZXJSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklEZWJ1Z2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkRlYnVnZ2VyRGVzY3JpcHRvcjsKLQotcHVibGljIGNsYXNzIERlYnVnZ2VyUmVnaXN0cnkKLXsKLQlwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIERlYnVnZ2VyRGVzY3JpcHRvcj4gZGVidWdnZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEZWJ1Z2dlckRlc2NyaXB0b3I+KCk7Ci0KLQlwdWJsaWMgRGVidWdnZXJSZWdpc3RyeSgpCi0JewotCQlEZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyIHJlZ2lzdHJ5UmVhZGVyID0gbmV3IERlYnVnZ2VyUmVnaXN0cnlSZWFkZXIoKTsKLQkJcmVnaXN0cnlSZWFkZXIuYWRkQ29uZmlncyh0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgSURlYnVnZ2VyIGdldERlYnVnZ2VyKFN0cmluZyBpZCkKLQl7Ci0JCXJldHVybiAoSURlYnVnZ2VyKSBkZWJ1Z2dlcnMuZ2V0KGlkKTsKLQl9Ci0KLQlwdWJsaWMgSURlYnVnZ2VyW10gZ2V0RGVidWdnZXJzKCkKLQl7Ci0JCXJldHVybiAoSURlYnVnZ2VyW10pIGRlYnVnZ2Vycy52YWx1ZXMoKS50b0FycmF5KG5ldyBJRGVidWdnZXJbMF0pOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZERlYnVnZ2VyKERlYnVnZ2VyRGVzY3JpcHRvciBkZXNjKQotCXsKLQkJZGVidWdnZXJzLnB1dChkZXNjLmdldElkKCksIGRlc2MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvRGVidWdnZXJSZWdpc3RyeVJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGI5ZWU4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9EZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkRlYnVnZ2VyRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBEZWJ1Z2dlclJlZ2lzdHJ5UmVhZGVyIGV4dGVuZHMgQWJzdHJhY3RSZWdpc3RyeVJlYWRlcgotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19ERUJVR0dFUiA9ICJkZWJ1Z2dlciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTTkFNRSA9ICJjbGFzc05hbWUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0NMQVNTUEFUSCA9ICJjbGFzc3BhdGgiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX05BTUUgPSAibmFtZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfUFJPQ0VTU09SX1RZUEVfSUQgPSAicHJvY2Vzc29yVHlwZUlkIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZID0gInRyYW5zZm9ybWVyRmFjdG9yeUNsYXNzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBEZWJ1Z2dlclJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlpZiAoIWVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhUQUdfREVCVUdHRVIpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9JRCk7Ci0JCWlmIChpZCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9JRCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBjbGFzc05hbWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1NOQU1FKTsKLQkJaWYgKGNsYXNzTmFtZSA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9DTEFTU05BTUUpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgY2xhc3NwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTUEFUSCk7Ci0JCWlmIChjbGFzc3BhdGggPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfQ0xBU1NQQVRIKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nW10gZW50cmllcyA9IGNsYXNzcGF0aC5zcGxpdCgiOyIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykKLQkJewotCQkJU3RyaW5nIHN0cmluZyA9IGVudHJpZXNbaV07Ci0JCQllbnRyaWVzW2ldID0gc3RyaW5nLnRyaW0oKTsKLQkJfQotCi0JCVN0cmluZyBuYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX05BTUUpOwotCQlpZiAobmFtZSA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9OQU1FKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIHByb2Nlc3NvclR5cGVJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9QUk9DRVNTT1JfVFlQRV9JRCk7Ci0JCWlmIChwcm9jZXNzb3JUeXBlSWQgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfUFJPQ0VTU09SX1RZUEVfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJU3RyaW5nIHRGYWN0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX1RSQU5TRk9STUVSX0ZBQ1RPUlkpOwotCi0JCXJlZ2lzdHJ5LmFkZERlYnVnZ2VyKG5ldyBEZWJ1Z2dlckRlc2NyaXB0b3IoaWQsIGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCksIGNsYXNzTmFtZSwgZW50cmllcywgbmFtZSwgcHJvY2Vzc29yVHlwZUlkLCB0RmFjdCkpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRFbGVtZW50KERlYnVnZ2VyUmVnaXN0cnkgcmVnaXN0cnksIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQlyZWFkRWxlbWVudChlbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRDb25maWdzKERlYnVnZ2VyUmVnaXN0cnkgcmVnaXN0cnkpCi0JewotCQlJRXh0ZW5zaW9uUmVnaXN0cnkgZXh0ZW5zaW9uUmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOwotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRSZWdpc3RyeShleHRlbnNpb25SZWdpc3RyeSwgSkFYUExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsICJkZWJ1Z2dlciIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0ludm9rZXJSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L0ludm9rZXJSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTQwOTE2Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9JbnZva2VyUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW52b2tlcjsKLQotcHVibGljIGNsYXNzIEludm9rZXJSZWdpc3RyeQotewotCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgSVByb2Nlc3Nvckludm9rZXI+IGludm9rZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJUHJvY2Vzc29ySW52b2tlcj4oKTsKLQotCXB1YmxpYyBJbnZva2VyUmVnaXN0cnkoKQotCXsKLQkJSW52b2tlclJlZ2lzdHJ5UmVhZGVyIHJlZ2lzdHJ5UmVhZGVyID0gbmV3IEludm9rZXJSZWdpc3RyeVJlYWRlcigpOwotCQlyZWdpc3RyeVJlYWRlci5hZGRDb25maWdzKHRoaXMpOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW52b2tlciBnZXRQcm9jZXNzb3JJbnZva2VyKFN0cmluZyBpZCkKLQl7Ci0JCXJldHVybiAoSVByb2Nlc3Nvckludm9rZXIpIGludm9rZXJzLmdldChpZCk7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnZva2VyW10gZ2V0UHJvY2Vzc29ySW52b2tlcnMoKQotCXsKLQkJcmV0dXJuIChJUHJvY2Vzc29ySW52b2tlcltdKSBpbnZva2Vycy52YWx1ZXMoKS50b0FycmF5KG5ldyBJUHJvY2Vzc29ySW52b2tlclswXSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkSW52b2tlckRlc2NyaXB0b3IoSVByb2Nlc3Nvckludm9rZXIgZGVzYykKLQl7Ci0JCWludm9rZXJzLnB1dChkZXNjLmdldElkKCksIGRlc2MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9JbnZva2VyUmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9JbnZva2VyUmVnaXN0cnlSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllNjEzNy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvSW52b2tlclJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JJbnZva2VyRGVzY3JpcHRvcjsKLQotcHVibGljIGNsYXNzIEludm9rZXJSZWdpc3RyeVJlYWRlciBleHRlbmRzIEFic3RyYWN0UmVnaXN0cnlSZWFkZXIKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfSU5WT0tFID0gImludm9rZXIiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0lEID0gImlkIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9DTEFTUyA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1NQQVRIID0gImNsYXNzcGF0aCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgSW52b2tlclJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlpZiAoIWVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhUQUdfSU5WT0tFKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfSUQpOwotCQlpZiAoaWQgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgY2xhc3NuYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTKTsKLQkJaWYgKGNsYXNzbmFtZSA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9DTEFTUyk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBjbGFzc3BhdGggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQ0xBU1NQQVRIKTsKLQkJaWYgKGNsYXNzcGF0aCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9DTEFTU1BBVEgpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmdbXSBlbnRyaWVzID0gY2xhc3NwYXRoLnNwbGl0KCI7Iik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotCQl7Ci0JCQlTdHJpbmcgc3RyaW5nID0gZW50cmllc1tpXTsKLQkJCWVudHJpZXNbaV0gPSBzdHJpbmcudHJpbSgpOwotCQl9Ci0KLQkJcmVnaXN0cnkuYWRkSW52b2tlckRlc2NyaXB0b3IobmV3IFByb2Nlc3Nvckludm9rZXJEZXNjcmlwdG9yKGlkLCBlbGVtZW50LmdldENvbnRyaWJ1dG9yKCkuZ2V0TmFtZSgpLCBjbGFzc25hbWUsIGVudHJpZXMpKTsKLQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZWFkRWxlbWVudChJbnZva2VyUmVnaXN0cnkgcmVnaXN0cnksIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQlyZWFkRWxlbWVudChlbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRDb25maWdzKEludm9rZXJSZWdpc3RyeSByZWdpc3RyeSkKLQl7Ci0JCUlFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZFJlZ2lzdHJ5KGV4dGVuc2lvblJlZ2lzdHJ5LCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgImludm9rZSIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhjOGViOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5Lm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKLQkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOwotCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgewotCQl0cnkgewotCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yUmVnaXN0cnkuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTdlZTI1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5JUHJvY2Vzc29ySW5zdGFsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JKYXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5KQVhQUnVudGltZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLlByb2Nlc3Nvckluc3RhbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuUHJvY2Vzc29yUHJlZmVyZW5jZXM7Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JSZWdpc3RyeQotewotCXByaXZhdGUgZmluYWwgTGlzdDxQcm9jZXNzb3JJbnN0YWxsPiBjb250cmlidXRlZEluc3RhbGxzID0gbmV3IEFycmF5TGlzdDxQcm9jZXNzb3JJbnN0YWxsPigpOwotCXByaXZhdGUgTGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4gdXNlckluc3RhbGxzID0gbmV3IEFycmF5TGlzdDxJUHJvY2Vzc29ySW5zdGFsbD4oKTsKLQlwcml2YXRlIElQcm9jZXNzb3JJbnN0YWxsIGRlZmF1bHRQcm9jZXNzb3I7Ci0JcHJpdmF0ZSBJUHJvY2Vzc29ySW5zdGFsbCBqcmVEZWZhdWx0UHJvY2Vzc29yOwotCXByaXZhdGUgSVByb2Nlc3Nvckluc3RhbGxbXSBpbnN0YWxsczsKLQotCXB1YmxpYyBQcm9jZXNzb3JSZWdpc3RyeSgpCi0JewotCQlpbml0aWFsaXplRnJvbVN0b3JhZ2UoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZUZyb21TdG9yYWdlKCkKLQl7Ci0JCS8vIHJlYWQgZnJvbSB0aGUgcmVnaXN0cnkKLQkJUHJvY2Vzc29yUmVnaXN0cnlSZWFkZXIgcmVnaXN0cnlSZWFkZXIgPSBuZXcgUHJvY2Vzc29yUmVnaXN0cnlSZWFkZXIoKTsKLQkJcmVnaXN0cnlSZWFkZXIuYWRkQ29uZmlncyh0aGlzKTsKLQkJLy8gZmluZCB0aGUganJlIGRlZmF1bHQKLQkJZm9yIChJdGVyYXRvcjxQcm9jZXNzb3JJbnN0YWxsPiBpdGVyID0gY29udHJpYnV0ZWRJbnN0YWxscy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUlQcm9jZXNzb3JJbnN0YWxsIGluc3RhbGwgPSAoSVByb2Nlc3Nvckluc3RhbGwpIGl0ZXIubmV4dCgpOwotCQkJaWYgKGluc3RhbGwuZ2V0SWQoKS5lcXVhbHMoSkFYUFJ1bnRpbWUuSlJFX0RFRkFVTFRfUFJPQ0VTU09SX0lEKSkKLQkJCXsKLQkJCQlqcmVEZWZhdWx0UHJvY2Vzc29yID0gaW5zdGFsbDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvLyByZWFkIGZyb20gdGhlIHByZWZlcmVuY2VzCi0JCWFkZFBlcnNpc3RlZFZNcygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRQZXJzaXN0ZWRWTXMoKQotCXsKLQkJLy8gVHJ5IHJldHJpZXZpbmcgdGhlIFZNIHByZWZlcmVuY2VzIGZyb20gdGhlIHByZWZlcmVuY2Ugc3RvcmUKLQkJU3RyaW5nIHZtWE1MU3RyaW5nID0gSkFYUExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoSkFYUFJ1bnRpbWUuUFJFRl9QUk9DRVNTT1JfWE1MKTsKLQotCQkvLyBJZiB0aGUgcHJlZmVyZW5jZSB3YXMgZm91bmQsIGxvYWQgVk1zIGZyb20gaXQgaW50byBtZW1vcnkKLQkJaWYgKHZtWE1MU3RyaW5nLmxlbmd0aCgpID4gMCkKLQkJewotCQkJdHJ5Ci0JCQl7Ci0JCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0odm1YTUxTdHJpbmcuZ2V0Qnl0ZXMoKSk7Ci0JCQkJUHJvY2Vzc29yUHJlZmVyZW5jZXMgcHJlZnMgPSBQcm9jZXNzb3JQcmVmZXJlbmNlcy5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJCQlTdHJpbmcgZGVmYXVsdFByb2Nlc3NvcklkID0gcHJlZnMuZ2V0RGVmYXVsdFByb2Nlc3NvcklkKCk7Ci0JCQkJdXNlckluc3RhbGxzID0gcHJlZnMuZ2V0UHJvY2Vzc29ycygpOwotCQkJCWZvciAoSXRlcmF0b3I8SVByb2Nlc3Nvckluc3RhbGw+IGl0ZXIgPSB1c2VySW5zdGFsbHMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQkJCXsKLQkJCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgaXRlci5uZXh0KCk7Ci0JCQkJCWlmIChpbnN0YWxsLmdldElkKCkuZXF1YWxzKGRlZmF1bHRQcm9jZXNzb3JJZCkpCi0JCQkJCXsKLQkJCQkJCWRlZmF1bHRQcm9jZXNzb3IgPSBpbnN0YWxsOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChkZWZhdWx0UHJvY2Vzc29yID09IG51bGwpCi0JCQkJewotCQkJCQlmb3IgKEl0ZXJhdG9yPFByb2Nlc3Nvckluc3RhbGw+IGl0ZXIgPSBjb250cmlidXRlZEluc3RhbGxzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLQkJCQkJewotCQkJCQkJSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCA9IChJUHJvY2Vzc29ySW5zdGFsbCkgaXRlci5uZXh0KCk7Ci0JCQkJCQlpZiAoZGVmYXVsdFByb2Nlc3NvciA9PSBudWxsICYmIGluc3RhbGwuZ2V0SWQoKS5lcXVhbHMoZGVmYXVsdFByb2Nlc3NvcklkKSkKLQkJCQkJCXsKLQkJCQkJCQlkZWZhdWx0UHJvY2Vzc29yID0gaW5zdGFsbDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQkJLy8gbWFrZSB0aGUgSlJFIHRoZSBkZWZhdWx0IGRlZmF1bHQKLQkJaWYgKGRlZmF1bHRQcm9jZXNzb3IgPT0gbnVsbCkKLQkJewotCQkJZGVmYXVsdFByb2Nlc3NvciA9IGpyZURlZmF1bHRQcm9jZXNzb3I7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQcm9jZXNzb3IoU3RyaW5nIGJ1bmRsZUlkLCBTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCwgU3RyaW5nIHByb2Nlc3NvclR5cGVJZCwgU3RyaW5nIGNsYXNzcGF0aCwgU3RyaW5nIGRlYnVnZ2VySWQsIFN0cmluZyBzdXBwb3J0cykKLQl7Ci0JCUlQcm9jZXNzb3JKYXJbXSBqYXJzID0gUHJvY2Vzc29ySW5zdGFsbC5jcmVhdGVKYXJzKGJ1bmRsZUlkLCBjbGFzc3BhdGgpOwotCQljb250cmlidXRlZEluc3RhbGxzLmFkZChuZXcgUHJvY2Vzc29ySW5zdGFsbChpZCwgbGFiZWwsIHByb2Nlc3NvclR5cGVJZCwgamFycywgZGVidWdnZXJJZCwgc3VwcG9ydHMsIHRydWUpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRQcm9jZXNzb3IoSVByb2Nlc3Nvckluc3RhbGwgaW5zdGFsbCkKLQl7Ci0JCWlmICghaW5zdGFsbC5pc0NvbnRyaWJ1dGVkKCkpCi0JCQl1c2VySW5zdGFsbHMuYWRkKGluc3RhbGwpOwotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIG5ld2luc3RhbGxzID0gbmV3IElQcm9jZXNzb3JJbnN0YWxsW2luc3RhbGxzLmxlbmd0aCArIDFdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGluc3RhbGxzLCAwLCBuZXdpbnN0YWxscywgMCwgaW5zdGFsbHMubGVuZ3RoKTsKLQkJbmV3aW5zdGFsbHNbaW5zdGFsbHMubGVuZ3RoXSA9IGluc3RhbGw7Ci0JCWluc3RhbGxzID0gbmV3aW5zdGFsbHM7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlUHJvY2Vzc29yKGludCBpbmRleCkKLQl7Ci0JCUlQcm9jZXNzb3JJbnN0YWxsIHJlbW92ZWQgPSBpbnN0YWxsc1tpbmRleF07Ci0JCWlmICghcmVtb3ZlZC5pc0NvbnRyaWJ1dGVkKCkpCi0JCQl1c2VySW5zdGFsbHMucmVtb3ZlKHJlbW92ZWQpOwotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIG5ld2luc3RhbGxzID0gbmV3IElQcm9jZXNzb3JJbnN0YWxsW2luc3RhbGxzLmxlbmd0aCAtIDFdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGluc3RhbGxzLCAwLCBuZXdpbnN0YWxscywgMCwgaW5kZXgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KGluc3RhbGxzLCBpbmRleCArIDEsIG5ld2luc3RhbGxzLCBpbmRleCwgbmV3aW5zdGFsbHMubGVuZ3RoIC0gaW5kZXgpOwotCQlpbnN0YWxscyA9IG5ld2luc3RhbGxzOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW5zdGFsbFtdIGdldFByb2Nlc3NvcnMoKQotCXsKLQkJaWYgKGluc3RhbGxzID09IG51bGwpCi0JCXsKLQkJCWluc3RhbGxzID0gbmV3IElQcm9jZXNzb3JJbnN0YWxsW2NvbnRyaWJ1dGVkSW5zdGFsbHMuc2l6ZSgpICsgdXNlckluc3RhbGxzLnNpemUoKV07Ci0JCQlpbnQgc3RhcnRJbmRleCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGVkSW5zdGFsbHMuc2l6ZSgpOyBpKyspCi0JCQl7Ci0JCQkJaW5zdGFsbHNbaV0gPSAoSVByb2Nlc3Nvckluc3RhbGwpIGNvbnRyaWJ1dGVkSW5zdGFsbHMuZ2V0KGkpOwotCQkJCXN0YXJ0SW5kZXggPSBpICsgMTsKLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdXNlckluc3RhbGxzLnNpemUoKTsgaSsrKQotCQkJewotCQkJCWluc3RhbGxzW3N0YXJ0SW5kZXggKyBpXSA9IChJUHJvY2Vzc29ySW5zdGFsbCkgdXNlckluc3RhbGxzLmdldChpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gaW5zdGFsbHM7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JJbnN0YWxsW10gZ2V0UHJvY2Vzc29ycyhTdHJpbmcgaWQpCi0JewotCQlJUHJvY2Vzc29ySW5zdGFsbFtdIGluc3RhbGxzID0gZ2V0UHJvY2Vzc29ycygpOwotCQlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PElQcm9jZXNzb3JJbnN0YWxsPigpOwotCQlmb3IgKElQcm9jZXNzb3JJbnN0YWxsIHR5cGUgOiBpbnN0YWxscykKLQkJewotCQkJaWYgKHR5cGUuZ2V0UHJvY2Vzc29yVHlwZSgpLmdldElkKCkuZXF1YWxzKGlkKSkKLQkJCQlyZXN1bHQuYWRkKHR5cGUpOwotCQl9Ci0JCXJldHVybiAoSVByb2Nlc3Nvckluc3RhbGxbXSkgcmVzdWx0LnRvQXJyYXkobmV3IElQcm9jZXNzb3JJbnN0YWxsWzBdKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0UHJvY2Vzc29yKElQcm9jZXNzb3JJbnN0YWxsIGRlZmF1bHRJbnN0YWxsKQotCXsKLQkJZGVmYXVsdFByb2Nlc3NvciA9IGRlZmF1bHRJbnN0YWxsOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW5zdGFsbCBnZXREZWZhdWx0UHJvY2Vzc29yKCkKLQl7Ci0JCXJldHVybiBkZWZhdWx0UHJvY2Vzc29yOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW5zdGFsbCBnZXRKUkVEZWZhdWx0UHJvY2Vzc29yKCkKLQl7Ci0JCXJldHVybiBqcmVEZWZhdWx0UHJvY2Vzc29yOwotCX0KLQotCXB1YmxpYyBJUHJvY2Vzc29ySW5zdGFsbFtdIGdldENvbnRyaWJ1dGVkUHJvY2Vzc29ycygpCi0JewotCQlyZXR1cm4gKElQcm9jZXNzb3JJbnN0YWxsW10pIGNvbnRyaWJ1dGVkSW5zdGFsbHMudG9BcnJheShuZXcgSVByb2Nlc3Nvckluc3RhbGxbMF0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JSZWdpc3RyeVJlYWRlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclJlZ2lzdHJ5UmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiZTNkMzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JSZWdpc3RyeVJlYWRlciBleHRlbmRzIEFic3RyYWN0UmVnaXN0cnlSZWFkZXIKLXsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfcHJvY2Vzc29yID0gInByb2Nlc3NvciI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UWVBFX0lEID0gInByb2Nlc3NvclR5cGVJZCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfREVCVUdHRVJfSUQgPSAiZGVidWdnZXJJZCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfQ0xBU1NQQVRIID0gImNsYXNzcGF0aCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfU1VQUE9SVFMgPSAic3VwcG9ydHMiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIFByb2Nlc3NvclJlZ2lzdHJ5IHJlZ2lzdHJ5OwotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIGJvb2xlYW4gcmVhZEVsZW1lbnQoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQlpZiAoIWVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhUQUdfcHJvY2Vzc29yKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfSUQpOwotCQlpZiAoaWQgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgbGFiZWwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfTEFCRUwpOwotCQlpZiAobGFiZWwgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfTEFCRUwpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgcHJvY2Vzc29yVHlwZUlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX1RZUEVfSUQpOwotCQlpZiAocHJvY2Vzc29yVHlwZUlkID09IG51bGwpCi0JCXsKLQkJCWxvZ01pc3NpbmdBdHRyaWJ1dGUoZWxlbWVudCwgQVRUX1RZUEVfSUQpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgY2xhc3NwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX0NMQVNTUEFUSCk7Ci0JCWlmIChjbGFzc3BhdGggPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfQ0xBU1NQQVRIKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJU3RyaW5nIGRlYnVnZ2VySWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfREVCVUdHRVJfSUQpOwotCi0JCVN0cmluZyBzdXBwb3J0cyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9TVVBQT1JUUyk7Ci0JCWlmIChjbGFzc3BhdGggPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfU1VQUE9SVFMpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZWdpc3RyeS5hZGRQcm9jZXNzb3IoZWxlbWVudC5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSwgaWQsIGxhYmVsLCBwcm9jZXNzb3JUeXBlSWQsIGNsYXNzcGF0aCwgZGVidWdnZXJJZCwgc3VwcG9ydHMpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRFbGVtZW50KFByb2Nlc3NvclJlZ2lzdHJ5IHJlZ2lzdHJ5LCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZEVsZW1lbnQoZWxlbWVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkQ29uZmlncyhQcm9jZXNzb3JSZWdpc3RyeSByZWdpc3RyeSkKLQl7Ci0JCUlFeHRlbnNpb25SZWdpc3RyeSBleHRlbnNpb25SZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7Ci0JCXRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKLQkJcmVhZFJlZ2lzdHJ5KGV4dGVuc2lvblJlZ2lzdHJ5LCBKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgInByb2Nlc3NvciIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclR5cGVSZWdpc3RyeS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L1Byb2Nlc3NvclR5cGVSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTNlNTIwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLklQcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuSVRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLkpBWFBSdW50aW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuRmVhdHVyZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuSkFYUExhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLk91dHB1dFByb3BlcnR5UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5Qcm9jZXNzb3JUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuaW50ZXJuYWwuVHJhbnNmb3JtZXJGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5Ci17Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVTQ19TVUZGSVggPSAiLkRFU0MiOyAvLyROT04tTkxTLTEkCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9TVUZGSVggPSAiLlRZUEUiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGZpbmFsIExpc3Q8SUNvbmZpZ3VyYXRpb25FbGVtZW50PiBlbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8SUNvbmZpZ3VyYXRpb25FbGVtZW50PigpOwotCXByaXZhdGUgSVByb2Nlc3NvclR5cGVbXSBpbnN0YWxsVHlwZXM7Ci0KLQlwdWJsaWMgUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5KCkKLQl7Ci0JCVByb2Nlc3NvclR5cGVSZWdpc3RyeVJlYWRlciByZWdpc3RyeVJlYWRlciA9IG5ldyBQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIoKTsKLQkJcmVnaXN0cnlSZWFkZXIuYWRkQ29uZmlncyh0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvclR5cGVbXSBnZXRQcm9jZXNzb3JUeXBlcygpCi0JewotCQlpZiAoaW5zdGFsbFR5cGVzID09IG51bGwpCi0JCXsKLQkJCUxpc3Q8UHJvY2Vzc29yVHlwZT4gdHlwZXMgPSBuZXcgQXJyYXlMaXN0PFByb2Nlc3NvclR5cGU+KCk7Ci0JCQlTdHJpbmcgZmVhdHVyZVhNTFN0cmluZyA9IEpBWFBMYXVuY2hpbmdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKEpBWFBSdW50aW1lLlBSRUZfRkVBVFVSRV9YTUwpOwotCQkJLy8gSWYgdGhlIHByZWZlcmVuY2Ugd2FzIGZvdW5kLCBsb2FkIFZNcyBmcm9tIGl0IGludG8gbWVtb3J5Ci0JCQlGZWF0dXJlUHJlZmVyZW5jZXMgcHJlZnMgPSBudWxsOwotCQkJaWYgKGZlYXR1cmVYTUxTdHJpbmcubGVuZ3RoKCkgPiAwKQotCQkJewotCQkJCXRyeQotCQkJCXsKLQkJCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZmVhdHVyZVhNTFN0cmluZy5nZXRCeXRlcygpKTsKLQkJCQkJcHJlZnMgPSBGZWF0dXJlUHJlZmVyZW5jZXMuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpCi0JCQkJewotCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCVN0cmluZyBwcm9wWE1MU3RyaW5nID0gSkFYUExhdW5jaGluZ1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoSkFYUFJ1bnRpbWUuUFJFRl9PVVRQVVRfUFJPUEVSVElFU19YTUwpOwotCQkJLy8gSWYgdGhlIHByZWZlcmVuY2Ugd2FzIGZvdW5kLCBsb2FkIFZNcyBmcm9tIGl0IGludG8gbWVtb3J5Ci0JCQlPdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzIG91dHB1dHByZWZzID0gbnVsbDsKLQkJCWlmIChwcm9wWE1MU3RyaW5nLmxlbmd0aCgpID4gMCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHByb3BYTUxTdHJpbmcuZ2V0Qnl0ZXMoKSk7Ci0JCQkJCW91dHB1dHByZWZzID0gT3V0cHV0UHJvcGVydHlQcmVmZXJlbmNlcy5mcm9tWE1MKGlucHV0U3RyZWFtKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCX0KLQkJCX0KLQotCQkJZm9yIChJdGVyYXRvcjxJQ29uZmlndXJhdGlvbkVsZW1lbnQ+IGl0ZXIgPSBlbGVtZW50cy5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCQl7Ci0JCQkJSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSAoSUNvbmZpZ3VyYXRpb25FbGVtZW50KSBpdGVyLm5leHQoKTsKLQkJCQlTdHJpbmcgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuQVRUX0lEKTsKLQkJCQlTdHJpbmcgbGFiZWwgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuQVRUX0xBQkVMKTsKLQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IGZlYXR1cmVWYWx1ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnR5VmFsdWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0JCQkJaWYgKHByZWZzICE9IG51bGwgJiYgcHJlZnMuZ2V0RmVhdHVyZXNWYWx1ZXMoaWQpICE9IG51bGwpCi0JCQkJCWZlYXR1cmVWYWx1ZXMucHV0QWxsKHByZWZzLmdldEZlYXR1cmVzVmFsdWVzKGlkKSk7Ci0JCQkJaWYgKG91dHB1dHByZWZzICE9IG51bGwgJiYgb3V0cHV0cHJlZnMuZ2V0T3V0cHV0UHJvcGVydHlWYWx1ZXMoaWQpICE9IG51bGwpCi0JCQkJCXByb3BlcnR5VmFsdWVzLnB1dEFsbChvdXRwdXRwcmVmcy5nZXRPdXRwdXRQcm9wZXJ0eVZhbHVlcyhpZCkpOwotCi0JCQkJU3RyaW5nIG91dHB1dFByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuQVRUX09VVFBVVF9QUk9QRVJUSUVTKTsKLQkJCQlVUkwgb3V0cHV0UHJvcGVydGllc1VSTCA9IEZpbGVMb2NhdG9yLmZpbmQoUGxhdGZvcm0uZ2V0QnVuZGxlKGVsZW1lbnQuZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkpLCBuZXcgUGF0aChvdXRwdXRQcm9wZXJ0aWVzKSwgbnVsbCk7Ci0JCQkJU3RyaW5nIGZlYXR1cmVQcm9wZXJ0aWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9BVFRSSUJVVEVfUFJPUEVSVElFUyk7Ci0JCQkJVVJMIGZlYXR1cmVQcm9wZXJ0aWVzVVJMID0gRmlsZUxvY2F0b3IuZmluZChQbGF0Zm9ybS5nZXRCdW5kbGUoZWxlbWVudC5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSksIG5ldyBQYXRoKGZlYXR1cmVQcm9wZXJ0aWVzKSwgbnVsbCk7Ci0JCQkJCi0JCQkJTGlzdDxJVHJhbnNmb3JtZXJGYWN0b3J5PiB0cmFuc0ZhY3RvcnlMaXN0ID0gbmV3IEFycmF5TGlzdDxJVHJhbnNmb3JtZXJGYWN0b3J5PigpOwotCQkJCUlDb25maWd1cmF0aW9uRWxlbWVudFtdIHRyYW5zRmFjdEVscyA9IGVsZW1lbnQuZ2V0Q2hpbGRyZW4oUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkVMX1RSQU5TRk9STUVSX0ZBQ1RPUlkpOwotCQkJCWZvciAoSUNvbmZpZ3VyYXRpb25FbGVtZW50IHRyYW5zRmFjdEVsIDogdHJhbnNGYWN0RWxzKQotCQkJCXsKLQkJCQkJU3RyaW5nIHRyYW5zRmFjdG9yeU5hbWUgPSB0cmFuc0ZhY3RFbC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZX05BTUUpOwotCQkJCQlTdHJpbmcgdHJhbnNGYWN0b3J5Q2xhc3MgPSB0cmFuc0ZhY3RFbC5nZXRBdHRyaWJ1dGUoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLkFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZX0NMQVNTKTsKLQkJCQkJdHJhbnNGYWN0b3J5TGlzdC5hZGQobmV3IFRyYW5zZm9ybWVyRmFjdG9yeSh0cmFuc0ZhY3RvcnlOYW1lLHRyYW5zRmFjdG9yeUNsYXNzKSk7Ci0JCQkJfQotCQkJCQotCQkJCXR5cGVzLmFkZChuZXcgUHJvY2Vzc29yVHlwZShpZCwgbGFiZWwsIGZlYXR1cmVQcm9wZXJ0aWVzVVJMLCBvdXRwdXRQcm9wZXJ0aWVzVVJMLCBmZWF0dXJlVmFsdWVzLCBwcm9wZXJ0eVZhbHVlcywgdHJhbnNGYWN0b3J5TGlzdC50b0FycmF5KG5ldyBJVHJhbnNmb3JtZXJGYWN0b3J5WzBdKSkpOwotCQkJfQotCQkJaW5zdGFsbFR5cGVzID0gdHlwZXMudG9BcnJheShuZXcgSVByb2Nlc3NvclR5cGVbMF0pOwotCQl9Ci0JCXJldHVybiBpbnN0YWxsVHlwZXM7Ci0JfQotCi0JcHVibGljIElQcm9jZXNzb3JUeXBlW10gZ2V0UHJvY2Vzc29yVHlwZXNFeGNsSlJFRGVmYXVsdCgpCi0JewotCQlJUHJvY2Vzc29yVHlwZVtdIGluc3RhbGxUeXBlcyA9IGdldFByb2Nlc3NvclR5cGVzKCk7Ci0JCUxpc3Q8SVByb2Nlc3NvclR5cGU+IGV4Y2xUeXBlcyA9IG5ldyBBcnJheUxpc3Q8SVByb2Nlc3NvclR5cGU+KGluc3RhbGxUeXBlcy5sZW5ndGggLSAxKTsKLQkJZm9yIChJUHJvY2Vzc29yVHlwZSB0eXBlIDogaW5zdGFsbFR5cGVzKQotCQl7Ci0JCQlpZiAoIXR5cGUuaXNKUkVEZWZhdWx0KCkpCi0JCQkJZXhjbFR5cGVzLmFkZCh0eXBlKTsKLQkJfQotCQlyZXR1cm4gKElQcm9jZXNzb3JUeXBlW10pIGV4Y2xUeXBlcy50b0FycmF5KG5ldyBJUHJvY2Vzc29yVHlwZVswXSk7Ci0JfQotCi0JcHVibGljIHZvaWQgYWRkVHlwZShJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkKLQl7Ci0JCWVsZW1lbnRzLmFkZChlbGVtZW50KTsKLQl9Ci0KLQlwdWJsaWMgSVByb2Nlc3NvclR5cGUgZ2V0UHJvY2Vzc29yVHlwZShTdHJpbmcgaWQpCi0JewotCQlJUHJvY2Vzc29yVHlwZVtdIGluc3RhbGxUeXBlcyA9IGdldFByb2Nlc3NvclR5cGVzKCk7Ci0JCWZvciAoSVByb2Nlc3NvclR5cGUgdHlwZSA6IGluc3RhbGxUeXBlcykKLQkJewotCQkJaWYgKHR5cGUuZ2V0SWQoKS5lcXVhbHMoaWQpKQotCQkJCXJldHVybiB0eXBlOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9pbnRlcm5hbC9yZWdpc3RyeS9Qcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAxZTJmNi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLnJlZ2lzdHJ5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLmludGVybmFsLkpBWFBMYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBQcm9jZXNzb3JUeXBlUmVnaXN0cnlSZWFkZXIgZXh0ZW5kcyBBYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX3Byb2Nlc3NvclR5cGUgPSAicHJvY2Vzc29yVHlwZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfSUQgPSAiaWQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUX0xBQkVMID0gImxhYmVsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9PVVRQVVRfUFJPUEVSVElFUyA9ICJvdXRwdXRQcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9BVFRSSUJVVEVfUFJPUEVSVElFUyA9ICJhdHRyaWJ1dGVQcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVMX1RSQU5TRk9STUVSX0ZBQ1RPUlkgPSAidHJhbnNmb3JtZXJGYWN0b3J5IjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRfVFJBTlNGT1JNRVJfRkFDVE9SWV9OQU1FID0gIm5hbWUiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVF9UUkFOU0ZPUk1FUl9GQUNUT1JZX0NMQVNTID0gImZhY3RvcnlDbGFzcyI7Ci0KLQlwcml2YXRlIFByb2Nlc3NvclR5cGVSZWdpc3RyeSByZWdpc3RyeTsKLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHJlYWRFbGVtZW50KElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50KQotCXsKLQkJaWYgKCFlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMoVEFHX3Byb2Nlc3NvclR5cGUpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9JRCk7Ci0JCWlmIChpZCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9JRCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBsYWJlbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVF9MQUJFTCk7Ci0JCWlmIChsYWJlbCA9PSBudWxsKQotCQl7Ci0JCQlsb2dNaXNzaW5nQXR0cmlidXRlKGVsZW1lbnQsIEFUVF9MQUJFTCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCVN0cmluZyBvdXRwdXRQcm9wZXJ0aWVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUX09VVFBVVF9QUk9QRVJUSUVTKTsKLQkJaWYgKG91dHB1dFByb3BlcnRpZXMgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfT1VUUFVUX1BST1BFUlRJRVMpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlTdHJpbmcgZmVhdHVyZVByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRfQVRUUklCVVRFX1BST1BFUlRJRVMpOwotCQlpZiAoZmVhdHVyZVByb3BlcnRpZXMgPT0gbnVsbCkKLQkJewotCQkJbG9nTWlzc2luZ0F0dHJpYnV0ZShlbGVtZW50LCBBVFRfQVRUUklCVVRFX1BST1BFUlRJRVMpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQlyZWdpc3RyeS5hZGRUeXBlKGVsZW1lbnQpOwotCi0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlYWRFbGVtZW50KFByb2Nlc3NvclR5cGVSZWdpc3RyeSByZWdpc3RyeSwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpCi0JewotCQl0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0JCXJlYWRFbGVtZW50KGVsZW1lbnQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZENvbmZpZ3MoUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5IHJlZ2lzdHJ5KQotCXsKLQkJSUV4dGVuc2lvblJlZ2lzdHJ5IGV4dGVuc2lvblJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKLQkJdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwotCQlyZWFkUmVnaXN0cnkoZXh0ZW5zaW9uUmVnaXN0cnksIEpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAicHJvY2Vzc29yVHlwZSIpOyAvLyROT04tTkxTLTEkCi0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL2ludGVybmFsL3JlZ2lzdHJ5L21lc3NhZ2VzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2NDA1Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvamF4cC9sYXVuY2hpbmcvaW50ZXJuYWwvcmVnaXN0cnkvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotQWJzdHJhY3RSZWdpc3RyeVJlYWRlci4zPSwgZXh0ZW5zaW9uIAotQWJzdHJhY3RSZWdpc3RyeVJlYWRlci41PVJlcXVpcmVkIGF0dHJpYnV0ZSAnCi1BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyLjY9JyBub3QgZGVmaW5lZAotQWJzdHJhY3RSZWdpc3RyeVJlYWRlci43PVJlcXVpcmVkIHN1YiBlbGVtZW50ICcKLUFic3RyYWN0UmVnaXN0cnlSZWFkZXIuOD0nIG5vdCBkZWZpbmVkCi1BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyLjk9VW5rbm93biBleHRlbnNpb24gdGFnIGZvdW5kOiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNjA0ZmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVhTTFRSdW50aW1lLjEwPUZhaWxlZCB0byBzYXZlIHByb2Nlc3MgcHJlZmVyZW5jZXMKLVhTTFRSdW50aW1lLjU9U2F2aW5nIGF0dHJpYnV0ZXMuLi4KLVhTTFRSdW50aW1lLjY9RmFpbGVkIHRvIHNhdmUgYXR0cmlidXRlIHByZWZlcmVuY2VzCi1YU0xUUnVudGltZS43PVNhdmluZyBwcm9wZXJ0aWVzLi4uCi1YU0xUUnVudGltZS44PUZhaWxlZCB0byBzYXZlIG91dHB1dCBwcm9wZXJ0eSBwcmVmZXJlbmNlcwotWFNMVFJ1bnRpbWUuOT1TYXZpbmcgcHJvY2Vzc29ycy4uLgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL21vZGVsL0pBWFBEZWJ1Z1RhcmdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2pheHAvbGF1bmNoaW5nL21vZGVsL0pBWFBEZWJ1Z1RhcmdldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODhmMzU1Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9qYXhwL2xhdW5jaGluZy9tb2RlbC9KQVhQRGVidWdUYXJnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5Db25uZWN0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlckRlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JRGVidWdUYXJnZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JTGluZUJyZWFrcG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JTWVtb3J5QmxvY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JUHJvY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklTdGFja0ZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVRocmVhZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmpheHAuZGVidWcuZGVidWdnZXIuRGVidWdDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5pbnRlcm5hbC5KQVhQTGF1bmNoaW5nUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5CYXNlTGF1bmNoSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLklYU0xDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuSVhTTERlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTERlYnVnRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xTdGFja0ZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFRocmVhZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xWYXJpYWJsZTsKLQotcHVibGljIGNsYXNzIEpBWFBEZWJ1Z1RhcmdldCBleHRlbmRzIFhTTERlYnVnRWxlbWVudCBpbXBsZW1lbnRzIElYU0xEZWJ1Z1RhcmdldCB7Ci0JcHJpdmF0ZSBmaW5hbCBieXRlW10gU1RBQ0tfRlJBTUVTX0xPQ0sgPSBuZXcgYnl0ZVswXTsKLQlwcml2YXRlIGZpbmFsIGJ5dGVbXSBWQUxVRV9NQVBfTE9DSyA9IG5ldyBieXRlWzBdOwotCXByaXZhdGUgZmluYWwgYnl0ZVtdIFdSSVRFX0xPQ0sgPSBuZXcgYnl0ZVswXTsKLQotCXByaXZhdGUgZmluYWwgaW50IENPTk5FQ1RfQVRURU1QVFMgPSA2MDsKLQlwcml2YXRlIGZpbmFsIGludCBDT05ORUNUX1dBSVQgPSAxMDAwOwotCi0JcHJpdmF0ZSBmaW5hbCBJUHJvY2VzcyBwcm9jZXNzOwotCXByaXZhdGUgZmluYWwgSUxhdW5jaCBsYXVuY2g7Ci0JcHJpdmF0ZSBYU0xUaHJlYWQgdGhyZWFkOwotCXByaXZhdGUgSVRocmVhZFtdIHRocmVhZHMgPSBuZXcgSVRocmVhZFswXTsKLQlwcml2YXRlIElTdGFja0ZyYW1lW10gc3RhY2tGcmFtZXNDYWNoZSA9IG5ldyBJU3RhY2tGcmFtZVswXTsKLQotCXByaXZhdGUgRXZlbnREaXNwYXRjaEpvYiBldmVudERpc3BhdGNoOwotCi0JcHJpdmF0ZSBmaW5hbCBNYXA8SW50ZWdlciwgWFNMVmFyaWFibGU+IHZhcmlhYmxlTWFwQ2FjaGUgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBYU0xWYXJpYWJsZT4oKTsKLQlwcml2YXRlIGZpbmFsIE1hcDxYU0xWYXJpYWJsZSwgWFNMVmFsdWU+IHZhbHVlTWFwQ2FjaGUgPSBuZXcgSGFzaE1hcDxYU0xWYXJpYWJsZSwgWFNMVmFsdWU+KCk7Ci0JcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLQlwcml2YXRlIGJvb2xlYW4gc3VzcGVuZGVkOwotCi0JcHJpdmF0ZSBTb2NrZXQgcmVxdWVzdFNvY2tldDsKLQlwcml2YXRlIFNvY2tldCBldmVudFNvY2tldDsKLQlwcml2YXRlIFNvY2tldCBnZW5lcmF0ZVNvY2tldDsKLQlwcml2YXRlIEJ1ZmZlcmVkUmVhZGVyIHJlcXVlc3RSZWFkZXI7Ci0JcHJpdmF0ZSBCdWZmZXJlZFJlYWRlciBldmVudFJlYWRlcjsKLQlwcml2YXRlIFByaW50V3JpdGVyIHJlcXVlc3RXcml0ZXI7Ci0JcHJpdmF0ZSBSZWFkZXIgZ2VuZXJhdGVSZWFkZXI7Ci0JcHJpdmF0ZSBib29sZWFuIHN0YWxlOwotCi0JcHVibGljIEpBWFBEZWJ1Z1RhcmdldChJTGF1bmNoIGxhdW5jaCwgSVByb2Nlc3MgcHJvY2VzcywKLQkJCUJhc2VMYXVuY2hIZWxwZXIgQmFzZUxhdW5jaEhlbHBlcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlzdXBlcihudWxsKTsKLQkJdGhpcy5sYXVuY2ggPSBsYXVuY2g7Ci0JCXRoaXMucHJvY2VzcyA9IHByb2Nlc3M7Ci0JCXRoaXMucmVxdWVzdFNvY2tldCA9IGF0dGVtcHRDb25uZWN0KEJhc2VMYXVuY2hIZWxwZXIuZ2V0UmVxdWVzdFBvcnQoKSk7Ci0JCXRoaXMuZXZlbnRTb2NrZXQgPSBhdHRlbXB0Q29ubmVjdChCYXNlTGF1bmNoSGVscGVyLmdldEV2ZW50UG9ydCgpKTsKLQkJdGhpcy5nZW5lcmF0ZVNvY2tldCA9IGF0dGVtcHRDb25uZWN0KEJhc2VMYXVuY2hIZWxwZXIuZ2V0R2VuZXJhdGVQb3J0KCkpOwotCi0JCWlmICghcHJvY2Vzcy5pc1Rlcm1pbmF0ZWQoKSkgewotCQkJdHJ5IHsKLQkJCQl0aGlzLmV2ZW50UmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihldmVudFNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCQkJdGhpcy5yZXF1ZXN0V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKHJlcXVlc3RTb2NrZXQuZ2V0T3V0cHV0U3RyZWFtKCkpOwotCQkJCXRoaXMucmVxdWVzdFJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocmVxdWVzdFNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0JCQkJdGhpcy5nZW5lcmF0ZVJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihnZW5lcmF0ZVNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKTsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlhYm9ydChNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTERlYnVnVGFyZ2V0LjAiKSwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCXRoaXMudGhyZWFkID0gbmV3IFhTTFRocmVhZCh0aGlzKTsKLQkJCXRoaXMudGhyZWFkcyA9IG5ldyBJVGhyZWFkW10geyB0aHJlYWQgfTsKLQkJCXRoaXMuZXZlbnREaXNwYXRjaCA9IG5ldyBFdmVudERpc3BhdGNoSm9iKCk7Ci0JCQl0aGlzLmV2ZW50RGlzcGF0Y2guc2NoZWR1bGUoKTsKLQkJCQotCQkJRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkuYWRkQnJlYWtwb2ludExpc3RlbmVyKHRoaXMpOwotCQl9Ci0JfQotCQotCXB1YmxpYyBSZWFkZXIgZ2V0R2VuZXJhdGVSZWFkZXIoKQotCXsKLQkJcmV0dXJuIGdlbmVyYXRlUmVhZGVyOwotCX0KLQotCXByaXZhdGUgdm9pZCBhYm9ydChTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCWlmICghZ2V0RGVidWdUYXJnZXQoKS5pc1Rlcm1pbmF0ZWQoKSkKLQkJCWdldERlYnVnVGFyZ2V0KCkuZ2V0UHJvY2VzcygpLnRlcm1pbmF0ZSgpOwotCQl0aHJvdyBuZXcgRGVidWdFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLAotCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBEZWJ1Z1BsdWdpbi5JTlRFUk5BTF9FUlJPUiwgbWVzc2FnZSwKLQkJCQllKSk7Ci0JfQotCi0JcHJpdmF0ZSBTb2NrZXQgYXR0ZW1wdENvbm5lY3QoaW50IHBvcnQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU29ja2V0IHNvY2tldCA9IG51bGw7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgQ09OTkVDVF9BVFRFTVBUUzsgaSsrKSB7Ci0JCQkvLyBicmVhayBvdXQgaWYgcHJvY2VzcyBpcyB0ZXJtaW5hdGVkCi0JCQlpZiAocHJvY2Vzcy5pc1Rlcm1pbmF0ZWQoKSkKLQkJCQlicmVhazsKLQkJCXRyeSB7Ci0JCQkJc29ja2V0ID0gbmV3IFNvY2tldCgKLQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiWFNMRGVidWdUYXJnZXQuMSIpLCBwb3J0KTsgLy8kTk9OLU5MUy0xJAotCQkJfSBjYXRjaCAoQ29ubmVjdEV4Y2VwdGlvbiBlKSB7Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCQlpZiAoc29ja2V0ICE9IG51bGwpCi0JCQkJYnJlYWs7Ci0JCQl0cnkgewotCQkJCVRocmVhZC5zbGVlcChDT05ORUNUX1dBSVQpOwotCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JCWlmIChzb2NrZXQgPT0gbnVsbCAmJiAhcHJvY2Vzcy5pc1Rlcm1pbmF0ZWQoKSkKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKAotCQkJCQluZXcgU3RhdHVzKAotCQkJCQkJCVN0YXR1cy5FUlJPUiwKLQkJCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwKLQkJCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTERlYnVnVGFyZ2V0LjIiKSArIHBvcnQgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTERlYnVnVGFyZ2V0LjMiKSArIENPTk5FQ1RfQVRURU1QVFMgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTERlYnVnVGFyZ2V0LjQiKSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotCQlyZXR1cm4gc29ja2V0OwotCX0KLQotCXB1YmxpYyBJUHJvY2VzcyBnZXRQcm9jZXNzKCkgewotCQlyZXR1cm4gcHJvY2VzczsKLQl9Ci0KLQlwdWJsaWMgSVRocmVhZFtdIGdldFRocmVhZHMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlyZXR1cm4gdGhyZWFkczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNUaHJlYWRzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHRocmVhZHMgIT0gbnVsbCAmJiB0aHJlYWRzLmxlbmd0aCA+IDA7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IGxhdW5jaC5nZXRBdHRyaWJ1dGUoImxhdW5jaE5hbWUiKTsKLQkJfQotCQlyZXR1cm4gbmFtZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0JyZWFrcG9pbnQoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCkgewotCQlpZiAoYnJlYWtwb2ludC5nZXRNb2RlbElkZW50aWZpZXIoKS5lcXVhbHMoCi0JCQkJSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUwpCi0JCQkJJiYgYnJlYWtwb2ludCBpbnN0YW5jZW9mIElMaW5lQnJlYWtwb2ludCkgewotCQkJLy8gdHJ5Ci0JCQkvLyB7Ci0JCQkvLyBJTGluZUJyZWFrcG9pbnQgbGIgPSAoSUxpbmVCcmVha3BvaW50KSBicmVha3BvaW50OwotCQkJLy8gSU1hcmtlciBtYXJrZXIgPSBsYi5nZXRNYXJrZXIoKTsKLQkJCS8vIGZvciAoSXRlcmF0b3I8Pz4gaXRlciA9Ci0JCQkvLyBCYXNlTGF1bmNoSGVscGVyLmdldFBpcGVsaW5lKCkuZ2V0VHJhbnNmb3JtRGVmcygpLml0ZXJhdG9yKCk7Ci0JCQkvLyBpdGVyLmhhc05leHQoKTspCi0JCQkvLyB7Ci0JCQkvLyBMYXVuY2hUcmFuc2Zvcm0gbHQgPSAoTGF1bmNoVHJhbnNmb3JtKSBpdGVyLm5leHQoKTsKLQkJCS8vIGlmIChtYXJrZXIuZ2V0UmVzb3VyY2UoKS5nZXRMb2NhdGlvbigpLmVxdWFscyhsdC5nZXRMb2NhdGlvbigpKSkKLQkJCS8vIHJldHVybiB0cnVlOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkKLQkJCS8vIHsKLQkJCS8vIEpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJLy8gfQotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJRGVidWdUYXJnZXQgZ2V0RGVidWdUYXJnZXQoKSB7Ci0JCXJldHVybiB0aGlzOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJTGF1bmNoIGdldExhdW5jaCgpIHsKLQkJcmV0dXJuIGxhdW5jaDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5UZXJtaW5hdGUoKSB7Ci0JCXJldHVybiBnZXRQcm9jZXNzKCkuY2FuVGVybWluYXRlKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNUZXJtaW5hdGVkKCkgewotCQlyZXR1cm4gZ2V0UHJvY2VzcygpLmlzVGVybWluYXRlZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlcm1pbmF0ZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXN5bmNocm9uaXplZCAoV1JJVEVfTE9DSykgewotCQkJZ2V0UHJvY2VzcygpLnRlcm1pbmF0ZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuUmVzdW1lKCkgewotCQlyZXR1cm4gIWlzVGVybWluYXRlZCgpICYmIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3VzcGVuZCgpIHsKLQkJcmV0dXJuICFpc1Rlcm1pbmF0ZWQoKSAmJiAhaXNTdXNwZW5kZWQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1N1c3BlbmRlZCgpIHsKLQkJcmV0dXJuIHN1c3BlbmRlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXN1bWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1JFU1VNRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlc3VtZWQoaW50IGRldGFpbCkgewotCQlzdXNwZW5kZWQgPSBmYWxzZTsKLQkJdGhyZWFkLmZpcmVSZXN1bWVFdmVudChkZXRhaWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzdXNwZW5kZWQoaW50IGRldGFpbCkgewotCQlzdXNwZW5kZWQgPSB0cnVlOwotCQl0aHJlYWQuZmlyZVN1c3BlbmRFdmVudChkZXRhaWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1c3BlbmQoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NVU1BFTkQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGJyZWFrcG9pbnRBZGRlZChJQnJlYWtwb2ludCBicmVha3BvaW50KSB7Ci0JCWlmIChzdXBwb3J0c0JyZWFrcG9pbnQoYnJlYWtwb2ludCkpIHsKLQkJCXRyeSB7Ci0JCQkJSUxpbmVCcmVha3BvaW50IGxiID0gKElMaW5lQnJlYWtwb2ludCkgYnJlYWtwb2ludDsKLQkJCQlpZiAoYnJlYWtwb2ludC5pc0VuYWJsZWQoKSkgewotCQkJCQl0cnkgewotCQkJCQkJSU1hcmtlciBtYXJrZXIgPSBsYi5nZXRNYXJrZXIoKTsKLQkJCQkJCWlmIChtYXJrZXIgIT0gbnVsbCkgewotCQkJCQkJCVVSTCBmaWxlID0gbWFya2VyLmdldFJlc291cmNlKCkuZ2V0TG9jYXRpb24oKQotCQkJCQkJCQkJLnRvRmlsZSgpLnRvVVJJKCkudG9VUkwoKTsKLQkJCQkJCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX0FERF9CUkVBS1BPSU5UCi0JCQkJCQkJCQkrICIgIiArIGZpbGUgKyAiICIgKyBsYi5nZXRMaW5lTnVtYmVyKCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQkJCX0KLQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCQkJCUpBWFBMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBicmVha3BvaW50UmVtb3ZlZChJQnJlYWtwb2ludCBicmVha3BvaW50LCBJTWFya2VyRGVsdGEgZGVsdGEpIHsKLQkJaWYgKHN1cHBvcnRzQnJlYWtwb2ludChicmVha3BvaW50KSkgewotCQkJdHJ5IHsKLQkJCQlJTGluZUJyZWFrcG9pbnQgbGIgPSAoSUxpbmVCcmVha3BvaW50KSBicmVha3BvaW50OwotCQkJCUlNYXJrZXIgbWFya2VyID0gbGIuZ2V0TWFya2VyKCk7Ci0JCQkJaWYgKG1hcmtlciAhPSBudWxsKSB7Ci0JCQkJCVVSTCBmaWxlID0gbWFya2VyLmdldFJlc291cmNlKCkuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKQotCQkJCQkJCS50b1VSSSgpLnRvVVJMKCk7Ci0JCQkJCXNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQKLQkJCQkJCQkrICIgIiArIGZpbGUgKyAiICIgKyBsYi5nZXRMaW5lTnVtYmVyKCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl9Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQlKQVhQTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQkJSkFYUExhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBicmVha3BvaW50Q2hhbmdlZChJQnJlYWtwb2ludCBicmVha3BvaW50LCBJTWFya2VyRGVsdGEgZGVsdGEpIHsKLQkJaWYgKHN1cHBvcnRzQnJlYWtwb2ludChicmVha3BvaW50KSkgewotCQkJdHJ5IHsKLQkJCQlpZiAoYnJlYWtwb2ludC5pc0VuYWJsZWQoKSkgewotCQkJCQlicmVha3BvaW50QWRkZWQoYnJlYWtwb2ludCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYnJlYWtwb2ludFJlbW92ZWQoYnJlYWtwb2ludCwgbnVsbCk7Ci0JCQkJfQotCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5EaXNjb25uZWN0KCkgewotCQkvLyBUT0RPIGltcGxlbWVudCBkaXNjb25uZWN0Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJLy8gVE9ETyBpbXBsZW1lbnQgZGlzY29ubmVjdAotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRGlzY29ubmVjdGVkKCkgewotCQkvLyBUT0RPIGltcGxlbWVudCBkaXNjb25uZWN0Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1N0b3JhZ2VSZXRyaWV2YWwoKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgSU1lbW9yeUJsb2NrIGdldE1lbW9yeUJsb2NrKGxvbmcgc3RhcnRBZGRyZXNzLCBsb25nIGxlbmd0aCkKLQkJCXRocm93cyBEZWJ1Z0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCByZWFkeSgpIHsKLQkJZmlyZUNyZWF0aW9uRXZlbnQoKTsKLQkJaW5zdGFsbERlZmVycmVkQnJlYWtwb2ludHMoKTsKLQkJdHJ5IHsKLQkJCXNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfU1RBUlQpOwotCQl9IGNhdGNoIChEZWJ1Z0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW5zdGFsbCBicmVha3BvaW50cyB0aGF0IGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgYnJlYWtwb2ludAotCSAqIG1hbmFnZXIuCi0JICovCi0JcHJpdmF0ZSB2b2lkIGluc3RhbGxEZWZlcnJlZEJyZWFrcG9pbnRzKCkgewotCQlJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzID0gRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkuZ2V0QnJlYWtwb2ludHMoCi0JCQkJCQlJWFNMQ29uc3RhbnRzLklEX1hTTF9ERUJVR19NT0RFTCk7Ci0JCWZvciAoSUJyZWFrcG9pbnQgZWxlbWVudCA6IGJyZWFrcG9pbnRzKSB7Ci0JCQlicmVha3BvaW50QWRkZWQoZWxlbWVudCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVybWluYXRlZCgpIHsKLQkJc3VzcGVuZGVkID0gdHJ1ZTsKLQkJRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJyZWFrcG9pbnRNYW5hZ2VyKCkucmVtb3ZlQnJlYWtwb2ludExpc3RlbmVyKHRoaXMpOwotCQl0aHJlYWRzID0gbmV3IElUaHJlYWRbMF07Ci0JCWZpcmVUZXJtaW5hdGVFdmVudCgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWVzIGluIHRoZSB0YXJnZXQuCi0JICovCi0JcHVibGljIElTdGFja0ZyYW1lW10gZ2V0U3RhY2tGcmFtZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzeW5jaHJvbml6ZWQgKFNUQUNLX0ZSQU1FU19MT0NLKSB7Ci0JCQlpZiAoc3RhbGUpIHsKLQkJCQlzdGFsZSA9IGZhbHNlOwotCQkJCVN0cmluZyBmcmFtZXNEYXRhID0gc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEFDSyk7Ci0JCQkJU3RyaW5nW10gZnJhbWVzID0gZnJhbWVzRGF0YS5zcGxpdCgiXFwkXFwkXFwkIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlJU3RhY2tGcmFtZVtdIHNmID0gbmV3IElTdGFja0ZyYW1lW2ZyYW1lcy5sZW5ndGhdOwotCQkJCUxpc3Q8SVN0YWNrRnJhbWU+IGN1cnJlbnRGcmFtZXMgPSBBcnJheXMKLQkJCQkJCS5hc0xpc3Qoc3RhY2tGcmFtZXNDYWNoZSk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJU3RyaW5nIGRhdGEgPSBmcmFtZXNbaV07Ci0JCQkJCVhTTFN0YWNrRnJhbWUgZnJhbWUgPSBuZXcgWFNMU3RhY2tGcmFtZSh0aHJlYWQsIGRhdGEsIGkpOwotCQkJCQlpbnQgaW5kZXg7Ci0JCQkJCWlmICgoaW5kZXggPSBjdXJyZW50RnJhbWVzLmluZGV4T2YoZnJhbWUpKSAhPSAtMSkgewotCQkJCQkJWFNMU3RhY2tGcmFtZSBjdXJyID0gKFhTTFN0YWNrRnJhbWUpIGN1cnJlbnRGcmFtZXMKLQkJCQkJCQkJLmdldChpbmRleCk7Ci0JCQkJCQljdXJyLnNldExpbmVOdW1iZXIoZnJhbWUuZ2V0TGluZU51bWJlcigpKTsKLQkJCQkJCWN1cnIuc2V0VmFyaWFibGVzKGZyYW1lLmdldFZhcmlhYmxlcygpKTsKLQkJCQkJCWZyYW1lID0gY3VycjsKLQkJCQkJfQotCQkJCQlzZltmcmFtZXMubGVuZ3RoIC0gaSAtIDFdID0gZnJhbWU7Ci0JCQkJfQotCQkJCXN0YWNrRnJhbWVzQ2FjaGUgPSBzZjsKLQkJCX0KLQkJCXJldHVybiBzdGFja0ZyYW1lc0NhY2hlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlc3NldFN0YWNrRnJhbWVzQ2FjaGUoKSB7Ci0JCXN0YWxlID0gdHJ1ZTsKLQkJc3luY2hyb25pemVkIChWQUxVRV9NQVBfTE9DSykgewotCQkJdmFsdWVNYXBDYWNoZS5jbGVhcigpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU2luZ2xlIHN0ZXAgdGhlIGludGVycHJldGVyLgotCSAqLwotCXB1YmxpYyB2b2lkIHN0ZXBPdmVyKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEVQX09WRVIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBJbnRvKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc2VuZFJlcXVlc3QoRGVidWdDb25zdGFudHMuUkVRVUVTVF9TVEVQX0lOVE8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBSZXR1cm4oKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzZW5kUmVxdWVzdChEZWJ1Z0NvbnN0YW50cy5SRVFVRVNUX1NURVBfUkVUVVJOKTsKLQl9Ci0KLQlwdWJsaWMgWFNMVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IHZhcklkKSB0aHJvd3MgRGVidWdFeGNlcHRpb24gewotCQlzeW5jaHJvbml6ZWQgKHZhcmlhYmxlTWFwQ2FjaGUpIHsKLQkJCVhTTFZhcmlhYmxlIHZhciA9IHZhcmlhYmxlTWFwQ2FjaGUuZ2V0KHZhcklkKTsKLQkJCWlmICh2YXIgPT0gbnVsbCkgewotCQkJCXZhciA9IG5ldyBYU0xWYXJpYWJsZSh0aGlzLCB2YXJJZCk7Ci0JCQkJU3RyaW5nIHJlcyA9IHNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfVkFSSUFCTEUKLQkJCQkJCSsgIiAiICsgdmFySWQpOyAvLyROT04tTkxTLTEkCi0JCQkJU3RyaW5nW10gZGF0YSA9IHJlcy5zcGxpdCgiJiIpOyAvLyROT04tTkxTLTEkCi0JCQkJdmFyLnNldFNjb3BlKGRhdGFbMF0pOwotCQkJCXZhci5zZXROYW1lKGRhdGFbMV0pOwotCQkJCXZhcmlhYmxlTWFwQ2FjaGUucHV0KHZhcklkLCB2YXIpOwotCQkJfQotCQkJcmV0dXJuIHZhcjsKLQkJfQotCX0KLQotCXB1YmxpYyBJVmFsdWUgZ2V0VmFyaWFibGVWYWx1ZShYU0xWYXJpYWJsZSB2YXJpYWJsZSkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJc3luY2hyb25pemVkIChWQUxVRV9NQVBfTE9DSykgewotCQkJWFNMVmFsdWUgdmFsdWUgPSAoWFNMVmFsdWUpIHZhbHVlTWFwQ2FjaGUuZ2V0KHZhcmlhYmxlKTsKLQkJCWlmICh2YWx1ZSA9PSBudWxsKSB7Ci0JCQkJaWYgKGlzU3VzcGVuZGVkKCkpIHsKLQkJCQkJU3RyaW5nIHJlcyA9IHNlbmRSZXF1ZXN0KERlYnVnQ29uc3RhbnRzLlJFUVVFU1RfVkFMVUUKLQkJCQkJCQkrICIgIiArIHZhcmlhYmxlLmdldElkKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJCVN0cmluZ1tdIGRhdGEgPSByZXMuc3BsaXQoIiYiKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlTdHJpbmcgdHlwZSA9IGRhdGFbMF07Ci0JCQkJCVN0cmluZyB0aGV2YWw7Ci0JCQkJCWlmIChkYXRhLmxlbmd0aCA+IDEpCi0JCQkJCQl0aGV2YWwgPSBkYXRhWzFdOwotCQkJCQllbHNlCi0JCQkJCQl0aGV2YWwgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQkJCQl2YWx1ZSA9IG5ldyBYU0xWYWx1ZSh0aGlzLCB0eXBlLCB0aGV2YWwpOwotCQkJCQl2YWx1ZU1hcENhY2hlLnB1dCh2YXJpYWJsZSwgdmFsdWUpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8vIGFueXRoaW5nIGFzIGxvbmcgYXMgbm90IG51bGwhCi0JCQkJCXZhbHVlID0gbmV3IFhTTFZhbHVlKHRoaXMsICJHIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gdmFsdWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBzZW5kUmVxdWVzdChTdHJpbmcgcmVxdWVzdCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHJlc3BvbnNlID0gbnVsbDsKLQkJc3luY2hyb25pemVkIChXUklURV9MT0NLKSB7Ci0vLwkJCWlmIChEZWJ1Zy5kZWJ1Z0xhdW5jaGVyKSB7Ci0vLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJFUVVFU1Q6ICIgKyByZXF1ZXN0KTsKLS8vCQkJfQotCQkJcmVxdWVzdFdyaXRlci5wcmludGxuKHJlcXVlc3QpOwotCQkJcmVxdWVzdFdyaXRlci5mbHVzaCgpOwotCQkJdHJ5IHsKLQkJCQkvLyB3YWl0IGZvciByZXNwb25zZQotCQkJCXJlc3BvbnNlID0gcmVxdWVzdFJlYWRlci5yZWFkTGluZSgpOwotLy8JCQkJaWYgKERlYnVnLmRlYnVnTGF1bmNoZXIpIHsKLS8vCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJFU1BPTlNFOiAiICsgcmVzcG9uc2UpOwotLy8JCQkJfQotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWFib3J0KE1lc3NhZ2VzLmdldFN0cmluZygiWFNMRGVidWdUYXJnZXQuMTkiKSArIHJlcXVlc3QsIGUpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3BvbnNlOwotCX0KLQotCXByaXZhdGUgdm9pZCBicmVha3BvaW50SGl0KFN0cmluZyBldmVudCkgewotCQkvLyBkZXRlcm1pbmUgd2hpY2ggYnJlYWtwb2ludCB3YXMgaGl0LCBhbmQgc2V0IHRoZSB0aHJlYWQncyBicmVha3BvaW50Ci0JCWludCBsYXN0U3BhY2UgPSBldmVudC5sYXN0SW5kZXhPZignICcpOwotCQlpZiAobGFzdFNwYWNlID4gMCkgewotCQkJU3RyaW5nIGxpbmUgPSBldmVudC5zdWJzdHJpbmcobGFzdFNwYWNlICsgMSk7Ci0JCQlpbnQgbGluZU51bWJlciA9IEludGVnZXIucGFyc2VJbnQobGluZSk7Ci0JCQlJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzID0gRGVidWdQbHVnaW4uZ2V0RGVmYXVsdCgpCi0JCQkJCS5nZXRCcmVha3BvaW50TWFuYWdlcigpLmdldEJyZWFrcG9pbnRzKAotCQkJCQkJCUlYU0xDb25zdGFudHMuSURfWFNMX0RFQlVHX01PREVMKTsKLQkJCWZvciAoSUJyZWFrcG9pbnQgYnJlYWtwb2ludCA6IGJyZWFrcG9pbnRzKSB7Ci0JCQkJaWYgKHN1cHBvcnRzQnJlYWtwb2ludChicmVha3BvaW50KSkgewotCQkJCQlpZiAoYnJlYWtwb2ludCBpbnN0YW5jZW9mIElMaW5lQnJlYWtwb2ludCkgewotCQkJCQkJSUxpbmVCcmVha3BvaW50IGxpbmVCcmVha3BvaW50ID0gKElMaW5lQnJlYWtwb2ludCkgYnJlYWtwb2ludDsKLQkJCQkJCXRyeSB7Ci0JCQkJCQkJaWYgKGxpbmVCcmVha3BvaW50LmdldExpbmVOdW1iZXIoKSA9PSBsaW5lTnVtYmVyKSB7Ci0JCQkJCQkJCXRocmVhZAotCQkJCQkJCQkJCS5zZXRCcmVha3BvaW50cyhuZXcgSUJyZWFrcG9pbnRbXSB7IGJyZWFrcG9pbnQgfSk7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0KLQkJCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXN1c3BlbmRlZChEZWJ1Z0V2ZW50LkJSRUFLUE9JTlQpOwotCX0KLQotCXByaXZhdGUgY2xhc3MgRXZlbnREaXNwYXRjaEpvYiBleHRlbmRzIEpvYiB7Ci0KLQkJcHVibGljIEV2ZW50RGlzcGF0Y2hKb2IoKSB7Ci0JCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIlhTTERlYnVnVGFyZ2V0LjIwIikpOyAvLyROT04tTkxTLTEkCi0JCQlzZXRTeXN0ZW0odHJ1ZSk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJU3RyaW5nIGV2ZW50ID0gIiI7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICghaXNUZXJtaW5hdGVkKCkgJiYgZXZlbnQgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWV2ZW50ID0gZXZlbnRSZWFkZXIucmVhZExpbmUoKTsKLQkJCQkJaWYgKGV2ZW50ICE9IG51bGwpIHsKLQkJCQkJCXRocmVhZC5zZXRCcmVha3BvaW50cyhudWxsKTsKLQkJCQkJCXRocmVhZC5zZXRTdGVwcGluZyhmYWxzZSk7Ci0JCQkJCQlpZiAoZXZlbnQuZXF1YWxzKCJyZWFkeSIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQl7Ci0JCQkJCQkJcmVhZHkoKTsKLQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuZXF1YWxzKCJzdG9wcGVkIikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCXsKLQkJCQkJCQl0cnkgewotCQkJCQkJCQl0ZXJtaW5hdGUoKTsKLQkJCQkJCQl9IGNhdGNoIChEZWJ1Z0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIGlmIChldmVudC5lcXVhbHMoInRlcm1pbmF0ZWQiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJewotCQkJCQkJCXRlcm1pbmF0ZWQoKTsKLQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuc3RhcnRzV2l0aCgicmVzdW1lZCIpKSAvLyROT04tTkxTLTEkCi0JCQkJCQl7Ci0JCQkJCQkJaWYgKGV2ZW50LmVuZHNXaXRoKCJzdGVwIikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCXRocmVhZC5zZXRTdGVwcGluZyh0cnVlKTsKLQkJCQkJCQkJcmVzdW1lZChEZWJ1Z0V2ZW50LlNURVBfT1ZFUik7Ci0JCQkJCQkJfSBlbHNlIGlmIChldmVudC5lbmRzV2l0aCgiY2xpZW50IikpIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCXJlc3VtZWQoRGVidWdFdmVudC5DTElFTlRfUkVRVUVTVCk7Ci0JCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJZGVidWdFdmVudE1zZyhldmVudCk7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIGlmIChldmVudC5zdGFydHNXaXRoKCJzdXNwZW5kZWQiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJewotCQkJCQkJCS8vIGNsZWFyIGRvd24gdGhlIGZyYW1lcyBzbyB0aGF0IHRoZXkgYXJlIHJlLWZldGNoZWQKLQkJCQkJCQlyZXNzZXRTdGFja0ZyYW1lc0NhY2hlKCk7Ci0JCQkJCQkJaWYgKGV2ZW50LmVuZHNXaXRoKCJjbGllbnQiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJCXsKLQkJCQkJCQkJc3VzcGVuZGVkKERlYnVnRXZlbnQuQ0xJRU5UX1JFUVVFU1QpOwotCQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuZW5kc1dpdGgoInN0ZXAiKSkgLy8kTk9OLU5MUy0xJAotCQkJCQkJCXsKLQkJCQkJCQkJc3VzcGVuZGVkKERlYnVnRXZlbnQuU1RFUF9FTkQpOwotCQkJCQkJCX0gZWxzZSBpZiAoZXZlbnQuaW5kZXhPZigiYnJlYWtwb2ludCIpID49IDApIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQl7Ci0JCQkJCQkJCWJyZWFrcG9pbnRIaXQoZXZlbnQpOwotCQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJCWRlYnVnRXZlbnRNc2coZXZlbnQpOwotCQkJCQkJCX0KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJZGVidWdFdmVudE1zZyhldmVudCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCXRlcm1pbmF0ZWQoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJfQotCi0JCXByaXZhdGUgdm9pZCBkZWJ1Z0V2ZW50TXNnKFN0cmluZyBldmVudCkgewotLy8JCQlpZiAoRGVidWcuZGVidWdMYXVuY2hlcikgewotLy8JCQkJIFN5c3RlbS5vdXQucHJpbnRsbigiRGlkIG5vdCB1bmRlcnN0YW5kIGV2ZW50OiIgKyBldmVudCk7Ci0vLwkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmNsYXNzcGF0aCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA0ZTg2MS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uY3ZzaWdub3JlIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGEyNTVkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYnVpbGQueG1sCi1qYXZhQ29tcGlsZXIuLi5hcmdzCi10ZW1wLmZvbGRlcgotQGRvdApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YjQxZjkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYWNjOGYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaHUgSmFuIDAzIDIyOjI0OjI1IEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OGY3ZWUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNGcmkgSmFuIDA0IDAxOjAyOjEzIEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmYzNlZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jV2VkIEp1bCAzMCAyMDo1Njo1NiBCU1QgMjAwOAotY29tcGlsZXJzLmYudW5yZXNvbHZlZC1mZWF0dXJlcz0xCi1jb21waWxlcnMuZi51bnJlc29sdmVkLXBsdWdpbnM9MQotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmRpc2NvdXJhZ2VkLWNsYXNzPTEKLWNvbXBpbGVycy5wLmludGVybmFsPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctYnVuZGxlLWNsYXNzcGF0aC1lbnRyaWVzPTAKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTEKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MQotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24taWRlbnRpZmllcj0xCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTEKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5zLmNyZWF0ZS1kb2NzPWZhbHNlCi1jb21waWxlcnMucy5kb2MtZm9sZGVyPWRvYwotY29tcGlsZXJzLnMub3Blbi10YWdzPTEKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ODUzNjUuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcztidW5kbGUtdmVyc2lvbj0iWzMuMi4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLmlkZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUNsYXNzUGF0aDogLgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLAotIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNzgzNGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1qYXJzLmNvbXBpbGUub3JkZXIgPSAuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YzUxNWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcKLUJ1bmRsZS1OYW1lLjAgPSBYU0wgVHJhbnNmb3JtIExhdW5jaGluZyAoSW5jdWJhdGluZykKLWxhdW5jaENvbmZpZ3VyYXRpb25UeXBlLm5hbWUuMCA9IFhTTAotc291cmNlTG9jYXRvci5uYW1lLjAgPSBYU0xUIFNvdXJjZSBMb29rdXAgRGlyZWN0b3IKLWV4dGVuc2lvbi1wb2ludC5uYW1lLjAgPSBYU0xUIFByb2Nlc3NvciBJbnZva2VyCi1leHRlbnNpb24tcG9pbnQubmFtZS4xID0gWFNMVCBQcm9jZXNzb3IgVHlwZQotZXh0ZW5zaW9uLXBvaW50Lm5hbWUuMiA9IFhTTFQgUHJvY2Vzc29yCi1leHRlbnNpb24tcG9pbnQubmFtZS4zID0gWFNMVCBEZWJ1Z2dlcgotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjFlNmEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5sYXVuY2hDb25maWd1cmF0aW9uVHlwZXMiPgotCQk8bGF1bmNoQ29uZmlndXJhdGlvblR5cGUKLSAgICAgICAgICAgIHNvdXJjZUxvY2F0b3JJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuc291cmNlTG9va3VwRGlyZWN0b3IiCi0gICAgICAgICAgICBzb3VyY2VQYXRoQ29tcHV0ZXJJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuc291cmNlUGF0aENvbXB1dGVyIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIgotCQkJbmFtZT0iJWxhdW5jaENvbmZpZ3VyYXRpb25UeXBlLm5hbWUuMCIgLz4KLQk8L2V4dGVuc2lvbj4KLQkKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZUxvY2F0b3JzIj4KLSAgICAgIDxzb3VyY2VMb2NhdG9yCi0gICAgICAgICAgICBuYW1lPSIlc291cmNlTG9jYXRvci5uYW1lLjAiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuWFNMVFNvdXJjZUxvb2t1cERpcmVjdG9yIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLnNvdXJjZUxvb2t1cERpcmVjdG9yIj4KLSAgICAgIDwvc291cmNlTG9jYXRvcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2VQYXRoQ29tcHV0ZXJzIj4KLSAgICAgIDxzb3VyY2VQYXRoQ29tcHV0ZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5YU0xUU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuc291cmNlUGF0aENvbXB1dGVyIj4KLSAgICAgIDwvc291cmNlUGF0aENvbXB1dGVyPgotICAgPC9leHRlbnNpb24+Ci0JCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZGVidWcuY29yZS5icmVha3BvaW50cyI+Ci0gICAgICA8YnJlYWtwb2ludAotICAgICAgCQlpZD0ieHNsTGluZUJyZWFrcG9pbnQiCi0gICAgICAgICAgICBtYXJrZXJUeXBlPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy54c2xMaW5lQnJlYWtwb2ludE1hcmtlciIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xMaW5lQnJlYWtwb2ludCI+Ci0gICAgICA8L2JyZWFrcG9pbnQ+Ci0gICA8L2V4dGVuc2lvbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgaWQ9InhzbExpbmVCcmVha3BvaW50TWFya2VyIgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLm1hcmtlcnMiPgotICAgICAgPHN1cGVyCi0gICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLmxpbmVCcmVha3BvaW50TWFya2VyIj4KLSAgICAgIDwvc3VwZXI+Ci0gICAgICA8cGVyc2lzdGVudAotICAgICAgICAgICAgdmFsdWU9InRydWUiPgotICAgICAgPC9wZXJzaXN0ZW50PgotICAgPC9leHRlbnNpb24+Ci0JCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL0xhdW5jaGluZ1BsdWdpbi5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvTGF1bmNoaW5nUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWJiMTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvTGF1bmNoaW5nUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIExhdW5jaGluZ1BsdWdpbiBleHRlbmRzIFBsdWdpbgotewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmciOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgTGF1bmNoaW5nUGx1Z2luIHBsdWdpbjsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBMYXVuY2hpbmdQbHVnaW4oKQotCXsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqIAotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgTGF1bmNoaW5nUGx1Z2luIGdldERlZmF1bHQoKQotCXsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKEV4Y2VwdGlvbiBlKQotCXsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFBMVUdJTl9JRCwgMCwgIiIsIGUpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coQ29yZUV4Y2VwdGlvbiBlKQotCXsKLQkJZ2V0RGVmYXVsdCgpLmdldExvZygpLmxvZyhlLmdldFN0YXR1cygpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE1MzgyNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZzsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCi0JCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJdHJ5IHsKLQkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvVXRpbHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1V0aWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZmIyZWQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci0KLXB1YmxpYyBjbGFzcyBVdGlscwotewotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RmlsZUxvY2F0aW9uKFN0cmluZyBidW5kbGVJZCwgU3RyaW5nIHBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgbG9jYXRpb24gPSBudWxsOwotCQl0cnkKLQkJewotCQkJVVJMIHVybCA9IEZpbGVMb2NhdG9yLmZpbmQoUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZUlkKSwgbmV3IFBhdGgocGF0aCksIG51bGwpOwotCQkJaWYgKHVybCAhPSBudWxsKQotCQkJewotCQkJCVVSTCBmaWxlVXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZVVybC5nZXRGaWxlKCkpOwotCQkJCWxvY2F0aW9uID0gZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5nZXRTdHJpbmcoIlV0aWxzLjAiKSArIHBhdGggKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlV0aWxzLjEiKSArIGJ1bmRsZUlkLCBlKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQl9IAotCQlyZXR1cm4gbG9jYXRpb247Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGx1Z2luTG9jYXRpb24oU3RyaW5nIGJ1bmRsZUlkKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIGxvY2F0aW9uID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCVVSTCB1cmwgPSBuZXcgVVJMKCJwbGF0Zm9ybTovcGx1Z2luLyIrYnVuZGxlSWQpOwotCQkJaWYgKHVybCAhPSBudWxsKQotCQkJewotCQkJCVVSTCBmaWxlVXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZVVybC5nZXRGaWxlKCkpOwotCQkJCWxvY2F0aW9uID0gZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5nZXRTdHJpbmcoIlV0aWxzLjAiKSArIGJ1bmRsZUlkICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJVdGlscy4xIikgKyBidW5kbGVJZCwgZSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJfSAKLQkJcmV0dXJuIGxvY2F0aW9uOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMUHJvcGVydHlUZXN0ZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFByb3BlcnR5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZGQ2YjMuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvWFNMUHJvcGVydHlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKLQotcHVibGljIGNsYXNzIFhTTFByb3BlcnR5VGVzdGVyIGV4dGVuZHMgUHJvcGVydHlUZXN0ZXIKLXsKLQlwdWJsaWMgYm9vbGVhbiB0ZXN0KE9iamVjdCBhcmcwLCBTdHJpbmcgYXJnMSwgT2JqZWN0W10gYXJnMiwgT2JqZWN0IGFyZzMpCi0JewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xUU291cmNlTG9va3VwRGlyZWN0b3IuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBEaXJlY3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTNlNzNjLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBEaXJlY3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5BYnN0cmFjdFNvdXJjZUxvb2t1cERpcmVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuc291cmNlbG9va3VwLklTb3VyY2VMb29rdXBQYXJ0aWNpcGFudDsKLQotcHVibGljIGNsYXNzIFhTTFRTb3VyY2VMb29rdXBEaXJlY3RvciBleHRlbmRzIEFic3RyYWN0U291cmNlTG9va3VwRGlyZWN0b3IKLXsKLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFydGljaXBhbnRzKCkKLQl7Ci0JCWFkZFBhcnRpY2lwYW50cyhuZXcgSVNvdXJjZUxvb2t1cFBhcnRpY2lwYW50W117IG5ldyBYU0xUU291cmNlTG9va3VwUGFydGljaXBhbnQoKSB9KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xUU291cmNlTG9va3VwUGFydGljaXBhbnQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTIzMjg5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5BYnN0cmFjdFNvdXJjZUxvb2t1cFBhcnRpY2lwYW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFN0YWNrRnJhbWU7Ci0KLS8qKgotICogVHJhbnNsYXRlIGEgc3RhY2sgZnJhbWUgaW50byBhIHNvdXJjZSBmaWxlIG5hbWUKLSAqLwotcHVibGljIGNsYXNzIFhTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudCBleHRlbmRzIEFic3RyYWN0U291cmNlTG9va3VwUGFydGljaXBhbnQKLXsKLQlwdWJsaWMgU3RyaW5nIGdldFNvdXJjZU5hbWUoT2JqZWN0IG9iamVjdCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChvYmplY3QgaW5zdGFuY2VvZiBYU0xTdGFja0ZyYW1lKQotCQl7Ci0JCQlyZXR1cm4gKChYU0xTdGFja0ZyYW1lKSBvYmplY3QpLmdldFNvdXJjZU5hbWUoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9YU0xUU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmViNjk4Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvaW50ZXJuYWwvbGF1bmNoaW5nL1hTTFRTb3VyY2VQYXRoQ29tcHV0ZXJEZWxlZ2F0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS52YXJpYWJsZXMuVmFyaWFibGVzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuSVNvdXJjZUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLnNvdXJjZWxvb2t1cC5JU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuY29udGFpbmVycy5EaXJlY3RvcnlTb3VyY2VDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuY29udGFpbmVycy5Gb2xkZXJTb3VyY2VDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5zb3VyY2Vsb29rdXAuY29udGFpbmVycy5Qcm9qZWN0U291cmNlQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaFBpcGVsaW5lOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hUcmFuc2Zvcm07Ci0KLXB1YmxpYyBjbGFzcyBYU0xUU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUgaW1wbGVtZW50cyBJU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUKLXsKLQlwdWJsaWMgSVNvdXJjZUNvbnRhaW5lcltdIGNvbXB1dGVTb3VyY2VDb250YWluZXJzKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCUxpc3Q8SVNvdXJjZUNvbnRhaW5lcj4gY29udGFpbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNvdXJjZUNvbnRhaW5lcj4oKTsKLQotCQlTdHJpbmcgc291cmNlRmlsZUV4cHIgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfSU5QVVRfRklMRSwgKFN0cmluZykgbnVsbCk7Ci0JCUlQYXRoIHNvdXJjZUZpbGUgPSBnZXRTdWJzdGl0dXRlZFBhdGgoc291cmNlRmlsZUV4cHIpOwotCQlMYXVuY2hQaXBlbGluZSBwaXBlbGluZSA9IGh5ZHJhdGVQaXBlbGluZShjb25maWd1cmF0aW9uKTsKLQotCQkvLyBUT0RPIGhhdmUgc29tZSB3YXkgb2Yga25vd2luZyB3aGV0aGVyIGl0IGlzIGFuIElSZXNvdXJjZSBvciBub3QKLQkJY29udGFpbmVycy5hZGQobmV3IERpcmVjdG9yeVNvdXJjZUNvbnRhaW5lcihzb3VyY2VGaWxlLCBmYWxzZSkpOwotCi0JCWZvciAoSXRlcmF0b3I8Pz4gaXRlciA9IHBpcGVsaW5lLmdldFRyYW5zZm9ybURlZnMoKS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspCi0JCXsKLQkJCUxhdW5jaFRyYW5zZm9ybSB0cmFuc2Zvcm0gPSAoTGF1bmNoVHJhbnNmb3JtKSBpdGVyLm5leHQoKTsKLQkJCUlQYXRoIHBhdGggPSB0cmFuc2Zvcm0uZ2V0UGF0aCgpOwotCQkJSVNvdXJjZUNvbnRhaW5lciBzb3VyY2VDb250YWluZXIgPSBudWxsOwotCQkJaWYgKHRyYW5zZm9ybS5nZXRQYXRoVHlwZSgpLmVxdWFscyhMYXVuY2hUcmFuc2Zvcm0uUkVTT1VSQ0VfVFlQRSkpCi0JCQl7Ci0JCQkJSVJlc291cmNlIHJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHBhdGgpOwotCQkJCUlDb250YWluZXIgY29udGFpbmVyID0gcmVzb3VyY2UuZ2V0UGFyZW50KCk7Ci0JCQkJaWYgKGNvbnRhaW5lci5nZXRUeXBlKCkgPT0gSVJlc291cmNlLlBST0pFQ1QpCi0JCQkJewotCQkJCQlzb3VyY2VDb250YWluZXIgPSBuZXcgUHJvamVjdFNvdXJjZUNvbnRhaW5lcigoSVByb2plY3QpIGNvbnRhaW5lciwgZmFsc2UpOwotCQkJCX0KLQkJCQllbHNlIGlmIChjb250YWluZXIuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GT0xERVIpCi0JCQkJewotCQkJCQlzb3VyY2VDb250YWluZXIgPSBuZXcgRm9sZGVyU291cmNlQ29udGFpbmVyKGNvbnRhaW5lciwgZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlzb3VyY2VDb250YWluZXIgPSBuZXcgRGlyZWN0b3J5U291cmNlQ29udGFpbmVyKHBhdGgsIGZhbHNlKTsKLQkJCX0KLQkJCWNvbnRhaW5lcnMuYWRkKHNvdXJjZUNvbnRhaW5lcik7Ci0JCX0KLQotCQkvLyBpZiAoc291cmNlQ29udGFpbmVyID09IG51bGwpCi0JCS8vIHsKLQkJLy8gc291cmNlQ29udGFpbmVyID0gbmV3IFdvcmtzcGFjZVNvdXJjZUNvbnRhaW5lcigpOwotCQkvLyB9Ci0KLQkJcmV0dXJuIChJU291cmNlQ29udGFpbmVyW10pIGNvbnRhaW5lcnMudG9BcnJheShuZXcgSVNvdXJjZUNvbnRhaW5lclswXSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGF1bmNoUGlwZWxpbmUgaHlkcmF0ZVBpcGVsaW5lKElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlMYXVuY2hQaXBlbGluZSBwaXBlbGluZSA9IG51bGw7Ci0JCVN0cmluZyBzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX1BJUEVMSU5FLCAoU3RyaW5nKSBudWxsKTsKLQkJaWYgKHMgIT0gbnVsbCAmJiBzLmxlbmd0aCgpID4gMCkKLQkJewotCQkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ocy5nZXRCeXRlcygpKTsKLQkJCXBpcGVsaW5lID0gTGF1bmNoUGlwZWxpbmUuZnJvbVhNTChpbnB1dFN0cmVhbSk7Ci0JCX0KLQkJcmV0dXJuIHBpcGVsaW5lOwotCX0KLQotCXByaXZhdGUgc3RhdGljIElQYXRoIGdldFN1YnN0aXR1dGVkUGF0aChTdHJpbmcgcGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCWlmIChwYXRoICE9IG51bGwpCi0JCXsKLQkJCXBhdGggPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24ocGF0aCk7Ci0JCQlyZXR1cm4gbmV3IFBhdGgocGF0aCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnRlcm5hbC9sYXVuY2hpbmcvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0NjJlYy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2ludGVybmFsL2xhdW5jaGluZy9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1VdGlscy4wPUVycm9yIGRldGVybWluaW5nIGphciBmaWxlIGxvY2F0aW9uOiAKLVV0aWxzLjE9XCBmcm9tIGJ1bmRsZTogCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNDcyNWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JTlBVVF9GSUxFID0gTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9JTlBVVF9GSUxFIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX1VTRV9ERUZBVUxUX09VVFBVVF9GSUxFIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfT1VUUFVUX0ZPTERFUiA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfT1VUUFVUX0ZPTERFUiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX09VVFBVVF9GSUxFTkFNRSA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfT1VUUFVUX0ZJTEVOQU1FIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0xBVU5DSF9DT05GSUdfVFlQRSA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLmxhdW5jaENvbmZpZ3VyYXRpb25UeXBlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUElQRUxJTkUgPSBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lEICsgIi5BVFRSX1BJUEVMSU5FIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfT1BFTl9GSUxFID0gTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCArICIuQVRUUl9PUEVOX0ZJTEUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9GT1JNQVRfRklMRSA9IExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQgKyAiLkFUVFJfRk9STUFUX0ZJTEUiOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xUUnVudGltZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvWFNMVFJ1bnRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QyOTI3ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9YU0xUUnVudGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzLlZhcmlhYmxlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBYU0xUUnVudGltZQotewotCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBORVhUX0lEX0xPQ0sgPSBuZXcgYnl0ZVswXTsKLQlwcml2YXRlIHN0YXRpYyBieXRlW10gUkVHSVNUUllfTE9DSyA9IG5ldyBieXRlWzBdOwotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGxhc3RTdGFuZGluSUQ7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlUHJlZmVyZW5jZXMoKQotCXsKLQkJTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcygpCi0JewotCQlyZXR1cm4gTGF1bmNoaW5nUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSVBhdGggZGVmYXVsdE91dHB1dEZpbGVGb3JJbnB1dEZpbGUoU3RyaW5nIGlucHV0RmlsZUV4cHJlc3Npb24pIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlTdHJpbmcgZmlsZSA9IFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihpbnB1dEZpbGVFeHByZXNzaW9uKTsKLQkJSVBhdGggaW5wdXRGaWxlUGF0aCA9IG5ldyBQYXRoKGZpbGUpOwotCQlpbnB1dEZpbGVQYXRoID0gaW5wdXRGaWxlUGF0aC5yZW1vdmVGaWxlRXh0ZW5zaW9uKCk7Ci0JCWlucHV0RmlsZVBhdGggPSBpbnB1dEZpbGVQYXRoLmFkZEZpbGVFeHRlbnNpb24oIm91dC54bWwiKTsKLQkJcmV0dXJuIGlucHV0RmlsZVBhdGg7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvQmFzZUxhdW5jaEhlbHBlci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0Jhc2VMYXVuY2hIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ2ZGFiNC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvQmFzZUxhdW5jaEhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5WYXJpYWJsZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xUUnVudGltZTsKLQotcHVibGljIGNsYXNzIEJhc2VMYXVuY2hIZWxwZXIKLXsKLQlwcml2YXRlIGZpbmFsIFVSTCBzb3VyY2U7Ci0JcHJpdmF0ZSBmaW5hbCBGaWxlIHRhcmdldDsKLQlwcm90ZWN0ZWQgZmluYWwgTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmU7Ci0JcHJpdmF0ZSBpbnQgcmVxdWVzdFBvcnQgPSAtMTsKLQlwcml2YXRlIGludCBldmVudFBvcnQgPSAtMTsKLQlwcml2YXRlIGludCBnZW5lcmF0ZVBvcnQgPSAtMTsKLQlwcml2YXRlIGZpbmFsIGJvb2xlYW4gb3BlbkZpbGVPbkNvbXBsZXRpb247Ci0JcHJpdmF0ZSBmaW5hbCBib29sZWFuIGZvcm1hdEZpbGVPbkNvbXBsZXRpb247Ci0KLQlwdWJsaWMgQmFzZUxhdW5jaEhlbHBlcihJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJc291cmNlID0gaHlkcmF0ZVNvdXJjZUZpbGVVUkwoY29uZmlndXJhdGlvbik7Ci0JCXRhcmdldCA9IGh5ZHJhdGVPdXRwdXRGaWxlKGNvbmZpZ3VyYXRpb24pOwotCQlwaXBlbGluZSA9IGh5ZHJhdGVQaXBlbGluZShjb25maWd1cmF0aW9uKTsKLQkJb3BlbkZpbGVPbkNvbXBsZXRpb24gPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1BFTl9GSUxFLCB0cnVlKTsKLQkJZm9ybWF0RmlsZU9uQ29tcGxldGlvbiA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9GT1JNQVRfRklMRSwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0UmVxdWVzdFBvcnQoKQotCXsKLQkJaWYgKHJlcXVlc3RQb3J0ID09IC0xKQotCQkJcmVxdWVzdFBvcnQgPSBmaW5kRnJlZVBvcnQoKTsKLQkJcmV0dXJuIHJlcXVlc3RQb3J0OwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0RXZlbnRQb3J0KCkKLQl7Ci0JCWlmIChldmVudFBvcnQgPT0gLTEpCi0JCQlldmVudFBvcnQgPSBmaW5kRnJlZVBvcnQoKTsKLQkJcmV0dXJuIGV2ZW50UG9ydDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldEdlbmVyYXRlUG9ydCgpCi0JewotCQlpZiAoZ2VuZXJhdGVQb3J0ID09IC0xKQotCQkJZ2VuZXJhdGVQb3J0ID0gZmluZEZyZWVQb3J0KCk7Ci0JCXJldHVybiBnZW5lcmF0ZVBvcnQ7Ci0JfQotCi0JcHVibGljIExhdW5jaFBpcGVsaW5lIGdldFBpcGVsaW5lKCkKLQl7Ci0JCXJldHVybiBwaXBlbGluZTsKLQl9Ci0KLQlwdWJsaWMgVVJMIGdldFNvdXJjZSgpCi0JewotCQlyZXR1cm4gc291cmNlOwotCX0KLQotCXB1YmxpYyBGaWxlIGdldFRhcmdldCgpCi0JewotCQlyZXR1cm4gdGFyZ2V0OwotCX0KLQotCXByaXZhdGUgc3RhdGljIExhdW5jaFBpcGVsaW5lIGh5ZHJhdGVQaXBlbGluZShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmUgPSBudWxsOwotCQlTdHJpbmcgcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9QSVBFTElORSwgKFN0cmluZykgbnVsbCk7Ci0JCWlmIChzICE9IG51bGwgJiYgcy5sZW5ndGgoKSA+IDApCi0JCXsKLQkJCUJ5dGVBcnJheUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHMuZ2V0Qnl0ZXMoKSk7Ci0JCQlwaXBlbGluZSA9IExhdW5jaFBpcGVsaW5lLmZyb21YTUwoaW5wdXRTdHJlYW0pOwotCQl9Ci0JCXJldHVybiBwaXBlbGluZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBoeWRyYXRlU291cmNlRmlsZVVSTChJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJSVBhdGggc291cmNlRmlsZSA9IGh5ZHJhdGVTb3VyY2VGaWxlKGNvbmZpZ3VyYXRpb24pOwotCQlyZXR1cm4gcGF0aFRvVVJMKHNvdXJjZUZpbGUpOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBJUGF0aCBoeWRyYXRlU291cmNlRmlsZShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHNvdXJjZUZpbGVFeHByID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX0lOUFVUX0ZJTEUsIChTdHJpbmcpIG51bGwpOwotCQlyZXR1cm4gZ2V0U3Vic3RpdHV0ZWRQYXRoKHNvdXJjZUZpbGVFeHByKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFVSTCBwYXRoVG9VUkwoSVBhdGggc291cmNlRmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVVSTCB1cmwgPSBudWxsOwotCQl0cnkKLQkJewotCQkJdXJsID0gc291cmNlRmlsZS50b0ZpbGUoKS50b1VSTCgpOwotCQl9Ci0JCWNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCBJU3RhdHVzLkVSUk9SLCBzb3VyY2VGaWxlLnRvU3RyaW5nKCksIGUpKTsKLQkJfQotCQlyZXR1cm4gdXJsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBoeWRyYXRlT3V0cHV0RmlsZShJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJSVBhdGggb3V0cHV0RmlsZSA9IG51bGw7Ci0JCWJvb2xlYW4gdXNlRGVmYXVsdE91dHB1dEZpbGUgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfVVNFX0RFRkFVTFRfT1VUUFVUX0ZJTEUsIHRydWUpOwotCQlpZiAoIXVzZURlZmF1bHRPdXRwdXRGaWxlKQotCQl7Ci0JCQlTdHJpbmcgb3V0cHV0RmlsZU5hbWUgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfT1VUUFVUX0ZJTEVOQU1FLCAoU3RyaW5nKSBudWxsKTsKLQkJCVN0cmluZyBvdXRwdXRGb2xkZXJFeHByID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoWFNMTGF1bmNoQ29uZmlndXJhdGlvbkNvbnN0YW50cy5BVFRSX09VVFBVVF9GT0xERVIsIChTdHJpbmcpIG51bGwpOwotCQkJb3V0cHV0RmlsZSA9IGdldFN1YnN0aXR1dGVkUGF0aChvdXRwdXRGb2xkZXJFeHByKS5hcHBlbmQob3V0cHV0RmlsZU5hbWUpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJb3V0cHV0RmlsZSA9IFhTTFRSdW50aW1lLmRlZmF1bHRPdXRwdXRGaWxlRm9ySW5wdXRGaWxlKGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9JTlBVVF9GSUxFLCAoU3RyaW5nKSBudWxsKSk7Ci0JCX0KLQkJcmV0dXJuIG91dHB1dEZpbGUudG9GaWxlKCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVBhdGggZ2V0U3Vic3RpdHV0ZWRQYXRoKFN0cmluZyBwYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaWYgKHBhdGggIT0gbnVsbCkKLQkJewotCQkJcGF0aCA9IFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihwYXRoKTsKLQkJCXJldHVybiBuZXcgUGF0aChwYXRoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIGEgZnJlZSBwb3J0IG51bWJlciBvbiBsb2NhbGhvc3QsIG9yIC0xIGlmIHVuYWJsZSB0byBmaW5kIGEgZnJlZQotCSAqIHBvcnQuCi0JICogCi0JICogQHJldHVybiBhIGZyZWUgcG9ydCBudW1iZXIgb24gbG9jYWxob3N0LCBvciAtMSBpZiB1bmFibGUgdG8gZmluZCBhIGZyZWUKLQkgKiAgICAgICAgIHBvcnQKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGludCBmaW5kRnJlZVBvcnQoKQotCXsKLQkJU2VydmVyU29ja2V0IHNvY2tldCA9IG51bGw7Ci0JCXRyeQotCQl7Ci0JCQlzb2NrZXQgPSBuZXcgU2VydmVyU29ja2V0KDApOwotCQkJcmV0dXJuIHNvY2tldC5nZXRMb2NhbFBvcnQoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJewotCQkJTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCWlmIChzb2NrZXQgIT0gbnVsbCkKLQkJCXsKLQkJCQl0cnkKLQkJCQl7Ci0JCQkJCXNvY2tldC5jbG9zZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZSkKLQkJCQl7Ci0JCQkJCUxhdW5jaGluZ1BsdWdpbi5sb2coZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBnZXRPcGVuRmlsZU9uQ29tcGxldGlvbigpCi0JewotCQlyZXR1cm4gb3BlbkZpbGVPbkNvbXBsZXRpb247Ci0JfQotCQotCi0JcHVibGljIGJvb2xlYW4gZ2V0Rm9ybWF0RmlsZU9uQ29tcGxldGlvbigpCi0JewotCQlyZXR1cm4gZm9ybWF0RmlsZU9uQ29tcGxldGlvbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hBdHRyaWJ1dGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hBdHRyaWJ1dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZmMWM5ZC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoQXR0cmlidXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWc7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5WYXJpYWJsZXNQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hBdHRyaWJ1dGUKLXsKLQlwdWJsaWMgZmluYWwgU3RyaW5nIHVyaTsKLQlwdWJsaWMgU3RyaW5nIHR5cGU7Ci0JcHVibGljIFN0cmluZyB2YWx1ZTsKLQotCXB1YmxpYyBMYXVuY2hBdHRyaWJ1dGUoU3RyaW5nIHVyaSwgU3RyaW5nIHR5cGUsIFN0cmluZyB2YWx1ZSkKLQl7Ci0JCXRoaXMudXJpID0gdXJpOwotCQl0aGlzLnR5cGUgPSB0eXBlOwotCQl0aGlzLnZhbHVlID0gdmFsdWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKQotCXsKLQkJdGhpcy52YWx1ZSA9IHZhbHVlOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFJlc29sdmVkVmFsdWUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbih2YWx1ZSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBoYXNoQ29kZSgpCi0JewotCQlyZXR1cm4gdXJpLmhhc2hDb2RlKCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0JewotCQlpZiAob2JqIGluc3RhbmNlb2YgTGF1bmNoQXR0cmlidXRlKQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgYXR0ID0gKExhdW5jaEF0dHJpYnV0ZSkgb2JqOwotCQkJcmV0dXJuIGF0dC51cmkuZXF1YWxzKHVyaSk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoUGlwZWxpbmUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hQaXBlbGluZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTBiZDMwLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9MYXVuY2hQaXBlbGluZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5MYXVuY2hpbmdQbHVnaW47Ci1pbXBvcnQgb3JnLnczYy5kb20uRE9NRXhjZXB0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBMYXVuY2hQaXBlbGluZQotewotCXByaXZhdGUgTGlzdDxMYXVuY2hUcmFuc2Zvcm0+IHRyYW5zZm9ybURlZnMgPSBuZXcgQXJyYXlMaXN0PExhdW5jaFRyYW5zZm9ybT4oKTsKLQlwcml2YXRlIGZpbmFsIFByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0KLQlwdWJsaWMgUHJvcGVydGllcyBnZXRPdXRwdXRQcm9wZXJ0aWVzKCkKLQl7Ci0JCXJldHVybiBvdXRwdXRQcm9wZXJ0aWVzOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZE91dHB1dFByb3BlcnR5KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpCi0JewotCQlvdXRwdXRQcm9wZXJ0aWVzLnB1dChuYW1lLCB2YWx1ZSk7Ci0JfQotCi0JcHVibGljIExpc3Q8TGF1bmNoVHJhbnNmb3JtPiBnZXRUcmFuc2Zvcm1EZWZzKCkKLQl7Ci0JCXJldHVybiB0cmFuc2Zvcm1EZWZzOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRyYW5zZm9ybURlZnMoTGlzdDxMYXVuY2hUcmFuc2Zvcm0+IHRyYW5zZm9ybXMpCi0JewotCQl0cmFuc2Zvcm1EZWZzID0gdHJhbnNmb3JtczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRUcmFuc2Zvcm1EZWYoTGF1bmNoVHJhbnNmb3JtIHRkZWYpCi0JewotCQl0ZGVmLnNldFBpcGVsaW5lKHRoaXMpOwotCQl0cmFuc2Zvcm1EZWZzLmFkZCh0ZGVmKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVUcmFuc2Zvcm1EZWYoTGF1bmNoVHJhbnNmb3JtIHRkZWYpCi0JewotCQl0cmFuc2Zvcm1EZWZzLnJlbW92ZSh0ZGVmKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvWE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCVN0cmluZyB4bWwgPSBudWxsOwotCQl0cnkKLQkJewotCQkJRG9jdW1lbnQgZG9jID0gUHJlZmVyZW5jZVV0aWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgcm9vdEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBpcGVsaW5lIik7IC8vJE5PTi1OTFMtMSQKLQkJCWRvYy5hcHBlbmRDaGlsZChyb290RWwpOwotCi0JCQlFbGVtZW50IG9wRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiT3V0cHV0UHJvcGVydGllcyIpOyAvLyROT04tTkxTLTEkCi0JCQlyb290RWwuYXBwZW5kQ2hpbGQob3BFbCk7Ci0JCQlmb3IgKE9iamVjdCBlbGVtZW50IDogb3V0cHV0UHJvcGVydGllcy5lbnRyeVNldCgpKQotCQkJewotCQkJCU1hcC5FbnRyeSBlbnRyeSA9IChNYXAuRW50cnkpIGVsZW1lbnQ7Ci0JCQkJRWxlbWVudCBwcm9wRWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiUHJvcGVydHkiKTsgLy8kTk9OLU5MUy0xJAotCQkJCXByb3BFbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAoU3RyaW5nKSBlbnRyeS5nZXRLZXkoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIChTdHJpbmcpIGVudHJ5LmdldFZhbHVlKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJb3BFbC5hcHBlbmRDaGlsZChwcm9wRWwpOwotCQkJfQotCi0JCQlmb3IgKEl0ZXJhdG9yPExhdW5jaFRyYW5zZm9ybT4gaXRlciA9IHRyYW5zZm9ybURlZnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQkJewotCQkJCUxhdW5jaFRyYW5zZm9ybSB0ZGVmID0gKExhdW5jaFRyYW5zZm9ybSkgaXRlci5uZXh0KCk7Ci0JCQkJRWxlbWVudCB0ZGVmRWwgPSB0ZGVmLmFzWE1MKGRvYyk7Ci0JCQkJcm9vdEVsLmFwcGVuZENoaWxkKHRkZWZFbCk7Ci0JCQl9Ci0KLQkJCXhtbCA9IFByZWZlcmVuY2VVdGlsLnNlcmlhbGl6ZURvY3VtZW50KGRvYyk7Ci0JCX0KLQkJY2F0Y2ggKERPTUV4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIGUuZ2V0TWVzc2FnZSgpLCBlKSk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkKLQkJewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBMYXVuY2hpbmdQbHVnaW4uUExVR0lOX0lELCAwLCBlLmdldE1lc3NhZ2UoKSwgZSkpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIGUuZ2V0TWVzc2FnZSgpLCBlKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpCi0JCXsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgTGF1bmNoaW5nUGx1Z2luLlBMVUdJTl9JRCwgMCwgZS5nZXRNZXNzYWdlKCksIGUpKTsKLQkJfQotCQlyZXR1cm4geG1sOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgTGF1bmNoUGlwZWxpbmUgZnJvbVhNTChJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSkgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCURvY3VtZW50IGRvYyA9IFByZWZlcmVuY2VVdGlsLmdldERvY3VtZW50KGlucHV0U3RyZWFtKTsKLQotCQlMYXVuY2hQaXBlbGluZSBwZGVmID0gbmV3IExhdW5jaFBpcGVsaW5lKCk7Ci0KLQkJRWxlbWVudCByb290RWwgPSBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0KLQkJRWxlbWVudCBvcEVsID0gKEVsZW1lbnQpIHJvb3RFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiT3V0cHV0UHJvcGVydGllcyIpLml0ZW0oMCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG9wRWwgIT0gbnVsbCkKLQkJewotCQkJTm9kZUxpc3QgcHJvcEVscyA9IG9wRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlByb3BlcnR5Iik7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcEVscy5nZXRMZW5ndGgoKTsgaSsrKQotCQkJewotCQkJCUVsZW1lbnQgcHJvcEVsID0gKEVsZW1lbnQpIHByb3BFbHMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IHByb3BFbC5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsgLy8kTk9OLU5MUy0xJAotCQkJCVN0cmluZyB2YWx1ZSA9IHByb3BFbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlwZGVmLmFkZE91dHB1dFByb3BlcnR5KG5hbWUsIHZhbHVlKTsKLQkJCX0KLQkJfQotCi0JCU5vZGVMaXN0IHRyYW5zZm9ybUVscyA9IHJvb3RFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVHJhbnNmb3JtIik7IC8vJE5PTi1OTFMtMSQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFuc2Zvcm1FbHMuZ2V0TGVuZ3RoKCk7IGkrKykKLQkJewotCQkJRWxlbWVudCB0cmFuc2Zvcm1FbCA9IChFbGVtZW50KSB0cmFuc2Zvcm1FbHMuaXRlbShpKTsKLQkJCUxhdW5jaFRyYW5zZm9ybSB0ZGVmID0gTGF1bmNoVHJhbnNmb3JtLmZyb21YTUwodHJhbnNmb3JtRWwpOwotCQkJcGRlZi5hZGRUcmFuc2Zvcm1EZWYodGRlZik7Ci0JCX0KLQotCQlyZXR1cm4gcGRlZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoVHJhbnNmb3JtLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTGF1bmNoVHJhbnNmb3JtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZGVhZDEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL0xhdW5jaFRyYW5zZm9ybS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZzsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnZhcmlhYmxlcy5WYXJpYWJsZXNQbHVnaW47Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotcHVibGljIGNsYXNzIExhdW5jaFRyYW5zZm9ybQotewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU09VUkNFX1RZUEUgPSAicmVzb3VyY2UiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhURVJOQUxfVFlQRSA9ICJleHRlcm5hbCI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIHN0eWxlc2hlZXQ7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGF0aFR5cGU7Ci0JcHJpdmF0ZSBTdHJpbmcgcmVzb2x2ZXI7Ci0JcHJpdmF0ZSBmaW5hbCBTZXQ8TGF1bmNoQXR0cmlidXRlPiBwYXJhbWV0ZXJzID0gbmV3IEhhc2hTZXQ8TGF1bmNoQXR0cmlidXRlPigpOwotCXByaXZhdGUgTGF1bmNoUGlwZWxpbmUgcGlwZWxpbmU7Ci0KLQkvKioKLQkgKiBUaGUgcGF0aCBtYXkgYmUgYW4gSVJlc291cmNlIHRvIGEgZmlsZSBpbiB0aGUgd29ya3NwYWNlLCBvciBhbiBJUGF0aCB0byBhCi0JICogZmlsZSBvdXRzaWRlIG9mIHRoZSB3b3Jrc3BhY2UgLSBkZXBlbmRpbmcgb24gdGhlIHBhdGhUeXBlLiBUaGUgcGF0aAotCSAqIHNob3VsZCBiZSBjcmVhdGVkIHVzaW5nIElQYXRoLnRvUG9ydGFibGVTdHJpbmcoKS4gVGhlIHBhdGggbWF5IGFsc28KLQkgKiBjb250YWluIHZhcmlhYmxlcyBkZWZpbmVkIGJ5IHRoZSBWYXJpYWJsZVBsdWdpbi4KLQkgKiAKLQkgKiBAcGFyYW0gcGF0aAotCSAqIEBwYXJhbSBwYXRoVHlwZQotCSAqLwotCXB1YmxpYyBMYXVuY2hUcmFuc2Zvcm0oU3RyaW5nIHBhdGgsIFN0cmluZyBwYXRoVHlwZSkKLQl7Ci0JCXN0eWxlc2hlZXQgPSBwYXRoOwotCQl0aGlzLnBhdGhUeXBlID0gcGF0aFR5cGU7Ci0JfQotCi0JcHVibGljIFNldDxMYXVuY2hBdHRyaWJ1dGU+IGdldFBhcmFtZXRlcnMoKQotCXsKLQkJcmV0dXJuIHBhcmFtZXRlcnM7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGFkZFBhcmFtZXRlcihMYXVuY2hBdHRyaWJ1dGUgcGFyYW1ldGVyKQotCXsKLQkJcGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFJlc29sdmVyKCkKLQl7Ci0JCXJldHVybiByZXNvbHZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRSZXNvbHZlcihTdHJpbmcgcmVzb2x2ZXIpCi0JewotCQl0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7Ci0JfQotCi0JcHVibGljIElQYXRoIGdldFBhdGgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJU3RyaW5nIHN1YnN0aXR1dGVkVmFsdWUgPSBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24oc3R5bGVzaGVldCk7Ci0JCXJldHVybiBQYXRoLmZyb21Qb3J0YWJsZVN0cmluZyhzdWJzdGl0dXRlZFZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFBhdGhUeXBlKCkKLQl7Ci0JCXJldHVybiBwYXRoVHlwZTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSAod2l0aCBhbnkgc3RyaW5nCi0JICogc3Vic2l0dXRpb25zIGFscmVhZHkgbWFkZSkuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyBJUGF0aCBnZXRMb2NhdGlvbigpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQlJUGF0aCBwYXJ0aWFsUGF0aCA9IGdldFBhdGgoKTsKLQkJSVBhdGggZnVsbFBhdGggPSBudWxsOwotCQlpZiAoUkVTT1VSQ0VfVFlQRS5lcXVhbHMocGF0aFR5cGUpKQotCQl7Ci0JCQlJRmlsZSBmaWxlID0gKElGaWxlKSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIocGFydGlhbFBhdGgpOwotCQkJZnVsbFBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCX0KLQkJZWxzZSBpZiAoRVhURVJOQUxfVFlQRS5lcXVhbHMocGF0aFR5cGUpKQotCQl7Ci0JCQlmdWxsUGF0aCA9IHBhcnRpYWxQYXRoOwotCQl9Ci0JCXJldHVybiBmdWxsUGF0aDsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudCBhc1hNTChEb2N1bWVudCBkb2MpCi0JewotCQlFbGVtZW50IHRkZWZFbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJUcmFuc2Zvcm0iKTsgLy8kTk9OLU5MUy0xJAotCQl0ZGVmRWwuc2V0QXR0cmlidXRlKCJwYXRoIiwgc3R5bGVzaGVldCk7IC8vJE5PTi1OTFMtMSQKLQkJdGRlZkVsLnNldEF0dHJpYnV0ZSgicGF0aFR5cGUiLCBwYXRoVHlwZSk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKHJlc29sdmVyICE9IG51bGwpCi0JCQl0ZGVmRWwuc2V0QXR0cmlidXRlKCJ1cmlSZXNvbHZlciIsIHJlc29sdmVyKTsgLy8kTk9OLU5MUy0xJAotCQlFbGVtZW50IHBhcmFtc0VsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBhcmFtZXRlcnMiKTsgLy8kTk9OLU5MUy0xJAotCQl0ZGVmRWwuYXBwZW5kQ2hpbGQocGFyYW1zRWwpOwotCQlmb3IgKEl0ZXJhdG9yPExhdW5jaEF0dHJpYnV0ZT4gaXRlciA9IHBhcmFtZXRlcnMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KQotCQl7Ci0JCQlMYXVuY2hBdHRyaWJ1dGUgcGFyYW0gPSAoTGF1bmNoQXR0cmlidXRlKSBpdGVyLm5leHQoKTsKLQkJCUVsZW1lbnQgcHJvcEVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoIlBhcmFtZXRlciIpOyAvLyROT04tTkxTLTEkCi0JCQlwcm9wRWwuc2V0QXR0cmlidXRlKCJuYW1lIiwgcGFyYW0udXJpKTsgLy8kTk9OLU5MUy0xJAotCQkJcHJvcEVsLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBwYXJhbS52YWx1ZSk7IC8vJE5PTi1OTFMtMSQKLQkJCXBhcmFtc0VsLmFwcGVuZENoaWxkKHByb3BFbCk7Ci0JCX0KLQkJcmV0dXJuIHRkZWZFbDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExhdW5jaFRyYW5zZm9ybSBmcm9tWE1MKEVsZW1lbnQgdHJhbnNmb3JtRWwpCi0JewotCQlTdHJpbmcgcGF0aCA9IHRyYW5zZm9ybUVsLmdldEF0dHJpYnV0ZSgicGF0aCIpOyAvLyROT04tTkxTLTEkCi0JCVN0cmluZyBwYXRoVHlwZSA9IHRyYW5zZm9ybUVsLmdldEF0dHJpYnV0ZSgicGF0aFR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCi0JCUxhdW5jaFRyYW5zZm9ybSB0ZGVmID0gbmV3IExhdW5jaFRyYW5zZm9ybShwYXRoLCBwYXRoVHlwZSk7Ci0KLQkJU3RyaW5nIHVyaVJlc29sdmVyID0gdHJhbnNmb3JtRWwuZ2V0QXR0cmlidXRlKCJ1cmlSZXNvbHZlciIpOyAvLyROT04tTkxTLTEkCi0JCXRkZWYuc2V0UmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotCi0JCUVsZW1lbnQgcGFyYW1zRWwgPSAoRWxlbWVudCkgdHJhbnNmb3JtRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlBhcmFtZXRlcnMiKS5pdGVtKDApOyAvLyROT04tTkxTLTEkCi0JCU5vZGVMaXN0IHBhcmFtRWxzID0gcGFyYW1zRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlBhcmFtZXRlciIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1FbHMuZ2V0TGVuZ3RoKCk7IGkrKykKLQkJewotCQkJRWxlbWVudCBwYXJhbUVsID0gKEVsZW1lbnQpIHBhcmFtRWxzLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IHBhcmFtRWwuZ2V0QXR0cmlidXRlKCJuYW1lIik7IC8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZyB0eXBlID0gcGFyYW1FbC5nZXRBdHRyaWJ1dGUoInR5cGUiKTsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHZhbHVlID0gcGFyYW1FbC5nZXRBdHRyaWJ1dGUoInZhbHVlIik7IC8vJE5PTi1OTFMtMSQKLQkJCXRkZWYuYWRkUGFyYW1ldGVyKG5ldyBMYXVuY2hBdHRyaWJ1dGUobmFtZSwgdHlwZSwgdmFsdWUpKTsKLQkJfQotCi0JCXJldHVybiB0ZGVmOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFBpcGVsaW5lKExhdW5jaFBpcGVsaW5lIHBpcGVsaW5lKQotCXsKLQkJdGhpcy5waXBlbGluZSA9IHBpcGVsaW5lOwotCX0KLQotCXB1YmxpYyBMYXVuY2hQaXBlbGluZSBnZXRQaXBlbGluZSgpCi0JewotCQlyZXR1cm4gcGlwZWxpbmU7Ci0JfQotCi0JLyoKLQkgKiBwcml2YXRlIEZpbGUgZ2V0VVJJUmVzb2x2ZXJEaXJlY3RvcnkoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLQkgKiB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7IEZpbGUgcmVzb2x2ZXJEaXIgPSBudWxsOyBTdHJpbmcgYmFzZVVSSVR5cGUgPQotCSAqIGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9CQVNFX1VSSV9UWVBFLAotCSAqIFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQkFTRV9VUklfV09SS0lOR19ESVJfUkVMQVRJVkUpOyBpZgotCSAqIChYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkJBU0VfVVJJX0FCU09MVVRFLmVxdWFscyhiYXNlVVJJVHlwZSkpIHsKLQkgKiBTdHJpbmcgdXJpRGlyID0KLQkgKiBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkFUVFJfQkFTRV9VUklfRElSRUNUT1JZLAotCSAqIChTdHJpbmcpbnVsbCk7IGlmICh1cmlEaXIhPW51bGwpIHsgU3RyaW5nIHBhdGhFeHByID0KLQkgKiBWYXJpYWJsZXNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFN0cmluZ1ZhcmlhYmxlTWFuYWdlcigpLnBlcmZvcm1TdHJpbmdTdWJzdGl0dXRpb24odXJpRGlyKTsKLQkgKiBQYXRoIHBhdGggPSBuZXcgUGF0aChwYXRoRXhwcik7IGlmIChwYXRoLmlzQWJzb2x1dGUoKSkgeyBGaWxlIGRpciA9IG5ldwotCSAqIEZpbGUocGF0aC50b09TU3RyaW5nKCkpOyBpZiAoZGlyLmlzRGlyZWN0b3J5KCkgJiYgZGlyLmV4aXN0cygpKSB7IHJldHVybgotCSAqIGRpcjsgfSAvLyBUaGlzIG1heSBiZSBhIHdvcmtzcGFjZSByZWxhdGl2ZSBwYXRoIHJldHVybmVkIGJ5IGEgdmFyaWFibGUuIC8vCi0JICogSG93ZXZlciB2YXJpYWJsZSBwYXRocyBzdGFydCB3aXRoIGEgc2xhc2ggYW5kIHRodXMgYXJlIHRob3VnaHQgdG8gLy8gYmUKLQkgKiBhYnNvbHV0ZSwgc28gZmFsbCB0aHJvdWdoIHRvIGJlbG93IH0gSVJlc291cmNlIHJlcyA9Ci0JICogUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHBhdGgpOyBpZiAocmVzCi0JICogaW5zdGFuY2VvZiBJQ29udGFpbmVyICYmIHJlcy5leGlzdHMoKSkgcmV0dXJuIHJlcy5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOwotCSAqIGFib3J0KCJVUkkgcGF0aCBpcyBpbnZhbGlkIixudWxsLDApOyB9IH0gZWxzZSBpZgotCSAqIChYU0xMYXVuY2hDb25maWd1cmF0aW9uQ29uc3RhbnRzLkJBU0VfVVJJX1NUWUxFU0hFRVRfUkVMQVRJVkUuZXF1YWxzKGJhc2VVUklUeXBlKSkgewotCSAqIHJlc29sdmVyRGlyID0gZ2V0U3R5bGVzaGVldFJlbGF0aXZlVVJJUmVzb2x2ZXIoY29uZmlndXJhdGlvbik7IH0gLy8gbm8KLQkgKiBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSBvZiB3b3JraW5nX2RpciByZWxhdGl2ZSAtIHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yCi0JICogSkFYUCBzbyByZXR1cm4gbnVsbCByZXR1cm4gcmVzb2x2ZXJEaXI7IH0KLQkgKiAKLQkgKiBwcml2YXRlIEZpbGUgZ2V0U3R5bGVzaGVldFJlbGF0aXZlVVJJUmVzb2x2ZXIoSUxhdW5jaENvbmZpZ3VyYXRpb24KLQkgKiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7IExpc3Qgc3R5bGVzaGVldHMgPQotCSAqIGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKFhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMuQVRUUl9TVFlMRVNIRUVUU19MSVNULChMaXN0KW51bGwpOwotCSAqIGlmIChzdHlsZXNoZWV0cyA9PSBudWxsIHx8IHN0eWxlc2hlZXRzLnNpemUoKSA9PSAwKSBhYm9ydCgiTm8gc3R5bGVzaGVldHMKLQkgKiBkZWZpbmVkIGZvciB0aGlzIGxhdW5jaCBjb25maWd1cmF0aW9uIiwgbnVsbCwgMCk7IGVsc2UgeyBTdHJpbmcgc2hlZXQgPQotCSAqIChTdHJpbmcpc3R5bGVzaGVldHMuZ2V0KDApOyBTdHJpbmcgcGF0aEV4cHIgPQotCSAqIFZhcmlhYmxlc1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0U3RyaW5nVmFyaWFibGVNYW5hZ2VyKCkucGVyZm9ybVN0cmluZ1N1YnN0aXR1dGlvbihzaGVldCk7Ci0JICogUGF0aCBwYXRoID0gbmV3IFBhdGgocGF0aEV4cHIpOyBpZiAocGF0aC5pc0Fic29sdXRlKCkpIHsgRmlsZSBmaWxlID0gbmV3Ci0JICogRmlsZShwYXRoLnRvT1NTdHJpbmcoKSk7IGlmIChmaWxlLmV4aXN0cygpKSB7IEZpbGUgZGlyID0KLQkgKiBmaWxlLmdldFBhcmVudEZpbGUoKTsgcmV0dXJuIGRpcjsgfSAvLyBUaGlzIG1heSBiZSBhIHdvcmtzcGFjZSByZWxhdGl2ZQotCSAqIHBhdGggcmV0dXJuZWQgYnkgYSB2YXJpYWJsZS4gLy8gSG93ZXZlciB2YXJpYWJsZSBwYXRocyBzdGFydCB3aXRoIGEgc2xhc2gKLQkgKiBhbmQgdGh1cyBhcmUgdGhvdWdodCB0byAvLyBiZSBhYnNvbHV0ZSBJUmVzb3VyY2UgcmVzID0KLQkgKiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmZpbmRNZW1iZXIocGF0aCk7IElDb250YWluZXIKLQkgKiBwYXJlbnQgPSByZXMuZ2V0UGFyZW50KCk7IGlmIChwYXJlbnQuZXhpc3RzKCkpIHJldHVybgotCSAqIHBhcmVudC5nZXRMb2NhdGlvbigpLnRvRmlsZSgpOyBhYm9ydCgiU3R5bGVzaGVldCBwYXRoIGlzCi0JICogaW52YWxpZCIsbnVsbCwwKTsgfSBlbHNlIHsgSVJlc291cmNlIHJlcyA9Ci0JICogUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5maW5kTWVtYmVyKHBhdGgpOyBJQ29udGFpbmVyCi0JICogcGFyZW50ID0gcmVzLmdldFBhcmVudCgpOyBpZiAocGFyZW50LmV4aXN0cygpKSByZXR1cm4KLQkgKiBwYXJlbnQuZ2V0TG9jYXRpb24oKS50b0ZpbGUoKTsgYWJvcnQoIlN0eWxlc2hlZXQgcGF0aCBpcwotCSAqIGludmFsaWQiLG51bGwsMCk7IH0gfSByZXR1cm4gbnVsbDsgfQotCSAqLwotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL01lc3NhZ2VzLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYyZTdjMC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCi0JCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJdHJ5IHsKLQkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL1ByZWZlcmVuY2VVdGlsLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvUHJlZmVyZW5jZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmMmQ4NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9jb25maWcvUHJlZmVyZW5jZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWc7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLkxhdW5jaGluZ1BsdWdpbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBQcmVmZXJlbmNlVXRpbAotewotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZUNvcmVFeGNlcHRpb24oVGhyb3dhYmxlIGUpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIExhdW5jaGluZ1BsdWdpbi5QTFVHSU5fSUQsIDAsIGUuZ2V0TWVzc2FnZSgpLCBlKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBEb2N1bWVudCBnZXREb2N1bWVudCgpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCi0JewotCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGRmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IGRmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQlEb2N1bWVudCBkb2MgPSBkb2NCdWlsZGVyLm5ld0RvY3VtZW50KCk7Ci0JCXJldHVybiBkb2M7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplRG9jdW1lbnQoRG9jdW1lbnQgZG9jKSB0aHJvd3MgSU9FeGNlcHRpb24sIFRyYW5zZm9ybWVyRXhjZXB0aW9uCi0JewotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQotCQlUcmFuc2Zvcm1lckZhY3RvcnkgZmFjdG9yeSA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IGZhY3RvcnkubmV3VHJhbnNmb3JtZXIoKTsKLQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5NRVRIT0QsICJ4bWwiKTsgIC8vJE5PTi1OTFMtMSQKLQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsgIC8vJE5PTi1OTFMtMSQKLQotCQlET01Tb3VyY2Ugc291cmNlID0gbmV3IERPTVNvdXJjZShkb2MpOwotCQlTdHJlYW1SZXN1bHQgb3V0cHV0VGFyZ2V0ID0gbmV3IFN0cmVhbVJlc3VsdChzKTsKLQkJdHJhbnNmb3JtZXIudHJhbnNmb3JtKHNvdXJjZSwgb3V0cHV0VGFyZ2V0KTsKLQotCQlyZXR1cm4gcy50b1N0cmluZygiVVRGOCIpOyAJCQkgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBzdGF0aWMgRWxlbWVudFtdIGdldENoaWxkRWxlbWVudHMoRWxlbWVudCBwYXJlbnQsIFN0cmluZyBuYW1lKQotCXsKLQkJTGlzdDxFbGVtZW50PiBjaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8RWxlbWVudD4oKTsKLQkJTm9kZUxpc3QgbGlzdCA9IHBhcmVudC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBsZW5ndGggPSBsaXN0LmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotCQl7Ci0JCQlOb2RlIG5vZGUgPSBsaXN0Lml0ZW0oaSk7Ci0JCQlzaG9ydCB0eXBlID0gbm9kZS5nZXROb2RlVHlwZSgpOwotCQkJaWYgKHR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUpCi0JCQl7Ci0JCQkJRWxlbWVudCBwcm9jZXNzb3JFbGVtZW50ID0gKEVsZW1lbnQpIG5vZGU7Ci0JCQkJaWYgKHByb2Nlc3NvckVsZW1lbnQuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMobmFtZSkpCi0JCQkJewotCQkJCQljaGlsZHJlbi5hZGQocHJvY2Vzc29yRWxlbWVudCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiAoRWxlbWVudFtdKSBjaGlsZHJlbi50b0FycmF5KG5ldyBFbGVtZW50WzBdKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXROb2RlVGV4dChOb2RlIG5vZGUpCi0JewotCQlzd2l0Y2ggKG5vZGUuZ2V0Tm9kZVR5cGUoKSkKLQkJewotCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKLQkJCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5nZXRMZW5ndGgoKTsgaSsrKQotCQkJCXsKLQkJCQkJTm9kZSBjaGlsZCA9IGNoaWxkTm9kZXMuaXRlbShpKTsKLQkJCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5URVhUX05PREUpCi0JCQkJCXsKLQkJCQkJCXNiLmFwcGVuZChjaGlsZC5nZXROb2RlVmFsdWUoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0JCQljYXNlIE5vZGUuVEVYVF9OT0RFOgotCQkJY2FzZSBOb2RlLkFUVFJJQlVURV9OT0RFOgotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gbm9kZS5nZXROb2RlVmFsdWUoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoSW5wdXRTdHJlYW0gc3RyZWFtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQkJdHJ5Ci0JCXsKLQkJCURvY3VtZW50QnVpbGRlciBwYXJzZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCQlwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBEZWZhdWx0SGFuZGxlcigpKTsKLQkJCWRvYyA9IHBhcnNlci5wYXJzZShuZXcgSW5wdXRTb3VyY2Uoc3RyZWFtKSk7Ci0JCX0KLQkJY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlQcmVmZXJlbmNlVXRpbC5jcmVhdGVDb3JlRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKQotCQl7Ci0JCQlQcmVmZXJlbmNlVXRpbC5jcmVhdGVDb3JlRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpCi0JCXsKLQkJCVByZWZlcmVuY2VVdGlsLmNyZWF0ZUNvcmVFeGNlcHRpb24oZSk7Ci0JCX0KLQkJY2F0Y2ggKEZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkKLQkJewotCQkJUHJlZmVyZW5jZVV0aWwuY3JlYXRlQ29yZUV4Y2VwdGlvbihlKTsKLQkJfQotCQlmaW5hbGx5Ci0JCXsKLQkJCXRyeQotCQkJewotCQkJCXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJUHJlZmVyZW5jZVV0aWwuY3JlYXRlQ29yZUV4Y2VwdGlvbihlKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZG9jOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL2NvbmZpZy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwODA4N2UuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvY29uZmlnL21lc3NhZ2VzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLUxhdW5jaEhlbHBlci4wPUZpbGUgbm90IGZvdW5kCi1MYXVuY2hIZWxwZXIuMT1JTyBFeGNlcHRpb24KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xDb25zdGFudHMuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZhNDdkYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9JWFNMQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotcHVibGljIGludGVyZmFjZSBJWFNMQ29uc3RhbnRzCi17Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9YU0xfREVCVUdfTU9ERUwgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuWFNMRGVidWdNb2RlbCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQVJLRVJfSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcueHNsTGluZUJyZWFrcG9pbnRNYXJrZXIiOyAvLyROT04tTkxTLTEkCi0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL0lYU0xEZWJ1Z1RhcmdldC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvSVhTTERlYnVnVGFyZ2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlOWU1NTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvSVhTTERlYnVnVGFyZ2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklTdGFja0ZyYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhbHVlOwotCi1wdWJsaWMgaW50ZXJmYWNlIElYU0xEZWJ1Z1RhcmdldCBleHRlbmRzIElEZWJ1Z1RhcmdldAotewotCVhTTFZhcmlhYmxlIGdldFZhcmlhYmxlKGludCB2YXJJZCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uOwotCi0JSVN0YWNrRnJhbWVbXSBnZXRTdGFja0ZyYW1lcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbjsKLQotCXZvaWQgc3RlcEludG8oKSB0aHJvd3MgRGVidWdFeGNlcHRpb247Ci0KLQl2b2lkIHN0ZXBPdmVyKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uOwotCi0Jdm9pZCBzdGVwUmV0dXJuKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uOwotCi0JSVZhbHVlIGdldFZhcmlhYmxlVmFsdWUoWFNMVmFyaWFibGUgdmFyaWFibGUpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbjsJCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9NZXNzYWdlcy5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU5YTI3YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCi0JCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKLQotCXByaXZhdGUgTWVzc2FnZXMoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJdHJ5IHsKLQkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMRGVidWdFbGVtZW50LmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xEZWJ1Z0VsZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3NmM2ZS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xEZWJ1Z0VsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLkRlYnVnRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEaXNjb25uZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVRlcm1pbmF0ZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhTTERlYnVnRWxlbWVudCBleHRlbmRzIERlYnVnRWxlbWVudCBpbXBsZW1lbnRzIElEaXNjb25uZWN0Ci17Ci0JcHVibGljIFhTTERlYnVnRWxlbWVudChJRGVidWdUYXJnZXQgdGFyZ2V0KQotCXsKLQkJc3VwZXIodGFyZ2V0KTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1vZGVsSWRlbnRpZmllcigpCi0JewotCQlyZXR1cm4gSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUw7Ci0JfQotCQotCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSAvLyROT04tTkxTLTEkCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJaWYgKGFkYXB0ZXIgPT0gSVRlcm1pbmF0ZS5jbGFzcykgewotCQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCk7Ci0JCX0KLQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoYWRhcHRlcik7Ci0JfQotCQotCXB1YmxpYyBib29sZWFuIGNhbkRpc2Nvbm5lY3QoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCkuY2FuRGlzY29ubmVjdCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXREZWJ1Z1RhcmdldCgpLmRpc2Nvbm5lY3QoKTsKLQl9Ci0JCi0JcHVibGljIGJvb2xlYW4gaXNEaXNjb25uZWN0ZWQoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCkuaXNEaXNjb25uZWN0ZWQoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xMaW5lQnJlYWtwb2ludC5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMTGluZUJyZWFrcG9pbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU3ZTJhOC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xMaW5lQnJlYWtwb2ludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBCam9ybiBGcmVlbWFuLUJlbnNvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuRGVidWdQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JQnJlYWtwb2ludDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLkxpbmVCcmVha3BvaW50OwotCi1wdWJsaWMgY2xhc3MgWFNMTGluZUJyZWFrcG9pbnQgZXh0ZW5kcyBMaW5lQnJlYWtwb2ludAotewotCXByaXZhdGUgaW50IGxpbmVOdW1iZXI7Ci0KLQlwdWJsaWMgWFNMTGluZUJyZWFrcG9pbnQoKQotCXsKLQl9Ci0KLQlwdWJsaWMgWFNMTGluZUJyZWFrcG9pbnQoZmluYWwgSVJlc291cmNlIHJlc291cmNlLCBmaW5hbCBpbnQgbGluZU51bWJlciwgZmluYWwgaW50IGNoYXJTdGFydCwgZmluYWwgaW50IGNoYXJFbmQpIHRocm93cyBDb3JlRXhjZXB0aW9uCi0JewotCQl0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkKLQkJewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQkJCXsKLQkJCQlJTWFya2VyIG1hcmtlciA9IHJlc291cmNlLmNyZWF0ZU1hcmtlcihJWFNMQ29uc3RhbnRzLk1BUktFUl9JRCk7Ci0JCQkJc2V0TWFya2VyKG1hcmtlcik7Ci0JCQkJbWFya2VyLnNldEF0dHJpYnV0ZShJQnJlYWtwb2ludC5JRCwgZ2V0TW9kZWxJZGVudGlmaWVyKCkpOwotCQkJCW1hcmtlci5zZXRBdHRyaWJ1dGUoSUJyZWFrcG9pbnQuRU5BQkxFRCwgQm9vbGVhbi5UUlVFKTsKLQkJCQltYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuTUVTU0FHRSwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJYU0xMaW5lQnJlYWtwb2ludC4wIikgKyByZXNvdXJjZS5nZXROYW1lKCkgKyAiIFtsaW5lOiAiICsgbGluZU51bWJlciArICJdIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0KLQkJCQltYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuTElORV9OVU1CRVIsIGxpbmVOdW1iZXIpOwotCQkJCW1hcmtlci5zZXRBdHRyaWJ1dGUoSU1hcmtlci5DSEFSX1NUQVJULCBuZXcgSW50ZWdlcihjaGFyU3RhcnQpKTsKLQkJCQltYXJrZXIuc2V0QXR0cmlidXRlKElNYXJrZXIuQ0hBUl9FTkQsIG5ldyBJbnRlZ2VyKGNoYXJFbmQpKTsKLQotCQkJCXJlZ2lzdGVyKHRydWUpOwotCQkJfQotCQl9OwotCQlydW4oZ2V0TWFya2VyUnVsZShyZXNvdXJjZSksIHJ1bm5hYmxlKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCXsKLQkJaW50IGxpbmUgPSBzdXBlci5nZXRMaW5lTnVtYmVyKCk7Ci0JCXJldHVybiBsaW5lID09IC0xID8gbGluZU51bWJlciA6IGxpbmU7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgcmVnaXN0ZXIoYm9vbGVhbiByZWdpc3RlcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLQl7Ci0JCURlYnVnUGx1Z2luIHBsdWdpbiA9IERlYnVnUGx1Z2luLmdldERlZmF1bHQoKTsKLQkJaWYgKHBsdWdpbiAhPSBudWxsICYmIHJlZ2lzdGVyKQotCQl7Ci0JCQlwbHVnaW4uZ2V0QnJlYWtwb2ludE1hbmFnZXIoKS5hZGRCcmVha3BvaW50KHRoaXMpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJc2V0UmVnaXN0ZXJlZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1vZGVsSWRlbnRpZmllcigpCi0JewotCQlyZXR1cm4gSVhTTENvbnN0YW50cy5JRF9YU0xfREVCVUdfTU9ERUw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMU3RhY2tGcmFtZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMU3RhY2tGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzE4OGFiLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFN0YWNrRnJhbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbDsKLQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVJlZ2lzdGVyR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JU3RhY2tGcmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklUaHJlYWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVmFyaWFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuTGF1bmNoaW5nUGx1Z2luOwotCi0vKioKLSAqIFhTTCBzdGFjayBmcmFtZS4KLSAqLwotcHVibGljIGNsYXNzIFhTTFN0YWNrRnJhbWUgZXh0ZW5kcyBYU0xEZWJ1Z0VsZW1lbnQgaW1wbGVtZW50cyBJU3RhY2tGcmFtZQotewotCXByaXZhdGUgZmluYWwgWFNMVGhyZWFkIHhzbFRocmVhZDsKLQlwcml2YXRlIGludCBpZDsKLQlwcml2YXRlIFN0cmluZyBuYW1lOwotCXByaXZhdGUgaW50IGxpbmVOdW1iZXI7Ci0JcHJpdmF0ZSBTdHJpbmcgeHNsRmlsZU5hbWU7Ci0JcHJpdmF0ZSBJVmFyaWFibGVbXSB2YXJpYWJsZXM7Ci0KLQlwdWJsaWMgWFNMU3RhY2tGcmFtZShYU0xUaHJlYWQgdGhyZWFkLCBTdHJpbmcgZGF0YSwgaW50IGluZGV4KQotCXsKLQkJc3VwZXIodGhyZWFkLmdldERlYnVnVGFyZ2V0KCkpOwotCQl0aGlzLnhzbFRocmVhZCA9IHRocmVhZDsKLQkJaW5pdChkYXRhLChJWFNMRGVidWdUYXJnZXQpIHRocmVhZC5nZXREZWJ1Z1RhcmdldCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaW5pdChTdHJpbmcgZGF0YSxJWFNMRGVidWdUYXJnZXQgZGVidWdUYXJnZXQpCi0JewotCi0JCVN0cmluZ1tdIHN0cmluZ3MgPSBkYXRhLnNwbGl0KCJcXHwiKTsgLy8kTk9OLU5MUy0xJAotCQlTdHJpbmcgZmlsZU5hbWUgPSBzdHJpbmdzWzBdOwotCQl0cnkKLQkJewotCQkJVVJMIHVybCA9IG5ldyBVUkwoZmlsZU5hbWUpOwotCQkJUGF0aCBwID0gbmV3IFBhdGgodXJsLmdldEZpbGUoKSk7Ci0JCQl4c2xGaWxlTmFtZSA9IChuZXcgUGF0aChmaWxlTmFtZSkpLmxhc3RTZWdtZW50KCk7Ci0KLQkJCVN0cmluZyBpZFN0cmluZyA9IHN0cmluZ3NbMV07Ci0JCQlpZCA9IEludGVnZXIucGFyc2VJbnQoaWRTdHJpbmcpOwotCQkJU3RyaW5nIHBjID0gc3RyaW5nc1syXTsKLQkJCWxpbmVOdW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50KHBjKTsKLQkJCVN0cmluZyBzYWZlbmFtZSA9IHN0cmluZ3NbM107Ci0KLQkJCWludCB0aGVJbmRleDsKLQkJCXdoaWxlICgodGhlSW5kZXggPSBzYWZlbmFtZS5pbmRleE9mKCIlQF9QSVBFX0AlIikpICE9IC0xKSAvLyROT04tTkxTLTEkCi0JCQl7Ci0JCQkJc2FmZW5hbWUgPSBzYWZlbmFtZS5zdWJzdHJpbmcoMCwgdGhlSW5kZXgpICsgInwiICsgc2FmZW5hbWUuc3Vic3RyaW5nKHRoZUluZGV4ICsgIiVAX1BJUEVfQCUiLmxlbmd0aCgpLCBzYWZlbmFtZS5sZW5ndGgoKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJfQotCi0JCQluYW1lID0gcC5sYXN0U2VnbWVudCgpICsgIiAiICsgc2FmZW5hbWU7IC8vJE5PTi1OTFMtMSQKLQkJCQotCQkJdmFyaWFibGVzID0gbmV3IFhTTFZhcmlhYmxlW3N0cmluZ3MubGVuZ3RoLTRdOwotCQkJZm9yIChpbnQgaT0wO2k8dmFyaWFibGVzLmxlbmd0aDtpKyspCi0JCQl7Ci0JCQkJaW50IHZhcklkID0gSW50ZWdlci5wYXJzZUludChzdHJpbmdzW2krNF0pOwotCQkJCXRyeQotCQkJCXsKLQkJCQkJWFNMVmFyaWFibGUgdmFyID0gZGVidWdUYXJnZXQuZ2V0VmFyaWFibGUodmFySWQpOwotCQkJCQl2YXJpYWJsZXNbaV0gPSB2YXI7Ci0JCQkJfQotCQkJCWNhdGNoIChEZWJ1Z0V4Y2VwdGlvbiBlKQotCQkJCXsKLQkJCQkJTGF1bmNoaW5nUGx1Z2luLmxvZyhlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKQotCQl7Ci0JCQlMYXVuY2hpbmdQbHVnaW4ubG9nKGUpOwotCQl9Ci0JfQotCi0JcHVibGljIElUaHJlYWQgZ2V0VGhyZWFkKCkKLQl7Ci0JCXJldHVybiB4c2xUaHJlYWQ7Ci0JfQotCi0JcHVibGljIElWYXJpYWJsZVtdIGdldFZhcmlhYmxlcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIHZhcmlhYmxlczsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBoYXNWYXJpYWJsZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiB2YXJpYWJsZXMubGVuZ3RoID4gMDsKLQl9Ci0KLQlwdWJsaWMgaW50IGdldExpbmVOdW1iZXIoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBsaW5lTnVtYmVyOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0Q2hhclN0YXJ0KCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcHVibGljIGludCBnZXRDaGFyRW5kKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gbmFtZSArIE1lc3NhZ2VzLmdldFN0cmluZygiWFNMU3RhY2tGcmFtZS41IikgKyBsaW5lTnVtYmVyOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIElSZWdpc3Rlckdyb3VwW10gZ2V0UmVnaXN0ZXJHcm91cHMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc1JlZ2lzdGVyR3JvdXBzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3RlcEludG8oKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmNhblN0ZXBJbnRvKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3RlcE92ZXIoKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmNhblN0ZXBPdmVyKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuU3RlcFJldHVybigpCi0JewotCQlyZXR1cm4gZ2V0VGhyZWFkKCkuY2FuU3RlcFJldHVybigpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzU3RlcHBpbmcoKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmlzU3RlcHBpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwSW50bygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0VGhyZWFkKCkuc3RlcEludG8oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwT3ZlcigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0VGhyZWFkKCkuc3RlcE92ZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwUmV0dXJuKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXRUaHJlYWQoKS5zdGVwUmV0dXJuKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuUmVzdW1lKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5jYW5SZXN1bWUoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5TdXNwZW5kKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5jYW5TdXNwZW5kKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNTdXNwZW5kZWQoKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVzdW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXRUaHJlYWQoKS5yZXN1bWUoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdXNwZW5kKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXRUaHJlYWQoKS5zdXNwZW5kKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuVGVybWluYXRlKCkKLQl7Ci0JCXJldHVybiBnZXRUaHJlYWQoKS5jYW5UZXJtaW5hdGUoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1Rlcm1pbmF0ZWQoKQotCXsKLQkJcmV0dXJuIGdldFRocmVhZCgpLmlzVGVybWluYXRlZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlcm1pbmF0ZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJZ2V0VGhyZWFkKCkudGVybWluYXRlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgdGhpcyBzdGFjayBmcmFtZSBpcyBhc3NvY2lhdGVkIHdpdGguCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRTb3VyY2VOYW1lKCkKLQl7Ci0JCXJldHVybiB4c2xGaWxlTmFtZTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLQl7Ci0JCWlmIChvYmogaW5zdGFuY2VvZiBYU0xTdGFja0ZyYW1lKQotCQl7Ci0JCQlYU0xTdGFja0ZyYW1lIHNmID0gKFhTTFN0YWNrRnJhbWUpIG9iajsKLQkJCXJldHVybiBzZi5pZCA9PSBpZDsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBoYXNoQ29kZSgpCi0JewotCQlyZXR1cm4gZ2V0U291cmNlTmFtZSgpLmhhc2hDb2RlKCkgKyBpZDsKLQl9Ci0KLQlwcm90ZWN0ZWQgaW50IGdldElkZW50aWZpZXIoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmVOdW1iZXIpCi0JewotCQl0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhcmlhYmxlcyhJVmFyaWFibGVbXSB2YXJpYWJsZXMpCi0JewotCQl0aGlzLnZhcmlhYmxlcyA9IHZhcmlhYmxlczsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xUaHJlYWQuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFRocmVhZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWIyNjMzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFRocmVhZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklCcmVha3BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVN0YWNrRnJhbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5tb2RlbC5JVGhyZWFkOwotCi1wdWJsaWMgY2xhc3MgWFNMVGhyZWFkIGV4dGVuZHMgWFNMRGVidWdFbGVtZW50IGltcGxlbWVudHMgSVRocmVhZAotewotCi0JLyoqCi0JICogQnJlYWtwb2ludHMgdGhpcyB0aHJlYWQgaXMgc3VzcGVuZGVkIGF0IG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUuCi0JICovCi0JcHJpdmF0ZSBJQnJlYWtwb2ludFtdIGZCcmVha3BvaW50czsKLQotCS8qKgotCSAqIFdoZXRoZXIgdGhpcyB0aHJlYWQgaXMgc3RlcHBpbmcKLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gZlN0ZXBwaW5nID0gZmFsc2U7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RzIGEgbmV3IHRocmVhZCBmb3IgdGhlIGdpdmVuIHRhcmdldAotCSAqLwotCXB1YmxpYyBYU0xUaHJlYWQoSURlYnVnVGFyZ2V0IHRhcmdldCkKLQl7Ci0JCXN1cGVyKHRhcmdldCk7Ci0JfQotCi0JcHVibGljIElTdGFja0ZyYW1lW10gZ2V0U3RhY2tGcmFtZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWlmIChpc1N1c3BlbmRlZCgpKQotCQl7Ci0JCQlyZXR1cm4gKChJWFNMRGVidWdUYXJnZXQpIGdldERlYnVnVGFyZ2V0KCkpLmdldFN0YWNrRnJhbWVzKCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlyZXR1cm4gbmV3IElTdGFja0ZyYW1lWzBdOwotCQl9Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzU3RhY2tGcmFtZXMoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0UHJpb3JpdHkoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiAwOwotCX0KLQotCXB1YmxpYyBJU3RhY2tGcmFtZSBnZXRUb3BTdGFja0ZyYW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlJU3RhY2tGcmFtZVtdIGZyYW1lcyA9IGdldFN0YWNrRnJhbWVzKCk7Ci0JCWlmIChmcmFtZXMubGVuZ3RoID4gMCkKLQkJewotCQkJcmV0dXJuIGZyYW1lc1swXTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiAiVGhyZWFkWzFdIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBJQnJlYWtwb2ludFtdIGdldEJyZWFrcG9pbnRzKCkKLQl7Ci0JCWlmIChmQnJlYWtwb2ludHMgPT0gbnVsbCkKLQkJewotCQkJcmV0dXJuIG5ldyBJQnJlYWtwb2ludFswXTsKLQkJfQotCQlyZXR1cm4gZkJyZWFrcG9pbnRzOwotCX0KLQotCS8qKgotCSAqIFNldHMgdGhlIGJyZWFrcG9pbnRzIHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZCBhdCwgb3IgPGNvZGU+bnVsbDwvY29kZT4KLQkgKiBpZiBub25lLgotCSAqIAotCSAqIEBwYXJhbSBicmVha3BvaW50cwotCSAqICAgICAgICAgICAgdGhlIGJyZWFrcG9pbnRzIHRoaXMgdGhyZWFkIGlzIHN1c3BlbmRlZCBhdCwgb3IKLQkgKiAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRCcmVha3BvaW50cyhJQnJlYWtwb2ludFtdIGJyZWFrcG9pbnRzKQotCXsKLQkJZkJyZWFrcG9pbnRzID0gYnJlYWtwb2ludHM7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gY2FuUmVzdW1lKCkKLQl7Ci0JCXJldHVybiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN1c3BlbmQoKQotCXsKLQkJcmV0dXJuICFpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzU3VzcGVuZGVkKCkKLQl7Ci0JCXJldHVybiBnZXREZWJ1Z1RhcmdldCgpLmlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVzdW1lKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXREZWJ1Z1RhcmdldCgpLnJlc3VtZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHN1c3BlbmQoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWdldERlYnVnVGFyZ2V0KCkuc3VzcGVuZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBJbnRvKCkKLQl7Ci0JCXJldHVybiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBPdmVyKCkKLQl7Ci0JCXJldHVybiBpc1N1c3BlbmRlZCgpOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGNhblN0ZXBSZXR1cm4oKQotCXsKLQkJcmV0dXJuIGlzU3VzcGVuZGVkKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNTdGVwcGluZygpCi0JewotCQlyZXR1cm4gZlN0ZXBwaW5nOwotCX0KLQotCXB1YmxpYyB2b2lkIHN0ZXBJbnRvKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQkoKElYU0xEZWJ1Z1RhcmdldCkgZ2V0RGVidWdUYXJnZXQoKSkuc3RlcEludG8oKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdGVwT3ZlcigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJKChJWFNMRGVidWdUYXJnZXQpIGdldERlYnVnVGFyZ2V0KCkpLnN0ZXBPdmVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgc3RlcFJldHVybigpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJKChJWFNMRGVidWdUYXJnZXQpIGdldERlYnVnVGFyZ2V0KCkpLnN0ZXBSZXR1cm4oKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBjYW5UZXJtaW5hdGUoKQotCXsKLQkJcmV0dXJuICFpc1Rlcm1pbmF0ZWQoKTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc1Rlcm1pbmF0ZWQoKQotCXsKLQkJcmV0dXJuIGdldERlYnVnVGFyZ2V0KCkuaXNUZXJtaW5hdGVkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVybWluYXRlKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlnZXREZWJ1Z1RhcmdldCgpLnRlcm1pbmF0ZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFN0ZXBwaW5nKGJvb2xlYW4gc3RlcHBpbmcpCi0JewotCQlmU3RlcHBpbmcgPSBzdGVwcGluZzsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xWYWx1ZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFsdWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZhMzkxZi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9YU0xWYWx1ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBDaGFzZSBUZWNobm9sb2d5IEx0ZCAtIGh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLkRlYnVnRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSURlYnVnVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUubW9kZWwuSVZhcmlhYmxlOwotCi1wdWJsaWMgY2xhc3MgWFNMVmFsdWUgZXh0ZW5kcyBYU0xEZWJ1Z0VsZW1lbnQgaW1wbGVtZW50cyBJVmFsdWUKLXsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmVmFsdWU7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHlwZTsKLQotCXB1YmxpYyBYU0xWYWx1ZShJRGVidWdUYXJnZXQgdGFyZ2V0LCBTdHJpbmcgdHlwZSwgU3RyaW5nIHZhbHVlKQotCXsKLQkJc3VwZXIodGFyZ2V0KTsKLQkJdGhpcy50eXBlID0gdHlwZTsKLQkJZlZhbHVlID0gdmFsdWU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRSZWZlcmVuY2VUeXBlTmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIHR5cGU7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRWYWx1ZVN0cmluZygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJaWYgKCJzdHJpbmciLmVxdWFscyh0eXBlKSkgLy8kTk9OLU5MUy0xJAotCQkJcmV0dXJuICInIitmVmFsdWUrIiciOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJcmV0dXJuIGZWYWx1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0FsbG9jYXRlZCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIElWYXJpYWJsZVtdIGdldFZhcmlhYmxlcygpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIG5ldyBJVmFyaWFibGVbMF07Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzVmFyaWFibGVzKCkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFyaWFibGUuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvbGF1bmNoaW5nL21vZGVsL1hTTFZhcmlhYmxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxODA1ZjcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvWFNMVmFyaWFibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5EZWJ1Z0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklEZWJ1Z1RhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLm1vZGVsLklWYXJpYWJsZTsKLQotcHVibGljIGNsYXNzIFhTTFZhcmlhYmxlIGV4dGVuZHMgWFNMRGVidWdFbGVtZW50IGltcGxlbWVudHMgSVZhcmlhYmxlCi17Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfU0NPUEUgPSAiTCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUVU5ORUxfU0NPUEUgPSAiVCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHTE9CQUxfU0NPUEUgPSAiRyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgZmluYWwgaW50IGlkOwotCXByaXZhdGUgU3RyaW5nIGZOYW1lOwotCXByaXZhdGUgU3RyaW5nIHNjb3BlOwotCXByaXZhdGUgU3RyaW5nIHR5cGU7Ci0KLQlwdWJsaWMgWFNMVmFyaWFibGUoSURlYnVnVGFyZ2V0IHRhcmdldCwgaW50IGlkKQotCXsKLQkJc3VwZXIodGFyZ2V0KTsKLQkJdGhpcy5pZCA9IGlkOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0SWQoKQotCXsKLQkJcmV0dXJuIGlkOwotCX0KLQotCXB1YmxpYyBJVmFsdWUgZ2V0VmFsdWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCXJldHVybiAoKElYU0xEZWJ1Z1RhcmdldCkgZ2V0RGVidWdUYXJnZXQoKSkuZ2V0VmFyaWFibGVWYWx1ZSh0aGlzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLQl7Ci0JCXRoaXMuZk5hbWUgPSBuYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGZOYW1lOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJlbmNlVHlwZU5hbWUoKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JCWlmIChHTE9CQUxfU0NPUEUuZXF1YWxzKHNjb3BlKSkKLQkJCXJldHVybiAiZ2xvYmFsIjsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gImxvY2FsIjsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyBib29sZWFuIGhhc1ZhbHVlQ2hhbmdlZCgpIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyBleHByZXNzaW9uKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VmFsdWUoSVZhbHVlIHZhbHVlKSB0aHJvd3MgRGVidWdFeGNlcHRpb24KLQl7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gc3VwcG9ydHNWYWx1ZU1vZGlmaWNhdGlvbigpCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gdmVyaWZ5VmFsdWUoU3RyaW5nIGV4cHJlc3Npb24pIHRocm93cyBEZWJ1Z0V4Y2VwdGlvbgotCXsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIHZlcmlmeVZhbHVlKElWYWx1ZSB2YWx1ZSkgdGhyb3dzIERlYnVnRXhjZXB0aW9uCi0JewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHNldFNjb3BlKFN0cmluZyBzY29wZSkKLQl7Ci0JCXRoaXMuc2NvcGUgPSBzY29wZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFNjb3BlKCkKLQl7Ci0JCXJldHVybiBzY29wZTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9sYXVuY2hpbmcvbW9kZWwvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYzMGQ0NS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2xhdW5jaGluZy9tb2RlbC9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1YU0xEZWJ1Z1RhcmdldC4wPVVuYWJsZSB0byBjb25uZWN0IHRvIGRlYnVnZ2VyCi1YU0xEZWJ1Z1RhcmdldC4xPWxvY2FsaG9zdAotWFNMRGVidWdUYXJnZXQuMTk9UmVxdWVzdCBmYWlsZWQ6IAotWFNMRGVidWdUYXJnZXQuMj1Db3VsZCBub3QgY29ubmVjdCB0byBzb2NrZXQgCi1YU0xEZWJ1Z1RhcmdldC4yMD1FdmVudCBEaXNwYXRjaAotWFNMRGVidWdUYXJnZXQuMz1cIGFmdGVyIAotWFNMRGVidWdUYXJnZXQuND1cIGF0dGVtcHRzCi1YU0xMaW5lQnJlYWtwb2ludC4wPUxpbmUgQnJlYWtwb2ludDogCi1YU0xTdGFja0ZyYW1lLjU9XCBsaW5lOiAKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTVhMWEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy1kZWJ1Z2dlciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODg0ZWVlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuc2F4b248L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTJkOWUxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuc2F4b247c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL1NheG9uQXR0cmlidXRlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL1NheG9uQXR0cmlidXRlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjRhYjBlLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9TYXhvbkF0dHJpYnV0ZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1BTExPV19FWFRFUk5BTF9GVU5DVElPTlM9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL2FsbG93LWV4dGVybmFsLWZ1bmN0aW9ucwotQUxMT1dfRVhURVJOQUxfRlVOQ1RJT05TLlRZUEU9Ym9vbGVhbgotQUxMT1dfRVhURVJOQUxfRlVOQ1RJT05TLkRFU0M9dHJ1ZSBpZiB0aGUgc3R5bGVzaGVldCBhbGxvd3MgZXh0ZXJuYWwgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZC4gRGVmYXVsdCBpcyB0cnVlLiBUaGUgc2V0dGluZyBmYWxzZSBpcyByZWNvbW1lbmRlZCBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB1bnRydXN0ZWQgc3R5bGVzaGVldHMgbWF5IGJlIGV4ZWN1dGVkLiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gZmFsc2UgIGFsc28gZGlzYWJsZXMgdXNlci1kZWZpbmVkIGV4dGVuc2lvbiBlbGVtZW50cywgdG9nZXRoZXIgd2l0aCB0aGUgd3JpdGluZyBvZiBtdWx0aXBsZSBvdXRwdXQgZmlsZXMsIGFsbCBvZiB3aGljaCBjYXJyeSBzaW1pbGFyIHNlY3VyaXR5IHJpc2tzLgotCi1UUkFDRV9FWFRFUk5BTF9GVU5DVElPTlM9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3RyYWNlLWV4dGVybmFsLWZ1bmN0aW9ucwotVFJBQ0VfRVhURVJOQUxfRlVOQ1RJT05TLlRZUEU9Ym9vbGVhbgotVFJBQ0VfRVhURVJOQUxfRlVOQ1RJT05TLkRFU0M9dHJ1ZSBpZiB0aGUgdHJhY2luZyBvZiBjYWxscyB0byBleHRlcm5hbCBKYXZhIG1ldGhvZHMgaXMgcmVxdWlyZWQuIERlZmF1bHQgaXMgZmFsc2UuIFRoaXMgc3dpdGNoIGlzIHVzZWZ1bCB3aGVuIGFuYWx5emluZyB3aHkgU2F4b24gZmFpbHMgdG8gZmluZCBhIEphdmEgbWV0aG9kIHRvIG1hdGNoIGFuIGV4dGVuc2lvbiBmdW5jdGlvbiBjYWxsIGluIHRoZSBzdHlsZXNoZWV0LCBvciB3aHkgaXQgY2hvb3NlcyBvbmUgbWV0aG9kIG92ZXIgYW5vdGhlciB3aGVuIHNldmVyYWwgYXJlIGF2YWlsYWJsZS4gVGhlIHRyYWNlIG91dHB1dCBpcyBzZW50IHRvIFN5c3RlbS5lcnIuCi0KLVRJTUlORz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvdGltaW5nCi1USU1JTkcuVFlQRT1ib29sZWFuCi1USU1JTkcuREVTQz10cnVlIGlmIGJhc2ljIHRpbWluZyBpbmZvcm1hdGlvbiBpcyB0byBiZSBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dCBzdHJlYW0uCi0KLVRSRUVfTU9ERUw9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3RyZWVNb2RlbAotVFJFRV9NT0RFTC5UWVBFPWludAotVFJFRV9NT0RFTC5ERVNDPUJ1aWxkZXIuU1RBTkRBUkRfVFJFRSBvciBCdWlsZGVyLlRJTllfVFJFRS4gU2VsZWN0cyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2F4b24gdHJlZSBtb2RlbC4gVGhlIGRlZmF1bHQgaXMgQnVpbGRlci5USU5ZX1RSRUUuCi0KLVRSQUNFX0xJU1RFTkVSPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS90cmFjZUxpc3RlbmVyCi1UUkFDRV9MSVNURU5FUi5UWVBFPW9iamVjdAotVFJBQ0VfTElTVEVORVIuREVTQz1hbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgbmV0LnNmLnNheG9uLnRyYWNlLlRyYWNlTGlzdGVuZXIuIFRoaXMgb2JqZWN0IHdpbGwgYmUgbm90aWZpZWQgb2Ygc2lnbmlmaWNhbnQgZXZlbnRzIG9jY3VycmluZyBkdXJpbmcgdGhlIHRyYW5zZm9ybWF0aW9uLCBmb3IgdHJhY2luZyBvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi0KLUxJTkVfTlVNQkVSSU5HPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9saW5lbnVtYmVyaW5nCi1MSU5FX05VTUJFUklORy5UWVBFPWJvb2xlYW4KLUxJTkVfTlVNQkVSSU5HLkRFU0M9aW5kaWNhdGVzIHdoZXRoZXIgbGluZSBudW1iZXJzIGFyZSB0byBiZSBtYWludGFpbmVkIGZvciB0aGUgc291cmNlIGRvY3VtZW50LiBUaGlzIHdpbGwgbm90IGJlIHBvc3NpYmxlIGlmIHRoZSBzb3VyY2UgZG9jdW1lbnQgaXMgc3VwcGxpZWQgYXMgYSBET00uIFRoZSBsaW5lIG51bWJlcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgdHJhY2luZyBpbnRlcmZhY2UsIGFuZCBhbHNvIHZpYSB0aGUgc2F4b246bGluZS1udW1iZXIoKSBleHRlbnNpb24gZnVuY3Rpb24uCi0KLVJFQ09WRVJZX1BPTElDWT1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvcmVjb3ZlcnlQb2xpY3kKLVJFQ09WRVJZX1BPTElDWS5UWVBFPWludAotUkVDT1ZFUllfUE9MSUNZLkRFU0M9QW4gSW50ZWdlci4gSW5kaWNhdGVzIGhvdyBkeW5hbWljIGVycm9ycyBzaG91bGQgYmUgaGFuZGxlZC4gT25lIG9mIHRoZSB2YWx1ZXMgKGRlZmluZWQgYXMgY29uc3RhbnRzIGluIHRoZSBDb250cm9sbGVyIGNsYXNzKSBSRUNPVkVSX1NJTEVOVExZLCBSRUNPVkVSX1dJVEhfV0FSTklOR1MsIG9yIERPX05PVF9SRUNPVkVSKS4KLQotTUVTU0FHRV9FTUlUVEVSX0NMQVNTPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9tZXNzYWdlRW1pdHRlckNsYXNzCi1NRVNTQUdFX0VNSVRURVJfQ0xBU1MuVFlQRT1jbGFzcwotTUVTU0FHRV9FTUlUVEVSX0NMQVNTLkRFU0M9VGhlIGZ1bGwgbmFtZSBvZiBhIHNheG9uIGVtaXR0ZXIgY2xhc3MuIHRoYXQgaW1wbGVtZW50cyB0aGUgbmV0LnNmLnNheG9uLm91dHB1dC5FbWl0dGVyIGludGVyZmFjZTsgdGhlIGNsYXNzIHdpbGwgYmUgdXNlZCB0byBmb3JtYXQgdGhlIG91dHB1dCBvZiB0aGUgeHNsOm1lc3NhZ2UgaW5zdHJ1Y3Rpb24uCi0KLVNPVVJDRV9QQVJTRVJfQ0xBU1M9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3NvdXJjZVBhcnNlckNsYXNzCi1TT1VSQ0VfUEFSU0VSX0NMQVNTLlRZUEU9Y2xhc3MKLVNPVVJDRV9QQVJTRVJfQ0xBU1MuREVTQz1UaGUgZnVsbCBuYW1lIG9mIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBvcmcueG1sLnNheC5YTUxSZWFkZXIgaW50ZXJmYWNlOyB0aGUgY2xhc3Mgd2lsbCBiZSB1c2VkIHRvIHBhcnNlIHNvdXJjZSBkb2N1bWVudHMgKHRoYXQgaXMsIHRoZSBwcmluY2lwYWwgc291cmNlIGRvY3VtZW50IHBsdXMgYW55IHNlY29uZGFyeSBzb3VyY2UgZG9jdW1lbnRzIHJlYWQgdXNpbmcgdGhlIGRvY3VtZW50KCkgZnVuY3Rpb24pCi0KLVNUWUxFX1BBUlNFUl9DTEFTUz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvc3R5bGVQYXJzZXJDbGFzcwotU1RZTEVfUEFSU0VSX0NMQVNTLlRZUEU9Y2xhc3MKLVNUWUxFX1BBUlNFUl9DTEFTUy5ERVNDPVRoZSBmdWxsIG5hbWUgb2YgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIG9yZy54bWwuc2F4LlhNTFJlYWRlciBpbnRlcmZhY2U7IHRoZSBjbGFzcyB3aWxsIGJlIHVzZWQgdG8gcGFyc2Ugc3R5bGVzaGVldCBkb2N1bWVudHMgKHRoYXQgaXMsIHRoZSBwcmluY2lwYWwgc3R5bGVzaGVldCBtb2R1bGUgcGx1cyBhbnkgc2Vjb25kYXJ5IHNvdXJjZSBkb2N1bWVudHMgcmVhZCB1c2luZyB4c2w6aW5jbHVkZSBvciB4c2w6aW1wb3J0KQotCi1PVVRQVVRfVVJJX1JFU09MVkVSPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9vdXRwdXRVUklSZXNvbHZlcgotT1VUUFVUX1VSSV9SRVNPTFZFUi5UWVBFPW9iamVjdAotT1VUUFVUX1VSSV9SRVNPTFZFUi5ERVNDPUFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBuZXQuc2Yuc2F4b24uT3V0cHV0VVJJUmVzb2x2ZXI7IHRoaXMgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byByZXNvbHZlIFVSSXMgb2Ygc2Vjb25kYXJ5IHJlc3VsdCBkb2N1bWVudHMgc3BlY2lmaWVkIGluIHRoZSBocmVmIGF0dHJpYnV0ZSBvZiB0aGUgeHNsOnJlc3VsdC1kb2N1bWVudCAgaW5zdHJ1Y3Rpb24KLQotRFREX1ZBTElEQVRJT049aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3ZhbGlkYXRpb24KLURURF9WQUxJREFUSU9OLlRZUEU9Ym9vbGVhbgotRFREX1ZBTElEQVRJT04uREVTQz1JbmRpY2F0ZXMgd2hldGhlciB0aGUgWE1MIHBhcnNlciBzaG91bGQgYmUgYXNrZWQgdG8gdmFsaWRhdGUgc291cmNlIGRvY3VtZW50cyBhZ2FpbnN0IHRoZWlyIERURC4gVGhpcyBhcHBsaWVzIHRvIHRoZSBpbml0aWFsIHNvdXJjZSBkb2N1bWVudCBhbmQgYW55IHNvdXJjZSBkb2N1bWVudHMgcmVhZCB1c2luZyB0aGUgZG9jdW1lbnQoKSBmdW5jdGlvbiwgdW5sZXNzIGhhbmRsZWQgYnkgYSB1c2VyLXdyaXR0ZW4gVVJJUmVzb2x2ZXIuCi0KLVZBTElEQVRJT05fV0FSTklOR1M9aHR0cDovL3NheG9uLnNmLm5ldC9mZWF0dXJlL3ZhbGlkYXRpb24td2FybmluZ3MKLVZBTElEQVRJT05fV0FSTklOR1MuVFlQRT1ib29sZWFuCi1WQUxJREFUSU9OX1dBUk5JTkdTLkRFU0M9VGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdmFsaWRhdGlvbiBlcnJvcnMgaW4gcmVzdWx0IGRvY3VtZW50cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBmYXRhbC4gQnkgZGVmYXVsdCB0aGV5IGFyZSBmYXRhbDsgd2l0aCB0aGlzIG9wdGlvbiBzZXQsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgd2FybmluZ3MuCi0KLVNDSEVNQV9WQUxJREFUSU9OPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9zY2hlbWEtdmFsaWRhdGlvbgotU0NIRU1BX1ZBTElEQVRJT04uVFlQRT1ib29sZWFuCi1TQ0hFTUFfVkFMSURBVElPTi5ERVNDPVRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHNvdXJjZSBkb2N1bWVudHMgc2hvdWxkIGJlIHBhcnNlZCB3aXRoIHNjaGVtYS12YWxpZGF0aW9uIGVuYWJsZWQuCi0KLVZFUlNJT05fV0FSTklORz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvdmVyc2lvbi13YXJuaW5nCi1WRVJTSU9OX1dBUk5JTkcuVFlQRT1ib29sZWFuCi1WRVJTSU9OX1dBUk5JTkcuREVTQz1UaGlzIGRldGVybWluZXMgd2hldGhlciBhIHdhcm5pbmcgc2hvdWxkIGJlIG91dHB1dCB3aGVuIHJ1bm5pbmcgYW4gWFNMVCAyLjAgcHJvY2Vzc29yIGFnYWluc3QgYW4gWFNMVCAxLjAgc3R5bGVzaGVldC4gVGhlIFhTTFQgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGlzIHRvIGJlIGRvbmUgYnkgZGVmYXVsdC4KLQotTkFNRV9QT09MPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9uYW1lUG9vbAotTkFNRV9QT09MLlRZUEU9b2JqZWN0Ci1OQU1FX1BPT0wuREVTQz1BIGluc3RhbmNlIG9mIGNsYXNzIG5ldC5zZi5zYXhvbi5vbS5OYW1lUG9vbC4gSW5kaWNhdGVzIHRoYXQgdGhlIHN1cHBsaWVkIE5hbWVQb29sIHNob3VsZCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgKHJ1bi10aW1lKSBOYW1lUG9vbCBieSBhbGwgc3R5bGVzaGVldHMgY29tcGlsZWQgKHVzaW5nIG5ld1RlbXBsYXRlcygpKSBhZnRlciB0aGlzIGNhbGwgb24gc2V0QXR0cmlidXRlLiBOb3JtYWxseSBhIHNpbmdsZSBzeXN0ZW0tYWxsb2NhdGVkIE5hbWVQb29sIGlzIHVzZWQgZm9yIGFsbCBzdHlsZXNoZWV0cyBjb21waWxlZCB3aGlsZSB0aGUgSmF2YSBWTSByZW1haW5zIGxvYWRlZDsgdGhpcyBhdHRyaWJ1dGUgYWxsb3dzIHVzZXIgY29udHJvbCBvdmVyIHRoZSBhbGxvY2F0aW9uIG9mIE5hbWVQb29scy4gTm90ZSB0aGF0IHNvdXJjZSB0cmVlcyB1c2VkIGFzIGlucHV0IHRvIGEgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBidWlsdCB1c2luZyB0aGUgc2FtZSBOYW1lUG9vbCB0aGF0IGlzIHVzZWQgd2hlbiB0aGUgc3R5bGVzaGVldCBpcyBjb21waWxlZDogdGhpcyB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5IGlmIHRoZSBpbnB1dCB0byBhIHRyYW5zZm9ybWF0aW9uIGlzIHN1cHBsaWVkIGFzIGEgU0FYU291cmNlIG9yIFN0cmVhbVNvdXJjZSBidXQgaXQgaXMgdW5kZXIgdXNlciBjb250cm9sIGlmIHlvdSBidWlsZCB0aGUgc291cmNlIHRyZWUgeW91cnNlbGYuCi0KLVJFQ09HTklaRV9VUklfUVVFUllfUEFSQU1FVEVSUz1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvcmVjb2duaXplLXVyaS1xdWVyeS1wYXJhbWV0ZXJzCi1SRUNPR05JWkVfVVJJX1FVRVJZX1BBUkFNRVRFUlMuVFlQRT1ib29sZWFuCi1SRUNPR05JWkVfVVJJX1FVRVJZX1BBUkFNRVRFUlMuREVTQz1kZXRlcm1pbmVzIHdoZXRoZXIgcXVlcnkgcGFyYW1ldGVycyAodGhpbmdzIGFmdGVyICI/IilcblwKLSBpbiBhIFVSSSBwYXNzZWQgdG8gdGhlIGRvY3VtZW50KCkgb3IgZG9jKCkgZnVuY3Rpb24gYXJlIHNwZWNpYWxseSByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0gZGVmYXVsdCBVUklSZXNvbHZlci5cblwKLSBBbGxvd2VkIHBhcmFtZXRlcnMgaW5jbHVkZSwgZm9yIGV4YW1wbGUgdmFsaWRhdGlvbj1zdHJpY3QgdG8gcGVyZm9ybSBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHN0cmlwLXNwYWNlPXllc1xuXAotIHRvIHBlcmZvcm0gc3RyaXBwaW5nIG9mIGFsbCB3aGl0ZXNwYWNlLW9ubHkgdGV4dCBub2RlcwotCi1DT0xMQVRJT05fVVJJX1JFU09MVkVSPWh0dHA6Ly9zYXhvbi5zZi5uZXQvZmVhdHVyZS9jb2xsYXRpb24tdXJpLXJlc29sdmVyCi1DT0xMQVRJT05fVVJJX1JFU09MVkVSLlRZUEU9b2JqZWN0Ci1DT0xMQVRJT05fVVJJX1JFU09MVkVSLkRFU0M9QSBuZXQuc2Yuc2F4b24uc29ydC5Db2xsYXRpb25VUklSZXNvbHZlciB1c2VkIHRvIHJlc29sdmUgY29sbGF0aW9uIFVSSXMgdXNlZCBpbiBzdHlsZXNoZWV0cyBjb21waWxlZCBvciBleGVjdXRlZCB1bmRlciB0aGVcblwKLSBjb250cm9sIG9mIHRoaXMgVHJhbnNmb3JtZXJGYWN0b3J5Ci0gCi1DT0xMRUNUSU9OX1VSSV9SRVNPTFZFUj1odHRwOi8vc2F4b24uc2YubmV0L2ZlYXR1cmUvY29sbGVjdGlvbi11cmktcmVzb2x2ZXIKLUNPTExFQ1RJT05fVVJJX1JFU09MVkVSLlRZUEU9b2JqZWN0Ci1DT0xMRUNUSU9OX1VSSV9SRVNPTFZFUi5ERVNDPUEgbmV0LnNmLnNheG9uLnNvcnQuQ29sbGVjdGlvblVSSVJlc29sdmVyIHVzZWQgdG8gcmVzb2x2ZSBjb2xsZWN0aW9uIFVSSXMgdXNlZCBpbiBjYWxscyBvZiB0aGUgY29sbGVjdGlvbigpIGZ1bmN0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL1NheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL1NheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTc5MDcxLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9TYXhvbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1JTkRFTlRfU1BBQ0VTPXtodHRwOi8vc2F4b24uc2YubmV0L31pbmRlbnQtc3BhY2VzCi1JTkRFTlRfU1BBQ0VTLkRFU0M9KGludGVnZXIgdmFsdWUpLkRlZmluZXMgdGhlIG51bWJlciBvZiBzcGFjZXMgdXNlZCBmb3IgaW5kZW50YXRpb24gb2Ygb3V0cHV0Ci0KLVVOREVDTEFSRV9OQU1FU1BBQ0VTPXtodHRwOi8vc2F4b24uc2YubmV0L311bmRlY2xhcmUtbmFtZXNwYWNlcwotVU5ERUNMQVJFX05BTUVTUEFDRVMuREVTQz1pbmNsdWRlLWNvbnRlbnQtdHlwZSA9ICJ5ZXMiIHwgIm5vIi4gVGhpcyBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBpbiBYU0xUIDIuMC4gSW5kaWNhdGVzIFhNTCAxLjEgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBhcmUgdG8gYmUgb3V0cHV0LgotCi1DSEFSQUNURVJfUkVQUkVTRU5UQVRJT049e2h0dHA6Ly9zYXhvbi5zZi5uZXQvfWNoYXJhY3Rlci1yZXByZXNlbnRhdGlvbgotQ0hBUkFDVEVSX1JFUFJFU0VOVEFUSU9OLkRFU0M9KHJlcDFbO3JlcDJdKS4gSW5kaWNhdGVzIHRoZSBwcmVmZXJyZWQgd2F5IG9mIHJlcHJlc2VudGluZyBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBIVE1MIGFuZCBYTUwgb3V0cHV0LiByZXAxIGlzIGZvciBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSAxMjgtMjU2LCByZXAyIGZvciB0aG9zZSBhYm92ZSAyNTYuCi0KLU5FWFRfSU5fQ0hBSU49e2h0dHA6Ly9zYXhvbi5zZi5uZXQvfW5leHQtaW4tY2hhaW4KLU5FWFRfSU5fQ0hBSU4uREVTQz0odXJpKS4gSW5kaWNhdGVzIHRoYXQgdGhlIG91dHB1dCBpcyB0byBiZSBwaXBlZCBpbnRvIGFub3RoZXIgWFNMVCBzdHlsZXNoZWV0IHRvIHBlcmZvcm0gYW5vdGhlciB0cmFuc2Zvcm1hdGlvbi4gVGhlIGF1eGlsaWFyeSBwcm9wZXJ0eSBORVhUX0lOX0NIQUlOX0JBU0VfVVJJIHJlY29yZHMgdGhlIGJhc2UgVVJJIG9mIHRoZSBzdHlsZXNoZWV0IGVsZW1lbnQgd2hlcmUgdGhpcyBhdHRyaWJ1dGUgd2FzIGZvdW5kLgotCi1UWVBFX0lORk9STUFUSU9OPXtodHRwOi8vc2F4b24uc2YubmV0L310eXBlLWluZm9ybWF0aW9uCi1UWVBFX0lORk9STUFUSU9OLkRFU0M9KG5vbmV8cHJlc2VydmV8c3RyaWN0fGxheCkuIEluZGljYXRlcyB0aGUgdmFsdWUgb2YgdGhlIHR5cGUtaW5mb3JtYXRpb24gYXR0cmlidXRlOiAibm9uZSIsICJwcmVzZXJ2ZSIsICJzdHJpY3QiLCAibGF4IgotCi1SRVFVSVJFX1dFTExfRk9STUVEPXtodHRwOi8vc2F4b24uc2YubmV0L31yZXF1aXJlLXdlbGwtZm9ybWVkCi1SRVFVSVJFX1dFTExfRk9STUVELkRFU0M9KHllc3xubykuIEluZGljYXRlcyB3aGV0aGVyIGEgdXNlci1zdXBwbGllZCBDb250ZW50SGFuZGxlciByZXF1aXJlcyB0aGUgc3RyZWFtIG9mIFNBWCBldmVudHMgdG8gYmUgd2VsbC1mb3JtZWQgKHRoYXQgaXMsIHRvIGhhdmUgYSBzaW5nbGUgZWxlbWVudCBub2RlIGFuZCBubyB0ZXh0IG5vZGVzIGFzIGNoaWxkcmVuIG9mIHRoZSByb290KS4gVGhlIGRlZmF1bHQgaXMgIm5vIi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vYnVpbGQucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDRkZGUyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy1kZWJ1Z2dlci8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgU2F4b25BdHRyaWJ1dGVzLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgU2F4b25PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vcGx1Z2luLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wuc2F4b24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Mzg3NTEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsLnNheG9uCi1CdW5kbGUtTmFtZS4wID0gWFNMIFNheG9uIFN1cHBvcnQgKEluY3ViYXRpbmcpCi1wcm9jZXNzb3JUeXBlLmxhYmVsLjAgPSBTYXhvbiAoWFNMVCAyLjApCi1wcm9jZXNzb3JUeXBlLmxhYmVsLjEgPSBTYXhvbiAoWFNMVCAxLjApCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotdHJhbnNmb3JtZXJGYWN0b3J5U2F4b242ID0gU2F4b24gNgotdHJhbnNmb3JtZXJTYXhvblhTTFQyID0gU2F4b24gNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9wbHVnaW4ueG1sIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZTBhODIuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueHNsLmpheHAubGF1bmNoaW5nLnByb2Nlc3NvclR5cGUiPgotICAgICAgPHByb2Nlc3NvclR5cGUKLSAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXM9IlNheG9uQXR0cmlidXRlcy5wcm9wZXJ0aWVzIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuc2F4b25fMV8wLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3NvclR5cGUubGFiZWwuMSIKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9IlNheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIj4KLSAgICAgICAgIDx0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0iY29tLmljbC5zYXhvbi5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIgotICAgICAgICAgICAgICAgbmFtZT0iJXRyYW5zZm9ybWVyRmFjdG9yeVNheG9uNiI+Ci0gICAgICAgICA8L3RyYW5zZm9ybWVyRmFjdG9yeT4KLSAgICAgIDwvcHJvY2Vzc29yVHlwZT4KLSAgICAgIDxwcm9jZXNzb3JUeXBlCi0gICAgICAgICAgICBhdHRyaWJ1dGVQcm9wZXJ0aWVzPSJTYXhvbkF0dHJpYnV0ZXMucHJvcGVydGllcyIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICBsYWJlbD0iJXByb2Nlc3NvclR5cGUubGFiZWwuMCIKLSAgICAgICAgICAgIG91dHB1dFByb3BlcnRpZXM9IlNheG9uT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzIj4KLSAgICAgICAgIDx0cmFuc2Zvcm1lckZhY3RvcnkKLSAgICAgICAgICAgICAgIGZhY3RvcnlDbGFzcz0ibmV0LnNmLnNheG9uLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiCi0gICAgICAgICAgICAgICBuYW1lPSIldHJhbnNmb3JtZXJTYXhvblhTTFQyIj4KLSAgICAgICAgIDwvdHJhbnNmb3JtZXJGYWN0b3J5PgotICAgICAgPC9wcm9jZXNzb3JUeXBlPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3NyYy1kZWJ1Z2dlci9SRUFETUUudHh0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnNheG9uL3NyYy1kZWJ1Z2dlci9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDYzYTU3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5zYXhvbi9zcmMtZGVidWdnZXIvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUp1c3QgYSBwbGFjZWhvbGRlciB0byBlbnN1cmUgc3JjIGZvbGRlciBhcHBlYXJzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uY2xhc3NwYXRoIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZGY4ZTkuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMtZGVidWdnZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5jdnNpZ25vcmUgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiNzZiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotamF2YUNvbXBpbGVyLnhhbGFuLWRlYnVnZ2VyLmphci5hcmdzCi1idWlsZC54bWwKLXhhbGFuLWRlYnVnZ2VyLmphcgotdGVtcC5mb2xkZXIKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8ucHJvamVjdCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU5NDA2MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmExMzA5Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUaHUgSmFuIDAzIDIyOjI0OjUwIEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGJjMzQ3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jU3VuIERlYyAxNiAwODo0ODo1MiBHTVQgMjAwNwotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlNjhiOS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSNXZWQgSnVsIDMwIDIwOjU3OjE1IEJTVCAyMDA4Ci1jb21waWxlcnMuZi51bnJlc29sdmVkLWZlYXR1cmVzPTEKLWNvbXBpbGVycy5mLnVucmVzb2x2ZWQtcGx1Z2lucz0xCi1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTEKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuZGlzY291cmFnZWQtY2xhc3M9MQotY29tcGlsZXJzLnAuaW50ZXJuYWw9MQotY29tcGlsZXJzLnAubWlzc2luZy1idW5kbGUtY2xhc3NwYXRoLWVudHJpZXM9MAotY29tcGlsZXJzLnAubWlzc2luZy1wYWNrYWdlcz0yCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MQotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0xCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1pZGVudGlmaWVyPTEKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MQotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnMuY3JlYXRlLWRvY3M9ZmFsc2UKLWNvbXBpbGVycy5zLmRvYy1mb2xkZXI9ZG9jCi1jb21waWxlcnMucy5vcGVuLXRhZ3M9MQotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3YmYzZWYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW47c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0gIHVzZXM6PSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLAotICAgb3JnLmFwYWNoZS54cGF0aCwKLSAgIG9yZy5hcGFjaGUueGFsYW4udHJhY2UsCi0gICBqYXZheC54bWwudHJhbnNmb3JtLAotICAgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMiCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmFwYWNoZS54YWxhbjtidW5kbGUtdmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS54bWwuc2VyaWFsaXplcjtidW5kbGUtdmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnO2J1bmRsZS12ZXJzaW9uPSJbMS4wLjAsMi4wLjApIjtyZXNvbHV0aW9uOj1vcHRpb25hbApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL1hhbGFuQXR0cmlidXRlcy5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL1hhbGFuQXR0cmlidXRlcy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTFiNWM3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9YYWxhbkF0dHJpYnV0ZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1PUFRJTUlaRT1odHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vZmVhdHVyZXMvb3B0aW1pemUKLU9QVElNSVpFLlRZUEU9Ym9vbGVhbgotT1BUSU1JWkUuREVTQz1PcHRpbWl6ZSBzdHlsZXNoZWV0IHByb2Nlc3NpbmcuIEJ5IGRlZmF1bHQsIHRoaXMgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlLiBZb3UgbWF5IG5lZWQgdG8gc2V0IGl0IHRvIGZhbHNlIGZvciB0b29saW5nIGFwcGxpY2F0aW9ucy4KLQotSU5DUkVNRU5UQUw9aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuL2ZlYXR1cmVzL2luY3JlbWVudGFsCi1JTkNSRU1FTlRBTC5UWVBFPWJvb2xlYW4KLUlOQ1JFTUVOVEFMLkRFU0M9UHJvZHVjZSBvdXRwdXQgaW5jcmVtZW50YWxseSwgcmF0aGVyIHRoYW4gd2FpdGluZyB0byBmaW5pc2ggcGFyc2luZyB0aGUgaW5wdXQgYmVmb3JlIGdlbmVyYXRpbmcgYW55IG91dHB1dC4gQnkgZGVmYXVsdCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8gZmFsc2UuIFlvdSBjYW4gdHVybiB0aGlzIGF0dHJpYnV0ZSBvbiB0byB0cmFuc2Zvcm0gbGFyZ2UgZG9jdW1lbnRzIHdoZXJlIHRoZSBzdHlsZXNoZWV0IHN0cnVjdHVyZSBpcyBvcHRpbWl6ZWQgdG8gZXhlY3V0ZSBpbmRpdmlkdWFsIHRlbXBsYXRlcyB3aXRob3V0IGhhdmluZyB0byBwYXJzZSB0aGUgZW50aXJlIGRvY3VtZW50LgotCi1TT1VSQ0VfTE9DQVRJT049aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuL2ZlYXR1cmVzL3NvdXJjZV9sb2NhdGlvbgotU09VUkNFX0xPQ0FUSU9OLlRZUEU9Ym9vbGVhbgotU09VUkNFX0xPQ0FUSU9OLkRFU0M9QnkgZGVmYXVsdCwgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvIGZhbHNlLiBTZXR0aW5nIHRoaXMgYXR0cmlidXRlIHRvIHRydWUgaW52b2x2ZXMgYSBzdWJzdGFudGlhbCBpbmNyZWFzZSBpbiBzdG9yYWdlIGNvc3QgcGVyIHNvdXJjZSBkb2N1bWVudCBub2RlLiBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIE5vZGVJbmZvIGV4dGVuc2lvbiBmdW5jdGlvbnMgKG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtKSB0byBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gZHVyaW5nIGEgdHJhbnNmb3JtLCB5b3UgbXVzdCBzZXQgdGhlIGF0dHJpYnV0ZSB0byB0cnVlIGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBUcmFuc2Zvcm1lciBhbmQgcHJvY2Vzc2luZyB0aGUgc3R5bGVzaGVldC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vWGFsYW5PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vWGFsYW5PdXRwdXRQcm9wZXJ0aWVzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZWIwNzEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL1hhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLVNfS0VZX0lOREVOVF9BTU9VTlQ9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1pbmRlbnQtYW1vdW50Ci1TX0tFWV9JTkRFTlRfQU1PVU5ULkRFU0M9VGhlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBrZXkgdG8gdXNlIHRvIHNldCB0aGVcblwKLQludW1iZXIgb2Ygd2hpdGVwYWNlcyB0byBpbmRlbnQgYnksIHBlciBpbmRlbnRhdGlvbiBsZXZlbCxcblwKLSAgICBpZiBpbmRlbnQ9InllcyIKLQotU19LRVlfTElORV9TRVBBUkFUT1I9e2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbn1saW5lLXNlcGFyYXRvcgotU19LRVlfTElORV9TRVBBUkFUT1IuREVTQz1UaGUgbm9uLXN0YW5kYXJkIHByb3BlcnR5IGtleSB0byB1c2UgdG8gc2V0IHRoZSBjaGFyYWN0ZXJzIHRvIHdyaXRlIG91dCBhcyBhdCB0aGUgZW5kIG9mIGEgbGluZSxcblwKLQlyYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBvbmVzIGZyb20gdGhlIHJ1bnRpbWUuCi0KLVNfS0VZX0NPTlRFTlRfSEFORExFUj17aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFufWNvbnRlbnQtaGFuZGxlcgotU19LRVlfQ09OVEVOVF9IQU5ETEVSLkRFU0M9VGhpcyBub24tc3RhbmRhcmQgcHJvcGVydHkga2V5IGlzIHVzZWQgdG8gc2V0IHRoZSBuYW1lIG9mIHRoZSBmdWxseSBxdWFsaWZpZWRcblwKLSAgICAgSmF2YSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIENvbnRlbnRIYW5kbGVyIGludGVyZmFjZS5cblwKLSAgICAgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgY2xhc3Mgd2l0aCBhIGRlZmF1bHQgY29uc3RydWN0b3IgdGhhdFxuXAotICAgICBpbXBsZW1lbnRzIHRoZSBDb250ZW50SGFuZGxlciBpbnRlcmZhY2UsIHdoZXJlIHRoZSByZXN1bHQgdHJlZSBldmVudHNcblwKLSAgICAgd2lsbCBiZSBzZW50IHRvLgotCi1TX0tFWV9FTlRJVElFUz17aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFufWVudGl0aWVzCi1TX0tFWV9FTlRJVElFUy5ERVNDPVRoaXMgbm9uLXN0YW5kYXJkIHByb3BlcnR5IGtleSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZpbGVcblwKLSAgICAgdGhhdCBzcGVjaWZpZXMgY2hhcmFjdGVyIHRvIGVudGl0eSByZWZlcmVuY2UgbWFwcGluZ3MuCi0KLVNfVVNFX1VSTF9FU0NBUElORz17aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFufXVzZS11cmwtZXNjYXBpbmcKLVNfVVNFX1VSTF9FU0NBUElORy5ERVNDPVRoaXMgbm9uLXN0YW5kYXJkIHByb3BlcnR5IGtleSBpcyB1c2VkIHRvIHNldCBhIHZhbHVlIG9mICJ5ZXMiIGlmIHRoZSBocmVmIHZhbHVlcyBmb3IgSFRNTCBzZXJpYWxpemF0aW9uIHNob3VsZFxuXAotICAgICB1c2UgJXh4IGVzY2FwaW5nLgotICAgICAKLVNfT01JVF9NRVRBX1RBRz17aHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFufW9taXQtbWV0YS10YWcKLVNfT01JVF9NRVRBX1RBRy5ERVNDPVRoaXMgbm9uLXN0YW5kYXJkIHByb3BlcnR5IGtleSBpcyB1c2VkIHRvIHNldCBhIHZhbHVlIG9mICJ5ZXMiIGlmIHRoZSBNRVRBIHRhZyBzaG91bGQgYmUgb21pdHRlZCB3aGVyZSBpdCB3b3VsZFxuXAotICAgICBvdGhlcndpc2UgYmUgc3VwcGxpZWQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2Fib3V0Lmh0bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI1NmM4Mi4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLWRlYnVnZ2VyLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIFhhbGFuT3V0cHV0UHJvcGVydGllcy5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIFhhbGFuQXR0cmlidXRlcy5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3BsdWdpbi5wcm9wZXJ0aWVzIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjRjYmU0Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI1Byb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbgotQnVuZGxlLU5hbWUuMCA9IFhTTCBYYWxhbiBTdXBwb3J0IChJbmN1YmF0aW5nKQotcHJvY2Vzc29yVHlwZS5sYWJlbC4wID0gWGFsYW4KLXByb2Nlc3Nvci5sYWJlbC4wID0gWGFsYW4gMi41LjEKLXByb2Nlc3Nvci5sYWJlbC4xID0gWGFsYW4gMi43LjEKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi10cmFuc2Zvcm1lckZhY3RvcnlOYW1lWGFsYW4gPSBJbnRlcnByZXRpdmUKLXRyYW5zZm9ybWVyRmFjdG9yeU5hbWVYYWxhblhTTFRDID0gQ29tcGlsaW5nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3BsdWdpbi54bWwgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2MDI5Ny4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Ci08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcucHJvY2Vzc29yVHlwZSI+Ci0gICAgICA8cHJvY2Vzc29yVHlwZQotICAgICAgICAgICAgYXR0cmlidXRlUHJvcGVydGllcz0iWGFsYW5BdHRyaWJ1dGVzLnByb3BlcnRpZXMiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlIgotICAgICAgICAgICAgbGFiZWw9IiVwcm9jZXNzb3JUeXBlLmxhYmVsLjAiCi0gICAgICAgICAgICBvdXRwdXRQcm9wZXJ0aWVzPSJYYWxhbk91dHB1dFByb3BlcnRpZXMucHJvcGVydGllcyI+Ci0gICAgICAgICA8dHJhbnNmb3JtZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICBmYWN0b3J5Q2xhc3M9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiCi0gICAgICAgICAgICAgICBuYW1lPSIldHJhbnNmb3JtZXJGYWN0b3J5TmFtZVhhbGFuIj4KLSAgICAgICAgIDwvdHJhbnNmb3JtZXJGYWN0b3J5PgotICAgICAgICAgPHRyYW5zZm9ybWVyRmFjdG9yeQotICAgICAgICAgICAgICAgZmFjdG9yeUNsYXNzPSJvcmcuYXBhY2hlLnhhbGFuLnhzbHRjLnRyYXguVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCIKLSAgICAgICAgICAgICAgIG5hbWU9IiV0cmFuc2Zvcm1lckZhY3RvcnlOYW1lWGFsYW5YU0xUQyI+Ci0gICAgICAgICA8L3RyYW5zZm9ybWVyRmFjdG9yeT4KLSAgICAgIDwvcHJvY2Vzc29yVHlwZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5sYXVuY2hpbmcuZGVidWdnZXIiPgotICAgICAgPGRlYnVnZ2VyCi0gICAgICAgICAgICBjbGFzc05hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlciIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlY2xpcHNlX29yYml0Om9yZy5lY2xpcHNlLndzdC54c2wueGFsYW59IgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIiCi0gICAgICAgICAgICBuYW1lPSJYYWxhbiAyLjUuMSBvciBncmVhdGVyIgotICAgICAgICAgICAgcHJvY2Vzc29yVHlwZUlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLnByb2Nlc3NvclR5cGUiCi0gICAgICAgICAgICB0cmFuc2Zvcm1lckZhY3RvcnlDbGFzcz0ib3JnLmFwYWNoZS54YWxhbi5wcm9jZXNzb3IuVHJhbnNmb3JtZXJGYWN0b3J5SW1wbCI+Ci0gICAgICA8L2RlYnVnZ2VyPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZy5wcm9jZXNzb3IiPgotICAgICAgPCEtLSBBbiBhZG9wdGVyIGNhbiBzcGVjaWZ5IHRoZSAke2VjbGlwc2Vfb3JiaXQ6IH0gdmFyaWFibGUgdG8gaW5kaWNhdGUgd2hpY2ggZWNsaXBzZQotICAgICAgICAgICBidW5kbGUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjbGFzcyBwYXRoLiAtLT4KLSAgICAgIDxwcm9jZXNzb3IKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlY2xpcHNlX29yYml0Om9yZy5hcGFjaGUueGFsYW59OyR7ZWNsaXBzZV9vcmJpdDpvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyfTske2VjbGlwc2Vfb3JiaXQ6b3JnLmFwYWNoZS5iY2VsfTske2VjbGlwc2Vfb3JiaXQ6amF2YV9jdXAucnVudGltZX0iCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcueGFsYW4ucHJvY2Vzc29yIgotICAgICAgICAgICAgbGFiZWw9IiVwcm9jZXNzb3IubGFiZWwuMSIKLSAgICAgICAgICAgIHByb2Nlc3NvclR5cGVJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5wcm9jZXNzb3JUeXBlIgotICAgICAgICAgICAgZGVidWdnZXJJZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlciIKLSAgICAgICAgICAgIHN1cHBvcnRzPSIxLjAiPgotICAgICAgPC9wcm9jZXNzb3I+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuRGVidWdnZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhbkRlYnVnZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZGVmMmYuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuRGVidWdnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVG9vTWFueUxpc3RlbmVyc0V4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhbnNmb3JtZXIuVHJhbnNmb3JtZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5BYnN0cmFjdERlYnVnZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5CcmVha1BvaW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2wuamF4cC5kZWJ1Zy5kZWJ1Z2dlci5WYXJpYWJsZTsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBYYWxhbkRlYnVnZ2VyIGV4dGVuZHMgQWJzdHJhY3REZWJ1Z2dlcgotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhYYWxhbkRlYnVnZ2VyLmNsYXNzKTsKLQlwcml2YXRlIFhhbGFuVHJhY2VMaXN0ZW5lciBjdXJyZW50VHJhY2VMaXN0ZW5lcjsKLQlwcml2YXRlIFRyYW5zZm9ybWVySW1wbCBsYXN0VHJhbnNmb3JtZXJJbkNoYWluOwotCQotCXB1YmxpYyB2b2lkIHNldFRyYW5zZm9ybWVyRmFjdG9yeShUcmFuc2Zvcm1lckZhY3RvcnkgZmFjdG9yeSkKLQl7Ci0JCVRyYW5zZm9ybWVyRmFjdG9yeUltcGwgdGZpID0gKFRyYW5zZm9ybWVyRmFjdG9yeUltcGwpIGZhY3Rvcnk7Ci0JCXRmaS5zZXRBdHRyaWJ1dGUoVHJhbnNmb3JtZXJGYWN0b3J5SW1wbC5GRUFUVVJFX1NPVVJDRV9MT0NBVElPTiwgQm9vbGVhbi5UUlVFKTsKLQkJdGZpLnNldEF0dHJpYnV0ZShUcmFuc2Zvcm1lckZhY3RvcnlJbXBsLkZFQVRVUkVfT1BUSU1JWkUsIEJvb2xlYW4uRkFMU0UpOwotCX0KLQkKLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZGVidWdnZXJTdXNwZW5kZWQoQnJlYWtQb2ludCBicmVha3BvaW50KQotCXsKLQkJLy8gZmx1c2ggdGhlIHNlcmlhbGl6ZXIgKHdoaWNoIGlzIGJ1ZmZlcmVkIGJ5IFhhbGFuIGl0c2VsZikKLQkJdHJ5Ci0JCXsKLQkJCWxhc3RUcmFuc2Zvcm1lckluQ2hhaW4uZ2V0U2VyaWFsaXphdGlvbkhhbmRsZXIoKS5mbHVzaFBlbmRpbmcoKTsKLQkJfQotCQljYXRjaCAoU0FYRXhjZXB0aW9uIGUpCi0JCXsKLQkJCWxvZy5lcnJvcigiRXJyb3IgZmx1c2hpbmcgc2VyaWFsaXplciIsIGUpOwotCQl9Ci0JCXN1cGVyLmRlYnVnZ2VyU3VzcGVuZGVkKGJyZWFrcG9pbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFRyYW5zZm9ybWVyKFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKQotCXsKLQkJVHJhbnNmb3JtZXJJbXBsIHRyYW5zZm9ybWVySW1wbCA9IChUcmFuc2Zvcm1lckltcGwpIHRyYW5zZm9ybWVyOwotCQkKLQkJbGFzdFRyYW5zZm9ybWVySW5DaGFpbiA9IHRyYW5zZm9ybWVySW1wbDsKLQkJCi0JCVRyYWNlTWFuYWdlciB0ck1nciA9IHRyYW5zZm9ybWVySW1wbC5nZXRUcmFjZU1hbmFnZXIoKTsKLQkJdHJ5Ci0JCXsKLS8vCQkJWGFsYW5QcmludFRyYWNlTGlzdGVuZXIgcHJpbnRlciA9IG5ldyBYYWxhblByaW50VHJhY2VMaXN0ZW5lcihuZXcgUHJpbnRXcml0ZXIoU3lzdGVtLmVycikpOwotLy8JCQlwcmludGVyLm1fdHJhY2VFbGVtZW50cyA9IHRydWU7Ci0vLwkJCXByaW50ZXIubV90cmFjZVNlbGVjdGlvbiA9IHRydWU7Ci0vLwkJCXByaW50ZXIubV90cmFjZVRlbXBsYXRlcyA9IHRydWU7Ci0vLwkJCXRyTWdyLmFkZFRyYWNlTGlzdGVuZXIocHJpbnRlcik7Ci0JCQkKLQkJCVhhbGFuVHJhY2VMaXN0ZW5lciB0cmFjZUxpc3RlbmVyID0gbmV3IFhhbGFuVHJhY2VMaXN0ZW5lcih0aGlzKTsKLQkJCXRyTWdyLmFkZFRyYWNlTGlzdGVuZXIodHJhY2VMaXN0ZW5lcik7Ci0JCX0KLQkJY2F0Y2ggKFRvb01hbnlMaXN0ZW5lcnNFeGNlcHRpb24gZSkKLQkJewotCQkJLy8gaWdub3JlCi0JCX0KLQl9Ci0KLQlwdWJsaWMgVmFyaWFibGUgZ2V0VmFyaWFibGUoaW50IGlkKQotCXsKLQkJcmV0dXJuIGN1cnJlbnRUcmFjZUxpc3RlbmVyLmdldFZhcmlhYmxlKGlkKTsKLQl9Ci0KLQl2b2lkIHNldEN1cnJlbnRUcmFjZUxpc3RlbmVyKFhhbGFuVHJhY2VMaXN0ZW5lciBjdXJyZW50VHJhY2VMaXN0ZW5lcikKLQl7Ci0JCWxvZy5kZWJ1ZygiU2V0dGluZyBuZXcgWGFsYW5UcmFjZUxpc3RlbmVyIik7Ci0JCXRoaXMuY3VycmVudFRyYWNlTGlzdGVuZXIgPSBjdXJyZW50VHJhY2VMaXN0ZW5lcjsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5QcmludFRyYWNlTGlzdGVuZXIuamF2YSBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblByaW50VHJhY2VMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDZjMDdkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblByaW50VHJhY2VMaXN0ZW5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVRleHRMaXRlcmFsOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5QcmludFRyYWNlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50OwotCi1wdWJsaWMgY2xhc3MgWGFsYW5QcmludFRyYWNlTGlzdGVuZXIgZXh0ZW5kcyBQcmludFRyYWNlTGlzdGVuZXIKLXsKLQlwcml2YXRlIGZpbmFsIFByaW50V3JpdGVyIHdyaXRlcjsKLQotCXB1YmxpYyBYYWxhblByaW50VHJhY2VMaXN0ZW5lcihQcmludFdyaXRlciBwdykKLQl7Ci0JCXN1cGVyKHB3KTsKLQkJdGhpcy53cml0ZXIgPSBwdzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQlzd2l0Y2ggKGV2Lm1fc3R5bGVOb2RlLmdldFhTTFRva2VuKCkpCi0JCXsKLQkJCWNhc2UgQ29uc3RhbnRzLkVMRU1OQU1FX1RFWFRMSVRFUkFMUkVTVUxUOgotCQkJCWlmIChtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQl3cml0ZXIucHJpbnQoZXYubV9zdHlsZU5vZGUuZ2V0U3lzdGVtSWQoKSArICIgTGluZSAjIiArIGV2Lm1fc3R5bGVOb2RlLmdldExpbmVOdW1iZXIoKSArICIsICIgKyAiQ29sdW1uICMiICsgZXYubV9zdHlsZU5vZGUuZ2V0Q29sdW1uTnVtYmVyKCkgKyAiIC0tICIgKyBldi5tX3N0eWxlTm9kZS5nZXROb2RlTmFtZSgpCi0JCQkJCQkJKyAiOiAiKTsKLQotCQkJCQlFbGVtVGV4dExpdGVyYWwgZXRsID0gKEVsZW1UZXh0TGl0ZXJhbCkgZXYubV9zdHlsZU5vZGU7Ci0JCQkJCVN0cmluZyBjaGFycyA9IG5ldyBTdHJpbmcoZXRsLmdldENoYXJzKCksIDAsIGV0bC5nZXRDaGFycygpLmxlbmd0aCk7Ci0KLQkJCQkJd3JpdGVyLnByaW50bG4oIiAgICAiICsgY2hhcnMudHJpbSgpKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENvbnN0YW50cy5FTEVNTkFNRV9URU1QTEFURToKLQkJCQlpZiAobV90cmFjZVRlbXBsYXRlcyB8fCBtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQlFbGVtVGVtcGxhdGUgZXQgPSAoRWxlbVRlbXBsYXRlKSBldi5tX3N0eWxlTm9kZTsKLQotCQkJCQl3cml0ZXIucHJpbnQoZXQuZ2V0U3lzdGVtSWQoKSArICIgTGluZSAjIiArIGV0LmdldExpbmVOdW1iZXIoKSArICIsICIgKyAiQ29sdW1uICMiICsgZXQuZ2V0Q29sdW1uTnVtYmVyKCkgKyAiOiAiICsgZXQuZ2V0Tm9kZU5hbWUoKSArICIgIik7Ci0KLQkJCQkJaWYgKG51bGwgIT0gZXQuZ2V0TWF0Y2goKSkKLQkJCQkJewotCQkJCQkJd3JpdGVyLnByaW50KCJtYXRjaD0nIiArIGV0LmdldE1hdGNoKCkuZ2V0UGF0dGVyblN0cmluZygpICsgIicgIik7Ci0JCQkJCX0KLQotCQkJCQlpZiAobnVsbCAhPSBldC5nZXROYW1lKCkpCi0JCQkJCXsKLQkJCQkJCXdyaXRlci5wcmludCgibmFtZT0nIiArIGV0LmdldE5hbWUoKSArICInICIpOwotCQkJCQl9Ci0KLQkJCQkJd3JpdGVyLnByaW50bG4oKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWlmIChtX3RyYWNlRWxlbWVudHMpCi0JCQkJewotCQkJCQl3cml0ZXIKLQkJCQkJCQkucHJpbnRsbihldi5tX3N0eWxlTm9kZS5nZXRTeXN0ZW1JZCgpICsgIiBMaW5lICMiICsgZXYubV9zdHlsZU5vZGUuZ2V0TGluZU51bWJlcigpICsgIiwgIiArICJDb2x1bW4gIyIgKyBldi5tX3N0eWxlTm9kZS5nZXRDb2x1bW5OdW1iZXIoKSArICI6ICIKLQkJCQkJCQkJCSsgZXYubV9zdHlsZU5vZGUuZ2V0Tm9kZU5hbWUoKSk7Ci0JCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXYpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQkJd3JpdGVyLnByaW50KCJzZWxlY3RlZDogIik7Ci0JCXN1cGVyLnNlbGVjdGVkKGV2KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgc2VsZWN0RW5kKEVuZFNlbGVjdGlvbkV2ZW50IGV2KSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCXdyaXRlci5wcmludCgic2VsZWN0RW5kOiAiKTsKLQkJc3VwZXIuc2VsZWN0RW5kKGV2KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdHJhY2UoVHJhY2VyRXZlbnQgZXYpCi0JewotCQl3cml0ZXIucHJpbnQoInRyYWNlOiAiKTsKLQkJc3VwZXIudHJhY2UoZXYpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0cmFjZUVuZChUcmFjZXJFdmVudCBldikKLQl7Ci0JCXdyaXRlci5wcmludCgidHJhY2VFbmQ6ICIpOwotCQlfdHJhY2UoZXYpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblJvb3RTdHlsZUZyYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5Sb290U3R5bGVGcmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNlYTAyLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblJvb3RTdHlsZUZyYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVmFyaWFibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuU3R5bGVzaGVldFJvb3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlZhcmlhYmxlU3RhY2s7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5Sb290U3R5bGVGcmFtZSBleHRlbmRzIFhhbGFuU3R5bGVGcmFtZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhYYWxhblJvb3RTdHlsZUZyYW1lLmNsYXNzKTsKLQlwcml2YXRlIE1hcCB2YXJpYWJsZXM7Ci0JcHJpdmF0ZSBBcnJheUxpc3QgZ2xvYmFsczsKLQotCXB1YmxpYyBYYWxhblJvb3RTdHlsZUZyYW1lKFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJc3VwZXIobnVsbCwgZXZlbnQpOwotCQlmaWxsR2xvYmFscyhldmVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0R2xvYmFscygpCi0JewotCQlyZXR1cm4gZ2xvYmFsczsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGZpbGxHbG9iYWxzKFRyYWNlckV2ZW50IGV2ZW50KQotCXsKLQkJVmFyaWFibGVTdGFjayB2cyA9IGV2ZW50Lm1fcHJvY2Vzc29yLmdldFhQYXRoQ29udGV4dCgpLmdldFZhclN0YWNrKCk7Ci0JICAgIFN0eWxlc2hlZXRSb290IHNyID0gZXZlbnQubV9zdHlsZU5vZGUuZ2V0U3R5bGVzaGVldFJvb3QoKTsKLQkgICAgVmVjdG9yIHZhcnMgPSBzci5nZXRWYXJpYWJsZXNBbmRQYXJhbXNDb21wb3NlZCgpOwotCQl2YXJpYWJsZXMgPSBuZXcgSGFzaE1hcCh2YXJzLnNpemUoKSk7Ci0JCWdsb2JhbHMgPSBuZXcgQXJyYXlMaXN0KHZhcnMuc2l6ZSgpKTsKLQkgICAgaW50IGkgPSB2YXJzLnNpemUoKTsKLQkgICAgd2hpbGUgKC0taSA+PSAwKQotCQl7Ci0JCQlFbGVtVmFyaWFibGUgdmFyaWFibGUgPSAoRWxlbVZhcmlhYmxlKSB2YXJzLmVsZW1lbnRBdChpKTsKLQkJCVhhbGFuVmFyaWFibGUgeHZhciA9IG5ldyBYYWxhblZhcmlhYmxlKHRoaXMsdnMsVmFyaWFibGUuR0xPQkFMX1NDT1BFLGksdmFyaWFibGUpOwotCQkJYWRkVmFyaWFibGUoeHZhcik7Ci0JCQlnbG9iYWxzLmFkZCh4dmFyKTsKLQkJfQotCX0KLQotCXB1YmxpYyBWYXJpYWJsZSBnZXRWYXJpYWJsZShpbnQgaWQpCi0JewotLy8JCWxvZy5kZWJ1ZygiR2V0dGluZyB2YXJpYWJsZSB3aXRoIGlkICIraWQrIiBmcm9tIHZhcmlhYmxlcyAiK3ZhcmlhYmxlcy5zaXplKCkpOwotCQlyZXR1cm4gKFZhcmlhYmxlKXZhcmlhYmxlcy5nZXQobmV3IEludGVnZXIoaWQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRWYXJpYWJsZShYYWxhblZhcmlhYmxlIHh2YXIpCi0JewotLy8JCWxvZy5kZWJ1ZygiQWRkaW5nIHZhcmlhYmxlIGluZGV4PSIreHZhci5nZXRTbG90TnVtYmVyKCkrIiB2YWw9Iit4dmFyKTsKLS8vCQl2YXJpYWJsZXMuYWRkKHh2YXIuZ2V0U2xvdE51bWJlcigpLHh2YXIpOwotCQlsb2cuZGVidWcoIkFkZGluZyB2YXJpYWJsZSBpZD0iK3h2YXIuZ2V0SWQoKSk7Ci0JCXZhcmlhYmxlcy5wdXQobmV3IEludGVnZXIoeHZhci5nZXRJZCgpKSx4dmFyKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5TdHlsZUZyYW1lLmphdmEgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5TdHlsZUZyYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjNTBiZTcuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuU3R5bGVGcmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlTG9jYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1DYWxsVGVtcGxhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVRlbXBsYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkVsZW1UZW1wbGF0ZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVZhcmlhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWwuZHRtLnJlZi5EVE1Ob2RlUHJveHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWwudXRpbHMuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5WYXJpYWJsZVN0YWNrOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguWFBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlN0eWxlRnJhbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBYYWxhblN0eWxlRnJhbWUgZXh0ZW5kcyBTdHlsZUZyYW1lCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFhhbGFuU3R5bGVGcmFtZS5jbGFzcyk7Ci0KLQlwcml2YXRlIGZpbmFsIE1hcCB2YXJOYW1lczsKLQlwcml2YXRlIGZpbmFsIFN0YWNrIGV2ZW50U3RhY2sgPSBuZXcgU3RhY2soKTsKLQlmaW5hbCBUcmFjZXJFdmVudCBldmVudDsKLQlwcml2YXRlIGludCBjdXJyZW50TGluZTsKLQlwcml2YXRlIFhhbGFuUm9vdFN0eWxlRnJhbWUgcm9vdFN0eWxlRnJhbWU7Ci0KLQlwdWJsaWMgWGFsYW5TdHlsZUZyYW1lKFN0eWxlRnJhbWUgcGFyZW50LCBUcmFjZXJFdmVudCBldmVudCkKLQl7Ci0JCXN1cGVyKHBhcmVudCk7Ci0JCXRoaXMuZXZlbnQgPSBldmVudDsKLQkJaWYgKHBhcmVudCAhPSBudWxsKQotCQkJdGhpcy52YXJOYW1lcyA9IG5ldyBIYXNoTWFwKCgoWGFsYW5TdHlsZUZyYW1lKSBwYXJlbnQpLnZhck5hbWVzKTsKLQkJZWxzZQotCQkJdGhpcy52YXJOYW1lcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCXB1c2hFbGVtZW50KGV2ZW50KTsKLQkJZmluZFJvb3RTdHlsZUZyYW1lKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZpbmRSb290U3R5bGVGcmFtZSgpCi0JewotCQlYYWxhblN0eWxlRnJhbWUgZnJhbWUgPSB0aGlzOwotCQlkbwotCQl7Ci0JCQlpZiAoZnJhbWUgaW5zdGFuY2VvZiBYYWxhblJvb3RTdHlsZUZyYW1lKQotCQkJCXJvb3RTdHlsZUZyYW1lID0gKFhhbGFuUm9vdFN0eWxlRnJhbWUpIGZyYW1lOwotCQl9Ci0JCXdoaWxlICgoZnJhbWUgPSAoWGFsYW5TdHlsZUZyYW1lKSBmcmFtZS5nZXRQYXJlbnQoKSkgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRGaWxlbmFtZSgpCi0JewotCQlyZXR1cm4gZXZlbnQubV9zdHlsZU5vZGUuZ2V0U3R5bGVzaGVldCgpLmdldFN5c3RlbUlkKCk7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl7Ci0JCVN0cmluZyBuYW1lID0gZXZlbnQubV9zdHlsZU5vZGUuZ2V0Tm9kZU5hbWUoKTsKLQkJaWYgKGV2ZW50Lm1fc3R5bGVOb2RlIGluc3RhbmNlb2YgRWxlbVRlbXBsYXRlKQotCQl7Ci0JCQlFbGVtVGVtcGxhdGUgZXQgPSAoRWxlbVRlbXBsYXRlKSBldmVudC5tX3N0eWxlTm9kZTsKLQkJCVFOYW1lIHEgPSBldC5nZXROYW1lKCk7Ci0JCQlpZiAocSAhPSBudWxsKQotCQkJewotCQkJCW5hbWUgKz0gIiBuYW1lPVwiIiArIHEuZ2V0TG9jYWxOYW1lKCkgKyAiXCIiOwotCQkJfQotCQkJWFBhdGggeHAgPSBldC5nZXRNYXRjaCgpOwotCQkJaWYgKHhwICE9IG51bGwpCi0JCQl7Ci0JCQkJbmFtZSArPSAiIG1hdGNoPVwiIiArIHhwLmdldFBhdHRlcm5TdHJpbmcoKSArICJcIiI7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoZXZlbnQubV9zdHlsZU5vZGUgaW5zdGFuY2VvZiBFbGVtQ2FsbFRlbXBsYXRlKQotCQl7Ci0JCQlFbGVtQ2FsbFRlbXBsYXRlIGV0ID0gKEVsZW1DYWxsVGVtcGxhdGUpIGV2ZW50Lm1fc3R5bGVOb2RlOwotCQkJUU5hbWUgcSA9IGV0LmdldE5hbWUoKTsKLQkJCWlmIChxICE9IG51bGwpCi0JCQl7Ci0JCQkJbmFtZSArPSAiIG5hbWU9XCIiICsgcS5nZXRMb2NhbE5hbWUoKSArICJcIiI7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0VmFyaWFibGVTdGFjaygpCi0JewotCQlMaXN0IHZhcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXZhcnMuYWRkQWxsKGdldExvY2FscygpKTsKLQkJdmFycy5hZGRBbGwoZ2V0R2xvYmFscygpKTsKLQkJcmV0dXJuIHZhcnM7Ci0JfQotCi0JcHVibGljIGludCBnZXRDdXJyZW50TGluZSgpCi0JewotCQlyZXR1cm4gY3VycmVudExpbmU7Ci0JfQotCi0JcHVibGljIHZvaWQgcHVzaEVsZW1lbnQoVHJhY2VyRXZlbnQgZSkKLQl7Ci0JCWN1cnJlbnRMaW5lID0gZS5tX3N0eWxlTm9kZS5nZXRMaW5lTnVtYmVyKCk7Ci0JCWV2ZW50U3RhY2sucHVzaChlKTsKLQkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKQotCQkJbG9nLmRlYnVnKCJQdXNoZWQgZWxlbWVudCAiICsgVHJhY2VyRXZlbnQucHJpbnROb2RlKGUubV9zdHlsZU5vZGUpICsgIiBhdCBsaW5lICIgKyBjdXJyZW50TGluZSk7Ci0JfQotCi0JcHVibGljIFRyYWNlckV2ZW50IHBvcEVsZW1lbnQoKQotCXsKLQkJVHJhY2VyRXZlbnQgZSA9IChUcmFjZXJFdmVudCkgZXZlbnRTdGFjay5wb3AoKTsKLQkJY3VycmVudExpbmUgPSBlLm1fc3R5bGVOb2RlLmdldEVuZExpbmVOdW1iZXIoKTsKLQkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKQotCQkJbG9nLmRlYnVnKCJQb3BwZWQgZWxlbWVudCAiICsgVHJhY2VyRXZlbnQucHJpbnROb2RlKGUubV9zdHlsZU5vZGUpICsgIiBhdCBsaW5lICIgKyBjdXJyZW50TGluZSk7Ci0KLQkJRWxlbVRlbXBsYXRlRWxlbWVudCBlbGVtZW50ID0gZS5tX3N0eWxlTm9kZTsKLQkJU3RyaW5nIG5hbWUgPSBlbGVtZW50LmdldE5vZGVOYW1lKCk7Ci0JCWxvZy5kZWJ1ZygiIG5hbWUgIiArIG5hbWUpOwotCQlpZiAobmFtZS5lcXVhbHMoInBhcmFtIikgfHwgbmFtZS5lcXVhbHMoInZhcmlhYmxlIikpCi0JCQlhZGRWYXJpYWJsZSgoRWxlbVZhcmlhYmxlKSBlLm1fc3R5bGVOb2RlKTsKLQotCQlyZXR1cm4gZTsKLQl9Ci0KLQlwdWJsaWMgVHJhY2VyRXZlbnQgcGVla0VsZW1lbnQoKQotCXsKLQkJaWYgKGV2ZW50U3RhY2suaXNFbXB0eSgpKQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiAoVHJhY2VyRXZlbnQpIGV2ZW50U3RhY2sucGVlaygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRWYXJpYWJsZShFbGVtVmFyaWFibGUgdmFyaWFibGUpCi0JewotCQlTdHJpbmcgc2NvcGUgPSB2YXJpYWJsZS5nZXRJc1RvcExldmVsKCkgPyBWYXJpYWJsZS5HTE9CQUxfU0NPUEUgOiBWYXJpYWJsZS5MT0NBTF9TQ09QRTsKLQkJVmFyaWFibGVTdGFjayB2cyA9IGV2ZW50Lm1fcHJvY2Vzc29yLmdldFhQYXRoQ29udGV4dCgpLmdldFZhclN0YWNrKCk7Ci0JCVhhbGFuVmFyaWFibGUgeHZhciA9IG5ldyBYYWxhblZhcmlhYmxlKHRoaXMsIHZzLCBzY29wZSwgdmFyaWFibGUuZ2V0SW5kZXgoKSwgdmFyaWFibGUpOwotCQlyb290U3R5bGVGcmFtZS5hZGRWYXJpYWJsZSh4dmFyKTsKLQkJdmFyTmFtZXMucHV0KHZhcmlhYmxlLmdldE5hbWUoKSwgeHZhcik7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0IGdldExvY2FscygpCi0JewotCQlMaXN0IGxvY2FscyA9IG5ldyBBcnJheUxpc3QodmFyTmFtZXMudmFsdWVzKCkpOwotCQkvLyBzb3J0IGJ5IHNsb3ROdW1iZXIKLQkJQ29sbGVjdGlvbnMuc29ydChsb2NhbHMpOwotCQlyZXR1cm4gbmV3IEFycmF5TGlzdCh2YXJOYW1lcy52YWx1ZXMoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIExpc3QgZ2V0R2xvYmFscygpCi0JewotCQlyZXR1cm4gcm9vdFN0eWxlRnJhbWUuZ2V0R2xvYmFscygpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0U291cmNlRmlsZW5hbWUoKQotCXsKLQkJU291cmNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U291cmNlTG9jYXRvcigpOwotCQlpZiAobG9jYXRvciAhPSBudWxsKQotCQkJcmV0dXJuIGxvY2F0b3IuZ2V0U3lzdGVtSWQoKTsKLQkJcmV0dXJuICIiOwotCX0KLQotCXB1YmxpYyBpbnQgZ2V0U291cmNlQ3VycmVudExpbmUoKQotCXsKLQkJU291cmNlTG9jYXRvciBsb2NhdG9yID0gZ2V0U291cmNlTG9jYXRvcigpOwotCQlpZiAobG9jYXRvciAhPSBudWxsKQotCQkJcmV0dXJuIGxvY2F0b3IuZ2V0TGluZU51bWJlcigpOwotCQlyZXR1cm4gMDsKLQl9Ci0JCi0JcHJpdmF0ZSBTb3VyY2VMb2NhdG9yIGdldFNvdXJjZUxvY2F0b3IoKQotCXsKLQkJTm9kZSBzb3VyY2VOb2RlID0gZXZlbnQubV9zb3VyY2VOb2RlOwotICAgICAgICBTb3VyY2VMb2NhdG9yIGxvY2F0b3IgPSBudWxsOwotCQlpZiAoc291cmNlTm9kZSBpbnN0YW5jZW9mIERUTU5vZGVQcm94eSkKLQkJewotCQkJaW50IG5vZGVIYW5kbGVyID0gKChEVE1Ob2RlUHJveHkpIHNvdXJjZU5vZGUpLmdldERUTU5vZGVOdW1iZXIoKTsKLQkJCXJldHVybiAoKERUTU5vZGVQcm94eSkgc291cmNlTm9kZSkuZ2V0RFRNKCkuZ2V0U291cmNlTG9jYXRvckZvcihub2RlSGFuZGxlcik7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuVHJhY2VMaXN0ZW5lci5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuVHJhY2VMaXN0ZW5lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTZhY2U3Li4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci9YYWxhblRyYWNlTGlzdGVuZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWsKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udGVtcGxhdGVzLkNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkVuZFNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRXh0ZW5zaW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5HZW5lcmF0ZUV2ZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZUxpc3RlbmVyRXgyOwotaW1wb3J0IG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLkJyZWFrUG9pbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5UcmFjZUxpc3RlbmVyIGltcGxlbWVudHMgVHJhY2VMaXN0ZW5lckV4MiAvLyBUcmFjZUxpc3RlbmVyRXgzCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFhhbGFuVHJhY2VMaXN0ZW5lci5jbGFzcyk7Ci0KLQlwcml2YXRlIGZpbmFsIFhhbGFuRGVidWdnZXIgZGVidWdnZXI7Ci0JcHJpdmF0ZSBYYWxhblJvb3RTdHlsZUZyYW1lIHJvb3RTdHlsZUZyYW1lOwotCi0JcHVibGljIFhhbGFuVHJhY2VMaXN0ZW5lcihYYWxhbkRlYnVnZ2VyIGRlYnVnZ2VyKQotCXsKLQkJdGhpcy5kZWJ1Z2dlciA9IGRlYnVnZ2VyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRyYWNlKFRyYWNlckV2ZW50IGV2KQotCXsKLQkJWGFsYW5TdHlsZUZyYW1lIHN0eWxlRnJhbWUgPSBudWxsOwotCQlpZiAocm9vdFN0eWxlRnJhbWUgPT0gbnVsbCkKLQkJey8vIHRoaXMgaXMgdGhlIHJvb3Qgb2YgdGhlIHN0YWNrCi0JCQlkZWJ1Z2dlci5kZWJ1Z2dlclRyYW5zZm9ybVN0YXJ0ZWQoKTsKLQkJCWRlYnVnZ2VyLnNldEN1cnJlbnRUcmFjZUxpc3RlbmVyKHRoaXMpOwotCQkJcm9vdFN0eWxlRnJhbWUgPSBuZXcgWGFsYW5Sb290U3R5bGVGcmFtZShldik7Ci0JCQlzdHlsZUZyYW1lID0gcm9vdFN0eWxlRnJhbWU7Ci0JCQlkZWJ1Z2dlci5wdXNoU3R5bGVGcmFtZShzdHlsZUZyYW1lKTsKLQkJfQotCQllbHNlIGlmIChldi5tX3N0eWxlTm9kZS5nZXRPd25lclhTTFRlbXBsYXRlKCkgPT0gZXYubV9zdHlsZU5vZGUpCi0JCXsvLyB0aGlzIGlzIGFuIHhzbDp0ZW1wbGF0ZSwgc28gYWRkIHRvIHRlbXBsYXRlIHN0YWNrCi0JCQlzdHlsZUZyYW1lID0gbmV3IFhhbGFuU3R5bGVGcmFtZShkZWJ1Z2dlci5wZWVrU3R5bGVGcmFtZSgpLCBldik7Ci0JCQlkZWJ1Z2dlci5wdXNoU3R5bGVGcmFtZShzdHlsZUZyYW1lKTsKLQkJfQotCQllbHNlIGlmIChldi5tX3N0eWxlTm9kZS5nZXRYU0xUb2tlbigpICE9IENvbnN0YW50cy5FTEVNTkFNRV9URVhUTElURVJBTFJFU1VMVCkKLQkJey8vIGFkZCB0byBjdXJyZW50IHRlbXBsYXRlIGVsZW1lbnQgc3RhY2sKLQkJCXN0eWxlRnJhbWUgPSAoWGFsYW5TdHlsZUZyYW1lKSBkZWJ1Z2dlci5wZWVrU3R5bGVGcmFtZSgpOwotCQkJc3R5bGVGcmFtZS5wdXNoRWxlbWVudChldik7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlsb2cuZGVidWcoIlNraXBwZWQgcHVzaCBmb3IgZWxlbWVudCAiICsgZXYubV9zdHlsZU5vZGUuZ2V0TG9jYWxOYW1lKCkpOwotCQl9Ci0JCWNoZWNrKHN0eWxlRnJhbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRyYWNlRW5kKFRyYWNlckV2ZW50IGV2KQotCXsKLQkJWGFsYW5TdHlsZUZyYW1lIHN0eWxlRnJhbWUgPSAoWGFsYW5TdHlsZUZyYW1lKSBkZWJ1Z2dlci5wZWVrU3R5bGVGcmFtZSgpOwotCQlpZiAoc3R5bGVGcmFtZSAhPSBudWxsKQotCQl7Ci0JCQlpZiAoZXYubV9zdHlsZU5vZGUuZ2V0T3duZXJYU0xUZW1wbGF0ZSgpID09IGV2Lm1fc3R5bGVOb2RlKQotCQkJey8vIHJlbW92ZSBmcm9tIGN1cnJlbnQgdGVtcGxhdGUgZWxlbWVudCBzdGFjawotCQkJCXN0eWxlRnJhbWUucG9wRWxlbWVudCgpOwotCQkJfQotCQkJZWxzZSBpZiAoZXYubV9zdHlsZU5vZGUuZ2V0WFNMVG9rZW4oKSAhPSBDb25zdGFudHMuRUxFTU5BTUVfVEVYVExJVEVSQUxSRVNVTFQpCi0JCQl7Ly8gcmVtb3ZlIGZyb20gY3VycmVudCB0ZW1wbGF0ZSBlbGVtZW50IHN0YWNrCi0JCQkJc3R5bGVGcmFtZS5wb3BFbGVtZW50KCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJbG9nLmRlYnVnKCJTa2lwcGVkIHBvcCBmb3IgZWxlbWVudCAiICsgZXYubV9zdHlsZU5vZGUuZ2V0TG9jYWxOYW1lKCkpOwotCQkJfQotCQkJY2hlY2soc3R5bGVGcmFtZSk7Ci0JCQlpZiAoZXYubV9zdHlsZU5vZGUuZ2V0T3duZXJYU0xUZW1wbGF0ZSgpID09IGV2Lm1fc3R5bGVOb2RlKQotCQkJey8vIGVuZCBvZiB0ZW1wbGF0ZSwgc28gcmVtb3ZlIGZyb20gc3RhY2sKLQkJCQlkZWJ1Z2dlci5wb3BTdHlsZUZyYW1lKCk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ly8gYmVjYXVzZSB3ZSBkb24ndCBnZXQgc2VsZWN0RW5kIGV2ZW50cywgd2UgbmVlZCB0byBkbyB0aGlzIGNoZWNrCi0JCQkJVHJhY2VyRXZlbnQgdGVsID0gc3R5bGVGcmFtZS5wZWVrRWxlbWVudCgpOwotCQkJCS8vIGlmIHRoZSBwYXJlbnQgaXMgYSBjaG9vc2UsIG1vdmUgb24gdG8gaXQKLQkJCQlzd2l0Y2ggKHRlbC5tX3N0eWxlTm9kZS5nZXRYU0xUb2tlbigpKQotCQkJCXsKLQkJCQkJY2FzZSBDb25zdGFudHMuRUxFTU5BTUVfQ0hPT1NFOgotCQkJCQkJc3R5bGVGcmFtZS5wb3BFbGVtZW50KCk7Ci0JCQkJCQljaGVjayhzdHlsZUZyYW1lKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2soWGFsYW5TdHlsZUZyYW1lIHN0eWxlRnJhbWUpCi0JewotCQlkZWJ1Z2dlci5jaGVja1N0b3BwZWQoKTsKLQkJaWYgKHN0eWxlRnJhbWUgIT0gbnVsbCkKLQkJewotCQkJLy8gY2hlY2sgYnJlYWtwb2ludCBpbiBzdHlsZXNoZWV0Ci0JCQlCcmVha1BvaW50IGJyZWFrcG9pbnQgPSBuZXcgQnJlYWtQb2ludChzdHlsZUZyYW1lLmdldEZpbGVuYW1lKCksIHN0eWxlRnJhbWUuZ2V0Q3VycmVudExpbmUoKSk7Ci0JCQlkZWJ1Z2dlci5jaGVja1N1c3BlbmRlZChzdHlsZUZyYW1lLCBicmVha3BvaW50KTsKLQkJCS8vIFRPRE8gY2hlY2sgYnJlYWtwb2ludCBpbiBzb3VyY2UKLQkJCS8qCi0JCQkgKiBicmVha3BvaW50ID0gbmV3IEJyZWFrUG9pbnQoc3R5bGVGcmFtZS5nZXRTb3VyY2VGaWxlbmFtZSgpLCBzdHlsZUZyYW1lLmdldFNvdXJjZUN1cnJlbnRMaW5lKCkpOyBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLSIrYnJlYWtwb2ludCk7IGlmIChicmVha3BvaW50LmdldEZpbGUoKSAhPSBudWxsKQotCQkJICogZGVidWdnZXIuY2hlY2tTdXNwZW5kZWQoc3R5bGVGcmFtZSwgYnJlYWtwb2ludCk7Ci0JCQkgKi99Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXYpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZWxlY3RFbmQoRW5kU2VsZWN0aW9uRXZlbnQgZXYpIHRocm93cyBUcmFuc2Zvcm1lckV4Y2VwdGlvbgotCXsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBnZW5lcmF0ZWQoR2VuZXJhdGVFdmVudCBldikKLQl7Ci0vLwkJWFNMR2VuZXJhdGVFdmVudCBldmVudCA9IG5ldyBYU0xHZW5lcmF0ZUV2ZW50KCk7Ci0vLwkJZXZlbnQubV9jaGFyYWN0ZXJzID0gZXYubV9jaGFyYWN0ZXJzOwotLy8JCWV2ZW50Lm1fZGF0YSA9IGV2Lm1fZGF0YTsKLS8vCQlldmVudC5tX2V2ZW50dHlwZSA9IGV2Lm1fZXZlbnR0eXBlOwotLy8JCWV2ZW50Lm1fbGVuZ3RoID0gZXYubV9sZW5ndGg7Ci0vLwkJZXZlbnQubV9uYW1lID0gZXYubV9uYW1lOwotLy8JCWV2ZW50Lm1fc3RhcnQgPSBldi5tX3N0YXJ0OwotLy8JCQotLy8JCWlmIChldi5tX2F0dHMgIT0gbnVsbCkKLS8vCQl7Ci0vLwkJCWV2ZW50Lm1fYXR0cyA9IG5ldyBBcnJheUxpc3QoKTsKLS8vCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBldi5tX2F0dHMuZ2V0TGVuZ3RoKCk7IGkrKykKLS8vCQkJewotLy8JCQkJU3RyaW5nIGF0dE5hbWUgPSBldi5tX2F0dHMuZ2V0UU5hbWUoaSk7Ci0vLwkJCQlTdHJpbmcgYXR0VmFsdWUgPSBldi5tX2F0dHMuZ2V0VmFsdWUoaSk7Ci0vLwkJCQlYU0xFbGVtZW50QXR0cmlidXRlIHhhdHQgPSBuZXcgWFNMRWxlbWVudEF0dHJpYnV0ZShhdHROYW1lLGF0dFZhbHVlKTsKLS8vCQkJCWV2ZW50Lm1fYXR0cy5hZGQoeGF0dCk7Ci0vLwkJCX0JCQkKLS8vCQl9Ci0vLwkJCi0vLwkJZGVidWdnZXIuZ2VuZXJhdGVkKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBleHRlbnNpb24oRXh0ZW5zaW9uRXZlbnQgZWUpCi0JewotCX0KLQotCXB1YmxpYyB2b2lkIGV4dGVuc2lvbkVuZChFeHRlbnNpb25FdmVudCBlZSkKLQl7Ci0JfQotCi0JcHVibGljIFZhcmlhYmxlIGdldFZhcmlhYmxlKGludCBpZCkKLQl7Ci0JCXJldHVybiByb290U3R5bGVGcmFtZS5nZXRWYXJpYWJsZShpZCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5WYXJpYWJsZS5qYXZhIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuL3NyYy1kZWJ1Z2dlci9vcmcvZWNsaXBzZS93c3QveHNsL3hhbGFuL2RlYnVnZ2VyL1hhbGFuVmFyaWFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhYzg2YS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyL29yZy9lY2xpcHNlL3dzdC94c2wveGFsYW4vZGVidWdnZXIvWGFsYW5WYXJpYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVZhcmlhYmxlOwotaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguVmFyaWFibGVTdGFjazsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE5vZGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLmRlYnVnZ2VyLlZhcmlhYmxlOwotCi1wdWJsaWMgY2xhc3MgWGFsYW5WYXJpYWJsZSBleHRlbmRzIFZhcmlhYmxlIGltcGxlbWVudHMgQ29tcGFyYWJsZQotewotCXByaXZhdGUgZmluYWwgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFhhbGFuVmFyaWFibGUuY2xhc3MpOwotCXByaXZhdGUgZmluYWwgRWxlbVZhcmlhYmxlIGVsZW1WYXJpYWJsZTsKLQlwcml2YXRlIGZpbmFsIFZhcmlhYmxlU3RhY2sgdmFyU3RhY2s7Ci0JcHJpdmF0ZSBpbnQgc3RhY2tGcmFtZTsKLQotCXB1YmxpYyBYYWxhblZhcmlhYmxlKFhhbGFuU3R5bGVGcmFtZSB4YWxhblN0eWxlRnJhbWUsIFZhcmlhYmxlU3RhY2sgdmFyU3RhY2ssIFN0cmluZyBzY29wZSwgaW50IHNsb3ROdW1iZXIsIEVsZW1WYXJpYWJsZSBlbGVtVmFyaWFibGUpCi0JewotCQlzdXBlcihnZXROYW1lKGVsZW1WYXJpYWJsZSxzY29wZSx4YWxhblN0eWxlRnJhbWUpLCBzY29wZSwgc2xvdE51bWJlcit2YXJTdGFjay5nZXRTdGFja0ZyYW1lKCkpOwotCQl0aGlzLmVsZW1WYXJpYWJsZSA9IGVsZW1WYXJpYWJsZTsKLQkJdGhpcy52YXJTdGFjayA9IHZhclN0YWNrOwotCQkvLyBnZXQgdGhlIHN0YWNrIGZyYW1lIGF0IHRoaXMgY3VycmVudCBwb2ludCBpbiB0aW1lCi0JCXRoaXMuc3RhY2tGcmFtZSA9IHZhclN0YWNrLmdldFN0YWNrRnJhbWUoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShFbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlLCBTdHJpbmcgc2NvcGUsIFhhbGFuU3R5bGVGcmFtZSB4YWxhblN0eWxlRnJhbWUpCi0JewotCQlTdHJpbmcgbmFtZSA9IGVsZW1WYXJpYWJsZS5nZXROYW1lKCkuZ2V0TG9jYWxOYW1lKCk7Ci0JCVN0cmluZyBzeXN0ZW1JZCA9IGVsZW1WYXJpYWJsZS5nZXRTdHlsZXNoZWV0KCkuZ2V0U3lzdGVtSWQoKTsKLQkJaWYgKEdMT0JBTF9TQ09QRS5lcXVhbHMoc2NvcGUpICYmIHN5c3RlbUlkICE9IG51bGwpCi0JCXsKLQkJCWludCBpbmRleDsKLQkJCWlmICgoaW5kZXggPSBzeXN0ZW1JZC5sYXN0SW5kZXhPZignLycpKSA+IDApCi0JCQkJbmFtZSArPSAiICgiICsgc3lzdGVtSWQuc3Vic3RyaW5nKGluZGV4ICsgMSkgKyAiKSI7Ci0JCQllbHNlCi0JCQkJbmFtZSArPSAiICgiICsgc3lzdGVtSWQgKyAiKSI7Ci0JCX0KLS8vCQllbHNlIGlmIChMT0NBTF9TQ09QRS5lcXVhbHMoc2NvcGUpKQotLy8JCXsKLS8vCQkJbmFtZSArPSAiICgiICsgeGFsYW5TdHlsZUZyYW1lLmdldE5hbWUoKSArICIpIjsKLS8vCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldFR5cGUoKQotCXsKLQkJU3RyaW5nIHZhbHVlID0gVU5LTk9XTjsKLQkJdHJ5Ci0JCXsKLQkJCVhPYmplY3QgeG9iamVjdCA9IGdldFhPYmplY3QoKTsKLQkJCWlmICh4b2JqZWN0ICE9IG51bGwpCi0JCQl7Ci0JCQkJaW50IHhhbGFuVHlwZSA9IHhvYmplY3QuZ2V0VHlwZSgpOwotCQkJCXN3aXRjaCAoeGFsYW5UeXBlKQotCQkJCXsKLQkJCQkJY2FzZSBYT2JqZWN0LkNMQVNTX1VOUkVTT0xWRURWQVJJQUJMRToKLQkJCQkJCXZhbHVlID0gVU5SRVNPTFZFRDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfTk9ERVNFVDoKLQkJCQkJCXZhbHVlID0gTk9ERVNFVDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfQk9PTEVBTjoKLQkJCQkJCXZhbHVlID0gQk9PTEVBTjsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfTlVNQkVSOgotCQkJCQkJdmFsdWUgPSBOVU1CRVI7Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBYT2JqZWN0LkNMQVNTX1VOS05PV046Ci0JCQkJCQl2YWx1ZSA9IFVOS05PV047Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBYT2JqZWN0LkNMQVNTX1NUUklORzoKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCXZhbHVlID0gU1RSSU5HOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKQotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiB2YWx1ZTsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkKLQl7Ci0JCVN0cmluZyB2YWx1ZSA9ICI/Pz8iOwotCQl0cnkKLQkJewotCQkJWE9iamVjdCB4b2JqZWN0ID0gZ2V0WE9iamVjdCgpOwotCQkJaWYgKHhvYmplY3QgIT0gbnVsbCkKLQkJCXsKLQkJCQlpbnQgeGFsYW5UeXBlID0geG9iamVjdC5nZXRUeXBlKCk7Ci0JCQkJc3dpdGNoICh4YWxhblR5cGUpCi0JCQkJewotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfVU5SRVNPTFZFRFZBUklBQkxFOgotCQkJCQkJdmFsdWUgPSAiIjsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfTk9ERVNFVDoKLQkJCQkJCVhOb2RlU2V0IHhucyA9IChYTm9kZVNldCkgeG9iamVjdDsKLQkJCQkJCWlmICh4bnMubm9kZWxpc3QoKS5nZXRMZW5ndGgoKSA+IDApCi0JCQkJCQkJdmFsdWUgPSAoKFhOb2RlU2V0KSB4b2JqZWN0KS5ub2RlbGlzdCgpLml0ZW0oMCkudG9TdHJpbmcoKTsKLQkJCQkJCWVsc2UKLQkJCQkJCQl2YWx1ZSA9ICI8RU1QVFkgTk9ERVNFVD4iOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgWE9iamVjdC5DTEFTU19CT09MRUFOOgotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfTlVNQkVSOgotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfU1RSSU5HOgotCQkJCQljYXNlIFhPYmplY3QuQ0xBU1NfVU5LTk9XTjoKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCXZhbHVlID0geG9iamVjdC50b1N0cmluZygpOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKQotCQl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0vLwkJdmFsdWUgPSBnZXRTY29wZSgpKyIuIitnZXRTbG90TnVtYmVyKCkrIikiK2dldE5hbWUoKTsJCi0vLwkJbG9nLmRlYnVnKGdldFNjb3BlKCkrIi4iK2dldFNsb3ROdW1iZXIoKSsiKSIrZ2V0TmFtZSgpICsgIj0iICsgdmFsdWUpOwotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHJpdmF0ZSBYT2JqZWN0IGdldFhPYmplY3QoKSB0aHJvd3MgVHJhbnNmb3JtZXJFeGNlcHRpb24KLQl7Ci0JCVhPYmplY3QgeHZhbHVlOwotCQlpZiAoZWxlbVZhcmlhYmxlLmdldElzVG9wTGV2ZWwoKSkKLQkJCXh2YWx1ZSA9IHZhclN0YWNrLmVsZW1lbnRBdChzbG90TnVtYmVyKTsKLQkJZWxzZQotCQkJeHZhbHVlID0gdmFyU3RhY2suZ2V0TG9jYWxWYXJpYWJsZShlbGVtVmFyaWFibGUuZ2V0SW5kZXgoKSwgc3RhY2tGcmFtZSk7Ci0JCXJldHVybiB4dmFsdWU7Ci0JfQotCi0JcHVibGljIGludCBjb21wYXJlVG8oT2JqZWN0IGFyZzApCi0JewotCQlYYWxhblZhcmlhYmxlIHh2YXIgPSAoWGFsYW5WYXJpYWJsZSlhcmcwOwotCQlpbnQgY29tcCA9IHh2YXIuc3RhY2tGcmFtZSAtIHN0YWNrRnJhbWU7Ci0JCWlmIChjb21wID09IDApCi0JCQljb21wID0gc2xvdE51bWJlciAtIHh2YXIuc2xvdE51bWJlcjsKLQkJcmV0dXJuIGNvbXA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLy5wcm9qZWN0IGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjVhM2NkLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2w8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYjRhZTQuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbAotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQuaHRtbCBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQuaW5pIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQubWFwcGluZ3MgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLTA9QGJ1aWxkQApkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2Fib3V0LnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ2MGY5NC4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdUUCBYU0wgVG9vbHNcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0XG5cCi0gIERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCksXG5cCi0gIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKVxuXAotICBhbmQgb3RoZXJzIDIwMDguIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cCi1cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL2J1aWxkLnByb3BlcnRpZXMgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRhYWU3OS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaW5pLFwKLSAgICAgICAgICAgICAgIGFib3V0Lm1hcHBpbmdzLFwKLSAgICAgICAgICAgICAgIGFib3V0LnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgd3RwX3Byb2QzMi5naWYsXAotICAgICAgICAgICAgICAgd3RwX3Byb2QzMi5wbmcKZGlmZiAtLWdpdCBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9wbHVnaW4ucHJvcGVydGllcyBiL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhNDNiYS4uMDAwMDAwMAotLS0gYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNQcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2wKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gV1RQIFhTTCBUb29scyAoSW5jdWJhdGluZykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvd3RwX3Byb2QzMi5naWYgYi9idW5kbGVzL29yZy5lY2xpcHNlLndzdC54c2wvd3RwX3Byb2QzMi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZmI0NGEuLjAwMDAwMDAKLS0tIGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL3d0cF9wcm9kMzIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL3d0cF9wcm9kMzIucG5nIGIvYnVuZGxlcy9vcmcuZWNsaXBzZS53c3QueHNsL3d0cF9wcm9kMzIucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmNlYWIzLi4wMDAwMDAwCi0tLSBhL2J1bmRsZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC93dHBfcHJvZDMyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwM2Y1ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi14aW5jbHVkZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMWNhOGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54c2wuZG9jPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg0M2YwZi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI01vbiBNYXIgMTAgMTk6NDE6NTAgR01ULTA1OjAwIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjNjZWEyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2M7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWk7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLVZlbmRvcjogJXZlbmRvck5hbWUKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9hYm91dC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9idWlsZC5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2Q1MDUzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGh0bWwvLFwKLSAgICAgICAgICAgICAgICoueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWdlbmVyYXRlU291cmNlQnVuZGxlPWZhbHNlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2J1aWxkLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGUyMjhjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdCBkZWZhdWx0PSJjcmVhdGUtZG9jIiBiYXNlZGlyPSIuIj4KLQotCTxwcm9wZXJ0eSBuYW1lPSJjdXJyZW50LWxvYyIgbG9jYXRpb249Ii4iIC8+Ci0JPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgbG9jYXRpb249Ii4uIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJodG1sZGlyIiB2YWx1ZT0iJHtjdXJyZW50LWxvY30vaHRtbCIgLz4KLQk8cHJvcGVydHkgbmFtZT0iZG9jYm9va2RpciIgdmFsdWU9IiR7d29ya3NwYWNlfS9Db21tb25VdGlsaXRpZXMvZG9jYm9vay14c2wvZWNsaXBzZSIgLz4KLQk8cHJvcGVydHkgbmFtZT0iZG9jYm9va3NvdXJjZSIgdmFsdWU9IiR7Y3VycmVudC1sb2N9L2RvY2Jvb2siLz4KLQk8cHJvcGVydHkgbmFtZT0ieGFsYW4iIHZhbHVlPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIiAvPgotCi0gICAgCi0JPCEtLSBYU0xUIENodW5raW5nIFByb3BlcnRpZXMgLS0+Ci0JPHByb3BlcnR5IG5hbWU9ImJhc2UuZGlyIiB2YWx1ZT0iJHtodG1sZGlyfSIvPgotCQotCTx0YXJnZXQgbmFtZT0ibWVyZ2UiPgotCQk8eHNsLnhpbmNsdWRlIGluPSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHAuZGJrIgotCQkgICAgICAgICAgICAgIG91dD0iJHtkb2Nib29rc291cmNlfS94c2xoZWxwY29tYmluZWQuZGJrIi8+Ci0JPC90YXJnZXQ+Ci0KLQk8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1kb2MiIGRlcGVuZHM9Im1lcmdlIj4KLQotCQk8eHNsdCBmb3JjZT0idHJ1ZSIgc3R5bGU9IiR7ZG9jYm9va2Rpcn0vZWNsaXBzZTMzLnhzbCIgaW49IiR7ZG9jYm9va3NvdXJjZX0veHNsaGVscGNvbWJpbmVkLmRiayIgb3V0PSJ0ZXN0LnhtbCI+Ci0JCQk8ZmFjdG9yeSBuYW1lPSIke3hhbGFufSIgLz4KLQkJCTxwYXJhbSBuYW1lPSJtYW5pZmVzdCIgZXhwcmVzc2lvbj0iMSIvPgotCQkJPHBhcmFtIG5hbWU9ImJhc2UuZGlyIiBleHByZXNzaW9uPSIke2h0bWxkaXJ9LyIvPgotCQkJPHBhcmFtIG5hbWU9ImNyZWF0ZS5wbHVnaW4ueG1sIiBleHByZXNzaW9uPSIwIi8+Ci0JCQk8cGFyYW0gbmFtZT0iY2h1bmtlci5vdXRwdXQuaW5kZW50IiBleHByZXNzaW9uPSJ5ZXMiLz4KLQkJCTxwYXJhbSBuYW1lPSJuYXZpZy5zaG93dGl0bGVzIiBleHByZXNzaW9uPSIwIi8+Ci0JCQk8cGFyYW0gbmFtZT0ic3VwcHJlc3MubmF2aWdhdGlvbiIgZXhwcmVzc2lvbj0iMSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImdlbmVyYXRlLnRvYyIgZXhwcmVzc2lvbj0iYm9vayAgICAgIHRvYyx0aXRsZSxmaWd1cmUKLWNoYXB0ZXIgICB0b2MsdGl0bGUKLXNlY3Rpb24gICB0aXRsZSIgLz4KLQkJPC94c2x0PgotCQkKLQkJPHJlcGxhY2UgZmlsZT0iJHtjdXJyZW50LWxvY30vdG9jLnhtbCIgdG9rZW49IiR7Y3VycmVudC1sb2N9LyIgdmFsdWU9IiIvPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDk1OGIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteHNsaGVscGNvbWJpbmVkLmRiawpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2VkaXRvci9lZGl0b3IueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2VkaXRvci9lZGl0b3IueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDZmYzNkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9lZGl0b3IvZWRpdG9yLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNoYXB0ZXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5kb2Nib29rLm9yZy94c2QvNC41L2RvY2Jvb2sueHNkIj4KLQk8P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvci5odG1sIiA/PgotCTx0aXRsZT5YU0wgRWRpdGluZzwvdGl0bGU+Ci0JPHBhcmE+Ci0gICAgICBUaGUgWFNMIFRvb2xpbmcgcGx1Z2lucyBleHRlbmQgdGhlIGFiaWxpdHkgb2YgdGhlIFdlYiBTdGFuZGFyZCBUb29scyBYTUwKLSAgICAgIGVkaXRvci4gIFRoaXMgZXh0ZW5zaW9uIGFkZHMgc3BlY2lmaWMgc3VwcG9ydCBhbmQgZnVuY3Rpb25hbGl0eSBmb3Igd29ya2luZwotICAgICAgd2l0aCBhbmQgZGVidWdnaW5nIFhTTCBmaWxlcy4gCi0gICAgPC9wYXJhPgotICAgIDxzZWN0aW9uIGlkPSJWYWxpZGF0aW9uIj4KLSAgICAJPD9kYmh0bWwgZmlsZW5hbWU9ImVkaXRvci94c2xlZGl0b3JfdmFsaWRhdGlvbi5odG1sIiA/PgotICAgIAk8dGl0bGU+VmFsaWRhdGlvbjwvdGl0bGU+Ci0gICAgCTxwYXJhPgotICAgIAkJVGhlIFhTTCBleHRlbnNpb25zIGZvciB0aGUgZWNsaXBzZSBYTUwgZWRpdG9yIGluY2x1ZGUgYXMgeW91IHR5cGUgdmFsaWRhdGlvbiBmb3IgWFNMIHNwZWNpZmljIGZlYXR1cmVzLiAgVGhpcyBpbmNsdWRlcyBub3QKLSAgICAJCW9ubHkgdGhlIGFiaWxpdHkgdG8gc3ludGF4IGNoZWNrIHRoZSBncmFtbWFyLCBidXQgdG8gYWxzbyB0byB2YWxpZGF0ZSBzcGVjaWZpYyBYU0wgc3BlY2lmaWNhdGlvbiBydWxlcy4gIEdyYW1tYXIgdmFsaWRhdGlvbiB3aWxsCi0gICAgCQliZSB0cmlnZ2VyZWQgYmFzZWQgb24gdGhlIHZlcnNpb24gYXR0cmlidXRlIGZvciB0aGUgc3R5bGUgc2hlZXQgdGhhdCBpcyBiZWluZyBlZGl0ZWQuICAgVmFsaWQgdmVyc2lvbiBudW1iZXJzIGFyZSAxLjAsIGFuZCAyLjAuCi0gICAgCQlDdXJyZW50bHkgWFNMVCAxLjEgd2hpY2ggd2FzIGEgdHJhbnNpdGlvbmFsIHNwZWNpZmljYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgZWRpdGluZy4KLSAgICAJPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQk8c2VjdGlvbiBpZD0iQ29udGVudEFzc2lzdCI+Ci0JCTw/ZGJodG1sIGZpbGVuYW1lPSJlZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCIgPz4KLQkJPHRpdGxlPkNvbnRlbnQgQXNzaXN0PC90aXRsZT4KLQkJPHBhcmE+Ci0JCSAgICBYU0wgVG9vbGluZyBleHRlbmRzIHRoZSBleGlzdGluZyBjb250ZW50IGFzc2lzdGFuY2Ugc3VwcG9ydCBvZiB0aGUgWE1MCi0JCSAgICBFZGl0b3IgdG8gcHJvdmlkZSBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHNldmVyYWwgWFNMIG5hbWVzcGFjZSBhdHRyaWJ1dGVzLgotCQkgICAgVGhlIGNvbnRlbnQgYXNzaXN0YW5jZSBwcm92aWRlZCBjb3ZlcnMgdGhlIGF2YWlsYWJsZSBYUGF0aCBzdGF0ZW1lbnRzIGFzCi0JCSAgICBkZWZpbmVkIGluIHRoZSA8ZW1waGFzaXM+WFBhdGggVGVtcGxhdGVzPC9lbXBoYXNpcz4gcHJlZmVyZW5jZSBwYWdlLgotCQk8L3BhcmE+Ci0JCTxwYXJhPgotCQkJVGhlIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBjb250ZW50IGFzc2lzdCBhdmFpbGFibGUgYXJlIGFzIGZvbGxvd3M6Ci0JCTwvcGFyYT4KLQkJPGl0ZW1pemVkbGlzdD4KLQkJCTxsaXN0aXRlbT4KLQkJCQk8cGFyYT4KLQkJCQkgICAgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnRlbXBsYXRlPC9lbXBoYXNpcz4gLSBUaGUgdGVtcGxhdGUgZWxlbWVudCBoYXMgc2V2ZXJhbCBjb250ZW50IGFzc2lzdAotCQkJCSAgICBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIDxlbXBoYXNpcz5tYXRjaDwvZW1waGFzaXM+LCA8ZW1waGFzaXM+bmFtZTwvZW1waGFzaXM+LCBhbmQgCi0JCQkJICAgIDxlbXBoYXNpcz5tb2RlPC9lbXBoYXNpcz4gYXR0cmlidXRlcy4KLQkJCQk8L3BhcmE+Ci0JCQkJPHBhcmE+Ci0JCQkJCUFkZCBpbWFnZSBzaG93aW5nIHRlbXBsYXRlIGNvbXBsZXRpb24uCi0JCQkJPC9wYXJhPgotCQkJPC9saXN0aXRlbT4KLQkJCTxsaXN0aXRlbT4KLQkJCQk8cGFyYT4KLQkJCQkJPGVtcGhhc2lzIHJvbGU9ImJvbGQiPnZhcmlhYmxlPC9lbXBoYXNpcz4gYW5kIDxlbXBoYXNpcwotCQkJCQlyb2xlPSJib2xkIj5wYXJhbTwvZW1waGFzaXM+IC0gVGhlIHZhcmlhYmxlIGFuZCBwYXJhbSBlbGVtZW50cyBoYXZlIGNvbnRlbnQgYXNzaXN0Ci0JCQkJCWZvciB4cGF0aCwgYXhpcywgcGFybWF0ZXJzIGFuZCB2YXJpYWJsZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwcmVkZWZpbmVkIHdoZW4gdXNpbmcgdGhlIG9wdGlvbmFsCi0JCQkJCTxlbXBoYXNpcz5zZWxlY3Q8L2VtcGhhc2lzPiBhdHRyaWJ1dGUuCi0JCQkJPC9wYXJhPgotCQkJCTxwYXJhPgotCQkJCQlBZGQgaW1hZ2Ugc2hvd2luZyB2YXJpYWJsZSBjb21wbGV0aW9uLgotCQkJCTwvcGFyYT4JCi0JCQk8L2xpc3RpdGVtPgotCQkJPGxpc3RpdGVtPgotCQkJCTxwYXJhPgotCQkJCQk8ZW1waGFzaXMgcm9sZT0iYm9sZCI+aWY8L2VtcGhhc2lzPiBhbmQgPGVtcGhhc2lzIHJvbGU9ImJvbGQiPndoZW48L2VtcGhhc2lzPiAtIFRoZQotCQkJCQlpZiBhbmQgd2hlbiBlbGVtZW50cyBoYXZlIGNvbnRlbnQgYXNzaXN0IGZvciB0aGUgPGVtcGhhc2lzPnRlc3Q8L2VtcGhhc2lzPiBhdHRyaWJ1dGUuCi0JCQkJCVRoaXMgY29udGVudCBhc3Npc3RhbmNlIGlzIGF2YWlsYWJsZSBmb3IgYWxsIHBhcmFtYXRlcnMgYW5kIHZhcmlhYmxlcyB0aGF0IGFyZSBpbgotCQkJCQlzY29wZSwgYXMgd2VsbCBhcyBhbnkgYXZhaWxhYmxlIHhwYXRoIG9yIGF4aXMgc3RhdGVtZW50LgotCQkJCTwvcGFyYT4KLQkJCQk8cGFyYT4KLQkJCQkJQWRkIGltYWdlIHNob3dpbmcgdGVzdCBjb21wbGV0aW9uLgotCQkJCTwvcGFyYT4KLQkJCTwvbGlzdGl0ZW0+Ci0JCQk8bGlzdGl0ZW0+Ci0JCQkgICAgPHBhcmE+Ci0JCQkgICAgCTxlbXBoYXNpcyByb2xlPSJib2xkIj5hcHBseS10ZW1wbGF0ZTwvZW1waGFzaXM+IC0gVGhlIGFwcGx5IHRlbXBsYXRlIGhhcyBjb250ZW50Ci0JCQkgICAgCWFzc2lzdGFuY2UgZm9yIGJvdGggdGhlIDxlbXBoYXNpcz5tb2RlPC9lbXBoYXNpcz4gYW5kIDxlbXBoYXNpcz5zZWxlY3Q8L2VtcGhhc2lzPgotCQkJICAgIAlhdHRyaWJ1dGVzLiAKLQkJCSAgICA8L3BhcmE+Ci0JCQkJPHBhcmE+Ci0JCQkJCUFkZCBpbWFnZSBzaG93aW5nIGFwcGx5LXRlbXBsYXRlIGNvbXBsZXRpb24uCi0JCQkJPC9wYXJhPgotCQkJPC9saXN0aXRlbT4KLQkJPC9pdGVtaXplZGxpc3Q+Ci0JCTxpbXBvcnRhbnQ+Ci0JCQk8dGl0bGU+WFBhdGggMi4wIFN1cHBvcnQ8L3RpdGxlPgotCQkJPHBhcmE+Ci0JCQkJQ3VycmVudGx5IFhQYXRoIDIuMCBpcyBub3Qgc3VwcG9ydGVkIGRpcmVjdGx5LiAgSG93ZXZlciwgYSB1c2VyIGNhbiBhZGQgdGhpcyBzdXBwb3J0IGlmIHRoZXkgbmVlZCBpdCBieQotCQkJCWFkZGluZyB0aGUgbWlzc2luZyBYUGF0aCBmdW5jdGlvbnMgdG8gdGhlIFhQYXRoIFRlbXBsYXRlcy4KLQkJCTwvcGFyYT4KLQkJPC9pbXBvcnRhbnQ+Ci0JPC9zZWN0aW9uPgotCTxzZWN0aW9uIGlkPSJYU0xFZGl0b3JUZW1wbGF0ZXMiPgotCQk8P2RiaHRtbCBmaWxlbmFtZT0iZWRpdG9yL3hzbGVkaXRvcl90ZW1wbGF0ZXMuaHRtbCIgPz4KLQkJPHRpdGxlPlRlbXBsYXRlczwvdGl0bGU+Ci0JCTxwYXJhPgotCQkJU3BlY2lmaWMgWFNMIGNvZGUgY29tcGxldGlvbiB0ZW1wbGF0ZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBYTUwgZWRpdG9yJ3MgVGVtcGxhdGVzLiAgIFRoaXMgYWxsb3dzIGEgdXNlcgotCQkJdG8gZGVmaW5lIHNwZWNpZmljIG1hcmt1cCBjb21wbGV0aW9uIHRlbXBsYXRlcyB0aGF0IGFyZSBjb21tb25seSB1c2VkLiAgIEluIGFkZGl0aW9uLCB0aGUgWFBhdGggVGVtcGxhdGVzIHBhZ2UKLQkJCWNhbiBiZSBlbmhhbmNlZCB0byBhbGxvdyBjb21tb25seSB1c2VkIFhQYXRoIHRlbXBsYXRlcyB0byBiZSBpbmNsdWRlZCwgaW4gYWRkaXRpb24gdG8gdGhvc2UgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCi0JCQlUaGlzIGFsbG93cyBhIHVzZXIgdGhlIGFiaWxpdHkgdG8gYWRkIGN1c3RvbSBleHRlbnNpb24gZnVuY3Rpb25zIGZvciBYU0xUIHRoYXQgbWF5IGJlIHByb2Nlc3NvciBzcGVjaWZpYy4gIEFkb3B0ZXJzCi0JCQltYXkgYWxzbyB1c2UgdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGV4dGVuc2lvbiBwb2ludCB0byBhZGQgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgotCQk8L3BhcmE+Ci0JCTxzZWN0aW9uPgotCQkJPD9kYmh0bWwgZmlsZW5hbWU9ImVkaXRvci94c2xlZGl0b3JfeHBhdGh0ZW1wbGF0ZXMuaHRtbCIgPz4KLQkJCTx0aXRsZT5YUGF0aCBUZW1wbGF0ZXM8L3RpdGxlPgotCQkJPHBhcmE+Ci0JCQkJVGhlIFhTTCBYUGF0aCBUZW1wbGF0ZXMgcHJlZmVyZW5jZSBwYWdlIGFsbG93cyBmb3IgYSB1c2VyIG9yIGFkb3B0ZXIgdG8gYWRkIHNwZWNpZmljIHhwYXRoIGV4dGVuc2lvbnMgc28gdGhhdAotCQkJCXRoZXkgc2hvdyB1cCBpbiB0aGUgY29udGVudCBhc3Npc3RhbmNlLiAgIFNlZSB0aGUgWFBhdGggVGVtcGxhdGVzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0JCQk8L3BhcmE+Ci0JCTwvc2VjdGlvbj4KLQk8L3NlY3Rpb24+Ci0JPHNlY3Rpb24gaWQ9IlhTTEVkaXRvckRlYnVnZ2luZyI+Ci0JICAgPD9kYmh0bWwgZmlsZW5hbWU9ImVkaXRvci94c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiID8+Ci0JCTx0aXRsZT5YU0wgRGVidWdnaW5nPC90aXRsZT4KLQkJPHBhcmE+Ci0JCQlUT0RPOiBBZGQgWFNMIERlYnVnZ2luZyBkb2N1bWVudGF0aW9uLgotCQk8L3BhcmE+Ci0JPC9zZWN0aW9uPgotPC9jaGFwdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9nZW5lcmFsL2dlbmVyYWwueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2dlbmVyYWwvZ2VuZXJhbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ODAxNmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2dlbmVyYWwvZ2VuZXJhbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNoYXB0ZXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5kb2Nib29rLm9yZy94c2QvNC41L2RvY2Jvb2sueHNkIj4KLQk8P2RiaHRtbCBmaWxlbmFtZT0iZ2VuZXJhbC9nZW5lcmFsLmh0bWwiID8+Ci0JPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgotCTxwYXJhPlRoaXMgc2VjdGlvbiBjb3ZlcnMgdG9waWNzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgcGFydGljdWxhciBwbGFjZSB0byBnby48L3BhcmE+Ci0JPHNlY3Rpb24gaWQ9IlhJbmNsdWRlIj4KLQkgICAgPD9kYmh0bWwgZmlsZW5hbWU9ImdlbmVyYWwveGluY2x1ZGUuaHRtbCIgPz4KLQkJPHRpdGxlPlhJbmNsdWRlPC90aXRsZT4KLQkJPHBhcmE+Ci0gICAgICAJWEluY2x1ZGUgYWxsb3dzIGEgdXNlciB0byBpbXBvcnQgb3IgaW5jbHVkZSBvdGhlciBYTUwgZmlsZXMgaW50byBvbmUgeG1sIGZpbGUuCi0gICAgICAgIEl0IGlzIHVzZWQgcHJpbWFyaWx5IHdpdGggZG9jdW1lbnRhdGlvbiBmaWxlIGZvcm1hdHMgbGlrZSBEb2Nib29rIGFuZCBESVRBLiAgSXQKLSAgICAgICAgYWxsb3dzIGZvciBzZXBhcmF0aW5nIG91dCBsYXJnZSB4bWwgZG9jdW1lbnRzIGludG8gbW9yZSBtYW5hZ2VhYmxlIGNodW5rcyBvZiBpbmZvcm1hdGlvbi4KLSAgICAgIDwvcGFyYT4KLQkJPHBhcmE+Ci0gICAgICAJVGhlIFhTTCBUb29saW5nIHByb2plY3QgaW5jbHVkZXMgYW4gQU5UIHRhc2sgdGhhdCBjYW4gYmUgcnVuIHdpdGggaW4gZWNsaXBzZSwgZWNsaXBzZQotICAgICAgCWhlYWRsZXNzLCBhbmQgd2l0aG91dCBlY2xpcHNlIGF0IGFsbC4gICBJZiBydW5uaW5nIG91dHNpZGUgb2YgZWNsaXBzZSwgeW91IHdpbGwgbmVlZAotICAgICAgCXRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBqYXIgZmlsZSB4aW5jbHVkZS5qYXIgaW4gdGhlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5qYXIgZmlsZQotICAgICAgCWlzIG1hZGUgYXZhaWFibGUgb24geW91ciBjbGFzcyBwYXRoLgotICAgICAgPC9wYXJhPgotCQk8bWVkaWFvYmplY3Q+Ci0JCQk8b2JqZWN0aW5mbyBpZD0iWGluY2x1ZGUiPgotCQkJCTx0aXRsZT5YSW5jbHVkZSBUYXNrPC90aXRsZT4KLQkJCTwvb2JqZWN0aW5mbz4KLQkJCTxpbWFnZW9iamVjdD4KLQkJCQk8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZpbGVyZWY9Ii4uL2ltYWdlcy9nZW5lcmFsL3hpbmNsdWRlLnBuZyIKLQkJCQkJZm9ybWF0PSJQTkciIC8+Ci0JCQk8L2ltYWdlb2JqZWN0PgotCQk8L21lZGlhb2JqZWN0PgotCQk8cGFyYT4KLSAgICAgIAlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgeHNsLnhpbmNsdWRlIEFOVCB0YXNrOgotICAgICAgPC9wYXJhPgotCQk8aXRlbWl6ZWRsaXN0PgotCQkJPGxpc3RpdGVtPgotCQkJCTxwYXJhPgotICAgICAgCQkJPGVtcGhhc2lzIHJvbGU9ImJvbGQiPgotCQkJCQlpbgotCQkJCTwvZW1waGFzaXM+IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgaW5wdXQgZmlsZSB0aGF0IGNvbnRhaW5zCi0gICAgICAJCQl0aGUgZmlsZSB3aXRoIHRoZSBYSW5jbHVkZXMuICAgSWYgdGhlIGZpbGVzIHRoYXQgaXQgaW5jbHVkZXMgaGF2ZSBpbmNsdWRlcywgdGhlbgotICAgICAgCQkJdGhvc2Ugd2lsbCBiZSBicm91Z2h0IGluIGFuIGV4cGFuZGVkIGFzIHdlbGwuCi0gICAgICAJCTwvcGFyYT4KLQkJCTwvbGlzdGl0ZW0+Ci0JCQk8bGlzdGl0ZW0+Ci0JCQkJPHBhcmE+Ci0JCQkJCTxlbXBoYXNpcyByb2xlPSJib2xkIj5vdXQ8L2VtcGhhc2lzPiAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIG91dHB1dCBmaWxlIAotCQkJCQl0byBiZSB3cml0dGVuIHdpdGggYWxsIGluY2x1ZGVzIGV4cGFuZGVkLiAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBhcyB0aGUKLQkJCQkJaW5wdXQgdG8gYSBzdHlsZXNoZWV0IHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MuCi0JCQkJPC9wYXJhPgotCQkJPC9saXN0aXRlbT4KLQkJPC9pdGVtaXplZGxpc3Q+Ci0JICAgIDxleGFtcGxlPgotCSAgICAJPHRpdGxlPlhJbmNsdWRlIEV4YW1wbGU8L3RpdGxlPgotCSAgICAJPHByb2dyYW1saXN0aW5nIHhtbDpzcGFjZT0icHJlc2VydmUiPgotJmx0O3RhcmdldCBuYW1lPSJtZXJnZSI+Ci0gICAgJmx0O3hzbC54aW5jbHVkZSBpbj0iJHtkb2Nib29rc291cmNlfS94c2xoZWxwLmRiayIKLSAgICAgICAgICAgICAgICAgIG91dD0iJHtkb2Nib29rc291cmNlfS94c2xoZWxwY29tYmluZWQuZGJrIi8+Ci0mbHQ7L3RhcmdldD4JICAgIAkJICAgIAkKLQkgICAgCTwvcHJvZ3JhbWxpc3Rpbmc+Ci0JICAgIDwvZXhhbXBsZT4KLQk8L3NlY3Rpb24+Ci08L2NoYXB0ZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvbGF1bmNoU2hvcnRjdXQucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9sYXVuY2hpbmcvbGF1bmNoU2hvcnRjdXQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODE4MTNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3V0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZXMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy9YUGF0aFRlbXBsYXRlcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmODkzMDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy9YUGF0aFRlbXBsYXRlcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3htX3RlbXBsYXRlX3hzbG5ld2ZpbGUucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94bV90ZW1wbGF0ZV94c2xuZXdmaWxlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY0NmE2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3htX3RlbXBsYXRlX3hzbG5ld2ZpbGUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfSW5zdGFsbGVkUHJvY2Vzc29ycy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9JbnN0YWxsZWRQcm9jZXNzb3JzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5NTA3OS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9JbnN0YWxsZWRQcm9jZXNzb3JzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfb3V0cHV0cHJvcGVydGllcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDBhNDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfb3V0cHV0cHJvcGVydGllcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbGZlYXR1cmVzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWRiZWM4Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9pbWFnZXMvcHJlZmVyZW5jZXMveHNsZmVhdHVyZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiNzE4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9sYXVuY2hpbmcvbGF1bmNoaW5nLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9sYXVuY2hpbmcvbGF1bmNoaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ5YWE1YS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svbGF1bmNoaW5nL2xhdW5jaGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNoYXB0ZXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5kb2Nib29rLm9yZy94c2QvNC41L2RvY2Jvb2sueHNkIj4KLQk8P2RiaHRtbCBmaWxlbmFtZT0ibGF1bmNoaW5nL2xhdW5jaGluZy5odG1sIiA/PgotCTx0aXRsZT5YU0wgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmc8L3RpdGxlPgotCTxwYXJhPgotCQlUaGUgWFNMIFRvb2xpbmcgYWRkcyBzdXBwb3J0IGZvciBYU0wgTGF1bmNoIGFuZCBEZWJ1Z2dpbmcgY29uZmlndXJhdGlvbnMuCi0JCVRoZXNlIGFsbG93IHlvdSB0byBzZXR1cCBYU0wgY29uZmlndXJhdGlvbnMgZm9yIHZhcmlvdXMgam9icywgYW5kIHRvIGFsc28KLQkJZGVidWcgeHNsIHN0eWxzaGVldCB0cmFuc2Zvcm1hdGlvbnMuCQotCTwvcGFyYT4KLQk8c2VjdGlvbiBpZD0iWFNMTGF1bmNoIj4KLQkJPD9kYmh0bWwgZmlsZW5hbWU9ImxhdW5jaGluZy9sYXVuY2hpbmcuaHRtbCIgPz4KLQkJPHRpdGxlPlhTTCBMYXVuY2hpbmc8L3RpdGxlPgotCQk8cGFyYT4KLQkJCUluIHRoZSBQcm9qZWN0IEV4cGxvcmVyLCBzaW1wbHkgc2VsZWN0IHRoZSBpbnB1dCBYTUwgZmlsZSBhbmQgdGhlIHN0eWxlc2hlZXQocykgdG8gdHJhbnNmb3JtIGl0LCBhbmQgdGhlbiByaWdodC1jbGljayBhbmQgc2VsZWN0IAotCQkJPGk+UnVuIEFzICZndDsgWFNMIFRyYW5zZm9ybWF0aW9uPC9pPi4gCi0JICAgIDwvcGFyYT4KLQkJPG1lZGlhb2JqZWN0PgotCQkJPGltYWdlb2JqZWN0PgotCQkJCTxpbWFnZWRhdGEgYWxpZ249ImNlbnRlciIgZm9ybWF0PSJQTkciCi0JCQkJCWZpbGVyZWY9Ii4uL2ltYWdlcy9sYXVuY2hpbmcvbGF1bmNoU2hvcnRjdXQucG5nIiAvPgotCQkJPC9pbWFnZW9iamVjdD4KLQkJPC9tZWRpYW9iamVjdD4KLQk8L3NlY3Rpb24+Ci0JPHNlY3Rpb24gaWQ9IlhTTERlYnVnIj4KLQkgICAgPD9kYmh0bWwgZmlsZW5hbWU9ImxhdW5jaGluZy9kZWJ1Z2xhdW5jaGluZy5odG1sIiA/PgotCQk8dGl0bGU+TGF1bmNoIERlYnVnZ2luZzwvdGl0bGU+Ci0JCTxwYXJhPgotCSAgIAkJVGhpcyBpcyBhIHBsYWNlIGhvbGRlciB1bnRpbCBzb21lIGFjdHVhbCBkb2N1bWVudGF0aW9uIGNhbiBiZSB3cml0dGVuLgotCSAgIDwvcGFyYT4KLQk8L3NlY3Rpb24+Ci08L2NoYXB0ZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2xlZ2FsLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9sZWdhbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxY2RkNWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL2xlZ2FsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2hhcHRlciB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3hzZC80LjUvZG9jYm9vay54c2QiPgotCTw/ZGJodG1sIGZpbGVuYW1lPSJsZWdhbC5odG1sIiA/PgotCTx0aXRsZT5Ob3RpY2VzPC90aXRsZT4KLQk8cGFyYT4KLSAgICAgIFRoZSBtYXRlcmlhbCBpbiB0aGlzIGd1aWRlIGlzIENvcHlyaWdodCAoYykgRG91ZyBTYXRjaHdlbGwgKDx1bGluayB1cmw9Imh0dHA6Ly93d3cuY2hhc2V0ZWNobm9sb2d5LmNvLnVrIj5DaGFzZSBUZWNobm9sb2d5IEx0ZDwvdWxpbms+KSwgCi0gICAgICBEYXZpZCBDYXJ2ZXIgKCg8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnN0YXJzdGFuZGFyZC5vcmciPlN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbDwvdWxpbms+KQotICAgICAgYW5kIG90aGVycyAyMDA4LgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT4KLQkJVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgCi0JCXRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAotCQk8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L3VsaW5rPi4KLSAgICA8L3BhcmE+Ci0JPHBhcmE+Ci0JCTx1bGluayB1cmw9ImFib3V0Lmh0bWwiPlRlcm1zIGFuZCBjb25kaXRpb25zIHJlZ2FyZGluZyB0aGUgdXNlIG9mIHRoaXMgZ3VpZGUuPC91bGluaz4uCi0JPC9wYXJhPgotPC9jaGFwdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlcy54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTQzZTc3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjaGFwdGVyIGlkPSJYU0xQcmVmZXJlbmNlcyIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5kb2Nib29rLm9yZy94c2QvNC41L2RvY2Jvb2sueHNkIj4KLQk8P2RiaHRtbCBmaWxlbmFtZT0icHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMuaHRtbCIgPz4KLQk8dGl0bGU+WFNMIFRvb2xpbmcgUHJlZmVyZW5jZXM8L3RpdGxlPgotCTxwYXJhPgotCQlUaGUgWFNMIFByZWZlcmVuY2UgcGFnZXMgaGFzIHNldmVyYWwgc3ViIHNlY3Rpb25zLiAgRWFjaCBvZiB0aGVzZSBhbGxvdyBmb3IgY29uZmlndXJhdGlvbgotCQlvZiB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIHByZWZlcmVuY2VzLiAgIEZyb20gdGhlIGNvbnRyb2xsaW5nIG9mIHRoZSBkZWZhdWx0IFhTTCBwcm9jZXNzb3IKLQkJdG8gYmUgdXNlZCBkdXJpbmcgdHJhbnNmb3JtYXRpb25zLiAgIFRvIGV4dGVuZGluZyB0aGUgY29udGVudCBhc3Npc3Qgc3VwcG9ydCBvZiB0aGUgWFBhdGgKLQkJZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGUgWE1MIGVkaXRvci4KLSAgIDwvcGFyYT4KLQk8bWVkaWFvYmplY3Q+Ci0JCTxpbWFnZW9iamVjdD4KLQkJCTxpbWFnZWRhdGEgYWxpZ249ImNlbnRlciIgZmlsZXJlZj0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZyIKLQkJCQlmb3JtYXQ9IlBORyIgLz4KLQkJPC9pbWFnZW9iamVjdD4KLQk8L21lZGlhb2JqZWN0PgotCTxzZWN0aW9uIGlkPSJYU0xGZWF0dXJlcyI+Ci0JCTw/ZGJodG1sIGZpbGVuYW1lPSJwcmVmZXJlbmNlcy94c2xmZWF0dXJlcy5odG1sIiA/PgotCQk8dGl0bGU+RmVhdHVyZXM8L3RpdGxlPgotCQk8cGFyYT4KLSAgIAkJCVRoZSBYU0wgRmVhdHVyZXMgcHJlZmVyZW5jZSBwYWdlIGFsbG93cyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgZmVhdHVyZXMgZm9yIGEgcGFydGljdWxhcgotICAgCQkJcHJvY2Vzc29yLiAgIFhTTCBUb29saW5nIGNvbWVzIHdpdGggWGFsYW4gMi43LjAgYnkgZGVmYXVsdC4gIEFkb3B0ZXJzIGNhbiBleHRlbmQgYW5kIGluY2x1ZGUKLSAgIAkJCXRoZWlyIG93biBzcGVjaWZpYyBmZWF0dXJlcyBmb3IgdGhlaXIgb3duIHByb2Nlc29vcnMuICAgQW4gYWRvcHRlciBjb3VsZCBleHRlbmQgdGhlIHRvb2xpbmcKLSAgIAkJCXRvIHN1cHBvcnQgWFNMVCAyLjAgdHJhbnNmb3JtYXRpb25zLCBhbmQgZmVhdHVyZXMgcGFydGljdWxhciB0byB0aGF0IHBhcnNlci4KLSAgIAkJPC9wYXJhPgotCQk8bWVkaWFvYmplY3Q+Ci0JCQk8aW1hZ2VvYmplY3Q+Ci0JCQkJPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIiBmb3JtYXQ9IlBORyIKLQkJCQkJZmlsZXJlZj0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbGZlYXR1cmVzLnBuZyIgLz4KLQkJCTwvaW1hZ2VvYmplY3Q+Ci0JCTwvbWVkaWFvYmplY3Q+Ci0JCTxwYXJhPgotICAgCQkJVGhlIDxlbXBoYXNpcyByb2xlPSJib2xkIj5Qcm9jZXNzb3IgVHlwZTwvZW1waGFzaXM+IGFsbG93cyB5b3UgdG8gc2V0IGZlYXR1cmVzIGZvciBhIHNwZWNpZmljIHByb2Nlc3Nvci4gIEluIHRoaXMgY2FzZQotICAgCQkJdGhpcyBpcyBmb3IgdGhlIHByb2Nlc3NvciB0aGF0IGlzIGJlaW5nIGluc3RhbGxlZC4gICBYU0wgVG9vbGluZyBjb21lcyB3aXRoIFhhbGFuIDIuNy4wLCBhbmQgaXQgaXMgdGhlIG9ubHkgYXZhaWxhYmxlCi0gICAJCQlwcm9jZXNzb3IgdHlwZSBieSBkZWZhdWx0LgotICAgCQk8L3BhcmE+Ci0JCTxwYXJhPgotICAgCQkgICAgVGhlIGZlYXR1cmUgdGFibGUgbGlzdHMgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBwcm9jZXNzb3IgdGhhdCB3YXMgc2VsZWN0ZWQuICBBcyB5b3UKLSAgIAkJICAgIHNlbGVjdCBlYWNoIG9mIHRoZSBmZWF0dXJlcywgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoYXQgZmVhdHVyZSBhbmQgaXQncyBhYmlsaXRpcyBpcyBkaXNwbGF5ZWQgaW4gdGhlCi0gICAJCSAgICBkZXNjcmlwdGlvbiBib3guICAgQnkgY2xpY2tpbmcgaW4gdGhlIHZhbHVlIGNvbHVtbiwgbmV4dCB0byB0aGUgZmVhdHVyZSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlCi0gICAJCSAgICBmb3IsIHRoZSB1c2VyIGNhbiBzZXQgdGhlIGZlYXR1cmUuCi0gICAJCTwvcGFyYT4KLQk8L3NlY3Rpb24+Ci0JPHNlY3Rpb24gaWQ9IlhTTFByb2Nlc3NvcnMiPgotCQk8P2RiaHRtbCBmaWxlbmFtZT0icHJlZmVyZW5jZXMveHNscHJvY2Vzc29ycy5odG1sIiA/PgotCQk8dGl0bGU+SW5zdGFsbGVkIFByb2Nlc3NvcnM8L3RpdGxlPgotCQk8cGFyYT4KLSAgCQkJVGhlIGluc3RhbGxlZCBwcm9jZXNzb3JzIHBhZ2UgbGV0cyB5b3UgcGljayB3aGljaCBvZiB0aGUgaW5zdGFsbGVkIFhTTFQgcHJvY2Vzc29ycyB3aWxsIGJlIHVzZWQKLSAgCQkJYnkgZGVmYXVsdC4gICBUaGUgZGVmYXVsdCBpcyB0aGUgU3lzdGVtIERlZmF1bHQgUHJvY2Vzb29yLCBidXQgeW91IGNhbiBzZWxlY3QgYW55IG9mIHRoZQotICAJCQlhdmFpbGFibGUgcHJvY2Vzc29ycyB0byBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHByb2Nlc3Nvci4gICAgCQotICAgICAgCTwvcGFyYT4KLSAgICAgIAk8bWVkaWFvYmplY3Q+Ci0gICAgICAJICAgPGltYWdlb2JqZWN0PgotICAgICAgCSAgIAkJPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIiBmaWxlcmVmPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX0luc3RhbGxlZFByb2Nlc3NvcnMucG5nIiBmb3JtYXQ9IlBORyIvPgotICAgICAgCSAgIDwvaW1hZ2VvYmplY3Q+Ci0gICAgICAJPC9tZWRpYW9iamVjdD4KLQk8L3NlY3Rpb24+Ci0JPHNlY3Rpb24gaWQ9IlhTTE91dHB1dFByb3BlcnRpZXMiPgotCQk8P2RiaHRtbCBmaWxlbmFtZT0icHJlZmVyZW5jZXMveHNsb3V0cHV0cHJvcGVydGllcy5odG1sIiA/PgotCQk8dGl0bGU+T3V0cHV0IFByb3BlcnRpZXM8L3RpdGxlPgotCQk8cGFyYT4KLQkJCVRoZSB2YXJpb3VzIHhzbCBwcm9jZXNzb3JzIHN1cHBvcnQgYSB3aWRlIHZhcmlldHkgb2YgcHJvY2Vzc29yIHNwZWNpZmljIHR3ZWFrcy4gIEhvd2V2ZXIgdGhlcmUKLQkJCWFyZSBzZXZlcmFsIFN0YW5kYXJkIHByb2Nlc3NvciBmZWF0dXJlcyB0aGF0IGFsbCBYU0xUIHByb2Nlc3NvcnMgc3VwcG9ydC4gICBUaGVzZSBvcHRpb25zIGNhbiBiZQotCQkJc2V0IGFuZCB3aWxsIGFjdCBhcyB0aGUgZGVmYXVsdHMgZm9yIGFsbCB0cmFuc2Zvcm1hdGlvbnMgdW5sZXNzIHRoZXkgYXJlIHNwZWNpZmljYWxseSBvdmVycmlkZW4gYnkKLQkJCXRoZSBzdHlsZXNoZWV0IG9yIHRoZSBsYXVuY2ggY29uZmlndXJhdGlvbi4KLQkJPC9wYXJhPgotCQk8bWVkaWFvYmplY3Q+Ci0JCSAgICA8aW1hZ2VvYmplY3Q+Ci0JCSAgICAJPGltYWdlZGF0YSBhbGlnbj0iY2VudGVyIiBmaWxlcmVmPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nIiBmb3JtYXQ9IlBORyIvPgotCQkgICAgPC9pbWFnZW9iamVjdD4KLQkJPC9tZWRpYW9iamVjdD4KLQkJPHBhcmE+Ci0JCQlJbiBhZGRpdGlvbiB0byB0aGUgU3RhbmRhcmQgT3V0cHV0IFByb3BlcnRpZXMsIGVhY2ggWFNMVCBwcm9jZXNzb3IgY2FuIGhhdmUgcHJvY2Vzc29ycwotCQkJc3BlY2lmaWMgZmVhdHVyZXMuCi0JCTwvcGFyYT4KLQk8L3NlY3Rpb24+Ci0JPHNlY3Rpb24gaWQ9IlhQYXRoVGVtcGxhdGVzIj4KLQkJPD9kYmh0bWwgZmlsZW5hbWU9InByZWZlcmVuY2VzL3hwYXRodGVtcGxhdGVzLmh0bWwiID8+Ci0JCTx0aXRsZT5YUGF0aCBUZW1wbGF0ZXM8L3RpdGxlPgotCQk8cGFyYT4KLQkJICAgIFhQYXRoIHRlbXBsYXRlIHByb3Bvc2FsIGlzIHN1cHBvcnRlZCBieSB0aGUgWFNMIFRvb2xpbmcgcHJvamVjdCB0aHJvdWdoIHRoZQotCQkgICAgYnVpbHQgaW4gdGVtcGxhdGUgZnVuY3Rpb25hbGl0eSBvZiBlY2xpcHNlLiAgIFVzZXJzIGFuZCBBZG9wdGVycyBjYW4gYWRkCi0JCSAgICB0aGVpciBvd24gc3BlY2lmaWMgeHBhdGggZXh0ZW5zaW9ucyBmb3IgcHJvY2Vzc29yIHNwZWNpZmljIGV4dGVuc2lvbnMuICBBbgotCQkgICAgZXhhbXBsZSB3b3VsZCBiZSB0byBhZGQgdGhlIEVYU0xUIGV4dGVuc2lvbnMgZm9yIHByb3Bvc2FsIHN1cHBvcnQuCi0JCTwvcGFyYT4KLQkJPG1lZGlhb2JqZWN0PgotCQkgICAgPGltYWdlb2JqZWN0PgotCQkgICAgICAgIDxvYmplY3RpbmZvPgotCQkgICAgICAgICAgIDx0aXRsZT5YUGF0aCBUZW1wbGF0ZXM8L3RpdGxlPgotCQkgICAgICAgIDwvb2JqZWN0aW5mbz4KLQkJICAgIAk8aW1hZ2VkYXRhIGFsaWduPSJjZW50ZXIiIGZpbGVyZWY9Ii4uL2ltYWdlcy9wcmVmZXJlbmNlcy9YUGF0aFRlbXBsYXRlcy5wbmciIGZvcm1hdD0iUE5HIi8+Ci0JCSAgICA8L2ltYWdlb2JqZWN0PgotCQk8L21lZGlhb2JqZWN0PgotCQk8cGFyYT4KLQkJICAgVGhlIGZvbGxvd2luZyBjb250ZW50IHR5cGVzIGFyZSBhdmFpbGFibGU6Ci0JCTwvcGFyYT4KLQkJPGl0ZW1pemVkbGlzdD4KLQkJCTxsaXN0aXRlbT4KLQkJCQk8cGFyYT4KLQkJCQkJPGVtcGhhc2lzIHJvbGU9ImJvbGQiPmF4aXM8L2VtcGhhc2lzPiAtIGFuIFhQYXRoIG5hdmlnYXRpb24gYXhpcyBzdGF0ZW1lbnQuCi0JCQkJPC9wYXJhPgotCQkJPC9saXN0aXRlbT4KLQkJCTxsaXN0aXRlbT4KLQkJCQk8cGFyYT4KLQkJCQkJPGVtcGhhc2lzIHJvbGU9ImJvbGQiPmV4c2x0PC9lbXBoYXNpcz4gLSBBbiBYUGF0aCBzdGF0ZW1lbnQgdGhhdCBpcyBkZWZpbmVkIGJ5Ci0JCQkJCXRoZSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmV4c2x0Lm9yZy8iPkVYU0xUPC91bGluaz4gbGlicmFyeS4gIFhhbGFuIGFuZCBtb3N0Ci0JCQkJCW90aGVyIHByb2Nlc3NvcnMgaGF2ZSBidWlsdCBpbiBzdXBwb3J0IGZvciB0aGUgRVhTTFQgbGlicmFyeS4KLQkJCQk8L3BhcmE+Ci0JCQk8L2xpc3RpdGVtPgotCQkJPGxpc3RpdGVtPgotCQkJCTxwYXJhPgotCQkJCQk8ZW1waGFzaXMgcm9sZT0iYm9sZCI+eHBhdGg8L2VtcGhhc2lzPiAtIFJlcHJlc2VudHMgYW4gWFBBVEggMS4wIGZ1bmN0aW9uLiAgVGhlc2UKLQkJCQkJYXJlIGZ1bmN0aW9ucyBhcyBkZWZpbmVkIGJ5IHRoZSBYUGF0aCAxLjAgc3BlY2lmaWNhdGlvbi4KLQkJCQk8L3BhcmE+Ci0JCQk8L2xpc3RpdGVtPgotCQkJPGxpc3RpdGVtPgotCQkJCTxwYXJhPgotCQkJCQk8ZW1waGFzaXMgcm9sZT0iYm9sZCI+eHBhdGggMi4wPC9lbXBoYXNpcz4gLSBSZXByZXNlbnRzIGFuIFhQYXRoIDIuMCBmdW5jdGlvbi4KLQkJCQkJPGVtcGhhc2lzPk5vdGU6IFRoYXQgY3VycmVudGx5IFhTTCBUb29saW5nIG9ubHkgc2hpcHMgd2l0aCB0ZW1wbGF0ZXMgZGVmaW5lZCBmb3IgWFBhdGggMS4wIC48L2VtcGhhc2lzPgotCQkJCTwvcGFyYT4KLQkJCTwvbGlzdGl0ZW0+Ci0JCQk8bGlzdGl0ZW0+Ci0JCQkJPHBhcmE+Ci0JCQkJCTxlbXBoYXNpcyByb2xlPSJib2xkIj5vcGVyYXRvcjwvZW1waGFzaXM+IC0gQW4geHBhdGggbG9naWNhbCBvcGVyYXRvciBsaWtlIEFORCwgT1IsIGV0Yy4KLQkJCQk8L3BhcmE+Ci0JCQk8L2xpc3RpdGVtPgotCQk8L2l0ZW1pemVkbGlzdD4KLQkJPHNlY3Rpb24gaWQ9IlhQYXRoVGVtcGxhdGVOZXciPgotCQkgICA8P2RiaHRtbCBmaWxlbmFtZT0icHJlZmVyZW5jZXMveHBhdGh0ZW1wbGF0ZW5ldy5odG1sIiA/PgotCQkgICA8dGl0bGU+Q3JlYXRpbmcgTmV3IFRlbXBsYXRlczwvdGl0bGU+Ci0JCSAgIDwhLS0gVE9ETzogQ3JlYXRlIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgbmV3IHRlbXBsYXRlcy0tPgotCQkgICA8cGFyYT4KLQkJICAgICAgQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgY3JlYXRpbmcgbmV3IHRlbXBsYXRlcy4KLQkJICAgPC9wYXJhPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uIGlkPSJYUGF0aEltcG9ydCI+Ci0JCSAgIDw/ZGJodG1sIGZpbGVuYW1lPSJwcmVmZXJlbmNlcy94cGF0aGltcG9ydC5odG1sIiA/PgotCQkgICA8dGl0bGU+SW1wb3J0IFhQYXRoIFRlbXBsYXRlczwvdGl0bGU+Ci0JCSAgIDxwYXJhPgotCQkgICAgICBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBpbXBvcnRpbmcgbmV3IHRlbXBsYXRlcy4KLQkJICAgPC9wYXJhPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uIGlkPSJYUGF0aEV4cG9ydCI+Ci0JCSAgIDw/ZGJodG1sIGZpbGVuYW1lPSJwcmVmZXJlbmNlcy94cGF0aGV4cG9ydC5odG1sIiA/PgotCQkgICA8dGl0bGU+SW1wb3J0IFhQYXRoIFRlbXBsYXRlczwvdGl0bGU+Ci0JCSAgIDxwYXJhPgotCQkgICAgICBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBpbXBvcnRpbmcgbmV3IHRlbXBsYXRlcy4KLQkJICAgPC9wYXJhPgotCQk8L3NlY3Rpb24+Ci0JCQotCTwvc2VjdGlvbj4KLQkKLTwvY2hhcHRlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2svc2FtcGxlcy9zYW1wbGVzLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9zYW1wbGVzL3NhbXBsZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzgxMDZlLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvZG9jYm9vay9zYW1wbGVzL3NhbXBsZXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjaGFwdGVyIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZG9jYm9vay5vcmcveHNkLzQuNS9kb2Nib29rLnhzZCIKLQl4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+Ci0JPD9kYmh0bWwgZmlsZW5hbWU9InNhbXBsZXMvc2FtcGxlcy5odG1sIiA/PgotCTx0aXRsZT5YU0wgVG9vbGluZyBTYW1wbGVzPC90aXRsZT4KLQk8cGFyYT5UaGlzIHNlY3Rpb24gY29udGFpbnMgc2V2ZXJhbCBzYW1wbGVzIGFuZCByZWZlcmVuY2VzIHRvIHNhbXBsZSBwcm9qZWN0cy48L3BhcmE+Ci0JPHNlY3Rpb24gaWQ9IkVjbGlwc2VIZWxwIj4KLQkJPD9kYmh0bWwgZmlsZW5hbWU9InNhbXBsZXMvZWNsaXBzZWhlbHAuaHRtbCIgPz4KLQkJPHRpdGxlPkVjbGlwc2UgSGVscDwvdGl0bGU+Ci0JCTxwYXJhPjwvcGFyYT4KLQkJPHNlY3Rpb24gaWQ9IkRvY2Jvb2tFY2xpcHNlSGVscCI+Ci0JCQk8P2RiaHRtbCBmaWxlbmFtZT0ic2FtcGxlcy9kb2Nib29raGVscC5odG1sIiA/PgotCQkJPHRpdGxlPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERvY2Jvb2sgYW5kIFhTTCBUb29saW5nPC90aXRsZT4KLQkJCTxwYXJhPgotCQkJCVRoaXMgdHV0b3JpYWwgYXNzdW1lcyB0aGF0IHlvdSBoYXZlIGtub3dsZWRnZSBvZiBEb2Nib29rLCBBTlQsIGFuZCB0aGUKLQkJCQlhYmlsaXR5IHRvIHNldHVwIEFOVCBidWlsZCBzY3JpcHRzLgotCQkJPC9wYXJhPgotCQkJPHBhcmE+Ci0JCQkJVG8gRG8gd3JpdGUgdXAgdGhlIHJlc3Qgb2YgdGhlIHR1dG9yaWFsLgotCQkJPC9wYXJhPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uIGlkPSJESVRBRWNsaXBzZUhlbHAiPgotCQkJPD9kYmh0bWwgZmlsZW5hbWU9InNhbXBsZXMvZGl0YWhlbHAuaHRtbCIgPz4KLQkJCTx0aXRsZT5DcmVhdGluZyBFY2xpcHNlIEhlbHAgd2l0aCBESVRBIGFuZCBYU0wgVG9vbGluZzwvdGl0bGU+Ci0JCQk8cGFyYT4KLQkJCQlUaGlzIHR1dG9yaWFsIGFzc3VtZXMgdGhhdCB5b3UgaGF2ZSBrbm93bGVkZ2Ugb2YgRElUQSwgQU5ULCBhbmQgdGhlCi0JCQkJYWJpbGl0eSB0byBzZXR1cCBBTlQgYnVpbGQgc2NyaXB0cy4KLQkJCTwvcGFyYT4KLQkJCTxwYXJhPgotCQkJCVRvIERvIHdyaXRlIHVwIHRoZSByZXN0IG9mIHRoZSB0dXRvcmlhbC4KLQkJCTwvcGFyYT4KLQkJPC9zZWN0aW9uPgotCTwvc2VjdGlvbj4KLTwvY2hhcHRlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2sveHNsaGVscC5kYmsgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2RvY2Jvb2sveHNsaGVscC5kYmsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMDAxNGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9kb2Nib29rL3hzbGhlbHAuZGJrCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxib29rIGlkPSJYU0xVc2VyIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5kb2Nib29rLm9yZy94c2QvNC41L2RvY2Jvb2sueHNkIgotCSAgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgotICA8Ym9va2luZm8+Ci0gICAgICA8dGl0bGU+WFNMIFRvb2xpbmcgVXNlciBEb2N1bWVudGF0aW9uPC90aXRsZT4KLSAgICAgIDxhdXRob3I+Ci0gICAgICAgICA8Zmlyc3RuYW1lPkRhdmlkPC9maXJzdG5hbWU+Ci0gICAgICAgICA8c3VybmFtZT5DYXJ2ZXI8L3N1cm5hbWU+Ci0gICAgICA8L2F1dGhvcj4KLSAgICAgIDxjb3B5cmlnaHQ+Ci0gICAgICAgICA8eWVhcj4yMDA4PC95ZWFyPgotICAgICAgICAgPGhvbGRlcj5FY2xpcHNlIEZvdW5kYXRpb24gYW5kIG90aGVyczwvaG9sZGVyPgotICAgICAgPC9jb3B5cmlnaHQ+Ci0gICA8L2Jvb2tpbmZvPgotICAgPHhpOmluY2x1ZGUgaHJlZj0iZ2VuZXJhbC9nZW5lcmFsLnhtbCIvPgotICAgPHhpOmluY2x1ZGUgaHJlZj0iZWRpdG9yL2VkaXRvci54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9ImxhdW5jaGluZy9sYXVuY2hpbmcueG1sIi8+Ci0gICA8eGk6aW5jbHVkZSBocmVmPSJwcmVmZXJlbmNlcy9wcmVmZXJlbmNlcy54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9InNhbXBsZXMvc2FtcGxlcy54bWwiLz4KLSAgIDx4aTppbmNsdWRlIGhyZWY9ImxlZ2FsLnhtbCIvPgotPC9ib29rPgotCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjOTU4NC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5DaGFwdGVyJm5ic3A7Mi4mbmJzcDtYU0wgRWRpdGluZzwvdGl0bGU+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzMuMiIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9InN0YXJ0IiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xpbmcgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xpbmcgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InByZXYiIGhyZWY9Ii4uL2dlbmVyYWwvZ2VuZXJhbC5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzEuJm5ic3A7R2VuZXJhbCI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xlZGl0b3JfY29udGVudGFzc2lzdC5odG1sIiB0aXRsZT0iQ29udGVudCBBc3Npc3QiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PHA+Ci0gICAgICBUaGUgWFNMIFRvb2xpbmcgcGx1Z2lucyBleHRlbmQgdGhlIGFiaWxpdHkgb2YgdGhlIFdlYiBTdGFuZGFyZCBUb29scyBYTUwKLSAgICAgIGVkaXRvci4gIFRoaXMgZXh0ZW5zaW9uIGFkZHMgc3BlY2lmaWMgc3VwcG9ydCBhbmQgZnVuY3Rpb25hbGl0eSBmb3Igd29ya2luZwotICAgICAgd2l0aCBhbmQgZGVidWdnaW5nIFhTTCBmaWxlcy4gCi0gICAgPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlZhbGlkYXRpb24iPjwvYT5WYWxpZGF0aW9uPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLSAgICAJCVRoZSBYU0wgZXh0ZW5zaW9ucyBmb3IgdGhlIGVjbGlwc2UgWE1MIGVkaXRvciBpbmNsdWRlIGFzIHlvdSB0eXBlIHZhbGlkYXRpb24gZm9yIFhTTCBzcGVjaWZpYyBmZWF0dXJlcy4gIFRoaXMgaW5jbHVkZXMgbm90Ci0gICAgCQlvbmx5IHRoZSBhYmlsaXR5IHRvIHN5bnRheCBjaGVjayB0aGUgZ3JhbW1hciwgYnV0IHRvIGFsc28gdG8gdmFsaWRhdGUgc3BlY2lmaWMgWFNMIHNwZWNpZmljYXRpb24gcnVsZXMuICBHcmFtbWFyIHZhbGlkYXRpb24gd2lsbAotICAgIAkJYmUgdHJpZ2dlcmVkIGJhc2VkIG9uIHRoZSB2ZXJzaW9uIGF0dHJpYnV0ZSBmb3IgdGhlIHN0eWxlIHNoZWV0IHRoYXQgaXMgYmVpbmcgZWRpdGVkLiAgIFZhbGlkIHZlcnNpb24gbnVtYmVycyBhcmUgMS4wLCBhbmQgMi4wLgotICAgIAkJQ3VycmVudGx5IFhTTFQgMS4xIHdoaWNoIHdhcyBhIHRyYW5zaXRpb25hbCBzcGVjaWZpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGVkaXRpbmcuCi0gICAgCTwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdjNDU2My4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9jb250ZW50YXNzaXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkNvbnRlbnQgQXNzaXN0PC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43My4yIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbGVkaXRvci5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzIuJm5ic3A7WFNMIEVkaXRpbmciPjxsaW5rIHJlbD0icHJldiIgaHJlZj0ieHNsZWRpdG9yLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7Mi4mbmJzcDtYU0wgRWRpdGluZyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwiIHRpdGxlPSJUZW1wbGF0ZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PHA+Ci0JCSAgICBYU0wgVG9vbGluZyBleHRlbmRzIHRoZSBleGlzdGluZyBjb250ZW50IGFzc2lzdGFuY2Ugc3VwcG9ydCBvZiB0aGUgWE1MCi0JCSAgICBFZGl0b3IgdG8gcHJvdmlkZSBjb250ZW50IGFzc2lzdGFuY2UgZm9yIHNldmVyYWwgWFNMIG5hbWVzcGFjZSBhdHRyaWJ1dGVzLgotCQkgICAgVGhlIGNvbnRlbnQgYXNzaXN0YW5jZSBwcm92aWRlZCBjb3ZlcnMgdGhlIGF2YWlsYWJsZSBYUGF0aCBzdGF0ZW1lbnRzIGFzCi0JCSAgICBkZWZpbmVkIGluIHRoZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5YUGF0aCBUZW1wbGF0ZXM8L2VtPjwvc3Bhbj4gcHJlZmVyZW5jZSBwYWdlLgotCQk8L3A+PHA+Ci0JCQlUaGUgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGNvbnRlbnQgYXNzaXN0IGF2YWlsYWJsZSBhcmUgYXMgZm9sbG93czoKLQkJPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD4KLQkJCQkgICAgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+dGVtcGxhdGU8L3N0cm9uZz48L3NwYW4+IC0gVGhlIHRlbXBsYXRlIGVsZW1lbnQgaGFzIHNldmVyYWwgY29udGVudCBhc3Npc3QKLQkJCQkgICAgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5tYXRjaDwvZW0+PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bmFtZTwvZW0+PC9zcGFuPiwgYW5kIAotCQkJCSAgICA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5tb2RlPC9lbT48L3NwYW4+IGF0dHJpYnV0ZXMuCi0JCQkJPC9wPjxwPgotCQkJCQlBZGQgaW1hZ2Ugc2hvd2luZyB0ZW1wbGF0ZSBjb21wbGV0aW9uLgotCQkJCTwvcD48L2xpPjxsaT48cD4KLQkJCQkJPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+dmFyaWFibGU8L3N0cm9uZz48L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5wYXJhbTwvc3Ryb25nPjwvc3Bhbj4gLSBUaGUgdmFyaWFibGUgYW5kIHBhcmFtIGVsZW1lbnRzIGhhdmUgY29udGVudCBhc3Npc3QKLQkJCQkJZm9yIHhwYXRoLCBheGlzLCBwYXJtYXRlcnMgYW5kIHZhcmlhYmxlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHByZWRlZmluZWQgd2hlbiB1c2luZyB0aGUgb3B0aW9uYWwKLQkJCQkJPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+c2VsZWN0PC9lbT48L3NwYW4+IGF0dHJpYnV0ZS4KLQkJCQk8L3A+PHA+Ci0JCQkJCUFkZCBpbWFnZSBzaG93aW5nIHZhcmlhYmxlIGNvbXBsZXRpb24uCi0JCQkJPC9wPjwvbGk+PGxpPjxwPgotCQkJCQk8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5pZjwvc3Ryb25nPjwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPndoZW48L3N0cm9uZz48L3NwYW4+IC0gVGhlCi0JCQkJCWlmIGFuZCB3aGVuIGVsZW1lbnRzIGhhdmUgY29udGVudCBhc3Npc3QgZm9yIHRoZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT50ZXN0PC9lbT48L3NwYW4+IGF0dHJpYnV0ZS4KLQkJCQkJVGhpcyBjb250ZW50IGFzc2lzdGFuY2UgaXMgYXZhaWxhYmxlIGZvciBhbGwgcGFyYW1hdGVycyBhbmQgdmFyaWFibGVzIHRoYXQgYXJlIGluCi0JCQkJCXNjb3BlLCBhcyB3ZWxsIGFzIGFueSBhdmFpbGFibGUgeHBhdGggb3IgYXhpcyBzdGF0ZW1lbnQuCi0JCQkJPC9wPjxwPgotCQkJCQlBZGQgaW1hZ2Ugc2hvd2luZyB0ZXN0IGNvbXBsZXRpb24uCi0JCQkJPC9wPjwvbGk+PGxpPjxwPgotCQkJICAgIAk8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5hcHBseS10ZW1wbGF0ZTwvc3Ryb25nPjwvc3Bhbj4gLSBUaGUgYXBwbHkgdGVtcGxhdGUgaGFzIGNvbnRlbnQKLQkJCSAgICAJYXNzaXN0YW5jZSBmb3IgYm90aCB0aGUgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bW9kZTwvZW0+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+c2VsZWN0PC9lbT48L3NwYW4+Ci0JCQkgICAgCWF0dHJpYnV0ZXMuIAotCQkJICAgIDwvcD48cD4KLQkJCQkJQWRkIGltYWdlIHNob3dpbmcgYXBwbHktdGVtcGxhdGUgY29tcGxldGlvbi4KLQkJCQk8L3A+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9ImltcG9ydGFudCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPlhQYXRoIDIuMCBTdXBwb3J0PC9oMz48cD4KLQkJCQlDdXJyZW50bHkgWFBhdGggMi4wIGlzIG5vdCBzdXBwb3J0ZWQgZGlyZWN0bHkuICBIb3dldmVyLCBhIHVzZXIgY2FuIGFkZCB0aGlzIHN1cHBvcnQgaWYgdGhleSBuZWVkIGl0IGJ5Ci0JCQkJYWRkaW5nIHRoZSBtaXNzaW5nIFhQYXRoIGZ1bmN0aW9ucyB0byB0aGUgWFBhdGggVGVtcGxhdGVzLgotCQkJPC9wPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9kZWJ1Z2dpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwZjE5Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl9kZWJ1Z2dpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YU0wgRGVidWdnaW5nPC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43My4yIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbGVkaXRvci5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzIuJm5ic3A7WFNMIEVkaXRpbmciPjxsaW5rIHJlbD0icHJldiIgaHJlZj0ieHNsZWRpdG9yX3RlbXBsYXRlcy5odG1sIiB0aXRsZT0iVGVtcGxhdGVzIj48bGluayByZWw9Im5leHQiIGhyZWY9Ii4uL2xhdW5jaGluZy9sYXVuY2hpbmcuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDszLiZuYnNwO1hTTCBMYXVuY2hpbmcgYW5kIERlYnVnZ2luZyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48cD4KLQkJCVRPRE86IEFkZCBYU0wgRGVidWdnaW5nIGRvY3VtZW50YXRpb24uCi0JCTwvcD48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9lZGl0b3IveHNsZWRpdG9yX3RlbXBsYXRlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZjU1MzIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPlRlbXBsYXRlczwvdGl0bGU+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzMuMiIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9InN0YXJ0IiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xpbmcgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSJ4c2xlZGl0b3IuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDsyLiZuYnNwO1hTTCBFZGl0aW5nIj48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvcl9jb250ZW50YXNzaXN0Lmh0bWwiIHRpdGxlPSJDb250ZW50IEFzc2lzdCI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xlZGl0b3JfZGVidWdnaW5nLmh0bWwiIHRpdGxlPSJYU0wgRGVidWdnaW5nIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxwPgotCQkJU3BlY2lmaWMgWFNMIGNvZGUgY29tcGxldGlvbiB0ZW1wbGF0ZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBYTUwgZWRpdG9yJ3MgVGVtcGxhdGVzLiAgIFRoaXMgYWxsb3dzIGEgdXNlcgotCQkJdG8gZGVmaW5lIHNwZWNpZmljIG1hcmt1cCBjb21wbGV0aW9uIHRlbXBsYXRlcyB0aGF0IGFyZSBjb21tb25seSB1c2VkLiAgIEluIGFkZGl0aW9uLCB0aGUgWFBhdGggVGVtcGxhdGVzIHBhZ2UKLQkJCWNhbiBiZSBlbmhhbmNlZCB0byBhbGxvdyBjb21tb25seSB1c2VkIFhQYXRoIHRlbXBsYXRlcyB0byBiZSBpbmNsdWRlZCwgaW4gYWRkaXRpb24gdG8gdGhvc2UgaW5zdGFsbGVkIGJ5IGRlZmF1bHQuCi0JCQlUaGlzIGFsbG93cyBhIHVzZXIgdGhlIGFiaWxpdHkgdG8gYWRkIGN1c3RvbSBleHRlbnNpb24gZnVuY3Rpb25zIGZvciBYU0xUIHRoYXQgbWF5IGJlIHByb2Nlc3NvciBzcGVjaWZpYy4gIEFkb3B0ZXJzCi0JCQltYXkgYWxzbyB1c2UgdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGV4dGVuc2lvbiBwb2ludCB0byBhZGQgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgotCQk8L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9Ik4xMDBBRiI+PC9hPlhQYXRoIFRlbXBsYXRlczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0JCQkJVGhlIFhTTCBYUGF0aCBUZW1wbGF0ZXMgcHJlZmVyZW5jZSBwYWdlIGFsbG93cyBmb3IgYSB1c2VyIG9yIGFkb3B0ZXIgdG8gYWRkIHNwZWNpZmljIHhwYXRoIGV4dGVuc2lvbnMgc28gdGhhdAotCQkJCXRoZXkgc2hvdyB1cCBpbiB0aGUgY29udGVudCBhc3Npc3RhbmNlLiAgIFNlZSB0aGUgWFBhdGggVGVtcGxhdGVzIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0JCQk8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl92YWxpZGF0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZWRpdG9yL3hzbGVkaXRvcl92YWxpZGF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZGY4ZTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2VkaXRvci94c2xlZGl0b3JfdmFsaWRhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5Db250ZW50IEFzc2lzdDwvdGl0bGU+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzMuMiIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9InN0YXJ0IiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xpbmcgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSJ4c2xlZGl0b3IuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDsyLiZuYnNwO1hTTCBFZGl0aW5nIj48bGluayByZWw9InByZXYiIGhyZWY9InhzbGVkaXRvci5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzIuJm5ic3A7WFNMIEVkaXRpbmciPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieHNsZWRpdG9yX3RlbXBsYXRlcy5odG1sIiB0aXRsZT0iVGVtcGxhdGVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9Ik4xMDA1NiI+PC9hPkNvbnRlbnQgQXNzaXN0PC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLQkJICAgIFhTTCBUb29saW5nIGV4dGVuZHMgdGhlIGV4aXN0aW5nIGNvbnRlbnQgYXNzaXN0YW5jZSBzdXBwb3J0IG9mIHRoZSBYTUwKLQkJICAgIEVkaXRvciB0byBwcm92aWRlIGNvbnRlbnQgYXNzaXN0YW5jZSBmb3Igc2V2ZXJhbCBYU0wgbmFtZXNwYWNlIGF0dHJpYnV0ZXMuCi0JCSAgICBUaGUgY29udGVudCBhc3Npc3RhbmNlIHByb3ZpZGVkIGNvdmVycyB0aGUgYXZhaWxhYmxlIFhQYXRoIHN0YXRlbWVudHMgYXMKLQkJICAgIGRlZmluZWQgaW4gdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPlhQYXRoIFRlbXBsYXRlczwvZW0+PC9zcGFuPiBwcmVmZXJlbmNlIHBhZ2UuCi0JCTwvcD48cD4KLQkJCVRoZSBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyB0aGF0IGhhdmUgY29udGVudCBhc3Npc3QgYXZhaWxhYmxlIGFyZSBhcyBmb2xsb3dzOgotCQk8L3A+PGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgdHlwZT0iZGlzYyI+PGxpPjxwPgotCQkJCSAgICA8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz50ZW1wbGF0ZTwvc3Ryb25nPjwvc3Bhbj4gLSBUaGUgdGVtcGxhdGUgZWxlbWVudCBoYXMgc2V2ZXJhbCBjb250ZW50IGFzc2lzdAotCQkJCSAgICBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm1hdGNoPC9lbT48L3NwYW4+LCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5uYW1lPC9lbT48L3NwYW4+LCBhbmQgCi0JCQkJICAgIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPm1vZGU8L2VtPjwvc3Bhbj4gYXR0cmlidXRlcy4KLQkJCQk8L3A+PHA+Ci0JCQkJCUFkZCBpbWFnZSBzaG93aW5nIHRlbXBsYXRlIGNvbXBsZXRpb24uCi0JCQkJPC9wPjwvbGk+PGxpPjxwPgotCQkJCQk8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz52YXJpYWJsZTwvc3Ryb25nPjwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPnBhcmFtPC9zdHJvbmc+PC9zcGFuPiAtIFRoZSB2YXJpYWJsZSBhbmQgcGFyYW0gZWxlbWVudHMgaGF2ZSBjb250ZW50IGFzc2lzdAotCQkJCQlmb3IgeHBhdGgsIGF4aXMsIHBhcm1hdGVycyBhbmQgdmFyaWFibGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlZGVmaW5lZCB3aGVuIHVzaW5nIHRoZSBvcHRpb25hbAotCQkJCQk8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zZWxlY3Q8L2VtPjwvc3Bhbj4gYXR0cmlidXRlLgotCQkJCTwvcD48cD4KLQkJCQkJQWRkIGltYWdlIHNob3dpbmcgdmFyaWFibGUgY29tcGxldGlvbi4KLQkJCQk8L3A+PC9saT48bGk+PHA+Ci0JCQkJCTxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmlmPC9zdHJvbmc+PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+d2hlbjwvc3Ryb25nPjwvc3Bhbj4gLSBUaGUKLQkJCQkJaWYgYW5kIHdoZW4gZWxlbWVudHMgaGF2ZSBjb250ZW50IGFzc2lzdCBmb3IgdGhlIDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnRlc3Q8L2VtPjwvc3Bhbj4gYXR0cmlidXRlLgotCQkJCQlUaGlzIGNvbnRlbnQgYXNzaXN0YW5jZSBpcyBhdmFpbGFibGUgZm9yIGFsbCBwYXJhbWF0ZXJzIGFuZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW4KLQkJCQkJc2NvcGUsIGFzIHdlbGwgYXMgYW55IGF2YWlsYWJsZSB4cGF0aCBvciBheGlzIHN0YXRlbWVudC4KLQkJCQk8L3A+PHA+Ci0JCQkJCUFkZCBpbWFnZSBzaG93aW5nIHRlc3QgY29tcGxldGlvbi4KLQkJCQk8L3A+PC9saT48bGk+PHA+Ci0JCQkgICAgCTxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPmFwcGx5LXRlbXBsYXRlPC9zdHJvbmc+PC9zcGFuPiAtIFRoZSBhcHBseSB0ZW1wbGF0ZSBoYXMgY29udGVudAotCQkJICAgIAlhc3Npc3RhbmNlIGZvciBib3RoIHRoZSA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5tb2RlPC9lbT48L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5zZWxlY3Q8L2VtPjwvc3Bhbj4KLQkJCSAgICAJYXR0cmlidXRlcy4gCi0JCQkgICAgPC9wPjxwPgotCQkJCQlBZGQgaW1hZ2Ugc2hvd2luZyBhcHBseS10ZW1wbGF0ZSBjb21wbGV0aW9uLgotCQkJCTwvcD48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0iaW1wb3J0YW50IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+WFBhdGggMi4wIFN1cHBvcnQ8L2gzPjxwPgotCQkJCUN1cnJlbnRseSBYUGF0aCAyLjAgaXMgbm90IHN1cHBvcnRlZCBkaXJlY3RseS4gIEhvd2V2ZXIsIGEgdXNlciBjYW4gYWRkIHRoaXMgc3VwcG9ydCBpZiB0aGV5IG5lZWQgaXQgYnkKLQkJCQlhZGRpbmcgdGhlIG1pc3NpbmcgWFBhdGggZnVuY3Rpb25zIHRvIHRoZSBYUGF0aCBUZW1wbGF0ZXMuCi0JCQk8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZ2VuZXJhbC9nZW5lcmFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvZ2VuZXJhbC9nZW5lcmFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNWVjMjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2dlbmVyYWwvZ2VuZXJhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5DaGFwdGVyJm5ic3A7MS4mbmJzcDtHZW5lcmFsPC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43My4yIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSIuLi9lZGl0b3IveHNsZWRpdG9yLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7Mi4mbmJzcDtYU0wgRWRpdGluZyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48cD5UaGlzIHNlY3Rpb24gY292ZXJzIHRvcGljcyB0aGF0IGRvbid0IGhhdmUgYW55IG90aGVyIHBhcnRpY3VsYXIgcGxhY2UgdG8gZ28uPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlhJbmNsdWRlIj48L2E+WEluY2x1ZGU8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotICAgICAgCVhJbmNsdWRlIGFsbG93cyBhIHVzZXIgdG8gaW1wb3J0IG9yIGluY2x1ZGUgb3RoZXIgWE1MIGZpbGVzIGludG8gb25lIHhtbCBmaWxlLgotICAgICAgICBJdCBpcyB1c2VkIHByaW1hcmlseSB3aXRoIGRvY3VtZW50YXRpb24gZmlsZSBmb3JtYXRzIGxpa2UgRG9jYm9vayBhbmQgRElUQS4gIEl0Ci0gICAgICAgIGFsbG93cyBmb3Igc2VwYXJhdGluZyBvdXQgbGFyZ2UgeG1sIGRvY3VtZW50cyBpbnRvIG1vcmUgbWFuYWdlYWJsZSBjaHVua3Mgb2YgaW5mb3JtYXRpb24uCi0gICAgICA8L3A+PHA+Ci0gICAgICAJVGhlIFhTTCBUb29saW5nIHByb2plY3QgaW5jbHVkZXMgYW4gQU5UIHRhc2sgdGhhdCBjYW4gYmUgcnVuIHdpdGggaW4gZWNsaXBzZSwgZWNsaXBzZQotICAgICAgCWhlYWRsZXNzLCBhbmQgd2l0aG91dCBlY2xpcHNlIGF0IGFsbC4gICBJZiBydW5uaW5nIG91dHNpZGUgb2YgZWNsaXBzZSwgeW91IHdpbGwgbmVlZAotICAgICAgCXRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBqYXIgZmlsZSB4aW5jbHVkZS5qYXIgaW4gdGhlIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5qYXIgZmlsZQotICAgICAgCWlzIG1hZGUgYXZhaWFibGUgb24geW91ciBjbGFzcyBwYXRoLgotICAgICAgPC9wPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL2dlbmVyYWwveGluY2x1ZGUucG5nIiBhbGlnbj0ibWlkZGxlIj48L2Rpdj48cD4KLSAgICAgIAlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgeHNsLnhpbmNsdWRlIEFOVCB0YXNrOgotICAgICAgPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD4KLSAgICAgIAkJCTxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPgotCQkJCQlpbgotCQkJCTwvc3Ryb25nPjwvc3Bhbj4gLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBpbnB1dCBmaWxlIHRoYXQgY29udGFpbnMKLSAgICAgIAkJCXRoZSBmaWxlIHdpdGggdGhlIFhJbmNsdWRlcy4gICBJZiB0aGUgZmlsZXMgdGhhdCBpdCBpbmNsdWRlcyBoYXZlIGluY2x1ZGVzLCB0aGVuCi0gICAgICAJCQl0aG9zZSB3aWxsIGJlIGJyb3VnaHQgaW4gYW4gZXhwYW5kZWQgYXMgd2VsbC4KLSAgICAgIAkJPC9wPjwvbGk+PGxpPjxwPgotCQkJCQk8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5vdXQ8L3N0cm9uZz48L3NwYW4+IC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGUgCi0JCQkJCXRvIGJlIHdyaXR0ZW4gd2l0aCBhbGwgaW5jbHVkZXMgZXhwYW5kZWQuICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGFzIHRoZQotCQkJCQlpbnB1dCB0byBhIHN0eWxlc2hlZXQgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcy4KLQkJCQk8L3A+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxhIG5hbWU9Ik4xMDA0MCI+PC9hPjxwIGNsYXNzPSJ0aXRsZSI+PGI+RXhhbXBsZSZuYnNwOzEuMS4mbmJzcDtYSW5jbHVkZSBFeGFtcGxlPC9iPjwvcD48ZGl2IGNsYXNzPSJleGFtcGxlLWNvbnRlbnRzIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0mbHQ7dGFyZ2V0IG5hbWU9Im1lcmdlIiZndDsKLSAgICAmbHQ7eHNsLnhpbmNsdWRlIGluPSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHAuZGJrIgotICAgICAgICAgICAgICAgICAgb3V0PSIke2RvY2Jvb2tzb3VyY2V9L3hzbGhlbHBjb21iaW5lZC5kYmsiLyZndDsKLSZsdDsvdGFyZ2V0Jmd0OwkgICAgCQkgICAgCQotCSAgICAJPC9wcmU+PC9kaXY+PC9kaXY+PGJyIGNsYXNzPSJleGFtcGxlLWJyZWFrIj48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZ2VuZXJhbC94aW5jbHVkZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL2dlbmVyYWwveGluY2x1ZGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGI5ZjczLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvZ2VuZXJhbC94aW5jbHVkZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL1hQYXRoVGVtcGxhdGVzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjg5MzA0Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMvWFBhdGhUZW1wbGF0ZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94bV90ZW1wbGF0ZV94c2xuZXdmaWxlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveG1fdGVtcGxhdGVfeHNsbmV3ZmlsZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NDZhNmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94bV90ZW1wbGF0ZV94c2xuZXdmaWxlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX0luc3RhbGxlZFByb2Nlc3NvcnMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfSW5zdGFsbGVkUHJvY2Vzc29ycy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOTUwNzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfSW5zdGFsbGVkUHJvY2Vzc29ycy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbF9vdXRwdXRwcm9wZXJ0aWVzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTAwYTQyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xmZWF0dXJlcy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbGZlYXR1cmVzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlkYmVjOC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbGZlYXR1cmVzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbWFnZXMvcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYjcxODcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xwcmVmZXJlbmNlcy5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvaW5kZXguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDhhZmE5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb248L3RpdGxlPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjczLjIiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnZW5lcmFsL2dlbmVyYWwuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDsxLiZuYnNwO0dlbmVyYWwiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2RlYnVnbGF1bmNoaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2RlYnVnbGF1bmNoaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNjQyMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL2xhdW5jaGluZy9kZWJ1Z2xhdW5jaGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPkxhdW5jaCBEZWJ1Z2dpbmc8L3RpdGxlPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjczLjIiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJzdGFydCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ibGF1bmNoaW5nLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7My4mbmJzcDtYU0wgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmciPjxsaW5rIHJlbD0icHJldiIgaHJlZj0ibGF1bmNoaW5nLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7My4mbmJzcDtYU0wgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmciPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iLi4vcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDs0LiZuYnNwO1hTTCBUb29saW5nIFByZWZlcmVuY2VzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxwPgotCSAgIAkJVGhpcyBpcyBhIHBsYWNlIGhvbGRlciB1bnRpbCBzb21lIGFjdHVhbCBkb2N1bWVudGF0aW9uIGNhbiBiZSB3cml0dGVuLgotCSAgIDwvcD48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGF1bmNoaW5nL2xhdW5jaGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjgyNjlhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q2hhcHRlciZuYnNwOzMuJm5ic3A7WFNMIExhdW5jaGluZyBhbmQgRGVidWdnaW5nPC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43My4yIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0icHJldiIgaHJlZj0iLi4vZWRpdG9yL3hzbGVkaXRvcl9kZWJ1Z2dpbmcuaHRtbCIgdGl0bGU9IlhTTCBEZWJ1Z2dpbmciPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZGVidWdsYXVuY2hpbmcuaHRtbCIgdGl0bGU9IkxhdW5jaCBEZWJ1Z2dpbmciPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PHA+Ci0JCVRoZSBYU0wgVG9vbGluZyBhZGRzIHN1cHBvcnQgZm9yIFhTTCBMYXVuY2ggYW5kIERlYnVnZ2luZyBjb25maWd1cmF0aW9ucy4KLQkJVGhlc2UgYWxsb3cgeW91IHRvIHNldHVwIFhTTCBjb25maWd1cmF0aW9ucyBmb3IgdmFyaW91cyBqb2JzLCBhbmQgdG8gYWxzbwotCQlkZWJ1ZyB4c2wgc3R5bHNoZWV0IHRyYW5zZm9ybWF0aW9ucy4JCi0JPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IlhTTExhdW5jaCI+PC9hPlhTTCBMYXVuY2hpbmc8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotCQkJSW4gdGhlIFByb2plY3QgRXhwbG9yZXIsIHNpbXBseSBzZWxlY3QgdGhlIGlucHV0IFhNTCBmaWxlIGFuZCB0aGUgc3R5bGVzaGVldChzKSB0byB0cmFuc2Zvcm0gaXQsIGFuZCB0aGVuIHJpZ2h0LWNsaWNrIGFuZCBzZWxlY3QgCi0JCQk8c3BhbiBzdHlsZT0iY29sb3I6IHJlZCI+Jmx0O2kmZ3Q7UnVuIEFzICZndDsgWFNMIFRyYW5zZm9ybWF0aW9uJmx0Oy9pJmd0Ozwvc3Bhbj4uIAotCSAgICA8L3A+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvbGF1bmNoaW5nL2xhdW5jaFNob3J0Y3V0LnBuZyIgYWxpZ249Im1pZGRsZSI+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvbGVnYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sZWdhbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWY3MDMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9sZWdhbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5DaGFwdGVyJm5ic3A7Ni4mbmJzcDtOb3RpY2VzPC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43My4yIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0icHJldiIgaHJlZj0ic2FtcGxlcy9zYW1wbGVzLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7NS4mbmJzcDtYU0wgVG9vbGluZyBTYW1wbGVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxwPgotICAgICAgVGhlIG1hdGVyaWFsIGluIHRoaXMgZ3VpZGUgaXMgQ29weXJpZ2h0IChjKSBEb3VnIFNhdGNod2VsbCAoPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51ayIgdGFyZ2V0PSJfdG9wIj5DaGFzZSBUZWNobm9sb2d5IEx0ZDwvYT4pLCAKLSAgICAgIERhdmlkIENhcnZlciAoKDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5zdGFyc3RhbmRhcmQub3JnIiB0YXJnZXQ9Il90b3AiPlN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbDwvYT4pCi0gICAgICBhbmQgb3RoZXJzIDIwMDguCi0gICAgPC9wPjxwPgotCQlUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyAKLQkJdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCi0JCTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiIHRhcmdldD0iX3RvcCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgIDwvcD48cD4KLQkJPGEgY2xhc3M9InVsaW5rIiBocmVmPSJhYm91dC5odG1sIiB0YXJnZXQ9Il90b3AiPlRlcm1zIGFuZCBjb25kaXRpb25zIHJlZ2FyZGluZyB0aGUgdXNlIG9mIHRoaXMgZ3VpZGUuPC9hPi4KLQk8L3A+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHBhdGh0ZW1wbGF0ZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy94cGF0aHRlbXBsYXRlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjMwOTZkLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy94cGF0aHRlbXBsYXRlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPGh0bWw+PGhlYWQ+PE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPjx0aXRsZT5YUGF0aCBUZW1wbGF0ZXM8L3RpdGxlPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjczLjIiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJzdGFydCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNscHJlZmVyZW5jZXMuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDs0LiZuYnNwO1hTTCBUb29saW5nIFByZWZlcmVuY2VzIj48bGluayByZWw9InByZXYiIGhyZWY9InhzbG91dHB1dHByb3BlcnRpZXMuaHRtbCIgdGl0bGU9Ik91dHB1dCBQcm9wZXJ0aWVzIj48bGluayByZWw9Im5leHQiIGhyZWY9Ii4uL3NhbXBsZXMvc2FtcGxlcy5odG1sIiB0aXRsZT0iQ2hhcHRlciZuYnNwOzUuJm5ic3A7WFNMIFRvb2xpbmcgU2FtcGxlcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48cD4KLQkJICAgIFhQYXRoIHRlbXBsYXRlIHByb3Bvc2FsIGlzIHN1cHBvcnRlZCBieSB0aGUgWFNMIFRvb2xpbmcgcHJvamVjdCB0aHJvdWdoIHRoZQotCQkgICAgYnVpbHQgaW4gdGVtcGxhdGUgZnVuY3Rpb25hbGl0eSBvZiBlY2xpcHNlLiAgIFVzZXJzIGFuZCBBZG9wdGVycyBjYW4gYWRkCi0JCSAgICB0aGVpciBvd24gc3BlY2lmaWMgeHBhdGggZXh0ZW5zaW9ucyBmb3IgcHJvY2Vzc29yIHNwZWNpZmljIGV4dGVuc2lvbnMuICBBbgotCQkgICAgZXhhbXBsZSB3b3VsZCBiZSB0byBhZGQgdGhlIEVYU0xUIGV4dGVuc2lvbnMgZm9yIHByb3Bvc2FsIHN1cHBvcnQuCi0JCTwvcD48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9wcmVmZXJlbmNlcy9YUGF0aFRlbXBsYXRlcy5wbmciIGFsaWduPSJtaWRkbGUiPjwvZGl2PjxwPgotCQkgICBUaGUgZm9sbG93aW5nIGNvbnRlbnQgdHlwZXMgYXJlIGF2YWlsYWJsZToKLQkJPC9wPjxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIHR5cGU9ImRpc2MiPjxsaT48cD4KLQkJCQkJPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+YXhpczwvc3Ryb25nPjwvc3Bhbj4gLSBhbiBYUGF0aCBuYXZpZ2F0aW9uIGF4aXMgc3RhdGVtZW50LgotCQkJCTwvcD48L2xpPjxsaT48cD4KLQkJCQkJPHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+ZXhzbHQ8L3N0cm9uZz48L3NwYW4+IC0gQW4gWFBhdGggc3RhdGVtZW50IHRoYXQgaXMgZGVmaW5lZCBieQotCQkJCQl0aGUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LmV4c2x0Lm9yZy8iIHRhcmdldD0iX3RvcCI+RVhTTFQ8L2E+IGxpYnJhcnkuICBYYWxhbiBhbmQgbW9zdAotCQkJCQlvdGhlciBwcm9jZXNzb3JzIGhhdmUgYnVpbHQgaW4gc3VwcG9ydCBmb3IgdGhlIEVYU0xUIGxpYnJhcnkuCi0JCQkJPC9wPjwvbGk+PGxpPjxwPgotCQkJCQk8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz54cGF0aDwvc3Ryb25nPjwvc3Bhbj4gLSBSZXByZXNlbnRzIGFuIFhQQVRIIDEuMCBmdW5jdGlvbi4gIFRoZXNlCi0JCQkJCWFyZSBmdW5jdGlvbnMgYXMgZGVmaW5lZCBieSB0aGUgWFBhdGggMS4wIHNwZWNpZmljYXRpb24uCi0JCQkJPC9wPjwvbGk+PGxpPjxwPgotCQkJCQk8c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz54cGF0aCAyLjA8L3N0cm9uZz48L3NwYW4+IC0gUmVwcmVzZW50cyBhbiBYUGF0aCAyLjAgZnVuY3Rpb24uCi0JCQkJCTxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPk5vdGU6IFRoYXQgY3VycmVudGx5IFhTTCBUb29saW5nIG9ubHkgc2hpcHMgd2l0aCB0ZW1wbGF0ZXMgZGVmaW5lZCBmb3IgWFBhdGggMS4wIC48L2VtPjwvc3Bhbj4KLQkJCQk8L3A+PC9saT48bGk+PHA+Ci0JCQkJCTxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPm9wZXJhdG9yPC9zdHJvbmc+PC9zcGFuPiAtIEFuIHhwYXRoIGxvZ2ljYWwgb3BlcmF0b3IgbGlrZSBBTkQsIE9SLCBldGMuCi0JCQkJPC9wPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIiBsYW5nPSJlbiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+PGEgbmFtZT0iWFBhdGhUZW1wbGF0ZU5ldyI+PC9hPkNyZWF0aW5nIE5ldyBUZW1wbGF0ZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgotCQkgICAgICBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBjcmVhdGluZyBuZXcgdGVtcGxhdGVzLgotCQkgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhQYXRoSW1wb3J0Ij48L2E+SW1wb3J0IFhQYXRoIFRlbXBsYXRlczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0JCSAgICAgIEFkZCBkb2N1bWVudGF0aW9uIGFib3V0IGltcG9ydGluZyBuZXcgdGVtcGxhdGVzLgotCQkgICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IlhQYXRoRXhwb3J0Ij48L2E+SW1wb3J0IFhQYXRoIFRlbXBsYXRlczwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0JCSAgICAgIEFkZCBkb2N1bWVudGF0aW9uIGFib3V0IGltcG9ydGluZyBuZXcgdGVtcGxhdGVzLgotCQkgICA8L3A+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNsb3V0cHV0cHJvcGVydGllcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hzbG91dHB1dHByb3BlcnRpZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM0YjYxOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNsb3V0cHV0cHJvcGVydGllcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48aGVhZD48TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPk91dHB1dCBQcm9wZXJ0aWVzPC90aXRsZT48bWV0YSBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43My4yIiBuYW1lPSJnZW5lcmF0b3IiPjxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJYU0wgVG9vbGluZyBVc2VyIERvY3VtZW50YXRpb24iPjxsaW5rIHJlbD0idXAiIGhyZWY9InhzbHByZWZlcmVuY2VzLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7NC4mbmJzcDtYU0wgVG9vbGluZyBQcmVmZXJlbmNlcyI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4c2xwcm9jZXNzb3JzLmh0bWwiIHRpdGxlPSJJbnN0YWxsZWQgUHJvY2Vzc29ycyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4cGF0aHRlbXBsYXRlcy5odG1sIiB0aXRsZT0iWFBhdGggVGVtcGxhdGVzIj48L2hlYWQ+PGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPjxwPgotCQkJVGhlIHZhcmlvdXMgeHNsIHByb2Nlc3NvcnMgc3VwcG9ydCBhIHdpZGUgdmFyaWV0eSBvZiBwcm9jZXNzb3Igc3BlY2lmaWMgdHdlYWtzLiAgSG93ZXZlciB0aGVyZQotCQkJYXJlIHNldmVyYWwgU3RhbmRhcmQgcHJvY2Vzc29yIGZlYXR1cmVzIHRoYXQgYWxsIFhTTFQgcHJvY2Vzc29ycyBzdXBwb3J0LiAgIFRoZXNlIG9wdGlvbnMgY2FuIGJlCi0JCQlzZXQgYW5kIHdpbGwgYWN0IGFzIHRoZSBkZWZhdWx0cyBmb3IgYWxsIHRyYW5zZm9ybWF0aW9ucyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IG92ZXJyaWRlbiBieQotCQkJdGhlIHN0eWxlc2hlZXQgb3IgdGhlIGxhdW5jaCBjb25maWd1cmF0aW9uLgotCQk8L3A+PGRpdiBjbGFzcz0ibWVkaWFvYmplY3QiIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvcHJlZmVyZW5jZXMveHNsX291dHB1dHByb3BlcnRpZXMucG5nIiBhbGlnbj0ibWlkZGxlIj48L2Rpdj48cD4KLQkJCUluIGFkZGl0aW9uIHRvIHRoZSBTdGFuZGFyZCBPdXRwdXQgUHJvcGVydGllcywgZWFjaCBYU0xUIHByb2Nlc3NvciBjYW4gaGF2ZSBwcm9jZXNzb3JzCi0JCQlzcGVjaWZpYyBmZWF0dXJlcy4KLQkJPC9wPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwYmRjMi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q2hhcHRlciZuYnNwOzQuJm5ic3A7WFNMIFRvb2xpbmcgUHJlZmVyZW5jZXM8L3RpdGxlPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjczLjIiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJzdGFydCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9sYXVuY2hpbmcvZGVidWdsYXVuY2hpbmcuaHRtbCIgdGl0bGU9IkxhdW5jaCBEZWJ1Z2dpbmciPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieHNscHJvY2Vzc29ycy5odG1sIiB0aXRsZT0iSW5zdGFsbGVkIFByb2Nlc3NvcnMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PHA+Ci0JCVRoZSBYU0wgUHJlZmVyZW5jZSBwYWdlcyBoYXMgc2V2ZXJhbCBzdWIgc2VjdGlvbnMuICBFYWNoIG9mIHRoZXNlIGFsbG93IGZvciBjb25maWd1cmF0aW9uCi0JCW9mIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcHJlZmVyZW5jZXMuICAgRnJvbSB0aGUgY29udHJvbGxpbmcgb2YgdGhlIGRlZmF1bHQgWFNMIHByb2Nlc3NvcgotCQl0byBiZSB1c2VkIGR1cmluZyB0cmFuc2Zvcm1hdGlvbnMuICAgVG8gZXh0ZW5kaW5nIHRoZSBjb250ZW50IGFzc2lzdCBzdXBwb3J0IG9mIHRoZSBYUGF0aAotCQlmdW5jdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBYTUwgZWRpdG9yLgotICAgPC9wPjxkaXYgY2xhc3M9Im1lZGlhb2JqZWN0IiBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLnBuZyIgYWxpZ249Im1pZGRsZSI+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgbmFtZT0iWFNMRmVhdHVyZXMiPjwvYT5GZWF0dXJlczwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PHA+Ci0gICAJCQlUaGUgWFNMIEZlYXR1cmVzIHByZWZlcmVuY2UgcGFnZSBhbGxvd3MgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9mIGZlYXR1cmVzIGZvciBhIHBhcnRpY3VsYXIKLSAgIAkJCXByb2Nlc3Nvci4gICBYU0wgVG9vbGluZyBjb21lcyB3aXRoIFhhbGFuIDIuNy4wIGJ5IGRlZmF1bHQuICBBZG9wdGVycyBjYW4gZXh0ZW5kIGFuZCBpbmNsdWRlCi0gICAJCQl0aGVpciBvd24gc3BlY2lmaWMgZmVhdHVyZXMgZm9yIHRoZWlyIG93biBwcm9jZXNvb3JzLiAgIEFuIGFkb3B0ZXIgY291bGQgZXh0ZW5kIHRoZSB0b29saW5nCi0gICAJCQl0byBzdXBwb3J0IFhTTFQgMi4wIHRyYW5zZm9ybWF0aW9ucywgYW5kIGZlYXR1cmVzIHBhcnRpY3VsYXIgdG8gdGhhdCBwYXJzZXIuCi0gICAJCTwvcD48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xmZWF0dXJlcy5wbmciIGFsaWduPSJtaWRkbGUiPjwvZGl2PjxwPgotICAgCQkJVGhlIDxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPlByb2Nlc3NvciBUeXBlPC9zdHJvbmc+PC9zcGFuPiBhbGxvd3MgeW91IHRvIHNldCBmZWF0dXJlcyBmb3IgYSBzcGVjaWZpYyBwcm9jZXNzb3IuICBJbiB0aGlzIGNhc2UKLSAgIAkJCXRoaXMgaXMgZm9yIHRoZSBwcm9jZXNzb3IgdGhhdCBpcyBiZWluZyBpbnN0YWxsZWQuICAgWFNMIFRvb2xpbmcgY29tZXMgd2l0aCBYYWxhbiAyLjcuMCwgYW5kIGl0IGlzIHRoZSBvbmx5IGF2YWlsYWJsZQotICAgCQkJcHJvY2Vzc29yIHR5cGUgYnkgZGVmYXVsdC4KLSAgIAkJPC9wPjxwPgotICAgCQkgICAgVGhlIGZlYXR1cmUgdGFibGUgbGlzdHMgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBwcm9jZXNzb3IgdGhhdCB3YXMgc2VsZWN0ZWQuICBBcyB5b3UKLSAgIAkJICAgIHNlbGVjdCBlYWNoIG9mIHRoZSBmZWF0dXJlcywgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoYXQgZmVhdHVyZSBhbmQgaXQncyBhYmlsaXRpcyBpcyBkaXNwbGF5ZWQgaW4gdGhlCi0gICAJCSAgICBkZXNjcmlwdGlvbiBib3guICAgQnkgY2xpY2tpbmcgaW4gdGhlIHZhbHVlIGNvbHVtbiwgbmV4dCB0byB0aGUgZmVhdHVyZSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlCi0gICAJCSAgICBmb3IsIHRoZSB1c2VyIGNhbiBzZXQgdGhlIGZlYXR1cmUuCi0gICAJCTwvcD48L2Rpdj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy94c2xwcm9jZXNzb3JzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcHJlZmVyZW5jZXMveHNscHJvY2Vzc29ycy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTJmMWU1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9wcmVmZXJlbmNlcy94c2xwcm9jZXNzb3JzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+SW5zdGFsbGVkIFByb2Nlc3NvcnM8L3RpdGxlPjxtZXRhIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjczLjIiIG5hbWU9ImdlbmVyYXRvciI+PGxpbmsgcmVsPSJzdGFydCIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PGxpbmsgcmVsPSJ1cCIgaHJlZj0ieHNscHJlZmVyZW5jZXMuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDs0LiZuYnNwO1hTTCBUb29saW5nIFByZWZlcmVuY2VzIj48bGluayByZWw9InByZXYiIGhyZWY9InhzbHByZWZlcmVuY2VzLmh0bWwiIHRpdGxlPSJDaGFwdGVyJm5ic3A7NC4mbmJzcDtYU0wgVG9vbGluZyBQcmVmZXJlbmNlcyI+PGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4c2xvdXRwdXRwcm9wZXJ0aWVzLmh0bWwiIHRpdGxlPSJPdXRwdXQgUHJvcGVydGllcyI+PC9oZWFkPjxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj48cD4KLSAgCQkJVGhlIGluc3RhbGxlZCBwcm9jZXNzb3JzIHBhZ2UgbGV0cyB5b3UgcGljayB3aGljaCBvZiB0aGUgaW5zdGFsbGVkIFhTTFQgcHJvY2Vzc29ycyB3aWxsIGJlIHVzZWQKLSAgCQkJYnkgZGVmYXVsdC4gICBUaGUgZGVmYXVsdCBpcyB0aGUgU3lzdGVtIERlZmF1bHQgUHJvY2Vzb29yLCBidXQgeW91IGNhbiBzZWxlY3QgYW55IG9mIHRoZQotICAJCQlhdmFpbGFibGUgcHJvY2Vzc29ycyB0byBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHByb2Nlc3Nvci4gICAgCQotICAgICAgCTwvcD48ZGl2IGNsYXNzPSJtZWRpYW9iamVjdCIgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy9wcmVmZXJlbmNlcy94c2xfSW5zdGFsbGVkUHJvY2Vzc29ycy5wbmciIGFsaWduPSJtaWRkbGUiPjwvZGl2PjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9tYWludG9waWMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9yZWZlcmVuY2UvbWFpbnRvcGljLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NzYwNzguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9tYWludG9waWMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPk1haW4gVG9waWM8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keT4KLTxoMT5NYWluIFRvcGljPC9oMT4KLVBsZWFzZSBlbnRlciB5b3VyIHRleHQgaGVyZS4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNjFjNTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9zdWJ0b3BpYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+U3ViIFRvcGljPC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHk+Ci08aDE+U3ViIFRvcGljPC9oMT4KLVBsZWFzZSBlbnRlciB5b3VyIHRleHQgaGVyZS4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljMi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3JlZmVyZW5jZS9zdWJ0b3BpYzIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZiY2JmOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL2h0bWwvcmVmZXJlbmNlL3N1YnRvcGljMi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+U3ViIFRvcGljIDI8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keT4KLTxoMT5TdWIgVG9waWMgMjwvaDE+Ci1QbGVhc2UgZW50ZXIgeW91ciB0ZXh0IGhlcmUuCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9odG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjZlYmIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvaHRtbC9zYW1wbGVzL3NhbXBsZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxoZWFkPjxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij48dGl0bGU+Q2hhcHRlciZuYnNwOzUuJm5ic3A7WFNMIFRvb2xpbmcgU2FtcGxlczwvdGl0bGU+PG1ldGEgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzMuMiIgbmFtZT0iZ2VuZXJhdG9yIj48bGluayByZWw9InN0YXJ0IiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xpbmcgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iWFNMIFRvb2xpbmcgVXNlciBEb2N1bWVudGF0aW9uIj48bGluayByZWw9InByZXYiIGhyZWY9Ii4uL3ByZWZlcmVuY2VzL3hwYXRodGVtcGxhdGVzLmh0bWwiIHRpdGxlPSJYUGF0aCBUZW1wbGF0ZXMiPjxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iLi4vbGVnYWwuaHRtbCIgdGl0bGU9IkNoYXB0ZXImbmJzcDs2LiZuYnNwO05vdGljZXMiPjwvaGVhZD48Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+PHA+VGhpcyBzZWN0aW9uIGNvbnRhaW5zIHNldmVyYWwgc2FtcGxlcyBhbmQgcmVmZXJlbmNlcyB0byBzYW1wbGUgcHJvamVjdHMuPC9wPjxkaXYgY2xhc3M9InNlY3Rpb24iIGxhbmc9ImVuIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIG5hbWU9IkVjbGlwc2VIZWxwIj48L2E+RWNsaXBzZSBIZWxwPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48cD48L3A+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkRvY2Jvb2tFY2xpcHNlSGVscCI+PC9hPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERvY2Jvb2sgYW5kIFhTTCBUb29saW5nPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLQkJCQlUaGlzIHR1dG9yaWFsIGFzc3VtZXMgdGhhdCB5b3UgaGF2ZSBrbm93bGVkZ2Ugb2YgRG9jYm9vaywgQU5ULCBhbmQgdGhlCi0JCQkJYWJpbGl0eSB0byBzZXR1cCBBTlQgYnVpbGQgc2NyaXB0cy4KLQkJCTwvcD48cD4KLQkJCQlUbyBEbyB3cml0ZSB1cCB0aGUgcmVzdCBvZiB0aGUgdHV0b3JpYWwuCi0JCQk8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiIgbGFuZz0iZW4iPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPjxhIG5hbWU9IkRJVEFFY2xpcHNlSGVscCI+PC9hPkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERJVEEgYW5kIFhTTCBUb29saW5nPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj48cD4KLQkJCQlUaGlzIHR1dG9yaWFsIGFzc3VtZXMgdGhhdCB5b3UgaGF2ZSBrbm93bGVkZ2Ugb2YgRElUQSwgQU5ULCBhbmQgdGhlCi0JCQkJYWJpbGl0eSB0byBzZXR1cCBBTlQgYnVpbGQgc2NyaXB0cy4KLQkJCTwvcD48cD4KLQkJCQlUbyBEbyB3cml0ZSB1cCB0aGUgcmVzdCBvZiB0aGUgdHV0b3JpYWwuCi0JCQk8L3A+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3BsdWdpbi5wcm9wZXJ0aWVzIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ExNWY4Mi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jUHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNsLmRvYwotdmVuZG9yTmFtZSA9IEVjbGlwc2Uub3JnCi1wbHVnaW5OYW1lID0gWFNMIFVzZXIgRG9jdW1lbnRhdGlvbiAoSW5jdWJhdGluZykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3BsdWdpbi54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNWE2MWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLQkJPHRvYyBwcmltYXJ5PSJ0cnVlIiBmaWxlPSJ0b2MueG1sIj48L3RvYz4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvdGVzdC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuZG9jL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvdGVzdC54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLmRvYy90b2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzk5NDg2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5kb2MvdG9jLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTx0b2MgdG9waWM9Imh0bWwvaW5kZXguaHRtbCIgbGFiZWw9IlhTTCBUb29saW5nIFVzZXIgRG9jdW1lbnRhdGlvbiI+PHRvcGljIGhyZWY9Imh0bWwvZ2VuZXJhbC9nZW5lcmFsLmh0bWwiIGxhYmVsPSJHZW5lcmFsIj48dG9waWMgaHJlZj0iaHRtbC9nZW5lcmFsL2dlbmVyYWwuaHRtbCNYSW5jbHVkZSIgbGFiZWw9IlhJbmNsdWRlIj48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvZWRpdG9yL3hzbGVkaXRvci5odG1sIiBsYWJlbD0iWFNMIEVkaXRpbmciPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3IuaHRtbCNWYWxpZGF0aW9uIiBsYWJlbD0iVmFsaWRhdGlvbiI+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9lZGl0b3IveHNsZWRpdG9yX2NvbnRlbnRhc3Npc3QuaHRtbCIgbGFiZWw9IkNvbnRlbnQgQXNzaXN0Ij48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwiIGxhYmVsPSJUZW1wbGF0ZXMiPjx0b3BpYyBocmVmPSJodG1sL2VkaXRvci94c2xlZGl0b3JfdGVtcGxhdGVzLmh0bWwjTjEwMEFGIiBsYWJlbD0iWFBhdGggVGVtcGxhdGVzIj48L3RvcGljPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvZWRpdG9yL3hzbGVkaXRvcl9kZWJ1Z2dpbmcuaHRtbCIgbGFiZWw9IlhTTCBEZWJ1Z2dpbmciPjwvdG9waWM+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9sYXVuY2hpbmcvbGF1bmNoaW5nLmh0bWwiIGxhYmVsPSJYU0wgTGF1bmNoaW5nIGFuZCBEZWJ1Z2dpbmciPjx0b3BpYyBocmVmPSJodG1sL2xhdW5jaGluZy9sYXVuY2hpbmcuaHRtbCNYU0xMYXVuY2giIGxhYmVsPSJYU0wgTGF1bmNoaW5nIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL2xhdW5jaGluZy9kZWJ1Z2xhdW5jaGluZy5odG1sIiBsYWJlbD0iTGF1bmNoIERlYnVnZ2luZyI+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hzbHByZWZlcmVuY2VzLmh0bWwiIGxhYmVsPSJYU0wgVG9vbGluZyBQcmVmZXJlbmNlcyI+PHRvcGljIGhyZWY9Imh0bWwvcHJlZmVyZW5jZXMveHNscHJlZmVyZW5jZXMuaHRtbCNYU0xGZWF0dXJlcyIgbGFiZWw9IkZlYXR1cmVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hzbHByb2Nlc3NvcnMuaHRtbCIgbGFiZWw9Ikluc3RhbGxlZCBQcm9jZXNzb3JzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hzbG91dHB1dHByb3BlcnRpZXMuaHRtbCIgbGFiZWw9Ik91dHB1dCBQcm9wZXJ0aWVzIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hwYXRodGVtcGxhdGVzLmh0bWwiIGxhYmVsPSJYUGF0aCBUZW1wbGF0ZXMiPjx0b3BpYyBocmVmPSJodG1sL3ByZWZlcmVuY2VzL3hwYXRodGVtcGxhdGVzLmh0bWwjWFBhdGhUZW1wbGF0ZU5ldyIgbGFiZWw9IkNyZWF0aW5nIE5ldyBUZW1wbGF0ZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvcHJlZmVyZW5jZXMveHBhdGh0ZW1wbGF0ZXMuaHRtbCNYUGF0aEltcG9ydCIgbGFiZWw9IkltcG9ydCBYUGF0aCBUZW1wbGF0ZXMiPjwvdG9waWM+PHRvcGljIGhyZWY9Imh0bWwvcHJlZmVyZW5jZXMveHBhdGh0ZW1wbGF0ZXMuaHRtbCNYUGF0aEV4cG9ydCIgbGFiZWw9IkltcG9ydCBYUGF0aCBUZW1wbGF0ZXMiPjwvdG9waWM+PC90b3BpYz48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sIiBsYWJlbD0iWFNMIFRvb2xpbmcgU2FtcGxlcyI+PHRvcGljIGhyZWY9Imh0bWwvc2FtcGxlcy9zYW1wbGVzLmh0bWwjRWNsaXBzZUhlbHAiIGxhYmVsPSJFY2xpcHNlIEhlbHAiPjx0b3BpYyBocmVmPSJodG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sI0RvY2Jvb2tFY2xpcHNlSGVscCIgbGFiZWw9IkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERvY2Jvb2sgYW5kIFhTTCBUb29saW5nIj48L3RvcGljPjx0b3BpYyBocmVmPSJodG1sL3NhbXBsZXMvc2FtcGxlcy5odG1sI0RJVEFFY2xpcHNlSGVscCIgbGFiZWw9IkNyZWF0aW5nIEVjbGlwc2UgSGVscCB3aXRoIERJVEEgYW5kIFhTTCBUb29saW5nIj48L3RvcGljPjwvdG9waWM+PC90b3BpYz48dG9waWMgaHJlZj0iaHRtbC9sZWdhbC5odG1sIiBsYWJlbD0iTm90aWNlcyI+PC90b3BpYz48L3RvYz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vLmNsYXNzcGF0aCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ZTMxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8ucHJvamVjdCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkZjI5ZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTM2ZWQzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNTYXQgSnVuIDIxIDE4OjIyOjMwIEdNVC0wNTowMCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzkxNTNiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24ucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jU2F0IEF1ZyAwMiAwODo0NTozOSBHTVQtMDU6MDAgMjAwOAotREVMRUdBVEVTX1BSRUZFUkVOQ0U9ZGVsZWdhdGVWYWxpZGF0b3JMaXN0Ci1VU0VSX0JVSUxEX1BSRUZFUkVOQ0U9ZW5hYmxlZEJ1aWxkVmFsaWRhdG9yTGlzdAotVVNFUl9NQU5VQUxfUFJFRkVSRU5DRT1lbmFibGVkTWFudWFsVmFsaWRhdG9yTGlzdAotVVNFUl9QUkVGRVJFTkNFPW92ZXJyaWRlR2xvYmFsUHJlZmVyZW5jZXN0cnVlZGlzYWJsZUFsbFZhbGlkYXRpb25mYWxzZXZlcnNpb24xLjIuMC52MjAwODA2MDUxNDAyCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3ZlcnJpZGU9dHJ1ZQotc3VzcGVuZD1mYWxzZQotdmFscy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuSlNQQmF0Y2hWYWxpZGF0b3IvZ2xvYmFsPUZGMDEKLXZhbHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLkpTUENvbnRlbnRWYWxpZGF0b3IvZ2xvYmFsPUZGMDEKLXZhbHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmR0ZERURFZhbGlkYXRvci9nbG9iYWw9RkYwMQotdmFscy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS5IVE1MVmFsaWRhdG9yL2dsb2JhbD1GRjAxCi12YWxzL29yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24ud3NkbC9nbG9iYWw9RkYwMjE1OG9yZy5lY2xpcHNlLndzdC53c2RsLnZhbGlkYXRpb24uaW50ZXJuYWwuZWNsaXBzZS5WYWxpZGF0b3IKLXZhbHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbC9nbG9iYWw9VFQwMwotdmFscy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUueHNkL2dsb2JhbD1GRjAyMTYyb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IKLXZhbHMvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnhzbC9nbG9iYWw9VFQwMgotdmYudmVyc2lvbj0zCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YmExNmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb247IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuaGVscAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2Fib3V0Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5N2U5Yi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnhtbCxcCi0gICAgICAgICAgICAgICB0b2MueG1sLFwKLSAgICAgICAgICAgICAgIGRvYy9odG1sLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGJpbi8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9idWlsZC54bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDY5YzFjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICBKdWwgMjEsIDIwMDggNjo0NjowMiBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgU0RLIERvY3VtZW50YXRpb24gICAgCi0gICAgIEJ1aWxkcyBTREsgVE9DIERvY3VtZW50YXRpb24gdXNpbmcgSkVMRG9jbGV0LgotICAgICAgICAgICAgICAgICAgIAotICAgICBkY2FydmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHByb2plY3QgbmFtZT0iU0RLIERvY3VtZW50YXRpb24iIGRlZmF1bHQ9ImRlZmF1bHQiPgotICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIEJ1aWxkcyBTREsgVE9DIERvY3VtZW50YXRpb24gdXNpbmcgSkVMRG9jbGV0LgotICAgIDwvZGVzY3JpcHRpb24+Ci0JCi0JPHByb3BlcnR5IG5hbWU9IndvcmtzcGFjZSIgbG9jYXRpb249Ii4iLz4KLQk8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlbG9jIiBsb2NhdGlvbj0iLi4iLz4KLQotICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgICAgICAgIHRhcmdldDogZGVmYXVsdCAgICAgICAgICAgICAgCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJkZWZhdWx0IiBkZXNjcmlwdGlvbj0iQnVpbGRzIFNESyBUT0MgRG9jdW1lbnRhdGlvbiB1c2luZyBKRUxEb2NsZXQuIj4KLQotICAJICA8amF2YWRvYyBkZXN0ZGlyPSJkb2MiIHBhY2thZ2U9InRydWUiIGRvY2xldHBhdGg9IiR7d29ya3NwYWNlfS9saWIvamVsZG9jbGV0LmphciI+Ci0gIAkgIAkgPGZpbGVzZXQgZGlyPSIke3dvcmtzcGFjZWxvY30iPgotCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL2NvcmUvKi5qYXZhIi8+Ci0JICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUvc3JjL29yZy9lY2xpcHNlL3dzdC94c2wvY29yZS9yZXNvbHZlci8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC9kZWJ1Z2dlci8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Zy9zcmMtaW52b2tlci9vcmcvZWNsaXBzZS93c3QveHNsL2ludm9rZXIvKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcvc3JjLWludm9rZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC9pbnZva2VyL2NvbmZpZy8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi9zcmMtZGVidWdnZXIvb3JnL2VjbGlwc2Uvd3N0L3hzbC94YWxhbi9kZWJ1Z2dlci8qLmphdmEiLz4KLSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3hwYXRoL2NvcmUvKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC94cGF0aC9jb3JlL3V0aWwvKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjLXhwYXRoL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvKi5qYXZhIi8+Ci0gIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvc3JjLXhwYXRoL29yZy9lY2xpcHNlL3dzdC94bWwveHBhdGgvdWkvdmlld3MvKi5qYXZhIi8+Ci0gIAkgIAkgPC9maWxlc2V0PgotICAJICAgICA8ZG9jbGV0IG5hbWU9ImNvbS5qZWxkb2NsZXQuSkVMRG9jbGV0Ii8+Ci0gIAkgIDwvamF2YWRvYz4KLSAgICAJCi0gICAgIDx4c2x0IGJhc2VkaXI9Ii4iIHN0eWxlPSJkb2MvamVsdG9odG1sLnhzbCIgaW49ImRvYy9qZWwueG1sIiBvdXQ9ImRvYy9odG1sL2RlbGV0ZW1lLmh0bWwiPgotICAJCTxmYWN0b3J5IG5hbWU9Im9yZy5hcGFjaGUueGFsYW4ucHJvY2Vzc29yLlRyYW5zZm9ybWVyRmFjdG9yeUltcGwiPgotICAJCQk8YXR0cmlidXRlIG5hbWU9Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbi9mZWF0dXJlcy9vcHRpbWl6ZSIgdmFsdWU9InRydWUiLz4KLSAgCQkJCi0gIAkJPC9mYWN0b3J5PgotICAgICA8L3hzbHQ+Ci0gICAgCQotICAgIAkKLSAgICAgPHhzbHQgc3R5bGU9ImRvYy9qZWx0b3RvYy54c2wiIGluPSJkb2MvamVsLnhtbCIgb3V0PSJ0b2MueG1sIiBkZXN0ZGlyPSIuIj4KLSAgCQk8ZmFjdG9yeSBuYW1lPSJvcmcuYXBhY2hlLnhhbGFuLnByb2Nlc3Nvci5UcmFuc2Zvcm1lckZhY3RvcnlJbXBsIj4KLSAgCQkJPGF0dHJpYnV0ZSBuYW1lPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGFsYW4vZmVhdHVyZXMvb3B0aW1pemUiIHZhbHVlPSJ0cnVlIi8+Ci0gIAkJPC9mYWN0b3J5PgotICAgICAJPHBhcmFtIG5hbWU9InNka25hbWUiIGV4cHJlc3Npb249IlhTTCBUb29scyBTREsgRG9jdW1lbnRhdGlvbiIvPgotICAgICA8L3hzbHQ+Ci0gICAgCQotICAgIDwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iRG9jQ2hlY2siPgotCSAgCSAgPGphdmFkb2MgZGVzdGRpcj0iZG9jL2RvY2NoZWNrIiBwYWNrYWdlPSJ0cnVlIiBkb2NsZXRwYXRoPSIke3dvcmtzcGFjZX0vbGliL2RvY2NoZWNrLmphciI+Ci0JICAJICAJIDxmaWxlc2V0IGRpcj0iJHt3b3Jrc3BhY2Vsb2N9Ij4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcvKiovKi5qYXZhIi8+Ci0JICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvKiovKi5qYXZhIi8+Ci0JICAJICAJIAk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS53c3QueHNsLnNheG9uLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aS8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4vc3JjLWRlYnVnZ2VyLyoqLyouamF2YSIvPgotCSAgCSAgCSAJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlL3NyYy8qKi8qLmphdmEiLz4KLQkgIAkgIAkgCTxpbmNsdWRlIG5hbWU9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkvKiovKi5qYXZhIi8+Ci0JICAJICAJIDwvZmlsZXNldD4KLQkgIAkgICAgIDxkb2NsZXQgbmFtZT0iY29tLnN1bi50b29scy5kb2NsZXRzLmRvY2NoZWNrLkRvY0NoZWNrIj4KLQkgIAkgICAgIAk8cGFyYW0gbmFtZT0iLWV4ZWNEZXB0aCIgdmFsdWU9IjIiLz4KLQkgIAkgIAkgPC9kb2NsZXQ+Ci0JICAJICA8L2phdmFkb2M+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJFeHRlbnNpb25Qb2ludERvYyI+Ci0JCTxwZGUuY29udmVydFNjaGVtYVRvSFRNTCBtYW5pZmVzdD0iLi4vb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcvcGx1Z2luLnhtbCIKLQkJCSAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uPSIke3dvcmtzcGFjZX0vZG9jL2h0bWwvZXh0ZW5zaW9uX3BvaW50IgotCQkvPgotCTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ODcyMmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMjk5ICswLDAgQEAKLWRvY2NoZWNrCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhTTFNvdXJjZVBhcnNlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuT3V0cHV0UHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTVZpZXdlckZpbHRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYXJndW1lbnRfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhQYXRoVGVtcGxhdGVDb21wbGV0aW9uUHJvY2Vzc29yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJGb3JYU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuWFNMQ29yZVBsdWdpbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlQbHVnaW4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLkluc3RhbGxlZFByb2Nlc3NvcnNCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlhTTFRTb3VyY2VMb29rdXBQYXJ0aWNpcGFudC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5LkRlYnVnZ2VyUmVnaXN0cnkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuWFNMQXR0cmlidXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dC5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlBhcmFtZXRlclZpZXdlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuSW5zdGFsbFN0YW5kaW4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnZhcmlhYmxlX3JlZmVyZW5jZV9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLlhTTE1vZGVsTG9hZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dpemFyZEFjdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubW9kZWwuWFNMTW9kZWxQcmVzZW50YXRpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuWFNMVmVyc2lvbkhhbmRsZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5EZWJ1Z2dlckRlc2NyaXB0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5YU0xUU291cmNlTG9va3VwRGlyZWN0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWFNMRG9jdW1lbnRMb2FkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5JWFNMUGFydGl0aW9ucy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BZGRQYXJhbWV0ZXJBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuUmVtb3ZlQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuU3RydWN0dXJlZERvY3VtZW50VXRpbC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5mb3JtYXR0ZXIuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMuZm9ybWF0dGVyLkZPRm9ybWF0dGVyVGFiLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LlhTTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVdpemFyZFBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLndpemFyZHMuTmV3WFNMRmlsZVRlbXBsYXRlc1dpemFyZFBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnJlbGF0aXZlX2xvY2F0aW9uX3BhdGhfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLmZvcm1hdHRlci5YU0xGT0NvbWJvQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyRm9yWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuSVByb2Nlc3NvclR5cGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5YU0xNYWluVGFiLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnBhcnNlci5yZWdpb25zLlhQYXRoU2VwYXJhdG9yUmVnaW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5JbnZva2VyUmVnaXN0cnlSZWFkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlR5cGVkVmFsdWUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5Sb290U3R5bGVGcmFtZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YUGF0aFRlbXBsYXRlUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmVkaXRvci5YU0xIeXBlcmxpbmtEZXRlY3Rvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC51dGlsLlhTTFBsdWdpbkltYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIucGF0aF9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuYWN0aW9ucy5OZXdYTUxGaWxlV2l6YXJkRGVsZWdhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5PdXRwdXRQcm9wZXJ0eVByZWZlcmVuY2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5BYnN0cmFjdFhTTFByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5yZWdpb25zLlhTTFBhcnNlclJlZ2lvbkZhY3RvcnkueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmludGVybmFsLnVpLnZpZXdzLkpGYWNlTm9kZUxhYmVsUHJvdmlkZXJYUGF0aC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWFNMVGVtcGxhdGVQcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTERlYnVnRWxlbWVudC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlhTTFRMYXVuY2hDb25maWd1cmF0aW9uRGVsZWdhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci51bmlvbl9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLmFjdGlvbnMuTmV3WFNERmlsZVdpemFyZERlbGVnYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuUHJvY2Vzc29yVHlwZVJlZ2lzdHJ5UmVhZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5lcXVhbGl0eV9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5hbnQuWEluY2x1ZGVUYXNrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5tb2RlbC5YU0xCcmVha3BvaW50QWRhcHRlckZhY3RvcnkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLlByb2Nlc3NvckRldGFpbHNEaWFsb2cueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmZpbHRlcl9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuWFNMVUlDb25zdGFudHMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLmludGVybmFsLnV0aWwuWFNMRGVidWdQbHVnaW5JbWFnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQ3VzdG9tVGVtcGxhdGVQcm9wb3NhbC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5LlByb2Nlc3NvclJlZ2lzdHJ5UmVhZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xUVGFiR3JvdXAueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5Qcm9jZXNzb3JSZWdpc3RyeS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BZGRXb3Jrc3BhY2VGaWxlQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5GZWF0dXJlc0Jsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTEVsZW1lbnQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldE1vZGVsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLkltcG9ydC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuTWFpblByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5zcGVjaWFsX3N0ZXBfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5hYmJyX2F4aXNfc3BlY2lmaWVyX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuWFNMTGF1bmNoU2hvcnRjdXQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnByZWZlcmVuY2VzLkFkZFByb2Nlc3NvckRpYWxvZy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIuWFBhdGhQYXJzZXJMZXhlci54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguaW50ZXJuYWwudWkudmlld3MuWFBhdGhDb21wdXRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuZnVuY3Rpb25fY2FsbF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLlhQYXRoVUlNZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5QcmludFRyYWNlTGlzdGVuZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5VdGlscy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC5tb2RlbC5JbmNsdWRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5hYnNvbHV0ZV9sb2NhdGlvbl9wYXRoX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLk1heEVycm9yc0V4Y2VlZGVkRXhjZXB0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5pbnRlcm5hbC51aS52aWV3cy5YUGF0aFZpZXcueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVUlNZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5vdXRwdXQuT3V0cHV0RmlsZUJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuUHJvY2Vzc29ySW52b2tlckRlc2NyaXB0b3IueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnV0aWwuWFBhdGhQbHVnaW5JbWFnZUhlbHBlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTERlYnVnVGFyZ2V0LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlZhcmlhYmxlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5BYnN0cmFjdFRhYmxlQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuU3R5bGVzaGVldC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuUHJvY2Vzc29yTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlBpcGVsaW5lRGVmaW5pdGlvbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLklQYXJhbWV0ZXJzQ2hhbmdlZExpc3RlbmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm91dHB1dC5PdXRwdXRUYWIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLkNyZWF0aW9uRXhjZXB0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5Qcm9jZXNzb3JEZXNjcmlwdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLk11bHRpcGxlSW5wdXREaWFsb2cuRmllbGRTdW1tYXJ5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcucmVnaXN0cnkuRGVidWdnZXJSZWdpc3RyeVJlYWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuUHJvY2Vzc29yc1ByZWZlcmVuY2VQYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xEZWJ1Z1VJUGx1Z2luLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5pbnRlcm5hbC51aS52aWV3cy5KRmFjZU5vZGVDb250ZW50UHJvdmlkZXJYUGF0aC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5EZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1dTRExGaWxlV2l6YXJkRGVsZWdhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnV0aWwuWFBhdGhQbHVnaW5JbWFnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmxpdGVyYWxfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5UcmFjZUxpc3RlbmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld1hTTEZpbGVXaXphcmREZWxlZ2F0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BYnN0cmFjdFN0eWxlc2hlZXRBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5hY3Rpb25zLk5ld0RUREZpbGVXaXphcmREZWxlZ2F0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuZG91YmxlY2xpY2suWFNMRG91YmxlQ2xpY2tTdHJhdGVneS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIucmVsYXRpb25hbF9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTFZhbGlkYXRpb25NZXNzYWdlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YUGF0aFByZWZlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yMi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLklQcm9jZXNzb3JJbnN0YWxsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uTWFpblRhYk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlhTTE5vZGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5TdHlsZXNoZWV0TGFiZWxQcm92aWRlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hQcm9wZXJ0aWVzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnV0aWwuRGVidWcueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucHJvY2Vzc29yLkphckxhYmVsUHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5QYXJhbWV0ZXJzQ29udGVudFByb3ZpZGVyLnhtbAotamVsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlBsdWdpblByb2Nlc3Nvckphci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIucHJpbWFyeV9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlhTTFByb3BlcnR5VGVzdGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5SZXNvdXJjZVNlbGVjdGlvbkJsb2NrLldpZGdldExpc3RlbmVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5udW1iZXJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTE1hcmt1cFZhbGlkYXRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmJyZWFrcG9pbnQuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnZhbGlkYXRpb24uRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhhbGFuWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLmZvcm1hdHRlci5SZW5kZXJlclRhYk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xDb25zb2xlTGluZVRyYWNrZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5JUHJvY2Vzc29ySW52b2tlci54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5YU0xMYXVuY2hDb25maWd1cmF0aW9uVGFiLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLmZvcm1hdHRlci5SZW5kZXJlckNvbmZpZ3VyYXRpb25CbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5Lk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLklucHV0RmlsZUJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5JWFNMRGVidWdnZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5JRmVhdHVyZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkubW9kZWwuWFNMTGluZUJyZWFrcG9pbnRBZGFwdGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlByb2Nlc3NvclByZWZlcmVuY2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuUHJlZmVyZW5jZUluaXRpYWxpemVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5EZWJ1Z1J1bm5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuaV9yZWxhdGl2ZV9sb2NhdGlvbl9wYXRoX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC51dGlsLkZpbGVVdGlsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5YU0xQcm9jZXNzb3JUYWIueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhQYXRoUGFyc2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5Qcm9jZXNzb3JMaWJyYXJ5QmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuUGFyYW1ldGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnJlc29sdmVyLlVSSVJlc29sdmVyQmxvY2syLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5TdHlsZUZyYW1lLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMTGluZUJyZWFrcG9pbnQueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLmludGVybmFsLnRlbXBsYXRlcy5UZW1wbGF0ZUNvbnRleHRUeXBlSWRzWFBhdGgueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMucmVzb2x2ZXIuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5BYnN0cmFjdFJlZ2lzdHJ5UmVhZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuTGF1bmNoaW5nUGx1Z2luLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVmVyc2lvblRlbXBsYXRlVmFyaWFibGVSZXNvbHZlclhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIueHBhdGhfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5GZWF0dXJlc0Jsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLkNvbmZpZ3VyYXRpb25FeGNlcHRpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuUmVtb3ZlUGFyYW1ldGVyQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLk11bHRpcGxlSW5wdXREaWFsb2cueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwud2l6YXJkcy5OZXdYU0xGaWxlV2l6YXJkLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuSVhTTERlYnVnVGFyZ2V0LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLm1haW4uVHJhbnNmb3Jtc0Jsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuT3V0cHV0UHJvcGVydHkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5YUGF0aFJlZ2lvbkNvbnRleHQueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQ29udHJvbEFjY2Vzc2libGVMaXN0ZW5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLlhTTExhdW5jaENvbmZpZ3VyYXRpb25Db25zdGFudHMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5NZXNzYWdlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuT3V0cHV0QmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoVHJhbnNmb3JtLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5EZWJ1Z0NvbnN0YW50cy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5hYmJyX3N0ZXBfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuY29uZmlnLkxhdW5jaEF0dHJpYnV0ZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIubG9jYXRpb25fcGF0aF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5TdHlsZXNoZWV0Vmlld2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5WYXJpYWJsZS54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5yZXNvbHZlci5Xb3JraW5nRGlyZWN0b3J5QmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwubW9kZWwuQ2FsbFRlbXBsYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlJlc29sdmVyRXh0ZW5zaW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YU0wueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMubWFpbi5QYXJhbWV0ZXJzQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLlByZWZlcmVuY2VVdGlsLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuSVhTTENvbnN0YW50cy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLklEZWJ1Z2dlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlBhcmFtZXRlcnNMYWJlbFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5tdWx0X2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5sYXVuY2hpbmcuRmVhdHVyZVByZWZlcmVuY2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuSU91dHB1dFByb3BlcnR5LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMVGhyZWFkLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNMVmFsaWRhdGlvblJlcG9ydC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hGZWF0dXJlcy54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkucHJlZmVyZW5jZXMuRmVhdHVyZXNQcmVmZXJlbmNlUGFnZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLklTdHlsZXNoZWV0RW50cmllc0NoYW5nZWRMaXN0ZW5lci54bWwKLW9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NTm9kZUxhYmVsUHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5Qcm9jZXNzb3JUeXBlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTTEVycm9yTGlzdGVuZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwuYW50Lk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnJlc29sdmVyLlVSSVJlc29sdmVyQmxvY2sueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWJzdHJhY3RQYXJhbWV0ZXJBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5jb25maWcuTGF1bmNoSGVscGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5lZGl0b3IuU291cmNlRmlsZUh5cGVybGluay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLm1vZGVsLlhTTFZhcmlhYmxlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcubW9kZWwuWFNMVmFsdWUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5tb2RlbC5YU0xTdGFja0ZyYW1lLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlRlbXBsYXRlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5wcmVmZXJlbmNlcy5CYXNlUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLnByZWRpY2F0ZV9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwubGF1bmNoaW5nLnJlZ2lzdHJ5LlByb2Nlc3NvclR5cGVSZWdpc3RyeS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54aW5jbHVkZS5YSW5jbHVkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTVRyZWVDb250ZW50UHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLnRhYnMub3V0cHV0Lk91dHB1dFByb3BlcnRpZXNCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIudW5hcnlfZXhwcl9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5yZWdpc3RyeS5JbnZva2VyUmVnaXN0cnkueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuTW92ZVVwQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UcmFuc2Zvcm1EZWZpbml0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC50ZW1wbGF0ZXMuVGVtcGxhdGVDb250ZXh0VHlwZVhTTC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5PcGVuRGlhbG9nQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5hZGRpdGl2ZV9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuc3RlcF9yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwueHBhdGgucGFyc2VyLnhwYXRoUGFyc2VyLmFyZ19saXN0X3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuZGVidWcuaW50ZXJuYWwudXRpbC5YU0xQbHVnaW5JbWFnZUhlbHBlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLnVpLmludGVybmFsLnBlcnNwZWN0aXZlLlhNTFBlcnNwZWN0aXZlRmFjdG9yeS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wudWkuaW50ZXJuYWwuaGFuZGxlcnMuT3BlbkRlY2xhcmF0aW9uSGFuZGxlci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wubGF1bmNoaW5nLmNvbmZpZy5MYXVuY2hQaXBlbGluZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5BZGRFeHRlcm5hbEZpbGVBY3Rpb24ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5Qcm9jZXNzb3JKYXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5YU0xUUnVudGltZS54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5tYWluLlN0eWxlc2hlZXRDb250ZW50UHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWFNMLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aExleGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLm1vZGVsLlN0eWxlc2hlZXRCdWlsZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5SZXNvdXJjZVNlbGVjdGlvbkJsb2NrLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5KYXJDb250ZW50UHJvdmlkZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkFic3RyYWN0RGVidWdnZXIueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmFjdGlvbnMuQWN0aW9uTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5YU0xUU291cmNlUGF0aENvbXB1dGVyRGVsZWdhdGUueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLmJyZWFrcG9pbnQuWFNMQnJlYWtwb2ludFByb3ZpZGVyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS5hY3Rpb25zLk1vdmVEb3duQWN0aW9uLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnRlcm5hbC5kZWJ1Zy51aS50YWJzLnByb2Nlc3Nvci5Qcm9jZXNzb3JCbG9jay54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkudGFicy5wcm9jZXNzb3IuTWVzc2FnZXMueG1sCi1vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmludGVybmFsLnVpLnZpZXdzLk1lc3NhZ2VzLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5wcmVkaWNhdGVfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5pbnRlcm5hbC51aS52aWV3cy5YUGF0aFZpZXdBY3Rpb25zLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5WYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmxhdW5jaGluZy5JUHJvY2Vzc29ySmFyLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLmludGVybmFsLnhwYXRoLnBhcnNlci54cGF0aFBhcnNlci5vcl9leHByX3JldHVybi54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuaW50ZXJuYWwuZGVidWcudWkuYWN0aW9ucy5NdWx0aXBsZUlucHV0RGlhbG9nLlZhbGlkYXRvci54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYXhpc19yZXR1cm4ueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmRlYnVnLnVpLlhTTERlYnVnVUlDb25zdGFudHMueG1sCi1vcmcuZWNsaXBzZS53c3QueHNsLmludGVybmFsLmxhdW5jaGluZy5GZWF0dXJlLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5CcmVha1BvaW50LnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmcuUHJvY2Vzc29ySW5zdGFsbC54bWwKLW9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5pbnRlcm5hbC54cGF0aC5wYXJzZXIueHBhdGhQYXJzZXIuYW5kX2V4cHJfcmV0dXJuLnhtbAotb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLk1haW4ueG1sCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRiODFlZC4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLlhQYXRoQ29yZVBsdWdpbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmU8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoQ29yZVBsdWdpbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoQ29yZVBsdWdpbjwvc3Ryb25nPgotZXh0ZW5kcyBQbHVnaW48L3ByZT5UaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGU8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUExVR0lOX0lEIj5QTFVHSU5fSUQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoQ29yZVBsdWdpbiI+WFBhdGhDb3JlUGx1Z2luPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0Ij5zdGFydDwvYT4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0b3AiPnN0b3A8L2E+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX1BMVUdJTl9JRCI+UExVR0lOX0lEPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlBMVUdJTl9JRDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhDb3JlUGx1Z2luIj5YUGF0aENvcmVQbHVnaW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YUGF0aENvcmVQbHVnaW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VGhlIGNvbnN0cnVjdG9yPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luIDxzdHJvbmc+Z2V0RGVmYXVsdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2U8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS5YUGF0aENvcmVQbHVnaW48L2NvZGU+IC0gdGhlIHNoYXJlZCBpbnN0YW5jZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFydCI+c3RhcnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0YXJ0PC9zdHJvbmc+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0b3AiPnN0b3A8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0b3A8L3N0cm9uZz4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsLlhTTFRYUGF0aEhlbHBlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGM2MmJiLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGguY29yZS51dGlsPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhTTFRYUGF0aEhlbHBlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFRYUGF0aEhlbHBlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFRYUGF0aEhlbHBlciI+WFNMVFhQYXRoSGVscGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcGlsZSI+Y29tcGlsZTwvYT4oamF2YS5sYW5nLlN0cmluZyBleHByZXNzaW9uKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXZhbCI+ZXZhbDwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFVzaW5nIHRoaXMgbWV0aG9kLCBYUGF0aCBuYW1lc3BhY2UKLSBwcmVmaXhlcyB3aWxsIGJlIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ldmFsIj5ldmFsPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLSBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXZhbCI+ZXZhbDwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy5hcGFjaGUueG1sLnV0aWxzLlByZWZpeFJlc29sdmVyIHByZWZpeFJlc29sdmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLSBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgb3JnLmFwYWNoZS54cGF0aC5jb21waWxlci5GdW5jdGlvblRhYmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZ1bmN0aW9uVGFibGUiPmdldEZ1bmN0aW9uVGFibGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0Tm9kZUl0ZXJhdG9yIj5zZWxlY3ROb2RlSXRlcmF0b3I8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0Tm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3I8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0Tm9kZUl0ZXJhdG9yIj5zZWxlY3ROb2RlSXRlcmF0b3I8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIG5hbWVzcGFjZU5vZGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBvcmcudzNjLmRvbS5Ob2RlTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3ROb2RlTGlzdCI+c2VsZWN0Tm9kZUxpc3Q8L2E+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0Tm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLk5vZGVMaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdE5vZGVMaXN0Ij5zZWxlY3ROb2RlTGlzdDwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbmFtZXNwYWNlTm9kZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBVc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy53M2MuZG9tLk5vZGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0U2luZ2xlTm9kZSI+c2VsZWN0U2luZ2xlTm9kZTwvYT4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBzaW5nbGUgbm9kZS4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHQgbm9kZSwgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50IChzZWUgdGhlCi0gbmV4dCBtZXRob2QpLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3RTaW5nbGVOb2RlIj5zZWxlY3RTaW5nbGVOb2RlPC9hPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgc2luZ2xlIG5vZGUuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hTTFRYUGF0aEhlbHBlciI+WFNMVFhQYXRoSGVscGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFNMVFhQYXRoSGVscGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbXBpbGUiPmNvbXBpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbXBpbGU8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBleHByZXNzaW9uKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5leHByZXNzaW9uPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXZhbCI+ZXZhbDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdCA8c3Ryb25nPmV2YWw8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIpPC9jb2RlPjwvcD48cD5FdmFsdWF0ZSBYUGF0aCBzdHJpbmcgdG8gYW4gWE9iamVjdC4gVXNpbmcgdGhpcyBtZXRob2QsIFhQYXRoIG5hbWVzcGFjZQotIHByZWZpeGVzIHdpbGwgYmUgcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuYXBhY2hlLnhwYXRoLm9iamVjdHMuWE9iamVjdDwvY29kZT4gLSBBbiBYT2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYSBzdHJpbmcsIG51bWJlciwgICAgICAgICAgbm9kZWxpc3QsIGV0Yywgc2hvdWxkIG5ldmVyIGJlIG51bGwuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9ldmFsIj5ldmFsPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0IDxzdHJvbmc+ZXZhbDwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cgotICAgICAgICAgLAotICAgICAgb3JnLnczYy5kb20uTm9kZSBuYW1lc3BhY2VOb2RlKTwvY29kZT48L3A+PHA+RXZhbHVhdGUgWFBhdGggc3RyaW5nIHRvIGFuIFhPYmplY3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpcyBhIGxpdHRsZQotIHNsb3csIHNpbmNlIGl0IGNyZWF0ZXMgYSBudW1iZXIgb2Ygb2JqZWN0cyBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLiBUaGlzCi0gY291bGQgYmUgb3B0aW1pemVkIHRvIGtlZXAgdGhlIHNhbWUgb2JqZWN0cyBhcm91bmQsIGJ1dCB0aGVuCi0gdGhyZWFkLXNhZmV0eSBpc3N1ZXMgd291bGQgYXJpc2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jb250ZXh0Tm9kZTwvY29kZT4gLSBUaGUgbm9kZSB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS48L3A+PHA+PGNvZGU+c3RyPC9jb2RlPiAtIEEgdmFsaWQgWFBhdGggc3RyaW5nLjwvcD48cD48Y29kZT5uYW1lc3BhY2VOb2RlPC9jb2RlPiAtIFRoZSBub2RlIGZyb20gd2hpY2ggcHJlZml4ZXMgaW4gdGhlIFhQYXRoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gICAgICAgICAgICAgbmFtZXNwYWNlcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0PC9jb2RlPiAtIEFuIFhPYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN0cmluZywgbnVtYmVyLCAgICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2V2YWwiPmV2YWw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3QgPHN0cm9uZz5ldmFsPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhtbC51dGlscy5QcmVmaXhSZXNvbHZlciBwcmVmaXhSZXNvbHZlcik8L2NvZGU+PC9wPjxwPkV2YWx1YXRlIFhQYXRoIHN0cmluZyB0byBhbiBYT2JqZWN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaXMgYSBsaXR0bGUKLSBzbG93LCBzaW5jZSBpdCBjcmVhdGVzIGEgbnVtYmVyIG9mIG9iamVjdHMgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4gVGhpcwotIGNvdWxkIGJlIG9wdGltaXplZCB0byBrZWVwIHRoZSBzYW1lIG9iamVjdHMgYXJvdW5kLCBidXQgdGhlbgotIHRocmVhZC1zYWZldHkgaXNzdWVzIHdvdWxkIGFyaXNlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PHA+PGNvZGU+cHJlZml4UmVzb2x2ZXI8L2NvZGU+IC0gV2lsbCBiZSBjYWxsZWQgaWYgdGhlIHBhcnNlciBlbmNvdW50ZXJzIG5hbWVzcGFjZSBwcmVmaXhlcywgdG8gICAgICAgICAgICAgcmVzb2x2ZSB0aGUgcHJlZml4ZXMgdG8gVVJMcy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0PC9jb2RlPiAtIEFuIFhPYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN0cmluZywgbnVtYmVyLCAgICAgICAgICBub2RlbGlzdCwgZXRjLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEZ1bmN0aW9uVGFibGUiPmdldEZ1bmN0aW9uVGFibGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmFwYWNoZS54cGF0aC5jb21waWxlci5GdW5jdGlvblRhYmxlIDxzdHJvbmc+Z2V0RnVuY3Rpb25UYWJsZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueHBhdGguY29tcGlsZXIuRnVuY3Rpb25UYWJsZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0Tm9kZUl0ZXJhdG9yIj5zZWxlY3ROb2RlSXRlcmF0b3I8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLnczYy5kb20udHJhdmVyc2FsLk5vZGVJdGVyYXRvciA8c3Ryb25nPnNlbGVjdE5vZGVJdGVyYXRvcjwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0Tm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS50cmF2ZXJzYWwuTm9kZUl0ZXJhdG9yPC9jb2RlPiAtIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdE5vZGVJdGVyYXRvciI+c2VsZWN0Tm9kZUl0ZXJhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLnRyYXZlcnNhbC5Ob2RlSXRlcmF0b3IgPHN0cm9uZz5zZWxlY3ROb2RlSXRlcmF0b3I8L3N0cm9uZz4ob3JnLnczYy5kb20uTm9kZSBjb250ZXh0Tm9kZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBzdHIKLSAgICAgICAgICwKLSAgICAgIG9yZy53M2MuZG9tLk5vZGUgbmFtZXNwYWNlTm9kZSk8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgbm9kZWxpc3QuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBuYW1lc3BhY2VOb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PHA+PGNvZGU+bmFtZXNwYWNlTm9kZTwvY29kZT4gLSBUaGUgbm9kZSBmcm9tIHdoaWNoIHByZWZpeGVzIGluIHRoZSBYUGF0aCB3aWxsIGJlIHJlc29sdmVkIHRvICAgICAgICAgICAgIG5hbWVzcGFjZXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS50cmF2ZXJzYWwuTm9kZUl0ZXJhdG9yPC9jb2RlPiAtIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdE5vZGVMaXN0Ij5zZWxlY3ROb2RlTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlTGlzdCA8c3Ryb25nPnNlbGVjdE5vZGVMaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyKTwvY29kZT48L3A+PHA+VXNlIGFuIFhQYXRoIHN0cmluZyB0byBzZWxlY3QgYSBub2RlbGlzdC4gWFBhdGggbmFtZXNwYWNlIHByZWZpeGVzIGFyZQotIHJlc29sdmVkIGZyb20gdGhlIGNvbnRleHROb2RlLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGV4dE5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uPC9wPjxwPjxjb2RlPnN0cjwvY29kZT4gLSBBIHZhbGlkIFhQYXRoIHN0cmluZy48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLk5vZGVMaXN0PC9jb2RlPiAtIEEgTm9kZUl0ZXJhdG9yLCBzaG91bGQgbmV2ZXIgYmUgbnVsbC48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdE5vZGVMaXN0Ij5zZWxlY3ROb2RlTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlTGlzdCA8c3Ryb25nPnNlbGVjdE5vZGVMaXN0PC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjwvcD48cD5Vc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIG5vZGVsaXN0LiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxwPjxjb2RlPm5hbWVzcGFjZU5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgZnJvbSB3aGljaCBwcmVmaXhlcyBpbiB0aGUgWFBhdGggd2lsbCBiZSByZXNvbHZlZCB0byAgICAgICAgICAgICBuYW1lc3BhY2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZUxpc3Q8L2NvZGU+IC0gQSBOb2RlSXRlcmF0b3IsIHNob3VsZCBuZXZlciBiZSBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0U2luZ2xlTm9kZSI+c2VsZWN0U2luZ2xlTm9kZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcudzNjLmRvbS5Ob2RlIDxzdHJvbmc+c2VsZWN0U2luZ2xlTm9kZTwvc3Ryb25nPihvcmcudzNjLmRvbS5Ob2RlIGNvbnRleHROb2RlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN0cik8L2NvZGU+PC9wPjxwPlVzZSBhbiBYUGF0aCBzdHJpbmcgdG8gc2VsZWN0IGEgc2luZ2xlIG5vZGUuIFhQYXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBhcmUKLSByZXNvbHZlZCBmcm9tIHRoZSBjb250ZXh0IG5vZGUsIHdoaWNoIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCAoc2VlIHRoZQotIG5leHQgbWV0aG9kKS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Ob2RlPC9jb2RlPiAtIFRoZSBmaXJzdCBub2RlIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgWFBhdGgsIG9yIG51bGwuPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3RTaW5nbGVOb2RlIj5zZWxlY3RTaW5nbGVOb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5zZWxlY3RTaW5nbGVOb2RlPC9zdHJvbmc+KG9yZy53M2MuZG9tLk5vZGUgY29udGV4dE5vZGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3RyCi0gICAgICAgICAsCi0gICAgICBvcmcudzNjLmRvbS5Ob2RlIG5hbWVzcGFjZU5vZGUpPC9jb2RlPjwvcD48cD5Vc2UgYW4gWFBhdGggc3RyaW5nIHRvIHNlbGVjdCBhIHNpbmdsZSBub2RlLiBYUGF0aCBuYW1lc3BhY2UgcHJlZml4ZXMgYXJlCi0gcmVzb2x2ZWQgZnJvbSB0aGUgbmFtZXNwYWNlTm9kZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHROb2RlPC9jb2RlPiAtIFRoZSBub2RlIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLjwvcD48cD48Y29kZT5zdHI8L2NvZGU+IC0gQSB2YWxpZCBYUGF0aCBzdHJpbmcuPC9wPjxwPjxjb2RlPm5hbWVzcGFjZU5vZGU8L2NvZGU+IC0gVGhlIG5vZGUgZnJvbSB3aGljaCBwcmVmaXhlcyBpbiB0aGUgWFBhdGggd2lsbCBiZSByZXNvbHZlZCB0byAgICAgICAgICAgICBuYW1lc3BhY2VzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uTm9kZTwvY29kZT4gLSBUaGUgZmlyc3Qgbm9kZSBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIFhQYXRoLCBvciBudWxsLjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhVSU1lc3NhZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFVJTWVzc2FnZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyMTIzMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFVJTWVzc2FnZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aTwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoVUlNZXNzYWdlczwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhQYXRoVUlNZXNzYWdlczwvc3Ryb25nPgotZXh0ZW5kcyBOTFM8L3ByZT5TdHJpbmdzIHVzZWQgYnkgWFBhdGggVUk8aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfQ29udGV4dCI+WFBhdGhOYXZpZ2F0b3JfQ29udGV4dDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQiPlhQYXRoTmF2aWdhdG9yX0RvY3VtZW50PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9ET01fVHJlZSI+WFBhdGhOYXZpZ2F0b3JfRE9NX1RyZWU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb24iPlhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb248L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX05hbWVzcGFjZV9QcmVmaXhlcyI+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzIj5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcCI+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkIj5YUGF0aE5hdmlnYXRvcl9Ob2RlX2NvdWxkX25vdF9iZV9zZWxlY3RlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZCI+WFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jcyI+WFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jczwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXAiPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3NfVGlwPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9SdW5fb25fc2VsZWN0ZWQiPlhQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFBhdGhOYXZpZ2F0b3JfUnVuX1hQYXRoX1F1ZXJ5Ij5YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1NlbGVjdF9zb3VyY2VfZmlyc3QiPlhQYXRoTmF2aWdhdG9yX1NlbGVjdF9zb3VyY2VfZmlyc3Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1NlbGVjdGlvbiI+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZSI+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1Nob3dfSW5fU291cmNlX1RpcCI+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9UZXh0Ij5YUGF0aE5hdmlnYXRvcl9UZXh0PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50Ij5YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50PC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9YUGF0aF9FdmFsX0ZhaWxlZCI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfRXZhbF9GYWlsZWQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQYXRoTmF2aWdhdG9yX1hQYXRoX05hdmlnYXRvciI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YUGF0aE5hdmlnYXRvcl9YUGF0aF9TaG93X0luX1NvdXJjZV9GYWlsZWQiPlhQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UmVzb3VyY2VCdW5kbGUiPmdldFJlc291cmNlQnVuZGxlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9Db250ZXh0Ij5YUGF0aE5hdmlnYXRvcl9Db250ZXh0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX0NvbnRleHQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfRG9jdW1lbnQiPlhQYXRoTmF2aWdhdG9yX0RvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX0RvY3VtZW50PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX0RPTV9UcmVlIj5YUGF0aE5hdmlnYXRvcl9ET01fVHJlZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9ET01fVHJlZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9FeHByZXNzaW9uIj5YUGF0aE5hdmlnYXRvcl9FeHByZXNzaW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX0V4cHJlc3Npb248L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzIj5YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VfUHJlZml4ZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlX1ByZWZpeGVzPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXMiPlhQYXRoTmF2aWdhdG9yX05hbWVzcGFjZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlczwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9OYW1lc3BhY2VzX1RpcCI+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTmFtZXNwYWNlc19UaXA8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfTm9kZV9jb3VsZF9ub3RfYmVfc2VsZWN0ZWQiPlhQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX05vZGVfY291bGRfbm90X2JlX3NlbGVjdGVkPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX05vdGhpbmdfc2VsZWN0ZWQiPlhQYXRoTmF2aWdhdG9yX05vdGhpbmdfc2VsZWN0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfTm90aGluZ19zZWxlY3RlZDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzIj5YUGF0aE5hdmlnYXRvcl9SZWZyZXNoX1NvdXJjZV9Eb2NzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3M8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfUmVmcmVzaF9Tb3VyY2VfRG9jc19UaXAiPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3NfVGlwPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1JlZnJlc2hfU291cmNlX0RvY3NfVGlwPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZCI+WFBhdGhOYXZpZ2F0b3JfUnVuX29uX3NlbGVjdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1J1bl9vbl9zZWxlY3RlZDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnkiPlhQYXRoTmF2aWdhdG9yX1J1bl9YUGF0aF9RdWVyeTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9SdW5fWFBhdGhfUXVlcnk8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdCI+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0X3NvdXJjZV9maXJzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9TZWxlY3Rfc291cmNlX2ZpcnN0PC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1NlbGVjdGlvbiI+WFBhdGhOYXZpZ2F0b3JfU2VsZWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1NlbGVjdGlvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZSI+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2U8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwIj5YUGF0aE5hdmlnYXRvcl9TaG93X0luX1NvdXJjZV9UaXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfU2hvd19Jbl9Tb3VyY2VfVGlwPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1RleHQiPlhQYXRoTmF2aWdhdG9yX1RleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3JfVGV4dDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50Ij5YUGF0aE5hdmlnYXRvcl9YTUxfU291cmNlX0RvY3VtZW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1hNTF9Tb3VyY2VfRG9jdW1lbnQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFBhdGhOYXZpZ2F0b3JfWFBhdGhfRXZhbF9GYWlsZWQiPlhQYXRoTmF2aWdhdG9yX1hQYXRoX0V2YWxfRmFpbGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1hQYXRoX0V2YWxfRmFpbGVkPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQYXRoTmF2aWdhdG9yX1hQYXRoX05hdmlnYXRvciI+WFBhdGhOYXZpZ2F0b3JfWFBhdGhfTmF2aWdhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yX1hQYXRoX05hdmlnYXRvcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9YUGF0aE5hdmlnYXRvcl9YUGF0aF9TaG93X0luX1NvdXJjZV9GYWlsZWQiPlhQYXRoTmF2aWdhdG9yX1hQYXRoX1Nob3dfSW5fU291cmNlX0ZhaWxlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YUGF0aE5hdmlnYXRvcl9YUGF0aF9TaG93X0luX1NvdXJjZV9GYWlsZWQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVzb3VyY2VCdW5kbGUiPmdldFJlc291cmNlQnVuZGxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZSA8c3Ryb25nPmdldFJlc291cmNlQnVuZGxlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLlJlc291cmNlQnVuZGxlPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFZpZXdQbHVnaW4uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzQzNGMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWk8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhWaWV3UGx1Z2luPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhWaWV3UGx1Z2luPC9zdHJvbmc+Ci1leHRlbmRzIEFic3RyYWN0VUlQbHVnaW48L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhWaWV3UGx1Z2luIj5YUGF0aFZpZXdQbHVnaW48L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFZpZXdQbHVnaW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGx1Z2luSWQiPmdldFBsdWdpbklkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRSZXNvdXJjZUJ1bmRsZSI+Z2V0UmVzb3VyY2VCdW5kbGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGU8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UmVzb3VyY2VTdHJpbmciPmdldFJlc291cmNlU3RyaW5nPC9hPihqYXZhLmxhbmcuU3RyaW5nIGtleSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotIG9yICdrZXknIGlmIG5vdCBmb3VuZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgQ29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5Ij5nZXRYUGF0aFRlbXBsYXRlQ29udGV4dFJlZ2lzdHJ5PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBUZW1wbGF0ZVN0b3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFhQYXRoVGVtcGxhdGVTdG9yZSI+Z2V0WFBhdGhUZW1wbGF0ZVN0b3JlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4cGF0aCB0ZW1wbGF0ZXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5mbyI+aW5mbzwvYT4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2luaXRpYWxpemVJbWFnZVJlZ2lzdHJ5Ij5pbml0aWFsaXplSW1hZ2VSZWdpc3RyeTwvYT4oSW1hZ2VSZWdpc3RyeSByZWcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbG9nIj5sb2c8L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSBleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9sb2ciPmxvZzwvYT4oamF2YS5sYW5nLlRocm93YWJsZSBleCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0QWN0aXZhdGVkIj5wYXJ0QWN0aXZhdGVkPC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnRCcm91Z2h0VG9Ub3AiPnBhcnRCcm91Z2h0VG9Ub3A8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFydENsb3NlZCI+cGFydENsb3NlZDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0RGVhY3RpdmF0ZWQiPnBhcnREZWFjdGl2YXRlZDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0SGlkZGVuIj5wYXJ0SGlkZGVuPC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnRJbnB1dENoYW5nZWQiPnBhcnRJbnB1dENoYW5nZWQ8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGFydE9wZW5lZCI+cGFydE9wZW5lZDwvYT4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wYXJ0VmlzaWJsZSI+cGFydFZpc2libGU8L2E+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RvcCI+c3RvcDwvYT4oQnVuZGxlQ29udGV4dCBjb250ZXh0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQ8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdGhyb3dDb3JlRXhjZXB0aW9uIj50aHJvd0NvcmVFeGNlcHRpb248L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSB0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZVhQYXRoTmF2aWdhdG9yVmlldyI+dXBkYXRlWFBhdGhOYXZpZ2F0b3JWaWV3PC9hPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3dhcm4iPndhcm48L2E+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aFZpZXdQbHVnaW4iPlhQYXRoVmlld1BsdWdpbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhQYXRoVmlld1BsdWdpbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UaGUgY29uc3RydWN0b3IuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RGVmYXVsdCI+Z2V0RGVmYXVsdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbiA8c3Ryb25nPmdldERlZmF1bHQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS5YUGF0aFZpZXdQbHVnaW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBsdWdpbklkIj5nZXRQbHVnaW5JZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UGx1Z2luSWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRSZXNvdXJjZUJ1bmRsZSI+Z2V0UmVzb3VyY2VCdW5kbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLlJlc291cmNlQnVuZGxlIDxzdHJvbmc+Z2V0UmVzb3VyY2VCdW5kbGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFJlc291cmNlU3RyaW5nIj5nZXRSZXNvdXJjZVN0cmluZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UmVzb3VyY2VTdHJpbmc8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjwvcD48cD5SZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotIG9yICdrZXknIGlmIG5vdCBmb3VuZC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmtleTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnkiPmdldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgQ29udGV4dFR5cGVSZWdpc3RyeSA8c3Ryb25nPmdldFhQYXRoVGVtcGxhdGVDb250ZXh0UmVnaXN0cnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UmV0dXJucyB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Q29udGV4dFR5cGVSZWdpc3RyeTwvY29kZT4gLSB0aGUgdGVtcGxhdGUgY29udGV4dCB0eXBlIHJlZ2lzdHJ5IGZvciB4cGF0aDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRYUGF0aFRlbXBsYXRlU3RvcmUiPmdldFhQYXRoVGVtcGxhdGVTdG9yZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBUZW1wbGF0ZVN0b3JlIDxzdHJvbmc+Z2V0WFBhdGhUZW1wbGF0ZVN0b3JlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlJldHVybnMgdGhlIHRlbXBsYXRlIHN0b3JlIGZvciB0aGUgeHBhdGggdGVtcGxhdGVzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+VGVtcGxhdGVTdG9yZTwvY29kZT4gLSB0aGUgdGVtcGxhdGUgc3RvcmUgZm9yIHRoZSB4cGF0aCB0ZW1wbGF0ZXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5mbyI+aW5mbzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5mbzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2luaXRpYWxpemVJbWFnZVJlZ2lzdHJ5Ij5pbml0aWFsaXplSW1hZ2VSZWdpc3RyeTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+aW5pdGlhbGl6ZUltYWdlUmVnaXN0cnk8L3N0cm9uZz4oSW1hZ2VSZWdpc3RyeSByZWcpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnJlZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfbG9nIj5sb2c8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmxvZzwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5UaHJvd2FibGUgZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lc3NhZ2U8L2NvZGU+PC9wPjxwPjxjb2RlPmV4PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb2ciPmxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+bG9nPC9zdHJvbmc+KGphdmEubGFuZy5UaHJvd2FibGUgZXgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV4PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0QWN0aXZhdGVkIj5wYXJ0QWN0aXZhdGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0QWN0aXZhdGVkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRCcm91Z2h0VG9Ub3AiPnBhcnRCcm91Z2h0VG9Ub3A8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnBhcnRCcm91Z2h0VG9Ub3A8L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFydENsb3NlZCI+cGFydENsb3NlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydENsb3NlZDwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0RGVhY3RpdmF0ZWQiPnBhcnREZWFjdGl2YXRlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydERlYWN0aXZhdGVkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRIaWRkZW4iPnBhcnRIaWRkZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnBhcnRIaWRkZW48L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcGFydElucHV0Q2hhbmdlZCI+cGFydElucHV0Q2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydElucHV0Q2hhbmdlZDwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wYXJ0T3BlbmVkIj5wYXJ0T3BlbmVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wYXJ0T3BlbmVkPC9zdHJvbmc+KElXb3JrYmVuY2hQYXJ0UmVmZXJlbmNlIHBhcnRSZWYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcnRSZWY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnRWaXNpYmxlIj5wYXJ0VmlzaWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cGFydFZpc2libGU8L3N0cm9uZz4oSVdvcmtiZW5jaFBhcnRSZWZlcmVuY2UgcGFydFJlZik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFydFJlZjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnQiPnN0YXJ0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydDwvc3Ryb25nPihCdW5kbGVDb250ZXh0IGNvbnRleHQpPC9jb2RlPjwvcD48cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdG9wIj5zdG9wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdG9wPC9zdHJvbmc+KEJ1bmRsZUNvbnRleHQgY29udGV4dCk8L2NvZGU+PC9wPjxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQ8L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNvbnRleHQ8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZhLmxhbmcuRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90aHJvd0NvcmVFeGNlcHRpb24iPnRocm93Q29yZUV4Y2VwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dGhyb3dDb3JlRXhjZXB0aW9uPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSB0KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5tZXNzYWdlPC9jb2RlPjwvcD48cD48Y29kZT50PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+Q29yZUV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlWFBhdGhOYXZpZ2F0b3JWaWV3Ij51cGRhdGVYUGF0aE5hdmlnYXRvclZpZXc8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgdm9pZCA8c3Ryb25nPnVwZGF0ZVhQYXRoTmF2aWdhdG9yVmlldzwvc3Ryb25nPihJV29ya2JlbmNoUGFydFJlZmVyZW5jZSBwYXJ0UmVmKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJ0UmVmPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF93YXJuIj53YXJuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz53YXJuPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bWVzc2FnZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NTm9kZUxhYmVsUHJvdmlkZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTU5vZGVMYWJlbFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmM2E1ODUuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NTm9kZUxhYmVsUHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERPTU5vZGVMYWJlbFByb3ZpZGVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RE9NTm9kZUxhYmVsUHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgTGFiZWxQcm92aWRlcjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9ET01Ob2RlTGFiZWxQcm92aWRlciI+RE9NTm9kZUxhYmVsUHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SW1hZ2UiPmdldEltYWdlPC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VGV4dCI+Z2V0VGV4dDwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RPTU5vZGVMYWJlbFByb3ZpZGVyIj5ET01Ob2RlTGFiZWxQcm92aWRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRPTU5vZGVMYWJlbFByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2UgPHN0cm9uZz5nZXRJbWFnZTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVHJlZUNvbnRlbnRQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVHJlZUNvbnRlbnRQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWE5OWIzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTVRyZWVDb250ZW50UHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERPTVRyZWVDb250ZW50UHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5ET01UcmVlQ29udGVudFByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgb3JnLnczYy5kb20uTm9kZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25vZGUiPm5vZGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIHN0YXRpYyAgamF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTk9USElORyI+Tk9USElORzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRE9NVHJlZUNvbnRlbnRQcm92aWRlciI+RE9NVHJlZUNvbnRlbnRQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W108L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2hpbGRyZW4iPmdldENoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IHBhcmVudEVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+KGphdmEubGFuZy5PYmplY3QgaW5wdXRFbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmVudCI+Z2V0UGFyZW50PC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzQ2hpbGRyZW4iPmhhc0NoaWxkcmVuPC9hPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5wdXRDaGFuZ2VkIj5pbnB1dENoYW5nZWQ8L2E+KFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3Qgb2xkSW5wdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgbmV3SW5wdXQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9ub2RlIj5ub2RlPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy53M2MuZG9tLk5vZGUgPHN0cm9uZz5ub2RlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX05PVEhJTkciPk5PVEhJTkc8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgc3RhdGljICBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5OT1RISU5HPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9ET01UcmVlQ29udGVudFByb3ZpZGVyIj5ET01UcmVlQ29udGVudFByb3ZpZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RE9NVHJlZUNvbnRlbnRQcm92aWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5kaXNwb3NlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRDaGlsZHJlbiI+Z2V0Q2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0Q2hpbGRyZW48L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBwYXJlbnRFbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnRFbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdFtdIDxzdHJvbmc+Z2V0RWxlbWVudHM8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBpbnB1dEVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlucHV0RWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmdldFBhcmVudDwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9oYXNDaGlsZHJlbiI+aGFzQ2hpbGRyZW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmhhc0NoaWxkcmVuPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZWxlbWVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5pbnB1dENoYW5nZWQ8L3N0cm9uZz4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBvbGRJbnB1dAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBuZXdJbnB1dCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5vbGRJbnB1dDwvY29kZT48L3A+PHA+PGNvZGU+bmV3SW5wdXQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkRPTVZpZXdlckZpbHRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVmlld2VyRmlsdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MjRhY2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVmlld2VyRmlsdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBET01WaWV3ZXJGaWx0ZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5ET01WaWV3ZXJGaWx0ZXI8L3N0cm9uZz4KLWV4dGVuZHMgVmlld2VyRmlsdGVyPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0RPTVZpZXdlckZpbHRlciI+RE9NVmlld2VyRmlsdGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZWxlY3QiPnNlbGVjdDwvYT4oVmlld2VyIHZpZXdlcgotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBwYXJlbnRFbGVtZW50Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRE9NVmlld2VyRmlsdGVyIj5ET01WaWV3ZXJGaWx0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5ET01WaWV3ZXJGaWx0ZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0Ij5zZWxlY3Q8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnNlbGVjdDwvc3Ryb25nPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IHBhcmVudEVsZW1lbnQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dmlld2VyPC9jb2RlPjwvcD48cD48Y29kZT5wYXJlbnRFbGVtZW50PC9jb2RlPjwvcD48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTgxZGQwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2cuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2c8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nPC9zdHJvbmc+Ci1leHRlbmRzIERpYWxvZzwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX2Vycm9yTWVzc2FnZUxhYmVsIj5lcnJvck1lc3NhZ2VMYWJlbDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9uYW1lc3BhY2VJbmZvTGlzdCI+bmFtZXNwYWNlSW5mb0xpc3Q8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIElQYXRoPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfcmVzb3VyY2VMb2NhdGlvbiI+cmVzb3VyY2VMb2NhdGlvbjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZyI+RWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZzwvYT48L3N0cm9uZz4ob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwgcGFyZW50U2hlbGwKLSAgICAgICAgICwKLSAgICAgIElQYXRoIHJlc291cmNlTG9jYXRpb24pPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyIj5jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyPC9hPihvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZURpYWxvZ0FyZWEiPmNyZWF0ZURpYWxvZ0FyZWE8L2E+KG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RGlhbG9nQXJlYSI+Z2V0RGlhbG9nQXJlYTwvYT4ob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlIHBhcmVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZXNwYWNlSW5mb0xpc3QiPmdldE5hbWVzcGFjZUluZm9MaXN0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0TmFtZXNwYWNlSW5mb0xpc3QiPnNldE5hbWVzcGFjZUluZm9MaXN0PC9hPihqYXZhLnV0aWwuTGlzdCBsaXN0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZUVycm9yTWVzc2FnZSI+dXBkYXRlRXJyb3JNZXNzYWdlPC9hPihqYXZhLnV0aWwuTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF91cGRhdGVPY2N1cmVkIj51cGRhdGVPY2N1cmVkPC9hPihqYXZhLmxhbmcuT2JqZWN0IG9iamVjdAotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLk9iamVjdCBhcmcpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9lcnJvck1lc3NhZ2VMYWJlbCI+ZXJyb3JNZXNzYWdlTGFiZWw8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWwgPHN0cm9uZz5lcnJvck1lc3NhZ2VMYWJlbDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9uYW1lc3BhY2VJbmZvTGlzdCI+bmFtZXNwYWNlSW5mb0xpc3Q8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5uYW1lc3BhY2VJbmZvTGlzdDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9yZXNvdXJjZUxvY2F0aW9uIj5yZXNvdXJjZUxvY2F0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElQYXRoIDxzdHJvbmc+cmVzb3VyY2VMb2NhdGlvbjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZyI+RWRpdE5hbWVzcGFjZVByZWZpeERpYWxvZzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2c8L3N0cm9uZz4ob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGwgcGFyZW50U2hlbGwKLSAgICAgICAgICwKLSAgICAgIElQYXRoIHJlc291cmNlTG9jYXRpb24pPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyIj5jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHZvaWQgPHN0cm9uZz5jcmVhdGVCdXR0b25zRm9yQnV0dG9uQmFyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlRGlhbG9nQXJlYSI+Y3JlYXRlRGlhbG9nQXJlYTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sIDxzdHJvbmc+Y3JlYXRlRGlhbG9nQXJlYTwvc3Ryb25nPihvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUgcGFyZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJlbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXREaWFsb2dBcmVhIj5nZXREaWFsb2dBcmVhPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wgPHN0cm9uZz5nZXREaWFsb2dBcmVhPC9zdHJvbmc+KG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSBwYXJlbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnBhcmVudDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWVzcGFjZUluZm9MaXN0Ij5nZXROYW1lc3BhY2VJbmZvTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldE5hbWVzcGFjZUluZm9MaXN0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldE5hbWVzcGFjZUluZm9MaXN0Ij5zZXROYW1lc3BhY2VJbmZvTGlzdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0TmFtZXNwYWNlSW5mb0xpc3Q8L3N0cm9uZz4oamF2YS51dGlsLkxpc3QgbGlzdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bGlzdDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlRXJyb3JNZXNzYWdlIj51cGRhdGVFcnJvck1lc3NhZ2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnVwZGF0ZUVycm9yTWVzc2FnZTwvc3Ryb25nPihqYXZhLnV0aWwuTGlzdCBuYW1lc3BhY2VJbmZvTGlzdCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZXNwYWNlSW5mb0xpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VwZGF0ZU9jY3VyZWQiPnVwZGF0ZU9jY3VyZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnVwZGF0ZU9jY3VyZWQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmplY3QKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgYXJnKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmplY3Q8L2NvZGU+PC9wPjxwPjxjb2RlPmFyZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGIzYWQ1Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXI8L2gyPjxicj48aHI+PHByZT5wYWNrYWdlLXByaXZhdGUgY2xhc3MgPHN0cm9uZz5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyPC9zdHJvbmc+Ci1leHRlbmRzIExhYmVsUHJvdmlkZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBjaGFyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfRElSVFlfSU5ESUNBVE9SIj5ESVJUWV9JTkRJQ0FUT1I8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQSBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIGVkaXRvciBpcyBkaXJ0eTwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyIj5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+KGphdmEubGFuZy5PYmplY3QgZWxlbWVudCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0RJUlRZX0lORElDQVRPUiI+RElSVFlfSU5ESUNBVE9SPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgY2hhciA8c3Ryb25nPkRJUlRZX0lORElDQVRPUjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+QSBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIGVkaXRvciBpcyBkaXJ0eTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXIiPlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEltYWdlIj5nZXRJbWFnZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2UgPHN0cm9uZz5nZXRJbWFnZTwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGVsZW1lbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmVsZW1lbnQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRleHQiPmdldFRleHQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFRleHQ8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBlbGVtZW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmJlYzNhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb248L3N0cm9uZz4KLWV4dGVuZHMgQWN0aW9uPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcnVuIj5ydW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJ1bjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVjYjA4ZS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uPC9oMj48YnI+PGhyPjxwcmU+cGFja2FnZS1wcml2YXRlIGNsYXNzIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIEFjdGlvbjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcnVuIj5ydW48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbjwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9ydW4iPnJ1bjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cnVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNTczNTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlcjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyIj5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kaXNwb3NlIj5kaXNwb3NlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5PYmplY3RbXTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRFbGVtZW50cyI+Z2V0RWxlbWVudHM8L2E+KGphdmEubGFuZy5PYmplY3QgaW5wdXRFbGVtZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2lucHV0Q2hhbmdlZCI+aW5wdXRDaGFuZ2VkPC9hPihWaWV3ZXIgdmlld2VyCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG9sZElucHV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuT2JqZWN0IG5ld0lucHV0KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1hQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIiPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L2E+PC9oMj48cD48Y29kZT5wYWNrYWdlLXByaXZhdGUgPHN0cm9uZz5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmRpc3Bvc2U8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEVsZW1lbnRzIj5nZXRFbGVtZW50czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0W10gPHN0cm9uZz5nZXRFbGVtZW50czwvc3Ryb25nPihqYXZhLmxhbmcuT2JqZWN0IGlucHV0RWxlbWVudCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5wdXRFbGVtZW50PC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdFtdPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pbnB1dENoYW5nZWQiPmlucHV0Q2hhbmdlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5wdXRDaGFuZ2VkPC9zdHJvbmc+KFZpZXdlciB2aWV3ZXIKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3Qgb2xkSW5wdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5PYmplY3QgbmV3SW5wdXQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnZpZXdlcjwvY29kZT48L3A+PHA+PGNvZGU+b2xkSW5wdXQ8L2NvZGU+PC9wPjxwPjxjb2RlPm5ld0lucHV0PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhNGQ4Zi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3M8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbjwvaDI+PGJyPjxocj48cHJlPnBhY2thZ2UtcHJpdmF0ZSBjbGFzcyA8c3Ryb25nPlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIEFjdGlvbjwvcHJlPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3J1biI+cnVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24iPlhQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfcnVuIj5ydW48L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJ1bjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MGJjNWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3czwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhQYXRoTmF2aWdhdG9yPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3I8L3N0cm9uZz4KLWV4dGVuZHMgVmlld1BhcnQ8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgSU1lbWVudG88L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9tZW1lbnRvIj5tZW1lbnRvPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NRU1FTlRPX1FVRVJZQ09OVEVYVF9ET0NVTUVOVCI+TUVNRU5UT19RVUVSWUNPTlRFWFRfRE9DVU1FTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01FTUVOVE9fUVVFUllDT05URVhUX0tFWSI+TUVNRU5UT19RVUVSWUNPTlRFWFRfS0VZPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NRU1FTlRPX1FVRVJZQ09OVEVYVF9TRUxFQ1RJT04iPk1FTUVOVE9fUVVFUllDT05URVhUX1NFTEVDVElPTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfTUVNRU5UT19YUEFUSE5BVklHQVRPUl9TRUNUSU9OIj5NRU1FTlRPX1hQQVRITkFWSUdBVE9SX1NFQ1RJT048L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01FTUVOVE9fWFBBVEhRVUVSWV9LRVkiPk1FTUVOVE9fWFBBVEhRVUVSWV9LRVk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIGphdmEudXRpbC5XZWFrSGFzaE1hcDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25hbWVzcGFjZUluZm8iPm5hbWVzcGFjZUluZm88L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yIj5YUGF0aE5hdmlnYXRvcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlciI+WFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbiI+WFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uIj5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIiPlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXI8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hQYXRoTmF2aWdhdG9yLlhQYXRoQWN0aW9uIj5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlUGFydENvbnRyb2wiPmNyZWF0ZVBhcnRDb250cm9sPC9hPihvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUgcGFyZW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgaXMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYWxsb3cgdXMgdG8gY3JlYXRlIHRoZSB2aWV3ZXIgYW5kIGluaXRpYWxpemUKLSBpdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgb3JnLnczYy5kb20uRWxlbWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRRdWVyeUNvbnRleHQiPmdldFF1ZXJ5Q29udGV4dDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTZWxlY3RlZERvY3VtZW50Ij5nZXRTZWxlY3RlZERvY3VtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaW5pdCI+aW5pdDwvYT4oSVZpZXdTaXRlIHNpdGUKLSAgICAgICAgICwKLSAgICAgIElNZW1lbnRvIG1lbWVudG8pPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzdG9yZVN0YXRlIj5yZXN0b3JlU3RhdGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zYXZlU3RhdGUiPnNhdmVTdGF0ZTwvYT4oSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRGb2N1cyI+c2V0Rm9jdXM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQYXNzaW5nIHRoZSBmb2N1cyByZXF1ZXN0IHRvIHRoZSB2aWV3ZXIncyBjb250cm9sLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VwZGF0ZSI+dXBkYXRlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9tZW1lbnRvIj5tZW1lbnRvPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIElNZW1lbnRvIDxzdHJvbmc+bWVtZW50bzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NRU1FTlRPX1FVRVJZQ09OVEVYVF9ET0NVTUVOVCI+TUVNRU5UT19RVUVSWUNPTlRFWFRfRE9DVU1FTlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TUVNRU5UT19RVUVSWUNPTlRFWFRfRE9DVU1FTlQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTUVNRU5UT19RVUVSWUNPTlRFWFRfS0VZIj5NRU1FTlRPX1FVRVJZQ09OVEVYVF9LRVk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TUVNRU5UT19RVUVSWUNPTlRFWFRfS0VZPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01FTUVOVE9fUVVFUllDT05URVhUX1NFTEVDVElPTiI+TUVNRU5UT19RVUVSWUNPTlRFWFRfU0VMRUNUSU9OPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1FTUVOVE9fUVVFUllDT05URVhUX1NFTEVDVElPTjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NRU1FTlRPX1hQQVRITkFWSUdBVE9SX1NFQ1RJT04iPk1FTUVOVE9fWFBBVEhOQVZJR0FUT1JfU0VDVElPTjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NRU1FTlRPX1hQQVRITkFWSUdBVE9SX1NFQ1RJT048L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTUVNRU5UT19YUEFUSFFVRVJZX0tFWSI+TUVNRU5UT19YUEFUSFFVRVJZX0tFWTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5NRU1FTlRPX1hQQVRIUVVFUllfS0VZPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX25hbWVzcGFjZUluZm8iPm5hbWVzcGFjZUluZm88L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLldlYWtIYXNoTWFwIDxzdHJvbmc+bmFtZXNwYWNlSW5mbzwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWFBhdGhOYXZpZ2F0b3IiPlhQYXRoTmF2aWdhdG9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WFBhdGhOYXZpZ2F0b3I8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlUGFydENvbnRyb2wiPmNyZWF0ZVBhcnRDb250cm9sPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jcmVhdGVQYXJ0Q29udHJvbDwvc3Ryb25nPihvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUgcGFyZW50KTwvY29kZT48L3A+PHA+VGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZQotIGl0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyZW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRRdWVyeUNvbnRleHQiPmdldFF1ZXJ5Q29udGV4dDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5FbGVtZW50IDxzdHJvbmc+Z2V0UXVlcnlDb250ZXh0PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLnczYy5kb20uRWxlbWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U2VsZWN0ZWREb2N1bWVudCI+Z2V0U2VsZWN0ZWREb2N1bWVudDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBvcmcudzNjLmRvbS5Eb2N1bWVudCA8c3Ryb25nPmdldFNlbGVjdGVkRG9jdW1lbnQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaW5pdCI+aW5pdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+aW5pdDwvc3Ryb25nPihJVmlld1NpdGUgc2l0ZQotICAgICAgICAgLAotICAgICAgSU1lbWVudG8gbWVtZW50byk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c2l0ZTwvY29kZT48L3A+PHA+PGNvZGU+bWVtZW50bzwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPlBhcnRJbml0RXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZXN0b3JlU3RhdGUiPnJlc3RvcmVTdGF0ZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+cmVzdG9yZVN0YXRlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zYXZlU3RhdGUiPnNhdmVTdGF0ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2F2ZVN0YXRlPC9zdHJvbmc+KElNZW1lbnRvIG1lbWVudG8pPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm1lbWVudG88L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEZvY3VzIj5zZXRGb2N1czwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0Rm9jdXM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UGFzc2luZyB0aGUgZm9jdXMgcmVxdWVzdCB0byB0aGUgdmlld2VyJ3MgY29udHJvbC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdXBkYXRlIj51cGRhdGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnVwZGF0ZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuVmFsaWRhdGlvblByZWZlcmVuY2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNmFhODMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5WYWxpZGF0aW9uUHJlZmVyZW5jZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBWYWxpZGF0aW9uUHJlZmVyZW5jZXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5WYWxpZGF0aW9uUHJlZmVyZW5jZXM8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPlByZWZlcmVuY2UgY29uc3RhbnRzIHNwZWNpZmljIHRvIHRoZSBYU0wgdmFsaWRhdG9yLjxwPjwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NBTExfVEVNUExBVEVTIj5DQUxMX1RFTVBMQVRFUzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYW4gdW5yZXNvbHZlZCBjYWxsZWQgdGVtcGxhdGUgaXMgcmVwb3J0ZWQuIAotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0NJUkNVTEFSX1JFRiI+Q0lSQ1VMQVJfUkVGPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhbiBpbmNsdWRlL2ltcG9ydCBjaXJjdWxhciByZWZlcmVuY2VzIGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0RVUExJQ0FURV9QQVJBTUVURVIiPkRVUExJQ0FURV9QQVJBTUVURVI8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGxldmVsIGF0IHdoaWNoIGEgZHVwbGljYXRlIHBhcmFtZXRlciBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9FTVBUWV9QQVJBTSI+RU1QVFlfUEFSQU08L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGxldmVsIGF0IHdoaWNoIGEgcGFyYW1ldGVyIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgYW5kIGRvZXMgbm90IHNwZWNpZnkgYSB2YWx1ZSBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NQVhfRVJST1JTIj5NQVhfRVJST1JTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgYWxsb3dlZCBwZXIgWFNMIGZpbGUuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb2YgdHlwZSAmbHQ7Y29kZSZndDtJbnRlZ2VyJmx0Oy9jb2RlJmd0Oy4KLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX01JU1NJTkdfSU5DTFVERSI+TUlTU0lOR19JTkNMVURFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhbiB1bnJlc29sdmVkIGltcG9ydCBvciBpbmNsdWRlZCBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NSVNTSU5HX1BBUkFNIj5NSVNTSU5HX1BBUkFNPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIG1pc3NpbmcgcGFyYW1ldGVyIGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05BTUVfQVRUUklCVVRFX0VNUFRZIj5OQU1FX0FUVFJJQlVURV9FTVBUWTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgbGV2ZWwgYXQgd2hpY2ggYSBwYXJhbWV0ZXIgd2l0aCBhbiBlbXB0eSBuYW1lIGF0dHJpYnV0ZSBpcyByZXBvcnRlZC4KLSAmbHQ7cCZndDsKLSBWYWx1ZSBpcyBvbmUgb2YgJmx0O2NvZGUmZ3Q7SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk8mbHQ7L2NvZGUmZ3Q7Ci0gJmx0Oy9wJmd0OzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9OQU1FX0FUVFJJQlVURV9NSVNTSU5HIj5OQU1FX0FUVFJJQlVURV9NSVNTSU5HPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB3aXRob3V0IGEgbmFtZSBhdHRyaWJ1dGUgaXMgcmVwb3J0ZWQuCi0gJmx0O3AmZ3Q7Ci0gVmFsdWUgaXMgb25lIG9mICZsdDtjb2RlJmd0O0lNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPJmx0Oy9jb2RlJmd0OwotICZsdDsvcCZndDs8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVEVNUExBVEVfQ09ORkxJQ1QiPlRFTVBMQVRFX0NPTkZMSUNUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhIHRlbXBsYXRlIGNvbmZsaWN0IGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1hQQVRIUyI+WFBBVEhTPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBsZXZlbCBhdCB3aGljaCBhbiBpbnZhbGlkIFhQYXRoIGlzIHJlcG9ydGVkLgotICZsdDtwJmd0OwotIFZhbHVlIGlzIG9uZSBvZiAmbHQ7Y29kZSZndDtJTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTyZsdDsvY29kZSZndDsKLSAmbHQ7L3AmZ3Q7PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1ZhbGlkYXRpb25QcmVmZXJlbmNlcyI+VmFsaWRhdGlvblByZWZlcmVuY2VzPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImZpZWxkX0NBTExfVEVNUExBVEVTIj5DQUxMX1RFTVBMQVRFUzwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5DQUxMX1RFTVBMQVRFUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGFuIHVucmVzb2x2ZWQgY2FsbGVkIHRlbXBsYXRlIGlzIHJlcG9ydGVkLiAKLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfQ0lSQ1VMQVJfUkVGIj5DSVJDVUxBUl9SRUY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Q0lSQ1VMQVJfUkVGPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYW4gaW5jbHVkZS9pbXBvcnQgY2lyY3VsYXIgcmVmZXJlbmNlcyBpcyByZXBvcnRlZC4KLSA8cD4KLSBWYWx1ZSBpcyBvbmUgb2YgPGNvZGU+SU1hcmtlci5TRVZFUklUWV9FUlJPUiwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HLCBJTWFya2VyLlNFVkVSSVRZX0lORk88L2NvZGU+Ci0gPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfRFVQTElDQVRFX1BBUkFNRVRFUiI+RFVQTElDQVRFX1BBUkFNRVRFUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5EVVBMSUNBVEVfUEFSQU1FVEVSPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgbGV2ZWwgYXQgd2hpY2ggYSBkdXBsaWNhdGUgcGFyYW1ldGVyIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9FTVBUWV9QQVJBTSI+RU1QVFlfUEFSQU08L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+RU1QVFlfUEFSQU08L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB0aGF0IGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGFuZCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01BWF9FUlJPUlMiPk1BWF9FUlJPUlM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TUFYX0VSUk9SUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyBhbGxvd2VkIHBlciBYU0wgZmlsZS4KLSA8cD4KLSBWYWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkludGVnZXI8L2NvZGU+LgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX01JU1NJTkdfSU5DTFVERSI+TUlTU0lOR19JTkNMVURFPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1JU1NJTkdfSU5DTFVERTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGFuIHVucmVzb2x2ZWQgaW1wb3J0IG9yIGluY2x1ZGVkIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9NSVNTSU5HX1BBUkFNIj5NSVNTSU5HX1BBUkFNPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk1JU1NJTkdfUEFSQU08L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIG1pc3NpbmcgcGFyYW1ldGVyIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OQU1FX0FUVFJJQlVURV9FTVBUWSI+TkFNRV9BVFRSSUJVVEVfRU1QVFk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TkFNRV9BVFRSSUJVVEVfRU1QVFk8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB3aXRoIGFuIGVtcHR5IG5hbWUgYXR0cmlidXRlIGlzIHJlcG9ydGVkLgotIDxwPgotIFZhbHVlIGlzIG9uZSBvZiA8Y29kZT5JTWFya2VyLlNFVkVSSVRZX0VSUk9SLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcsIElNYXJrZXIuU0VWRVJJVFlfSU5GTzwvY29kZT4KLSA8L3A+PC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OQU1FX0FUVFJJQlVURV9NSVNTSU5HIj5OQU1FX0FUVFJJQlVURV9NSVNTSU5HPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5BTUVfQVRUUklCVVRFX01JU1NJTkc8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBsZXZlbCBhdCB3aGljaCBhIHBhcmFtZXRlciB3aXRob3V0IGEgbmFtZSBhdHRyaWJ1dGUgaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1RFTVBMQVRFX0NPTkZMSUNUIj5URU1QTEFURV9DT05GTElDVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5URU1QTEFURV9DT05GTElDVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGEgdGVtcGxhdGUgY29uZmxpY3QgaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1hQQVRIUyI+WFBBVEhTPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhQQVRIUzwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGxldmVsIGF0IHdoaWNoIGFuIGludmFsaWQgWFBhdGggaXMgcmVwb3J0ZWQuCi0gPHA+Ci0gVmFsdWUgaXMgb25lIG9mIDxjb2RlPklNYXJrZXIuU0VWRVJJVFlfRVJST1IsIElNYXJrZXIuU0VWRVJJVFlfV0FSTklORywgSU1hcmtlci5TRVZFUklUWV9JTkZPPC9jb2RlPgotIDwvcD48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9WYWxpZGF0aW9uUHJlZmVyZW5jZXMiPlZhbGlkYXRpb25QcmVmZXJlbmNlczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlZhbGlkYXRpb25QcmVmZXJlbmNlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMyNWVjNS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZTwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xDb3JlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WFNMQ29yZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+VGhlIGludGVyZmFjZSB0byBhbGwgYXNwZWN0cyBvZiB0aGUgWFNMIGNvcmUgZnVuY3Rpb25hbGl0eS4KLSA8cD4KLSBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyBhbmQgbWFpbnRhaW5pbmcgdGhlIGNhY2hlIG9mIGJ1aWx0IFhTTCBtb2RlbHMuCi0gPC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfWFNMX0NPTlRFTlRfVFlQRSI+WFNMX0NPTlRFTlRfVFlQRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgWFNMIGNvbnRlbnQgdHlwZSAoPSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlKTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9YU0xfTkFNRVNQQUNFX1VSSSI+WFNMX05BTUVTUEFDRV9VUkk8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIFhTTCBuYW1lc3BhY2UgVVJJICg9IGh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSk8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIFN0eWxlc2hlZXRNb2RlbDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9idWlsZFN0eWxlc2hlZXQiPmJ1aWxkU3R5bGVzaGVldDwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb21wbGV0ZWx5IHJlYnVpbGQgdGhlIHNvdXJjZSBmaWxlIGZyb20gaXRzIERPTTwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NsZWFuIj5jbGVhbjwvYT4oSVByb2plY3QgcHJvamVjdAotICAgICAgICAgLAotICAgICAgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENsZWFuIGFsbCBvZiB0aGUgc3R5bGVzaGVldHMgZnJvbSB0aGUgZ2l2ZW4gcHJvamVjdC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc2luZ2xldG9uIDxjb2RlPlhTTENvcmU8L2NvZGU+IGluc3RhbmNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBTdHlsZXNoZWV0TW9kZWw8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldCI+Z2V0U3R5bGVzaGVldDwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGNhY2hlZCBzdHlsZXNoZWV0LCBvciBidWlsZCBpdCBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGJ1aWx0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1hNTEZpbGUiPmlzWE1MRmlsZTwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBYTUwgZmlsZSBieSBpbnNwZWN0aW5nIGl0cyBjb250ZW50IHR5cGVzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1hTTEZpbGUiPmlzWFNMRmlsZTwvYT4oSUZpbGUgZmlsZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBYU0wgZmlsZSBieSBpbnNwZWN0aW5nIGl0cyBjb250ZW50IHR5cGVzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9pc1hTTE5hbWVzcGFjZSI+aXNYU0xOYW1lc3BhY2U8L2E+KElET01Ob2RlIG5vZGUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGFrZXMgYSBnaXZlbiA8Y29kZT5JRE9NTm9kZTwvY29kZT4gYW5kIHJldHVybnMgd2hldGhlciBpdCAKLSBpcyBwYXJ0IG9mIHRoZSB0aGUgWFNMVCBOYW1lc3BhY2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyBJRmlsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZXNvbHZlRmlsZSI+cmVzb2x2ZUZpbGU8L2E+KElGaWxlIGN1cnJlbnRGaWxlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHVyaSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBMb2NhdGVzIGEgZmlsZSBmb3IgdGhlIGdpdmVuIGN1cnJlbnQgZmlsZSBhbmQgVVJJLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfWFNMX0NPTlRFTlRfVFlQRSI+WFNMX0NPTlRFTlRfVFlQRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5YU0xfQ09OVEVOVF9UWVBFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgWFNMIGNvbnRlbnQgdHlwZSAoPSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlKTwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfWFNMX05BTUVTUEFDRV9VUkkiPlhTTF9OQU1FU1BBQ0VfVVJJPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlhTTF9OQU1FU1BBQ0VfVVJJPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgWFNMIG5hbWVzcGFjZSBVUkkgKD0gaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtKTwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYnVpbGRTdHlsZXNoZWV0Ij5idWlsZFN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgU3R5bGVzaGVldE1vZGVsIDxzdHJvbmc+YnVpbGRTdHlsZXNoZWV0PC9zdHJvbmc+KElGaWxlIGZpbGUpPC9jb2RlPjwvcD48cD5Db21wbGV0ZWx5IHJlYnVpbGQgdGhlIHNvdXJjZSBmaWxlIGZyb20gaXRzIERPTTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmlsZTwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPlN0eWxlc2hlZXRNb2RlbDwvY29kZT4gLSB0aGUgc3R5bGVzaGVldCBtb2RlbCwgb3IgbnVsbCBpZiBpdCBjb3VsZCBub3QgYmUgY3JlYXRlZC48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2xlYW4iPmNsZWFuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jbGVhbjwvc3Ryb25nPihJUHJvamVjdCBwcm9qZWN0Ci0gICAgICAgICAsCi0gICAgICBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpPC9jb2RlPjwvcD48cD5DbGVhbiBhbGwgb2YgdGhlIHN0eWxlc2hlZXRzIGZyb20gdGhlIGdpdmVuIHByb2plY3QuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wcm9qZWN0PC9jb2RlPiAtIHRoZSBwcm9qZWN0IHRvIGJlIGNsZWFuZWQ8L3A+PHA+PGNvZGU+bW9uaXRvcjwvY29kZT4gLSBhIHByb2dyZXNzIG1vbml0b3IgdG8gdHJhY2sgdGhlIGNsZWFuIHByb2dyZXNzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEluc3RhbmNlIj5nZXRJbnN0YW5jZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZSA8c3Ryb25nPmdldEluc3RhbmNlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgc2luZ2xldG9uIDxjb2RlPlhTTENvcmU8L2NvZGU+IGluc3RhbmNlLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlhTTENvcmU8L2NvZGU+IC0gdGhlIDxjb2RlPlhTTENvcmU8L2NvZGU+IGluc3RhbmNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0eWxlc2hlZXQiPmdldFN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgU3R5bGVzaGVldE1vZGVsIDxzdHJvbmc+Z2V0U3R5bGVzaGVldDwvc3Ryb25nPihJRmlsZSBmaWxlKTwvY29kZT48L3A+PHA+R2V0IHRoZSBjYWNoZWQgc3R5bGVzaGVldCwgb3IgYnVpbGQgaXQgaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBidWlsdC48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5TdHlsZXNoZWV0TW9kZWw8L2NvZGU+IC0gc291cmNlIGZpbGUsIG9yIG51bGwgaWYgY291bGQgbm90IGJlIGJ1aWx0PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2lzWE1MRmlsZSI+aXNYTUxGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5pc1hNTEZpbGU8L3N0cm9uZz4oSUZpbGUgZmlsZSk8L2NvZGU+PC9wPjxwPkRldGVybWluZSB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGFuIFhNTCBmaWxlIGJ5IGluc3BlY3RpbmcgaXRzIGNvbnRlbnQgdHlwZXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5maWxlPC9jb2RlPiAtIHRoZSBmaWxlIHRvIGluc3BlY3Q8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBpZiB0aGlzIGZpbGUgaXMgYW4gWE1MIGZpbGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaXNYU0xGaWxlIj5pc1hTTEZpbGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzWFNMRmlsZTwvc3Ryb25nPihJRmlsZSBmaWxlKTwvY29kZT48L3A+PHA+RGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYW4gWFNMIGZpbGUgYnkgaW5zcGVjdGluZyBpdHMgY29udGVudCB0eXBlcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+IC0gdGhlIGZpbGUgdG8gaW5zcGVjdDwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+Ym9vbGVhbjwvY29kZT4gLSB0cnVlIGlmIHRoaXMgZmlsZSBpcyBhbiBYU0wgZmlsZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9pc1hTTE5hbWVzcGFjZSI+aXNYU0xOYW1lc3BhY2U8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPmlzWFNMTmFtZXNwYWNlPC9zdHJvbmc+KElET01Ob2RlIG5vZGUpPC9jb2RlPjwvcD48cD5UYWtlcyBhIGdpdmVuIDxjb2RlPklET01Ob2RlPC9jb2RlPiBhbmQgcmV0dXJucyB3aGV0aGVyIGl0IAotIGlzIHBhcnQgb2YgdGhlIHRoZSBYU0xUIE5hbWVzcGFjZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5vZGU8L2NvZGU+IC0gVGhlIElET01Ob2RlIHRvIGJlIGNoZWNrZWQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPiAtIFRydWUgaWYgcGFydCBvZiB0aGUgWFNMVCBuYW1lc3BhY2UsIGZhbHNlIG90aGVyd2lzZS48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzb2x2ZUZpbGUiPnJlc29sdmVGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIElGaWxlIDxzdHJvbmc+cmVzb2x2ZUZpbGU8L3N0cm9uZz4oSUZpbGUgY3VycmVudEZpbGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdXJpKTwvY29kZT48L3A+PHA+TG9jYXRlcyBhIGZpbGUgZm9yIHRoZSBnaXZlbiBjdXJyZW50IGZpbGUgYW5kIFVSSS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmN1cnJlbnRGaWxlPC9jb2RlPiAtIHRoZSBmaWxlIHRvIHJlc29sdmUgcmVsYXRpdmUgdG88L3A+PHA+PGNvZGU+dXJpPC9jb2RlPiAtIHRoZSByZWxhdGl2ZSBVUkk8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPklGaWxlPC9jb2RlPiAtIHRoZSBmaWxlIGF0IHRoZSBVUkkgcmVsYXRpdmUgdG8gdGhpcyA8Y29kZT5jdXJyZW50RmlsZTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODY4YzhhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuUmVzb2x2ZXJFeHRlbnNpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBSZXNvbHZlckV4dGVuc2lvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlJlc29sdmVyRXh0ZW5zaW9uPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UT0RPOiBKYXZhZG9jPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9SZXNvbHZlckV4dGVuc2lvbiI+UmVzb2x2ZXJFeHRlbnNpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmUiPnJlc29sdmU8L2E+KElGaWxlIGZpbGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgYmFzZUxvY2F0aW9uCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHB1YmxpY0lkCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN5c3RlbUlkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1Jlc29sdmVyRXh0ZW5zaW9uIj5SZXNvbHZlckV4dGVuc2lvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlJlc29sdmVyRXh0ZW5zaW9uPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc29sdmUiPnJlc29sdmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnJlc29sdmU8L3N0cm9uZz4oSUZpbGUgZmlsZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBiYXNlTG9jYXRpb24KLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZpbGU8L2NvZGU+PC9wPjxwPjxjb2RlPmJhc2VMb2NhdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+cHVibGljSWQ8L2NvZGU+PC9wPjxwPjxjb2RlPnN5c3RlbUlkPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzBmMzFhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuWFNMVmVyc2lvbkhhbmRsZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYU0xWZXJzaW9uSGFuZGxlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlhTTFZlcnNpb25IYW5kbGVyPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI8L3ByZT5BIHNpbXBsZSBYTUwgcGFyc2VyIHRvIGZpbmQgdGhlIFhTTCB2ZXJzaW9uIG9mIGEgZ2l2ZW4gWE1MIGZpbGUsIGV4cGVjdGVkbHkgYSBYU0xUIHN0eWxlc2hlZXQuPGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hTTFZlcnNpb25IYW5kbGVyIj5YU0xWZXJzaW9uSGFuZGxlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tbWVudCI+Y29tbWVudDwvYT4oY2hhcltdIGNoCi0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnQKLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW5kQ0RBVEEiPmVuZENEQVRBPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZW5kRFREIj5lbmREVEQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lbmRFbnRpdHkiPmVuZEVudGl0eTwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Vycm9yIj5lcnJvcjwvYT4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24gZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mYXRhbEVycm9yIj5mYXRhbEVycm9yPC9hPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFZlcnNpb25BdHRyaWJ1dGUiPmdldFZlcnNpb25BdHRyaWJ1dGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUT0RPOiBBZGQgSmF2YWRvYzwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BhcnNlQ29udGVudHMiPnBhcnNlQ29udGVudHM8L2E+KG9yZy54bWwuc2F4LklucHV0U291cmNlIGNvbnRlbnRzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRPRE86IEFkZCBKYXZhZG9jPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy54bWwuc2F4LklucHV0U291cmNlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3Jlc29sdmVFbnRpdHkiPnJlc29sdmVFbnRpdHk8L2E+KGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRDREFUQSI+c3RhcnRDREFUQTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0RFREIj5zdGFydERURDwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHB1YmxpY0lkCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN5c3RlbUlkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0YXJ0RWxlbWVudCI+c3RhcnRFbGVtZW50PC9hPihqYXZhLmxhbmcuU3RyaW5nIHVyaQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBlbGVtZW50TmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBxdWFsaWZpZWROYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcueG1sLnNheC5BdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhcnRFbnRpdHkiPnN0YXJ0RW50aXR5PC9hPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfd2FybmluZyI+d2FybmluZzwvYT4ob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24gZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9YU0xWZXJzaW9uSGFuZGxlciI+WFNMVmVyc2lvbkhhbmRsZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YU0xWZXJzaW9uSGFuZGxlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YWRvYzwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbW1lbnQiPmNvbW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmNvbW1lbnQ8L3N0cm9uZz4oY2hhcltdIGNoCi0gICAgICAgICAsCi0gICAgICBpbnQgc3RhcnQKLSAgICAgICAgICwKLSAgICAgIGludCBsZW5ndGgpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmNoPC9jb2RlPjwvcD48cD48Y29kZT5zdGFydDwvY29kZT48L3A+PHA+PGNvZGU+bGVuZ3RoPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmRDREFUQSI+ZW5kQ0RBVEE8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmVuZENEQVRBPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmREVEQiPmVuZERURDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZW5kRFREPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9lbmRFbnRpdHkiPmVuZEVudGl0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZW5kRW50aXR5PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbmFtZSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXJyb3IiPmVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5lcnJvcjwvc3Ryb25nPihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbiBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9mYXRhbEVycm9yIj5mYXRhbEVycm9yPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5mYXRhbEVycm9yPC9zdHJvbmc+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZlcnNpb25BdHRyaWJ1dGUiPmdldFZlcnNpb25BdHRyaWJ1dGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFZlcnNpb25BdHRyaWJ1dGU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VE9ETzogQWRkIEphdmFkb2M8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3BhcnNlQ29udGVudHMiPnBhcnNlQ29udGVudHM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgYm9vbGVhbiA8c3Ryb25nPnBhcnNlQ29udGVudHM8L3N0cm9uZz4ob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UgY29udGVudHMpPC9jb2RlPjwvcD48cD5UT0RPOiBBZGQgSmF2YWRvYzwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y29udGVudHM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YS5pby5JT0V4Y2VwdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+amF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+b3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9yZXNvbHZlRW50aXR5Ij5yZXNvbHZlRW50aXR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy54bWwuc2F4LklucHV0U291cmNlIDxzdHJvbmc+cmVzb2x2ZUVudGl0eTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHB1YmxpY0lkCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHN5c3RlbUlkKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wdWJsaWNJZDwvY29kZT48L3A+PHA+PGNvZGU+c3lzdGVtSWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5JbnB1dFNvdXJjZTwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnRDREFUQSI+c3RhcnRDREFUQTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnRDREFUQTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnREVEQiPnN0YXJ0RFREPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGFydERURDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgcHVibGljSWQKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc3lzdGVtSWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPnB1YmxpY0lkPC9jb2RlPjwvcD48cD48Y29kZT5zeXN0ZW1JZDwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RhcnRFbGVtZW50Ij5zdGFydEVsZW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0YXJ0RWxlbWVudDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIHVyaQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBlbGVtZW50TmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyBxdWFsaWZpZWROYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcueG1sLnNheC5BdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnVyaTwvY29kZT48L3A+PHA+PGNvZGU+ZWxlbWVudE5hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPnF1YWxpZmllZE5hbWU8L2NvZGU+PC9wPjxwPjxjb2RlPmF0dHJpYnV0ZXM8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0YXJ0RW50aXR5Ij5zdGFydEVudGl0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RhcnRFbnRpdHk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5uYW1lPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF93YXJuaW5nIj53YXJuaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz53YXJuaW5nPC9zdHJvbmc+KG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uIGUpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmU8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcueG1sLnNheC5TQVhFeGNlcHRpb248L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkFic3RyYWN0RGVidWdnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkFic3RyYWN0RGVidWdnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU5NjA5Yy4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5BYnN0cmFjdERlYnVnZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBBYnN0cmFjdERlYnVnZ2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+QWJzdHJhY3REZWJ1Z2dlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QW4gaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+SVhTTERlYnVnZ2VyPC9jb2RlPi4KLSAKLSBUaGlzIGNsYXNzIGNhbiBiZSBzdWJjbGFzc2VkIGluIG9yZGVyIHRvIHByb3ZpZGUgZGVidWdnaW5nIGZvciBhIHBhcnRpY3VsYXIgWFNMVCBwcm9jZXNzb3IuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9BYnN0cmFjdERlYnVnZ2VyIj5BYnN0cmFjdERlYnVnZ2VyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRCcmVha3BvaW50Ij5hZGRCcmVha3BvaW50PC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkJyZWFrUG9pbnQgYnJlYWtwb2ludCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jaGVja1N0b3BwZWQiPmNoZWNrU3RvcHBlZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENoZWNrIHdoZXRoZXIgdGhlIGRlYnVnZ2VyIGhhcyBiZWVuIHN0b3BwZWQgYW5kIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZiBzby48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9jaGVja1N1c3BlbmRlZCI+Y2hlY2tTdXNwZW5kZWQ8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuU3R5bGVGcmFtZSBzdHlsZUZyYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkJyZWFrUG9pbnQgYnJlYWtwb2ludCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDaGVjayB3aGV0aGVyIHRoZSBkZWJ1Z2dlciBpcyBjdXJyZW50bHkgc3VzcGVuZGVkIG9yIHN0ZXBwaW5nIGF0IHRoZSBnaXZlbiBicmVha3BvaW50IGFuZCBzdHlsZSBmcmFtZSwgCi0gYW5kIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZiBzby48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9kZWJ1Z2dlclN0YXJ0ZWQiPmRlYnVnZ2VyU3RhcnRlZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2RlYnVnZ2VyU3RvcHBlZCI+ZGVidWdnZXJTdG9wcGVkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZGVidWdnZXJUcmFuc2Zvcm1TdGFydGVkIj5kZWJ1Z2dlclRyYW5zZm9ybVN0YXJ0ZWQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDYWxsZWQgd2hlbiB0aGUgbmV4dCB0cmFuc2Zvcm0gaW4gdGhlIHBpcGVsaW5lIGhhcyBiZWd1bi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BlZWtTdHlsZUZyYW1lIj5wZWVrU3R5bGVGcmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBlZWsgYSBzdHlsZSBmcmFtZSBmcm9tIHRoZSBzdGFjay48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3BvcFN0eWxlRnJhbWUiPnBvcFN0eWxlRnJhbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQb3AgYSBzdHlsZSBmcmFtZSBmcm9tIHRoZSBzdGFjay48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9wdXNoU3R5bGVGcmFtZSI+cHVzaFN0eWxlRnJhbWU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuU3R5bGVGcmFtZSBzdHlsZUZyYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFB1c2ggYSBzdHlsZSBmcmFtZSBvbnRvIHRoZSBzdGFjay48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9xdWl0Ij5xdWl0PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVtb3ZlQnJlYWtwb2ludCI+cmVtb3ZlQnJlYWtwb2ludDwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5CcmVha1BvaW50IGJyZWFrcG9pbnQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVzdW1lIj5yZXN1bWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9ydW4iPnJ1bjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEV2ZW50V3JpdGVyIj5zZXRFdmVudFdyaXRlcjwvYT4oamF2YS5pby5Xcml0ZXIgd3JpdGVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEludm9rZXIiPnNldEludm9rZXI8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlciBpbnZva2VyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFNvdXJjZSI+c2V0U291cmNlPC9hPihqYXZhLm5ldC5VUkwgc291cmNlVVJMKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFRhcmdldCI+c2V0VGFyZ2V0PC9hPihqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdCByZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RhY2siPnN0YWNrPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RlcEludG8iPnN0ZXBJbnRvPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RlcE92ZXIiPnN0ZXBPdmVyPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RlcFJldHVybiI+c3RlcFJldHVybjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N1c3BlbmQiPnN1c3BlbmQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9BYnN0cmFjdERlYnVnZ2VyIj5BYnN0cmFjdERlYnVnZ2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QWJzdHJhY3REZWJ1Z2dlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRCcmVha3BvaW50Ij5hZGRCcmVha3BvaW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRCcmVha3BvaW50PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQnJlYWtQb2ludCBicmVha3BvaW50KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5icmVha3BvaW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9jaGVja1N0b3BwZWQiPmNoZWNrU3RvcHBlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+Y2hlY2tTdG9wcGVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNoZWNrIHdoZXRoZXIgdGhlIGRlYnVnZ2VyIGhhcyBiZWVuIHN0b3BwZWQgYW5kIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZiBzby48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY2hlY2tTdXNwZW5kZWQiPmNoZWNrU3VzcGVuZGVkPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jaGVja1N1c3BlbmRlZDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUgc3R5bGVGcmFtZQotICAgICAgICAgLAotICAgICAgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5CcmVha1BvaW50IGJyZWFrcG9pbnQpPC9jb2RlPjwvcD48cD5DaGVjayB3aGV0aGVyIHRoZSBkZWJ1Z2dlciBpcyBjdXJyZW50bHkgc3VzcGVuZGVkIG9yIHN0ZXBwaW5nIGF0IHRoZSBnaXZlbiBicmVha3BvaW50IGFuZCBzdHlsZSBmcmFtZSwgCi0gYW5kIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZiBzby48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0eWxlRnJhbWU8L2NvZGU+IC0gdGhlIHN0eWxlZnJhbWUgdG8gY2hlY2s8L3A+PHA+PGNvZGU+YnJlYWtwb2ludDwvY29kZT4gLSB0aGUgY3VycmVudCBsb2NhdGlvbjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWJ1Z2dlclN0YXJ0ZWQiPmRlYnVnZ2VyU3RhcnRlZDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZGVidWdnZXJTdGFydGVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWJ1Z2dlclN0b3BwZWQiPmRlYnVnZ2VyU3RvcHBlZDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCB2b2lkIDxzdHJvbmc+ZGVidWdnZXJTdG9wcGVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9kZWJ1Z2dlclRyYW5zZm9ybVN0YXJ0ZWQiPmRlYnVnZ2VyVHJhbnNmb3JtU3RhcnRlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGVidWdnZXJUcmFuc2Zvcm1TdGFydGVkPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNhbGxlZCB3aGVuIHRoZSBuZXh0IHRyYW5zZm9ybSBpbiB0aGUgcGlwZWxpbmUgaGFzIGJlZ3VuLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZWVrU3R5bGVGcmFtZSI+cGVla1N0eWxlRnJhbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lIDxzdHJvbmc+cGVla1N0eWxlRnJhbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UGVlayBhIHN0eWxlIGZyYW1lIGZyb20gdGhlIHN0YWNrLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lPC9jb2RlPiAtIHRoZSBwZWVrZWQgc3R5bGUgZnJhbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcG9wU3R5bGVGcmFtZSI+cG9wU3R5bGVGcmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUgPHN0cm9uZz5wb3BTdHlsZUZyYW1lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlBvcCBhIHN0eWxlIGZyYW1lIGZyb20gdGhlIHN0YWNrLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lPC9jb2RlPiAtIHRoZSBwb3BwZWQgc3R5bGUgZnJhbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcHVzaFN0eWxlRnJhbWUiPnB1c2hTdHlsZUZyYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5wdXNoU3R5bGVGcmFtZTwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUgc3R5bGVGcmFtZSk8L2NvZGU+PC9wPjxwPlB1c2ggYSBzdHlsZSBmcmFtZSBvbnRvIHRoZSBzdGFjay48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0eWxlRnJhbWU8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3F1aXQiPnF1aXQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnF1aXQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbW92ZUJyZWFrcG9pbnQiPnJlbW92ZUJyZWFrcG9pbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbW92ZUJyZWFrcG9pbnQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5CcmVha1BvaW50IGJyZWFrcG9pbnQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmJyZWFrcG9pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3Jlc3VtZSI+cmVzdW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5yZXN1bWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3J1biI+cnVuPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5ydW48L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEV2ZW50V3JpdGVyIj5zZXRFdmVudFdyaXRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0RXZlbnRXcml0ZXI8L3N0cm9uZz4oamF2YS5pby5Xcml0ZXIgd3JpdGVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT53cml0ZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldEludm9rZXIiPnNldEludm9rZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEludm9rZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyIGludm9rZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmludm9rZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFNvdXJjZSI+c2V0U291cmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRTb3VyY2U8L3N0cm9uZz4oamF2YS5uZXQuVVJMIHNvdXJjZVVSTCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c291cmNlVVJMPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRUYXJnZXQiPnNldFRhcmdldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0VGFyZ2V0PC9zdHJvbmc+KGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0IHJlcyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVzPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGFjayI+c3RhY2s8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnN0YWNrPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RlcEludG8iPnN0ZXBJbnRvPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGVwSW50bzwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RlcE92ZXIiPnN0ZXBPdmVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zdGVwT3Zlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RlcFJldHVybiI+c3RlcFJldHVybjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RlcFJldHVybjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3VzcGVuZCI+c3VzcGVuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3VzcGVuZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQnJlYWtQb2ludC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQnJlYWtQb2ludC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmEwNWMyLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkJyZWFrUG9pbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIEJyZWFrUG9pbnQ8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5CcmVha1BvaW50PC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5BIGxpbmUgbnVtYmVyIGluIGEgZmlsZS48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0JyZWFrUG9pbnQiPkJyZWFrUG9pbnQ8L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgZmlsZQotICAgICAgICAgLAotICAgICAgaW50IGxpbmUpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgYm9vbGVhbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9lcXVhbHMiPmVxdWFsczwvYT4oamF2YS5sYW5nLk9iamVjdCBvYmopPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0RmlsZSI+Z2V0RmlsZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgZmlsZSBsb2NhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldExpbmUiPmdldExpbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpbmUgbnVtYmVyPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9oYXNoQ29kZSI+aGFzaENvZGU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9CcmVha1BvaW50Ij5CcmVha1BvaW50PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+QnJlYWtQb2ludDwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIGZpbGUKLSAgICAgICAgICwKLSAgICAgIGludCBsaW5lKTwvY29kZT48L3A+PHA+Q29uc3RydWN0IGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgZm9yIHRoZSBnaXZlbiBmaWxlIGFuZCBsaW5lIG51bWJlci48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9lcXVhbHMiPmVxdWFsczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+ZXF1YWxzPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3Qgb2JqKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vYmo8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5ib29sZWFuPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRGaWxlIj5nZXRGaWxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRGaWxlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgZmlsZSBsb2NhdGlvbi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIGZpbGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0TGluZSI+Z2V0TGluZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRMaW5lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGluZSBudW1iZXI8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT4gLSB0aGUgbGluZSBudW1iZXI8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzaENvZGUiPmhhc2hDb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmhhc2hDb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnRvU3RyaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuRGVidWdDb25zdGFudHMuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkRlYnVnQ29uc3RhbnRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZWMzNzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuRGVidWdDb25zdGFudHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIERlYnVnQ29uc3RhbnRzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+RGVidWdDb25zdGFudHM8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkNvbnN0YW50cyB1c2VkIGJ5IHRoZSBkZWJ1Z2dlci4KLSAKLSA8cD4KLSBOb3RlIHRoYXQgY2xhc3MgaXMgbG9hZGVkIGJvdGggb24gdGhlIEVjbGlwc2UgY2xhc3NwYXRoIGFuZCB0aGUgCi0gbGF1bmNoZWQgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcywgc3VjaCB0aGF0IHRoZXkgY2FuIHVzZSBleGFjdGx5IHRoZSBzYW1lIGNvbnN0YW50cwotIGZvciBjb21tdW5pY2F0aW9uLgotIDwvcD48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1JFUVVFU1RfQUREX0JSRUFLUE9JTlQiPlJFUVVFU1RfQUREX0JSRUFLUE9JTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSBhZGRpdGlvbiBvZiBhIGJyZWFrcG9pbnQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1JFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQiPlJFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSByZW1vdmFsIG9mIGEgYnJlYWtwb2ludC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUkVRVUVTVF9SRVNVTUUiPlJFUVVFU1RfUkVTVU1FPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgcmVzdW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9SRVFVRVNUX1NUQUNLIj5SRVFVRVNUX1NUQUNLPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCB1c2VkIHRvIHJlcXVlc3QgdGhlIHN0YWNrLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9SRVFVRVNUX1NUQVJUIj5SRVFVRVNUX1NUQVJUPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCB1c2VkIHRvIG5vdGlmeSB0aGUgZGVidWdnZXIgdG8gc3RhcnQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1JFUVVFU1RfU1RFUF9JTlRPIj5SRVFVRVNUX1NURVBfSU5UTzwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IHN0ZXAgaW50by48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUkVRVUVTVF9TVEVQX09WRVIiPlJFUVVFU1RfU1RFUF9PVkVSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3RlcCBvdmVyLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9SRVFVRVNUX1NURVBfUkVUVVJOIj5SRVFVRVNUX1NURVBfUkVUVVJOPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3RlcCByZXR1cm4uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1JFUVVFU1RfU1VTUEVORCI+UkVRVUVTVF9TVVNQRU5EPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3VzcGVuc2lvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfUkVRVUVTVF9WQUxVRSI+UkVRVUVTVF9WQUxVRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgY29uc3RhbnQgdXNlZCB0byByZXF1ZXN0IGEgdmFyaWFibGUgdmFsdWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1JFUVVFU1RfVkFSSUFCTEUiPlJFUVVFU1RfVkFSSUFCTEU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgVGhlIGNvbnN0YW50IHVzZWQgdG8gcmVxdWVzdCBhIHZhcmlhYmxlLjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWJ1Z0NvbnN0YW50cyI+RGVidWdDb25zdGFudHM8L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfUkVRVUVTVF9BRERfQlJFQUtQT0lOVCI+UkVRVUVTVF9BRERfQlJFQUtQT0lOVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5SRVFVRVNUX0FERF9CUkVBS1BPSU5UPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IGFkZGl0aW9uIG9mIGEgYnJlYWtwb2ludC48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1JFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQiPlJFUVVFU1RfUkVNT1ZFX0JSRUFLUE9JTlQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+UkVRVUVTVF9SRU1PVkVfQlJFQUtQT0lOVDwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSByZW1vdmFsIG9mIGEgYnJlYWtwb2ludC48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1JFUVVFU1RfUkVTVU1FIj5SRVFVRVNUX1JFU1VNRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5SRVFVRVNUX1JFU1VNRTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSByZXN1bWUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9SRVFVRVNUX1NUQUNLIj5SRVFVRVNUX1NUQUNLPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlJFUVVFU1RfU1RBQ0s8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBjb25zdGFudCB1c2VkIHRvIHJlcXVlc3QgdGhlIHN0YWNrLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfUkVRVUVTVF9TVEFSVCI+UkVRVUVTVF9TVEFSVDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5SRVFVRVNUX1NUQVJUPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgY29uc3RhbnQgdXNlZCB0byBub3RpZnkgdGhlIGRlYnVnZ2VyIHRvIHN0YXJ0LjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfUkVRVUVTVF9TVEVQX0lOVE8iPlJFUVVFU1RfU1RFUF9JTlRPPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlJFUVVFU1RfU1RFUF9JTlRPPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgY29uc3RhbnQgdXNlZCB0byBzaWduaWZ5IHN0ZXAgaW50by48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1JFUVVFU1RfU1RFUF9PVkVSIj5SRVFVRVNUX1NURVBfT1ZFUjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5SRVFVRVNUX1NURVBfT1ZFUjwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGNvbnN0YW50IHVzZWQgdG8gc2lnbmlmeSBzdGVwIG92ZXIuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9SRVFVRVNUX1NURVBfUkVUVVJOIj5SRVFVRVNUX1NURVBfUkVUVVJOPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlJFUVVFU1RfU1RFUF9SRVRVUk48L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3RlcCByZXR1cm4uPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9SRVFVRVNUX1NVU1BFTkQiPlJFUVVFU1RfU1VTUEVORDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5SRVFVRVNUX1NVU1BFTkQ8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBjb25zdGFudCB1c2VkIHRvIHNpZ25pZnkgc3VzcGVuc2lvbi48L3RkPjwvdHI+PC90YWJsZT48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX1JFUVVFU1RfVkFMVUUiPlJFUVVFU1RfVkFMVUU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+UkVRVUVTVF9WQUxVRTwvc3Ryb25nPjwvY29kZT48L3A+PHRhYmxlPjx0cj48dGQ+VGhlIGNvbnN0YW50IHVzZWQgdG8gcmVxdWVzdCBhIHZhcmlhYmxlIHZhbHVlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfUkVRVUVTVF9WQVJJQUJMRSI+UkVRVUVTVF9WQVJJQUJMRTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5SRVFVRVNUX1ZBUklBQkxFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgY29uc3RhbnQgdXNlZCB0byByZXF1ZXN0IGEgdmFyaWFibGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fRGVidWdDb25zdGFudHMiPkRlYnVnQ29uc3RhbnRzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RGVidWdDb25zdGFudHM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkRlYnVnUnVubmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5EZWJ1Z1J1bm5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTc3MTdjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkRlYnVnUnVubmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBEZWJ1Z1J1bm5lcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkRlYnVnUnVubmVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UaGUgZW50cnkgcG9pbnQgdG8gdGhlIGRlYnVnIHByb2Nlc3Mgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIGEgZGVidWdnZXIgCi0gYW5kIHRoZW4gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBFY2xpcHNlIHByb2Nlc3MgdmlhIHNvY2tldHMgdXNpbmcgYSBjb21tb24gc2V0IG9mIGNvbW1hbmRzLgotIAotIDx1bD4KLSA8bGk+aW5zdGFudGlhdGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPklYU0xEZWJ1Z2dlcjwvY29kZT4KLSA8bGk+Y29uZmlndXJlcyB0aGUgZGVidWdnZXIgd2l0aCB0aGUgdHJhbnNmb3JtYXRpb24gcGlwZWxpbmUKLSA8bGk+c3RhcnRzIHRoZSBkZWJ1Z2dlciBpbiBhIHNlcGFyYXRlIHRocmVhZAotIDxsaT50aGUgbWFpbiB0aHJlYWQgaXMgdGhlbiB1c2VkIHRvIGxpc3RlbiB0byBpbmNvbWluZyByZXF1ZXN0cyBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgZGVidWdnZXIgbWV0aG9kcwotIDwvdWw+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWJ1Z1J1bm5lciI+RGVidWdSdW5uZXI8L2E+PC9zdHJvbmc+KGphdmEuaW8uQnVmZmVyZWRSZWFkZXIgcmVxdWVzdEluCi0gICAgICAgICAsCi0gICAgICBqYXZhLmlvLlByaW50V3JpdGVyIHJlcXVlc3RPdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgZXZlbnRPdXQpPC9jb2RlPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9EZWJ1Z1J1bm5lciI+RGVidWdSdW5uZXI8L2E+PC9zdHJvbmc+KGludCByZXF1ZXN0UG9ydAotICAgICAgICAgLAotICAgICAgaW50IGV2ZW50UG9ydCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2Rpc3Bvc2UiPmRpc3Bvc2U8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBEaXNwb3NlIG9mIHRoaXMgLSBjbG9zZSBhbGwgb3BlbiBzb2NrZXRzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2xvb3AiPmxvb3A8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuSVhTTERlYnVnZ2VyIGRlYnVnZ2VyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgZ2l2ZW4gZGVidWdnZXIgaW4gaXRzIG93biB0aHJlYWQsIGFuZCBibG9ja3Mgd2hpbGUgd2FpdGluZyAKLSBmb3IgaW5jb21pbmcgcmVxdWVzdHMgZnJvbSB0aGUgcmVxdWVzdCBwb3J0LCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZXF1ZXN0cy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfbWFpbiI+bWFpbjwvYT4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgRXhwZWN0ZWQgYXJndW1lbnRzOgotIAotIDxvbD4KLSA8bGk+dGhlIGNsYXNzIG5hbWUgb2YgdGhlIGludm9rZXIKLSA8bGk+dGhlIGZpbGUgbmFtZSBvZiB0aGUgWE1MIGxhdW5jaCBjb25maWd1cmF0aW9uIGZpbGUKLSA8bGk+dGhlIFVSTCBvZiB0aGUgc291cmNlIGRvY3VtZW50Ci0gPGxpPnRoZSBmaWxlIG9mIHRoZSBvdXRwdXQgZG9jdW1lbnQKLSA8bGk+bm90IHVzZWQgKGFueXRoaW5nKQotIDxsaT50aGUgY2xhc3MgbmFtZSBvZiB0aGUgPGNvZGU+SVhTTERlYnVnZ2VyPC9jb2RlPiBpbnN0YW5jZQotIDxsaT50aGUgcG9ydCB1c2VkIGZvciByZXF1ZXN0cwotIDxsaT50aGUgcG9ydCB1c2VkIGZvciBkZWJ1ZyBldmVudHMKLSA8L29sPjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX0RlYnVnUnVubmVyIj5EZWJ1Z1J1bm5lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkRlYnVnUnVubmVyPC9zdHJvbmc+KGphdmEuaW8uQnVmZmVyZWRSZWFkZXIgcmVxdWVzdEluCi0gICAgICAgICAsCi0gICAgICBqYXZhLmlvLlByaW50V3JpdGVyIHJlcXVlc3RPdXQKLSAgICAgICAgICwKLSAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgZXZlbnRPdXQpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB1c2luZyB0aGUgc3VwcGxpZWQgcmVhZGVycyBhbmQgd3JpdGVycy48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fRGVidWdSdW5uZXIiPkRlYnVnUnVubmVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+RGVidWdSdW5uZXI8L3N0cm9uZz4oaW50IHJlcXVlc3RQb3J0Ci0gICAgICAgICAsCi0gICAgICBpbnQgZXZlbnRQb3J0KTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgZ2l2ZW4gYSByZXF1ZXN0IHBvcnQgYW5kIGFuIGV2ZW50IHBvcnQuPC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZGlzcG9zZSI+ZGlzcG9zZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+ZGlzcG9zZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5EaXNwb3NlIG9mIHRoaXMgLSBjbG9zZSBhbGwgb3BlbiBzb2NrZXRzLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9sb29wIj5sb29wPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5sb29wPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuSVhTTERlYnVnZ2VyIGRlYnVnZ2VyKTwvY29kZT48L3A+PHA+VGhpcyBtZXRob2Qgc3RhcnRzIHRoZSBnaXZlbiBkZWJ1Z2dlciBpbiBpdHMgb3duIHRocmVhZCwgYW5kIGJsb2NrcyB3aGlsZSB3YWl0aW5nIAotIGZvciBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIHRoZSByZXF1ZXN0IHBvcnQsIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHJlcXVlc3RzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZGVidWdnZXI8L2NvZGU+IC0gdGhlIGRlYnVnZ2VyIHRvIHN0YXJ0IGluIGEgdGhyZWFkPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuVHJhbnNmb3JtYXRpb25FeGNlcHRpb24gLSBpZiBhIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdHJhbnNmb3JtaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9tYWluIj5tYWluPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5tYWluPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKTwvY29kZT48L3A+PHA+RXhwZWN0ZWQgYXJndW1lbnRzOgotIAotIDxvbD4KLSA8bGk+dGhlIGNsYXNzIG5hbWUgb2YgdGhlIGludm9rZXIKLSA8bGk+dGhlIGZpbGUgbmFtZSBvZiB0aGUgWE1MIGxhdW5jaCBjb25maWd1cmF0aW9uIGZpbGUKLSA8bGk+dGhlIFVSTCBvZiB0aGUgc291cmNlIGRvY3VtZW50Ci0gPGxpPnRoZSBmaWxlIG9mIHRoZSBvdXRwdXQgZG9jdW1lbnQKLSA8bGk+bm90IHVzZWQgKGFueXRoaW5nKQotIDxsaT50aGUgY2xhc3MgbmFtZSBvZiB0aGUgPGNvZGU+SVhTTERlYnVnZ2VyPC9jb2RlPiBpbnN0YW5jZQotIDxsaT50aGUgcG9ydCB1c2VkIGZvciByZXF1ZXN0cwotIDxsaT50aGUgcG9ydCB1c2VkIGZvciBkZWJ1ZyBldmVudHMKLSA8L29sPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnczwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuSVhTTERlYnVnZ2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5JWFNMRGVidWdnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJmZjc2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5JWFNMRGVidWdnZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIElYU0xEZWJ1Z2dlcjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPklYU0xEZWJ1Z2dlcjwvc3Ryb25nPgotZXh0ZW5kcyA8L3ByZT5BbiBpbnRlcmZhY2UgdG8gWFNMIGRlYnVnZ2VyIGluc3RhbmNlcy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZEJyZWFrcG9pbnQiPmFkZEJyZWFrcG9pbnQ8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQnJlYWtQb2ludCBicmVha3BvaW50KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhIGJyZWFrcG9pbnQgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRUcmFuc2Zvcm1lciI+YWRkVHJhbnNmb3JtZXI8L2E+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgdHJhbnNmb3JtZXIgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5WYXJpYWJsZTwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYXJpYWJsZSI+Z2V0VmFyaWFibGU8L2E+KGludCBpZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhcmlhYmxlIHdpdGggdGhlIGdpdmVuIGlkLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3F1aXQiPnF1aXQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBRdWl0IGRlYnVnZ2luZy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZW1vdmVCcmVha3BvaW50Ij5yZW1vdmVCcmVha3BvaW50PC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkJyZWFrUG9pbnQgYnJlYWtwb2ludCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZW1vdmUgYSBicmVha3BvaW50IGZyb20gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZXN1bWUiPnJlc3VtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBlcmZvcm0gYSAncmVzdW1lJyBvcGVyYXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0RXZlbnRXcml0ZXIiPnNldEV2ZW50V3JpdGVyPC9hPihqYXZhLmlvLldyaXRlciB3cml0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBXcml0ZXIgZm9yIHRoaXMgdG8gd3JpdGUgZXZlbnRzIHRvLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEludm9rZXIiPnNldEludm9rZXI8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlciBpbnZva2VyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB0aGUgaW52b2tlciB0byB1c2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0U291cmNlIj5zZXRTb3VyY2U8L2E+KGphdmEubmV0LlVSTCBzb3VyY2VVUkwpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBVUkwgb2YgdGhlIHRyYW5zZm9ybWF0aW9uIHNvdXJjZSBmaWxlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFRhcmdldCI+c2V0VGFyZ2V0PC9hPihqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdCByZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSB0cmFuc2Zvcm1hdGlvbiBSZXN1bHQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0VHJhbnNmb3JtZXJGYWN0b3J5Ij5zZXRUcmFuc2Zvcm1lckZhY3Rvcnk8L2E+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5IGZhY3RvcnkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSB0cmFuc2Zvcm1lciBmYWN0b3J5IHRvIHVzZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGFjayI+c3RhY2s8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZW5lcmF0ZSBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBvZiBmcmFtZXMgYW5kIHRoZWlyIHZhcmlhYmxlcy4KLSA8cD4KLSBGcmFtZXMgYXJlIGdlbmVyYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiA8aT5maWxlPC9pPnw8aT5mcmFtZUlkPC9pPnw8aT5saW5lTnVtYmVyPC9pPnw8aT5uYW1lPC9pPgotIFRoaXMgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgd2l0aCB0aGUgaWQncyBvZiB0aGUgZnJhbWUncyB2YXJpYWJsZXMgKGVhY2ggdmFyaWFibGUgaWQgYmVpbmcgdW5pcXVlIGZvciB0aGUgd2hvbGUgcHJvY2VzcykuCi0gPC9wPgotIDxwPgotIFRoZSBzZXBhcmF0b3IgZm9yIGZyYW1lcyBpcyAkJCQuIFdpdGhpbiBhIGZyYW1lLCB0aGUgc2VwYXJhdG9yIGZvciB2YXJpYWJsZSBpZCdzIGlzIHwuCi0gPC9wPgotIDxwPgotIGUuZy4gZmlsZTovdHJhbjEueHNsfDF8MTJ8eHNsOnRlbXBsYXRlIG5hbWU9InRlbXAxInwxfDJ8MyQkJGZpbGU6L3RyYW4yLnhzbHwyfDM0fHhzbDp0ZW1wbGF0ZSBuYW1lPSJ0ZW1wMiJ8NHw1fDYKLSAKLSBUaGlzIGRlZmluZXMgMiBmcmFtZXMgd2l0aCBpZCdzIDEgYW5kIDIsIHdoaWNoIGFyZSBvY2N1ciBpbiBmaWxlcyB0cmFuMS54c2wgYW5kIHRyYW4yLnhzbCByZXNwZWN0aXZlbHkuCi0gRnJhbWUgMSBpcyBjdXJyZW50bHkgYXQgbGluZSAxMiwgaW4gYSB0ZW1wbGF0ZSB3aXRoIG5hbWUgdGVtcDEsIGFuZCBpdCBkZWZpbmVzIDMgdmFyaWFibGVzIHdpdGggaWQncyAxLCAyIGFuZCAzLiAKLSA8L3A+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3RlcEludG8iPnN0ZXBJbnRvPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUGVyZm9ybSBhICdzdGVwIGludG8nIG9wZXJhdGlvbi48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zdGVwT3ZlciI+c3RlcE92ZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQZXJmb3JtIGEgJ3N0ZXAgb3Zlcicgb3BlcmF0aW9uLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3N0ZXBSZXR1cm4iPnN0ZXBSZXR1cm48L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQZXJmb3JtIGEgJ3N0ZXAgcmV0dXJuJyBvcGVyYXRpb24uPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc3VzcGVuZCI+c3VzcGVuZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFBlcmZvcm0gYSAnc3VzcGVuZCcgb3BlcmF0aW9uLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkQnJlYWtwb2ludCI+YWRkQnJlYWtwb2ludDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkQnJlYWtwb2ludDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkJyZWFrUG9pbnQgYnJlYWtwb2ludCk8L2NvZGU+PC9wPjxwPkFkZCBhIGJyZWFrcG9pbnQgdG8gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmJyZWFrcG9pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFRyYW5zZm9ybWVyIj5hZGRUcmFuc2Zvcm1lcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkVHJhbnNmb3JtZXI8L3N0cm9uZz4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcik8L2NvZGU+PC9wPjxwPkFkZCBhIHRyYW5zZm9ybWVyIHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50cmFuc2Zvcm1lcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGUgPHN0cm9uZz5nZXRWYXJpYWJsZTwvc3Ryb25nPihpbnQgaWQpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHZhcmlhYmxlIHdpdGggdGhlIGdpdmVuIGlkLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aWQ8L2NvZGU+IC0gdGhlIGlkIG9mIHRoZSB2YXJpYWJsZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5WYXJpYWJsZTwvY29kZT4gLSB0aGUgdmFyaWFibGU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcXVpdCI+cXVpdDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cXVpdDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5RdWl0IGRlYnVnZ2luZy48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVtb3ZlQnJlYWtwb2ludCI+cmVtb3ZlQnJlYWtwb2ludDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVtb3ZlQnJlYWtwb2ludDwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkJyZWFrUG9pbnQgYnJlYWtwb2ludCk8L2NvZGU+PC9wPjxwPlJlbW92ZSBhIGJyZWFrcG9pbnQgZnJvbSB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YnJlYWtwb2ludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVzdW1lIj5yZXN1bWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlc3VtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5QZXJmb3JtIGEgJ3Jlc3VtZScgb3BlcmF0aW9uLjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRFdmVudFdyaXRlciI+c2V0RXZlbnRXcml0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEV2ZW50V3JpdGVyPC9zdHJvbmc+KGphdmEuaW8uV3JpdGVyIHdyaXRlcik8L2NvZGU+PC9wPjxwPlNldCB0aGUgV3JpdGVyIGZvciB0aGlzIHRvIHdyaXRlIGV2ZW50cyB0by48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPndyaXRlcjwvY29kZT4gLSB0aGUgd3JpdGVyIHRvIHdyaXRlIGV2ZW50cyB0bzwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRJbnZva2VyIj5zZXRJbnZva2VyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRJbnZva2VyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlciBpbnZva2VyKTwvY29kZT48L3A+PHA+U2V0IHRoZSBpbnZva2VyIHRvIHVzZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmludm9rZXI8L2NvZGU+IC0gdGhlIGludm9rZXIgdG8gc2V0PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFNvdXJjZSI+c2V0U291cmNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRTb3VyY2U8L3N0cm9uZz4oamF2YS5uZXQuVVJMIHNvdXJjZVVSTCk8L2NvZGU+PC9wPjxwPlNldCB0aGUgVVJMIG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBzb3VyY2UgZmlsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNvdXJjZVVSTDwvY29kZT4gLSB0aGUgc291cmNlIFVSTDwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRUYXJnZXQiPnNldFRhcmdldDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2V0VGFyZ2V0PC9zdHJvbmc+KGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0IHJlcyk8L2NvZGU+PC9wPjxwPlNldCB0aGUgdHJhbnNmb3JtYXRpb24gUmVzdWx0LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cmVzPC9jb2RlPiAtIHRoZSByZXN1bHQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0VHJhbnNmb3JtZXJGYWN0b3J5Ij5zZXRUcmFuc2Zvcm1lckZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFRyYW5zZm9ybWVyRmFjdG9yeTwvc3Ryb25nPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeSBmYWN0b3J5KTwvY29kZT48L3A+PHA+U2V0IHRoZSB0cmFuc2Zvcm1lciBmYWN0b3J5IHRvIHVzZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZhY3Rvcnk8L2NvZGU+IC0gdGhlIGZhY3RvcnkgdG8gdXNlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0YWNrIj5zdGFjazwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+c3RhY2s8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2VuZXJhdGUgYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgb2YgZnJhbWVzIGFuZCB0aGVpciB2YXJpYWJsZXMuCi0gPHA+Ci0gRnJhbWVzIGFyZSBnZW5lcmF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDogPGk+ZmlsZTwvaT58PGk+ZnJhbWVJZDwvaT58PGk+bGluZU51bWJlcjwvaT58PGk+bmFtZTwvaT4KLSBUaGlzIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIHdpdGggdGhlIGlkJ3Mgb2YgdGhlIGZyYW1lJ3MgdmFyaWFibGVzIChlYWNoIHZhcmlhYmxlIGlkIGJlaW5nIHVuaXF1ZSBmb3IgdGhlIHdob2xlIHByb2Nlc3MpLgotIDwvcD4KLSA8cD4KLSBUaGUgc2VwYXJhdG9yIGZvciBmcmFtZXMgaXMgJCQkLiBXaXRoaW4gYSBmcmFtZSwgdGhlIHNlcGFyYXRvciBmb3IgdmFyaWFibGUgaWQncyBpcyB8LgotIDwvcD4KLSA8cD4KLSBlLmcuIGZpbGU6L3RyYW4xLnhzbHwxfDEyfHhzbDp0ZW1wbGF0ZSBuYW1lPSJ0ZW1wMSJ8MXwyfDMkJCRmaWxlOi90cmFuMi54c2x8MnwzNHx4c2w6dGVtcGxhdGUgbmFtZT0idGVtcDIifDR8NXw2Ci0gCi0gVGhpcyBkZWZpbmVzIDIgZnJhbWVzIHdpdGggaWQncyAxIGFuZCAyLCB3aGljaCBhcmUgb2NjdXIgaW4gZmlsZXMgdHJhbjEueHNsIGFuZCB0cmFuMi54c2wgcmVzcGVjdGl2ZWx5LgotIEZyYW1lIDEgaXMgY3VycmVudGx5IGF0IGxpbmUgMTIsIGluIGEgdGVtcGxhdGUgd2l0aCBuYW1lIHRlbXAxLCBhbmQgaXQgZGVmaW5lcyAzIHZhcmlhYmxlcyB3aXRoIGlkJ3MgMSwgMiBhbmQgMy4gCi0gPC9wPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgZ2VuZXJhdGVkIHN0cmluZzwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zdGVwSW50byI+c3RlcEludG88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN0ZXBJbnRvPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPlBlcmZvcm0gYSAnc3RlcCBpbnRvJyBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N0ZXBPdmVyIj5zdGVwT3ZlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RlcE92ZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UGVyZm9ybSBhICdzdGVwIG92ZXInIG9wZXJhdGlvbi48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc3RlcFJldHVybiI+c3RlcFJldHVybjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c3RlcFJldHVybjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5QZXJmb3JtIGEgJ3N0ZXAgcmV0dXJuJyBvcGVyYXRpb24uPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3N1c3BlbmQiPnN1c3BlbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnN1c3BlbmQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+UGVyZm9ybSBhICdzdXNwZW5kJyBvcGVyYXRpb24uPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY5ZGJlOS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBTdHlsZUZyYW1lPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+U3R5bGVGcmFtZTwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QW4gPGNvZGU+eHNsOnRlbXBsYXRlPC9jb2RlPiB0aGF0IGZvcm1zIHBhcnQgb2YgdGhlIGNhbGwgc3RhY2suPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9TdHlsZUZyYW1lIj5TdHlsZUZyYW1lPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUgcGFyZW50KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkQ2hpbGQiPmFkZENoaWxkPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUgY2hpbGQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQWRkIGEgY2hpbGQgZnJhbWUgdG8gdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0Q2hpbGRyZW4iPmdldENoaWxkcmVuPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBjaGlsZHJlbiBvZiB0aGlzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDdXJyZW50TGluZSI+Z2V0Q3VycmVudExpbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpbmUgbnVtYmVyIGF0IHdoaWNoIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgbG9jYXRlZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGaWxlbmFtZSI+Z2V0RmlsZW5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGZpbGUgaW4gd2hpY2ggdGhpcyBmcmFtZSBpcyBmb3VuZC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldElkIj5nZXRJZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEEgdW5pcXVlIGlkIGZvciB0aGlzIGZyYW1lPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0TmFtZSI+Z2V0TmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgbmFtZSBvZiB0aGlzIGZyYW1lLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHBhcmVudCBvZiB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYXJpYWJsZVN0YWNrIj5nZXRWYXJpYWJsZVN0YWNrPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGEgbGlzdCBvZiA8Y29kZT5WYXJpYWJsZXM8L2NvZGU+J3M8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZW1vdmVDaGlsZCI+cmVtb3ZlQ2hpbGQ8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuU3R5bGVGcmFtZSBjaGlsZCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZW1vdmUgYSBjaGlsZCBmcmFtZSBmcm9tIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdG9TdHJpbmciPnRvU3RyaW5nPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgQ3JlYXRlcyBhIHN0cmluZyBpbiB0aGUgZm9ybWF0IDxpPmZpbGU8L2k+fDxpPmZyYW1lSWQ8L2k+fDxpPmxpbmVOdW1iZXI8L2k+fDxpPm5hbWU8L2k+LgotIFNpbmNlIHBpcGUgaXMgdXNlZCBhcyBhIHNlcGFyYXRvciwgdGhlIG5hbWUgaGFzIGFueSBwaXBlICh8KSBjaGFyYWN0ZXJzIHJlcGxhY2VkIHdpdGggdGhlIGxpdGVyYWwgJyVAX1BJUEVfQCUnPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fU3R5bGVGcmFtZSI+U3R5bGVGcmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlN0eWxlRnJhbWU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lIHBhcmVudCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIHVzaW5nIHRoZSBnaXZlbiBmcmFtZSBhcyBpdHMgcGFyZW50IChtYXkgYmUgbnVsbCBpZiB0aGlzIGlzIHRoZSByb290IGZyYW1lKS48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRDaGlsZCI+YWRkQ2hpbGQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmFkZENoaWxkPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuU3R5bGVGcmFtZSBjaGlsZCk8L2NvZGU+PC9wPjxwPkFkZCBhIGNoaWxkIGZyYW1lIHRvIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5jaGlsZDwvY29kZT4gLSB0aGUgZnJhbWUgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldENoaWxkcmVuIj5nZXRDaGlsZHJlbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdCA8c3Ryb25nPmdldENoaWxkcmVuPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgY2hpbGRyZW4gb2YgdGhpczwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gYSBsaXN0IG9mIDxjb2RlPlN0eWxlRnJhbWU8L2NvZGU+J3M8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0Q3VycmVudExpbmUiPmdldEN1cnJlbnRMaW5lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmdldEN1cnJlbnRMaW5lPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGluZSBudW1iZXIgYXQgd2hpY2ggdGhlIGZyYW1lIGlzIGN1cnJlbnRseSBsb2NhdGVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBsaW5lIG51bWJlciBhdCB3aGljaCB0aGlzIGlzIGhlbGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmlsZW5hbWUiPmdldEZpbGVuYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRGaWxlbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGZpbGUgaW4gd2hpY2ggdGhpcyBmcmFtZSBpcyBmb3VuZC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIGZpbGVuYW1lIGZvciB0aGlzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldElkIj5nZXRJZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRJZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5BIHVuaXF1ZSBpZCBmb3IgdGhpcyBmcmFtZTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIGEgdW5pcXVlIGlkIGZvciB0aGlzIGZyYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBuYW1lIG9mIHRoaXMgZnJhbWUuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSBuYW1lIG9mIHRoaXM8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyZW50Ij5nZXRQYXJlbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lIDxzdHJvbmc+Z2V0UGFyZW50PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgcGFyZW50IG9mIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWU8L2NvZGU+IC0gdGhlIHBhcmVudCBmcmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYXJpYWJsZVN0YWNrIj5nZXRWYXJpYWJsZVN0YWNrPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0VmFyaWFibGVTdGFjazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgYSBsaXN0IG9mIDxjb2RlPlZhcmlhYmxlczwvY29kZT4nczwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIGxpc3Qgb2YgdmFyaWFibGVzIGZvciB0aGlzIGZyYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbW92ZUNoaWxkIj5yZW1vdmVDaGlsZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVtb3ZlQ2hpbGQ8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lIGNoaWxkKTwvY29kZT48L3A+PHA+UmVtb3ZlIGEgY2hpbGQgZnJhbWUgZnJvbSB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y2hpbGQ8L2NvZGU+IC0gdGhlIGZyYW1lIHRvIHJlbW92ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90b1N0cmluZyI+dG9TdHJpbmc8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnRvU3RyaW5nPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZXMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdCA8aT5maWxlPC9pPnw8aT5mcmFtZUlkPC9pPnw8aT5saW5lTnVtYmVyPC9pPnw8aT5uYW1lPC9pPi4KLSBTaW5jZSBwaXBlIGlzIHVzZWQgYXMgYSBzZXBhcmF0b3IsIHRoZSBuYW1lIGhhcyBhbnkgcGlwZSAofCkgY2hhcmFjdGVycyByZXBsYWNlZCB3aXRoIHRoZSBsaXRlcmFsICclQF9QSVBFX0AlJzwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlZhcmlhYmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YmRhYmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFZhcmlhYmxlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+VmFyaWFibGU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkFuIGFic3RyYWN0IGNsYXNzIHRoYXQgWFNMIHByb2Nlc3NvciBpbXBsZW1lbnRhdGlvbnMgY2FuIHN1YmNsYXNzIGZvciB0aGVpciB2YXJpYWJsZXMuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9CT09MRUFOIj5CT09MRUFOPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9HTE9CQUxfU0NPUEUiPkdMT0JBTF9TQ09QRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgY29uc3RhbnQgZGVub3RpbmcgYSBnbG9iYWwgc2NvcGUgdmFyaWFibGUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX0xPQ0FMX1NDT1BFIj5MT0NBTF9TQ09QRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgY29uc3RhbnQgZGVub3RpbmcgYSBsb2NhbCBzY29wZSB2YXJpYWJsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9NQVhJTVVNX1ZBTFVFX1NJWkUiPk1BWElNVU1fVkFMVUVfU0laRTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX25hbWUiPm5hbWU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05PREVTRVQiPk5PREVTRVQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX05VTUJFUiI+TlVNQkVSPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9PQkpFQ1QiPk9CSkVDVDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3Njb3BlIj5zY29wZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfc2xvdE51bWJlciI+c2xvdE51bWJlcjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfU1RSSU5HIj5TVFJJTkc8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX1RVTk5FTF9TQ09QRSI+VFVOTkVMX1NDT1BFPC9hPjwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBjb25zdGFudCBkZW5vdGluZyBhIHR1bm5lbCBzY29wZSB2YXJpYWJsZS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVU5LTk9XTiI+VU5LTk9XTjwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSI4MCUiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjZmllbGRfVU5SRVNPTFZFRCI+VU5SRVNPTFZFRDwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVmFyaWFibGUiPlZhcmlhYmxlPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc2NvcGUKLSAgICAgICAgICwKLSAgICAgIGludCBzbG90TnVtYmVyKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGJvb2xlYW48L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZXF1YWxzIj5lcXVhbHM8L2E+KGphdmEubGFuZy5PYmplY3Qgb2JqKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0SWQiPmdldElkPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBpZCB1c2VkIGZvciB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIHZhcmlhYmxlIG5hbWUuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U2NvcGUiPmdldFNjb3BlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBzY29wZSBvZiB0aGlzIHZhcmlhYmxlIC0gb25lIG9mIDxjb2RlPkxPQ0FMX1NDT1BFPC9jb2RlPiwgPGNvZGU+VFVOTkVMX1NDT1BFPC9jb2RlPiBvciA8Y29kZT5HTE9CQUxfU0NPUEU8L2NvZGU+LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U2xvdE51bWJlciI+Z2V0U2xvdE51bWJlcjwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc2xvdCBudW1iZXIgZm9yIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VHlwZSI+Z2V0VHlwZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgdHlwZSBvZiB0aGlzIHZhcmlhYmxlIGUuZy4gc3RyaW5nLCBvciBub2RlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYXMgYSBTdHJpbmcuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFsdWVGaXJzdExpbmUiPmdldFZhbHVlRmlyc3RMaW5lPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YWx1ZSB0cnVuY2F0aW5nIHRvIDxjb2RlPk1BWElNVU1fVkFMVUVfU0laRTwvY29kZT4gd2hlcmUgbmVjZXNzYXJ5LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfaGFzaENvZGUiPmhhc2hDb2RlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgRmllbGQgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJmaWVsZF9CT09MRUFOIj5CT09MRUFOPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPkJPT0xFQU48L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfR0xPQkFMX1NDT1BFIj5HTE9CQUxfU0NPUEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+R0xPQkFMX1NDT1BFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgY29uc3RhbnQgZGVub3RpbmcgYSBnbG9iYWwgc2NvcGUgdmFyaWFibGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9MT0NBTF9TQ09QRSI+TE9DQUxfU0NPUEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TE9DQUxfU0NPUEU8L3N0cm9uZz48L2NvZGU+PC9wPjx0YWJsZT48dHI+PHRkPlRoZSBjb25zdGFudCBkZW5vdGluZyBhIGxvY2FsIHNjb3BlIHZhcmlhYmxlLjwvdGQ+PC90cj48L3RhYmxlPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTUFYSU1VTV9WQUxVRV9TSVpFIj5NQVhJTVVNX1ZBTFVFX1NJWkU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBpbnQgPHN0cm9uZz5NQVhJTVVNX1ZBTFVFX1NJWkU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfbmFtZSI+bmFtZTwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+bmFtZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9OT0RFU0VUIj5OT0RFU0VUPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk5PREVTRVQ8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfTlVNQkVSIj5OVU1CRVI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+TlVNQkVSPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX09CSkVDVCI+T0JKRUNUPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPk9CSkVDVDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9zY29wZSI+c2NvcGU8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPnNjb3BlPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3Nsb3ROdW1iZXIiPnNsb3ROdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgaW50IDxzdHJvbmc+c2xvdE51bWJlcjwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9TVFJJTkciPlNUUklORzwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5TVFJJTkc8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVFVOTkVMX1NDT1BFIj5UVU5ORUxfU0NPUEU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgc3RhdGljICBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+VFVOTkVMX1NDT1BFPC9zdHJvbmc+PC9jb2RlPjwvcD48dGFibGU+PHRyPjx0ZD5UaGUgY29uc3RhbnQgZGVub3RpbmcgYSB0dW5uZWwgc2NvcGUgdmFyaWFibGUuPC90ZD48L3RyPjwvdGFibGU+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF9VTktOT1dOIj5VTktOT1dOPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIHN0YXRpYyAgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPlVOS05PV048L3N0cm9uZz48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0iZmllbGRfVU5SRVNPTFZFRCI+VU5SRVNPTFZFRDwvYT48L2gyPjxwPjxjb2RlPnByb3RlY3RlZCBzdGF0aWMgIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5VTlJFU09MVkVEPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9WYXJpYWJsZSI+VmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5WYXJpYWJsZTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc2NvcGUKLSAgICAgICAgICwKLSAgICAgIGludCBzbG90TnVtYmVyKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgc2NvcGUgYW5kIHNsb3QgbnVtYmVyLjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2VxdWFscyI+ZXF1YWxzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGJvb2xlYW4gPHN0cm9uZz5lcXVhbHM8L3N0cm9uZz4oamF2YS5sYW5nLk9iamVjdCBvYmopPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm9iajwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldElkIj5nZXRJZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRJZDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIGlkIHVzZWQgZm9yIHRoaXMuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+IC0gdGhlIHZhcmlhYmxlIGlkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSB2YXJpYWJsZSBuYW1lLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgdmFyaWFibGUgbmFtZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTY29wZSI+Z2V0U2NvcGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldFNjb3BlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgc2NvcGUgb2YgdGhpcyB2YXJpYWJsZSAtIG9uZSBvZiA8Y29kZT5MT0NBTF9TQ09QRTwvY29kZT4sIDxjb2RlPlRVTk5FTF9TQ09QRTwvY29kZT4gb3IgPGNvZGU+R0xPQkFMX1NDT1BFPC9jb2RlPi48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIHZhcmlhYmxlIHNjb3BlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFNsb3ROdW1iZXIiPmdldFNsb3ROdW1iZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0U2xvdE51bWJlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHNsb3QgbnVtYmVyIGZvciB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPiAtIHRoZSBzbG90IG51bWJlcjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRUeXBlIj5nZXRUeXBlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRUeXBlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgdHlwZSBvZiB0aGlzIHZhcmlhYmxlIGUuZy4gc3RyaW5nLCBvciBub2RlPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSB2YXJpYWJsZSB0eXBlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhbHVlIj5nZXRWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgYXMgYSBTdHJpbmcuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSB2YWx1ZSBvZiB0aGlzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhbHVlRmlyc3RMaW5lIj5nZXRWYWx1ZUZpcnN0TGluZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VmFsdWVGaXJzdExpbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YWx1ZSB0cnVuY2F0aW5nIHRvIDxjb2RlPk1BWElNVU1fVkFMVUVfU0laRTwvY29kZT4gd2hlcmUgbmVjZXNzYXJ5LjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFsdWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfaGFzaENvZGUiPmhhc2hDb2RlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGludCA8c3Ryb25nPmhhc2hDb2RlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+aW50PC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLkNvbmZpZ3VyYXRpb25FeGNlcHRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTBjYWEzLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPkNvbmZpZ3VyYXRpb25FeGNlcHRpb248L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLkV4Y2VwdGlvbjwvcHJlPkFuIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiBjb25maWd1cmF0aW9uIG9mIGFuIFhTTCB0cmFuc2Zvcm0gcGlwZWxpbmUgZmFpbHMuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9Db25maWd1cmF0aW9uRXhjZXB0aW9uIj5Db25maWd1cmF0aW9uRXhjZXB0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1zZwotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlRocm93YWJsZSB0KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiI+Q29uZmlndXJhdGlvbkV4Y2VwdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPkNvbmZpZ3VyYXRpb25FeGNlcHRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtc2cKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5UaHJvd2FibGUgdCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSB0aGUgZXhjZXB0aW9uLjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0OGExNTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5JUHJvY2Vzc29ySW52b2tlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIElQcm9jZXNzb3JJbnZva2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+SVByb2Nlc3Nvckludm9rZXI8L3N0cm9uZz4KLWV4dGVuZHMgPC9wcmU+SW50ZXJmYWNlIHVzZWQgYnkgdGhlIGxhdW5jaGVkIHByb2Nlc3MgdG8gZGVmaW5lIHRoZSBYU0wgdHJhbnNmb3JtYXRpb24gcGlwZWxpbmUuCi0gVGhlIDxjb2RlPnNldEZlYXR1cmVzPC9jb2RlPiBhbmQgPGNvZGU+YWRkU3R5bGVzaGVldDwvY29kZT4gbWV0aG9kcyBzaG91bGQgYmUgY2FsbGVkCi0gYmVmb3JlIGNhbGxpbmcgPGNvZGU+dHJhbnNmb3JtPC9jb2RlPiB0byBkbyB0aGUgYWN0dWFsIHRyYW5zZm9ybWF0aW9uLgotIAotIDxwPgotIElmIDxjb2RlPmFkZFN0eWxlc2hlZXQ8L2NvZGU+IGlzIG5vdCBjYWxsZWQgYmVmb3JlIDxjb2RlPnRyYW5zZm9ybTwvY29kZT4sIHRoZW4KLSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHNvdXJjZSBkb2N1bWVudCBjb250YWlucyBhbmQgZW1iZWRkZWQgc3R5bGVzaGVldCBpbnN0cnVjdGlvbi4KLSA8L3A+PHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRTdHlsZXNoZWV0Ij5hZGRTdHlsZXNoZWV0PC9hPihqYXZhLm5ldC5VUkwgc3R5bGVzaGVldAotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLk1hcCBwYXJhbWV0ZXJzCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzCi0gICAgICAgICAsCi0gICAgICBqYXZheC54bWwudHJhbnNmb3JtLlVSSVJlc29sdmVyIHJlc29sdmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEFkZCBhIHN0eWxlc2hlZXQgdG8gdGhlIHBpcGVsaW5lIChvcmRlciBpcyBpbXBvcnRhbnQpLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEZlYXR1cmVzIj5zZXRGZWF0dXJlczwvYT4oamF2YS51dGlsLk1hcCBmZWF0dXJlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBmZWF0dXJlcyB0byB1c2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHJhbnNmb3JtIj50cmFuc2Zvcm08L2E+KGphdmEubmV0LlVSTCBzb3VyY2UKLSAgICAgICAgICwKLSAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0IHJlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBQZXJmb3JtIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRpb24uPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRTdHlsZXNoZWV0Ij5hZGRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRTdHlsZXNoZWV0PC9zdHJvbmc+KGphdmEubmV0LlVSTCBzdHlsZXNoZWV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuTWFwIHBhcmFtZXRlcnMKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Qcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMKLSAgICAgICAgICwKLSAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0uVVJJUmVzb2x2ZXIgcmVzb2x2ZXIpPC9jb2RlPjwvcD48cD5BZGQgYSBzdHlsZXNoZWV0IHRvIHRoZSBwaXBlbGluZSAob3JkZXIgaXMgaW1wb3J0YW50KS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0eWxlc2hlZXQ8L2NvZGU+IC0gdGhlIFVSTCBvZiB0aGUgc3R5bGVzaGVldCB0byBhZGQ8L3A+PHA+PGNvZGU+cGFyYW1ldGVyczwvY29kZT4gLSB0aGUgbWFwIG9mIHBhcmFtZXRlcnMgZm9yIHRoZSBzdHlsZXNoZWV0PC9wPjxwPjxjb2RlPm91dHB1dFByb3BlcnRpZXM8L2NvZGU+IC0gdGhlIG91dHB1dCBwcm9wZXJ0aWVzPC9wPjxwPjxjb2RlPnJlc29sdmVyPC9jb2RlPiAtIHRoZSA8Y29kZT5VUklSZXNvbHZlcjwvY29kZT4gdG8gdXNlPC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAtIGlmIHN0eWxlc2hlZXQgY291bGQgbm90IGJlIGFkZGVkPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRGZWF0dXJlcyI+c2V0RmVhdHVyZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldEZlYXR1cmVzPC9zdHJvbmc+KGphdmEudXRpbC5NYXAgZmVhdHVyZXMpPC9jb2RlPjwvcD48cD5TZXQgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBmZWF0dXJlcyB0byB1c2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mZWF0dXJlczwvY29kZT4gLSBhIG1hcCBvZiBTdHJpbmcgdi4gU3RyaW5nIGZlYXR1cmVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RyYW5zZm9ybSI+dHJhbnNmb3JtPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz50cmFuc2Zvcm08L3N0cm9uZz4oamF2YS5uZXQuVVJMIHNvdXJjZQotICAgICAgICAgLAotICAgICAgamF2YXgueG1sLnRyYW5zZm9ybS5SZXN1bHQgcmVzKTwvY29kZT48L3A+PHA+UGVyZm9ybSB0aGUgYWN0dWFsIHRyYW5zZm9ybWF0aW9uLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c291cmNlPC9jb2RlPiAtIHRoZSBVUkwgb2YgdGhlIFhNTCBzb3VyY2UgZG9jdW1lbnQ8L3A+PHA+PGNvZGU+cmVzPC9jb2RlPiAtIHRoZSB0cmFuc2Zvcm1hdGlvbiByZXN1bHQ8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbiAtIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBmYWlsZWQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZmZjNjNi4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgSkFYUFNBWFByb2Nlc3Nvckludm9rZXI8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5KQVhQU0FYUHJvY2Vzc29ySW52b2tlcjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+QW4gaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+SVByb2Nlc3Nvckludm9rZXI8L2NvZGU+IHRoYXQgdXNlcyBKQVhQIGFzIHRoZSB1bmRlcmx5aW5nCi0gdHJhbnNmb3JtYXRpb24gbWVjaGFuaXNtLjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fSkFYUFNBWFByb2Nlc3Nvckludm9rZXIiPkpBWFBTQVhQcm9jZXNzb3JJbnZva2VyPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRTdHlsZXNoZWV0Ij5hZGRTdHlsZXNoZWV0PC9hPihqYXZhLm5ldC5VUkwgc3R5bGVzaGVldAotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLk1hcCBwYXJhbWV0ZXJzCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzCi0gICAgICAgICAsCi0gICAgICBqYXZheC54bWwudHJhbnNmb3JtLlVSSVJlc29sdmVyIHJlc29sdmVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFN0eWxlc2hlZXQiPmFkZFN0eWxlc2hlZXQ8L2E+KGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlIHNvdXJjZQotICAgICAgICAgLAotICAgICAgamF2YXgueG1sLnRyYW5zZm9ybS5VUklSZXNvbHZlciByZXNvbHZlcgotICAgICAgICAgLAotICAgICAgamF2YS51dGlsLk1hcCBwYXJhbWV0ZXJzCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuUHJvcGVydGllcyBvdXRwdXRQcm9wZXJ0aWVzKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBvcmcueG1sLnNheC5YTUxSZWFkZXI8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlUmVhZGVyIj5jcmVhdGVSZWFkZXI8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY3JlYXRlVHJhbnNmb3JtZXJGYWN0b3J5Ij5jcmVhdGVUcmFuc2Zvcm1lckZhY3Rvcnk8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRGZWF0dXJlcyI+c2V0RmVhdHVyZXM8L2E+KGphdmEudXRpbC5NYXAgZmVhdHVyZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfdHJhbnNmb3JtIj50cmFuc2Zvcm08L2E+KGphdmEubmV0LlVSTCBzb3VyY2VVUkwKLSAgICAgICAgICwKLSAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0IHJlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90cmFuc2Zvcm0iPnRyYW5zZm9ybTwvYT4ob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UgaW5wdXRzb3VyY2UKLSAgICAgICAgICwKLSAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0IHJlcyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUcmFuc2Zvcm0gdXNpbmcgYW4gSW5wdXRTb3VyY2UgcmF0aGVyIHRoYW4gYSBVUkw8L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9KQVhQU0FYUHJvY2Vzc29ySW52b2tlciI+SkFYUFNBWFByb2Nlc3Nvckludm9rZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5KQVhQU0FYUHJvY2Vzc29ySW52b2tlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcy48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRTdHlsZXNoZWV0Ij5hZGRTdHlsZXNoZWV0PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRTdHlsZXNoZWV0PC9zdHJvbmc+KGphdmEubmV0LlVSTCBzdHlsZXNoZWV0Ci0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuTWFwIHBhcmFtZXRlcnMKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Qcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMKLSAgICAgICAgICwKLSAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0uVVJJUmVzb2x2ZXIgcmVzb2x2ZXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnN0eWxlc2hlZXQ8L2NvZGU+PC9wPjxwPjxjb2RlPnBhcmFtZXRlcnM8L2NvZGU+PC9wPjxwPjxjb2RlPm91dHB1dFByb3BlcnRpZXM8L2NvZGU+PC9wPjxwPjxjb2RlPnJlc29sdmVyPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFN0eWxlc2hlZXQiPmFkZFN0eWxlc2hlZXQ8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lciA8c3Ryb25nPmFkZFN0eWxlc2hlZXQ8L3N0cm9uZz4oamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2Ugc291cmNlCi0gICAgICAgICAsCi0gICAgICBqYXZheC54bWwudHJhbnNmb3JtLlVSSVJlc29sdmVyIHJlc29sdmVyCi0gICAgICAgICAsCi0gICAgICBqYXZhLnV0aWwuTWFwIHBhcmFtZXRlcnMKLSAgICAgICAgICwKLSAgICAgIGphdmEudXRpbC5Qcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnNvdXJjZTwvY29kZT48L3A+PHA+PGNvZGU+cmVzb2x2ZXI8L2NvZGU+PC9wPjxwPjxjb2RlPnBhcmFtZXRlcnM8L2NvZGU+PC9wPjxwPjxjb2RlPm91dHB1dFByb3BlcnRpZXM8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyPC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NyZWF0ZVJlYWRlciI+Y3JlYXRlUmVhZGVyPC9hPjwvaDI+PHA+PGNvZGU+cHJvdGVjdGVkIG9yZy54bWwuc2F4LlhNTFJlYWRlciA8c3Ryb25nPmNyZWF0ZVJlYWRlcjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlhNTFJlYWRlcjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjwvY29kZT48L3A+PHA+PGNvZGU+amF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfY3JlYXRlVHJhbnNmb3JtZXJGYWN0b3J5Ij5jcmVhdGVUcmFuc2Zvcm1lckZhY3Rvcnk8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnkgPHN0cm9uZz5jcmVhdGVUcmFuc2Zvcm1lckZhY3Rvcnk8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0RmVhdHVyZXMiPnNldEZlYXR1cmVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRGZWF0dXJlczwvc3Ryb25nPihqYXZhLnV0aWwuTWFwIGZlYXR1cmVzKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5mZWF0dXJlczwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF90cmFuc2Zvcm0iPnRyYW5zZm9ybTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dHJhbnNmb3JtPC9zdHJvbmc+KGphdmEubmV0LlVSTCBzb3VyY2VVUkwKLSAgICAgICAgICwKLSAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0IHJlcyk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+c291cmNlVVJMPC9jb2RlPjwvcD48cD48Y29kZT5yZXM8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuVHJhbnNmb3JtYXRpb25FeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RyYW5zZm9ybSI+dHJhbnNmb3JtPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz50cmFuc2Zvcm08L3N0cm9uZz4ob3JnLnhtbC5zYXguSW5wdXRTb3VyY2UgaW5wdXRzb3VyY2UKLSAgICAgICAgICwKLSAgICAgIGphdmF4LnhtbC50cmFuc2Zvcm0uUmVzdWx0IHJlcyk8L2NvZGU+PC9wPjxwPlRyYW5zZm9ybSB1c2luZyBhbiBJbnB1dFNvdXJjZSByYXRoZXIgdGhhbiBhIFVSTDwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW5wdXRzb3VyY2U8L2NvZGU+IC0gdGhlIElucHV0U291cmNlIHRvIHVzZTwvcD48cD48Y29kZT5yZXM8L2NvZGU+IC0gdGhlIFJlc3VsdDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLlRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIC0gaWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5zZm9ybWF0aW9uPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLk1haW4uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuTWFpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmFhMmIxLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuTWFpbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE1haW48L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5NYWluPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UaGUgY2xhc3Mgd2hvc2UgPGNvZGU+bWFpbjwvY29kZT4gbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGxhdW5jaGluZyB0aGUgdHJhbnNmb3JtYXRpb24gcHJvY2VzcyBmcm9tCi0gRWNsaXBzZS48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX01haW4iPk1haW48L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9tYWluIj5tYWluPC9hPihqYXZhLmxhbmcuU3RyaW5nW10gYXJncyk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBUaGUgPGNvZGU+bWFpbjwvY29kZT4gbWV0aG9kIGNhbGxlZCB3aGVuIGxhdW5jaGluZyB0aGUgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcy4KLSBUaGVyZSBhcmUgNCByZXF1aXJlZCBhcmd1bWVudHM6Ci0gPG9sPgotIDxsaT5UaGUgY2xhc3MgbmFtZSBvZiB0aGUgPGNvZGU+SVByb2Nlc3Nvckludm9rZXI8L2NvZGU+IHRvIHVzZQotIDxsaT5UaGUgbGF1bmNoIGZpbGUgKHNlcmlhbGl6ZWQgPGNvZGU+UGlwZWxpbmVEZWZpbml0aW9uPC9jb2RlPikKLSA8bGk+VGhlIFVSTCBvZiB0aGUgc291cmNlIFhNTCBkb2N1bWVudAotIDxsaT5UaGUgZmlsZSB3aGVyZSBvdXRwdXQgd2lsbCBiZSB3cml0dGVuCi0gPC9vbD48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9NYWluIj5NYWluPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+TWFpbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9tYWluIj5tYWluPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5tYWluPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKTwvY29kZT48L3A+PHA+VGhlIDxjb2RlPm1haW48L2NvZGU+IG1ldGhvZCBjYWxsZWQgd2hlbiBsYXVuY2hpbmcgdGhlIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MuCi0gVGhlcmUgYXJlIDQgcmVxdWlyZWQgYXJndW1lbnRzOgotIDxvbD4KLSA8bGk+VGhlIGNsYXNzIG5hbWUgb2YgdGhlIDxjb2RlPklQcm9jZXNzb3JJbnZva2VyPC9jb2RlPiB0byB1c2UKLSA8bGk+VGhlIGxhdW5jaCBmaWxlIChzZXJpYWxpemVkIDxjb2RlPlBpcGVsaW5lRGVmaW5pdGlvbjwvY29kZT4pCi0gPGxpPlRoZSBVUkwgb2YgdGhlIHNvdXJjZSBYTUwgZG9jdW1lbnQKLSA8bGk+VGhlIGZpbGUgd2hlcmUgb3V0cHV0IHdpbGwgYmUgd3JpdHRlbgotIDwvb2w+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5hcmdzPC9jb2RlPiAtIHRoZSA0IHJlcXVpcmVkIGFyZ3VtZW50czwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLk1lc3NhZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLk1lc3NhZ2VzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYWI3YzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5NZXNzYWdlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgTWVzc2FnZXM8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5NZXNzYWdlczwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuT2JqZWN0PC9wcmU+TWVzc2FnZXMgZm9yIHRoZSB0cmFuc2Zvcm1hdGlvbi48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHJpbmciPmdldFN0cmluZzwvYT4oamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGEgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGtleS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0cmluZyI+Z2V0U3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTdHJpbmc8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjwvcD48cD5HZXQgYSBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4ga2V5LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+a2V5PC9jb2RlPiAtIHRoZSBtZXNzYWdlIGtleTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgbWVzc2FnZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLlRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLlRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MTdiMjguLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVHJhbnNmb3JtYXRpb25FeGNlcHRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9wcmU+Q2hlY2tlZCBFeGNlcHRpb24gZm9yIHRyYW5zZm9ybWF0aW9uIGVycm9ycy48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1RyYW5zZm9ybWF0aW9uRXhjZXB0aW9uIj5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVHJhbnNmb3JtYXRpb25FeGNlcHRpb24iPlRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5UaHJvd2FibGUgY2F1c2UpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbiI+VHJhbnNmb3JtYXRpb25FeGNlcHRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbiI+VHJhbnNmb3JtYXRpb25FeGNlcHRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG1lc3NhZ2UKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5UaHJvd2FibGUgY2F1c2UpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlIGFuZCBjYXVzZS48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuQ3JlYXRpb25FeGNlcHRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLkNyZWF0aW9uRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZDVjOGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuQ3JlYXRpb25FeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWc8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgQ3JlYXRpb25FeGNlcHRpb248L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5DcmVhdGlvbkV4Y2VwdGlvbjwvc3Ryb25nPgotZXh0ZW5kcyBqYXZhLmxhbmcuRXhjZXB0aW9uPC9wcmU+Q2hlY2tlZCBFeGNlcHRpb24gZm9yIG9iamVjdCBjcmVhdGlvbiBlcnJvcnMuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9DcmVhdGlvbkV4Y2VwdGlvbiI+Q3JlYXRpb25FeGNlcHRpb248L2E+PC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgbWVzc2FnZSk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX0NyZWF0aW9uRXhjZXB0aW9uIj5DcmVhdGlvbkV4Y2VwdGlvbjwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlIGNhdXNlKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fQ3JlYXRpb25FeGNlcHRpb24iPkNyZWF0aW9uRXhjZXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q3JlYXRpb25FeGNlcHRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS48L3A+PGhyPjxoMj48YSBuYW1lPSJjb25fQ3JlYXRpb25FeGNlcHRpb24iPkNyZWF0aW9uRXhjZXB0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+Q3JlYXRpb25FeGNlcHRpb248L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBtZXNzYWdlCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuVGhyb3dhYmxlIGNhdXNlKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSBhbmQgY2F1c2UuPC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLk1lc3NhZ2VzLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5NZXNzYWdlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGFmNTY5Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLk1lc3NhZ2VzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZzwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIE1lc3NhZ2VzPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+TWVzc2FnZXM8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPk1lc3NhZ2VzIGZvciB0aGUgY29uZmlndXJhdGlvbi48cD48L3A+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRTdHJpbmciPmdldFN0cmluZzwvYT4oamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IGEgbWVzc2FnZSBmb3IgdGhlIGdpdmVuIGtleS48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFN0cmluZyI+Z2V0U3RyaW5nPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRTdHJpbmc8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBrZXkpPC9jb2RlPjwvcD48cD5HZXQgYSBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4ga2V5LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+a2V5PC9jb2RlPiAtIHRoZSBtZXNzYWdlIGtleTwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLlN0cmluZzwvY29kZT4gLSB0aGUgbWVzc2FnZTwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5QaXBlbGluZURlZmluaXRpb24uaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlBpcGVsaW5lRGVmaW5pdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzBmYjExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlBpcGVsaW5lRGVmaW5pdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWc8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgUGlwZWxpbmVEZWZpbml0aW9uPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+UGlwZWxpbmVEZWZpbml0aW9uPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT5UaGUgZGVmaW5pdGlvbiBvZiB0aGUgdHJhbnNmb3JtYXRpb24gcGlwZWxpbmUuCi0gPHA+Ci0gVGhpcyBjbGFzcyBpcyBsb2FkZWQgb24gYm90aCB0aGUgRWNsaXBzZSBjbGFzc3BhdGggYW5kIHRoZSB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzJ3MgY2xhc3NwYXRoLgotIFRoZSB3aG9sZSBkZWZpbml0aW9uIGlzIHNlcmlhbGl6ZWQgdG8gYW4gWE1MIGRvY3VtZW50IGJ5IHRoZSBFY2xpcHNlIGxhdW5jaGVyLCBhbmQgaXMgdGhlbiAKLSByZWFkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzIHdoZW4gbGF1bmNoZWQuCi0gPC9wPjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fUGlwZWxpbmVEZWZpbml0aW9uIj5QaXBlbGluZURlZmluaXRpb248L2E+PC9zdHJvbmc+KCk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1BpcGVsaW5lRGVmaW5pdGlvbiI+UGlwZWxpbmVEZWZpbml0aW9uPC9hPjwvc3Ryb25nPihqYXZhLmlvLkZpbGUgbGF1bmNoRmlsZSk8L2NvZGU+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1BpcGVsaW5lRGVmaW5pdGlvbiI+UGlwZWxpbmVEZWZpbml0aW9uPC9hPjwvc3Ryb25nPihvcmcudzNjLmRvbS5Eb2N1bWVudCBkb2MpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRGZWF0dXJlIj5hZGRGZWF0dXJlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlR5cGVkVmFsdWUgZmVhdHVyZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSBmZWF0dXJlIHRvIHRoaXMgY29uZmlndXJhdGlvbjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2FkZFRyYW5zZm9ybURlZiI+YWRkVHJhbnNmb3JtRGVmPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlRyYW5zZm9ybURlZmluaXRpb24gdGRlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSB0cmFuc2Zvcm0gZGVmaW5pdGlvbiB0byB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NvbmZpZ3VyZSI+Y29uZmlndXJlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuSVByb2Nlc3Nvckludm9rZXIgaW52b2tlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBDb25maWd1cmUgdGhlIGludm9rZXIgZnJvbSB0aGlzLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuU2V0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldEZlYXR1cmVzIj5nZXRGZWF0dXJlczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgc2V0IG9mIGZlYXR1cmVzIGRlZmluZWQuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFRyYW5zZm9ybURlZnMiPmdldFRyYW5zZm9ybURlZnM8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIGxpc3Qgb2YgPGNvZGU+VHJhbnNmb3JtRGVmaW5pdGlvbjwvY29kZT4ncy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9yZW1vdmVGZWF0dXJlIj5yZW1vdmVGZWF0dXJlPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlR5cGVkVmFsdWUgZmVhdHVyZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZW1vdmUgYSBmZWF0dXJlIGZyb20gdGhlIHNldCBvZiBmZWF0dXJlczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbW92ZVRyYW5zZm9ybURlZiI+cmVtb3ZlVHJhbnNmb3JtRGVmPC9hPihvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlRyYW5zZm9ybURlZmluaXRpb24gdGRlZik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBSZW1vdmUgYSB0cmFuc2Zvcm0gZGVmaW5pdGlvbiBmcm9tIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0VXNlRW1iZWRkZWQiPnNldFVzZUVtYmVkZGVkPC9hPihib29sZWFuIGVtYmVkZGVkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNldCB3aGV0aGVyIHRvIHVzZSBhbiBYU0wgZGVjbGFyYXRpb24gZW1iZWRkZWQgaW4gdGhlIFhNTCBmaWxlPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkRvY3VtZW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RvWE1MIj50b1hNTDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFNlcmlhbGl6ZSB0aGlzIHRvIGEgRE9NIERvY3VtZW50LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBib29sZWFuPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3VzZUVtYmVkZGVkIj51c2VFbWJlZGRlZDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB3aGV0aGVyIHRvIHVzZSBhbiBYU0wgZGVjbGFyYXRpb24gZW1iZWRkZWQgaW4gdGhlIFhNTCBmaWxlPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fUGlwZWxpbmVEZWZpbml0aW9uIj5QaXBlbGluZURlZmluaXRpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5QaXBlbGluZURlZmluaXRpb248L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHRoaXMuPC9wPjxocj48aDI+PGEgbmFtZT0iY29uX1BpcGVsaW5lRGVmaW5pdGlvbiI+UGlwZWxpbmVEZWZpbml0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+UGlwZWxpbmVEZWZpbml0aW9uPC9zdHJvbmc+KGphdmEuaW8uRmlsZSBsYXVuY2hGaWxlKTwvY29kZT48L3A+PHA+Q3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoaXMgYnkgcmVhZGluZyB0aGUgc3BlY2lmaWVkIFhNTCBmaWxlLjwvcD48aHI+PGgyPjxhIG5hbWU9ImNvbl9QaXBlbGluZURlZmluaXRpb24iPlBpcGVsaW5lRGVmaW5pdGlvbjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlBpcGVsaW5lRGVmaW5pdGlvbjwvc3Ryb25nPihvcmcudzNjLmRvbS5Eb2N1bWVudCBkb2MpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmcm9tIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQ8L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRGZWF0dXJlIj5hZGRGZWF0dXJlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRGZWF0dXJlPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHlwZWRWYWx1ZSBmZWF0dXJlKTwvY29kZT48L3A+PHA+QWRkIGEgZmVhdHVyZSB0byB0aGlzIGNvbmZpZ3VyYXRpb248L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmZlYXR1cmU8L2NvZGU+IC0gdGhlIGZlYXR1cmUgdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFRyYW5zZm9ybURlZiI+YWRkVHJhbnNmb3JtRGVmPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRUcmFuc2Zvcm1EZWY8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UcmFuc2Zvcm1EZWZpbml0aW9uIHRkZWYpPC9jb2RlPjwvcD48cD5BZGQgYSB0cmFuc2Zvcm0gZGVmaW5pdGlvbiB0byB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+dGRlZjwvY29kZT4gLSB0aGUgdHJhbnNmb3JtIGRlZmluaXRpb24gdG8gYWRkPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2NvbmZpZ3VyZSI+Y29uZmlndXJlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5jb25maWd1cmU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyIGludm9rZXIpPC9jb2RlPjwvcD48cD5Db25maWd1cmUgdGhlIGludm9rZXIgZnJvbSB0aGlzLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aW52b2tlcjwvY29kZT4gLSB0aGUgaW52b2tlciB0byBjb25maWd1cmU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5Db25maWd1cmF0aW9uRXhjZXB0aW9uIC0gaWYgYW4gZXhjZXB0aW9uIG9jY3VycyBkdXJpbmcgY29uZmlndXJhdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmVhdHVyZXMiPmdldEZlYXR1cmVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5TZXQgPHN0cm9uZz5nZXRGZWF0dXJlczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHNldCBvZiBmZWF0dXJlcyBkZWZpbmVkLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLlNldDwvY29kZT4gLSB0aGUgc2V0IG9mIGZlYXR1cmVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFRyYW5zZm9ybURlZnMiPmdldFRyYW5zZm9ybURlZnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRUcmFuc2Zvcm1EZWZzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkdldCB0aGUgbGlzdCBvZiA8Y29kZT5UcmFuc2Zvcm1EZWZpbml0aW9uPC9jb2RlPidzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+IC0gdGhlIGxpc3Qgb2YgdHJhbnNmb3JtIGRlZmluaXRpb25zPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbW92ZUZlYXR1cmUiPnJlbW92ZUZlYXR1cmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbW92ZUZlYXR1cmU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UeXBlZFZhbHVlIGZlYXR1cmUpPC9jb2RlPjwvcD48cD5SZW1vdmUgYSBmZWF0dXJlIGZyb20gdGhlIHNldCBvZiBmZWF0dXJlczwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmVhdHVyZTwvY29kZT4gLSB0aGUgZmVhdHVyZSB0byByZW1vdmU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVtb3ZlVHJhbnNmb3JtRGVmIj5yZW1vdmVUcmFuc2Zvcm1EZWY8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbW92ZVRyYW5zZm9ybURlZjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlRyYW5zZm9ybURlZmluaXRpb24gdGRlZik8L2NvZGU+PC9wPjxwPlJlbW92ZSBhIHRyYW5zZm9ybSBkZWZpbml0aW9uIGZyb20gdGhpcy48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnRkZWY8L2NvZGU+IC0gdGhlIHRyYW5zZm9ybSBkZWZpbml0aW9uIHRvIHJlbW92ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRVc2VFbWJlZGRlZCI+c2V0VXNlRW1iZWRkZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFVzZUVtYmVkZGVkPC9zdHJvbmc+KGJvb2xlYW4gZW1iZWRkZWQpPC9jb2RlPjwvcD48cD5TZXQgd2hldGhlciB0byB1c2UgYW4gWFNMIGRlY2xhcmF0aW9uIGVtYmVkZGVkIGluIHRoZSBYTUwgZmlsZTwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZW1iZWRkZWQ8L2NvZGU+IC0gdHJ1ZSB0byB1c2UgZW1iZWRkZWQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdG9YTUwiPnRvWE1MPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkRvY3VtZW50IDxzdHJvbmc+dG9YTUw8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+U2VyaWFsaXplIHRoaXMgdG8gYSBET00gRG9jdW1lbnQuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvY29kZT4gLSB0aGUgc2VyaWFsaXplZCBkb2N1bWVudDwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiAtIGlmIGEgcHJvYmxlbSBvY2N1cnMgZHVyaW5nIHNlcmlhbGl6YXRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3VzZUVtYmVkZGVkIj51c2VFbWJlZGRlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBib29sZWFuIDxzdHJvbmc+dXNlRW1iZWRkZWQ8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+R2V0IHdoZXRoZXIgdG8gdXNlIGFuIFhTTCBkZWNsYXJhdGlvbiBlbWJlZGRlZCBpbiB0aGUgWE1MIGZpbGU8L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmJvb2xlYW48L2NvZGU+IC0gdHJ1ZSBpZiBlbWJlZGRlZDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UcmFuc2Zvcm1EZWZpbml0aW9uLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UcmFuc2Zvcm1EZWZpbml0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyOTNlNGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHJhbnNmb3JtRGVmaW5pdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWc8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVHJhbnNmb3JtRGVmaW5pdGlvbjwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlRyYW5zZm9ybURlZmluaXRpb248L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkEgZGVmaW5pdGlvbiBvZiBhIHBhcnRpY3VsYXIgc3RlcCBpbiB0aGUgdHJhbnNmb3JtYXRpb24gcGlwZWxpbmUuPHA+PC9wPjxocj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHI+PHRkPjxjb2RlPjxzdHJvbmc+PGEgaHJlZj0iI2Nvbl9UcmFuc2Zvcm1EZWZpbml0aW9uIj5UcmFuc2Zvcm1EZWZpbml0aW9uPC9hPjwvc3Ryb25nPigpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRQYXJhbWV0ZXIiPmFkZFBhcmFtZXRlcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UeXBlZFZhbHVlIHBhcmFtZXRlcik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBBZGQgYSBwYXJhbWV0ZXIgdG8gdGhlIHNldCBvZiBwYXJhbWV0ZXJzPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkVsZW1lbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYXNYTUwiPmFzWE1MPC9hPihvcmcudzNjLmRvbS5Eb2N1bWVudCBkb2MpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2VyaWFsaXplIHRoaXMgdG8gYSBEb2N1bWVudCBmcmFnbWVudC48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHJhbnNmb3JtRGVmaW5pdGlvbjwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9mcm9tWE1MIj5mcm9tWE1MPC9hPihvcmcudzNjLmRvbS5FbGVtZW50IHRyYW5zZm9ybUVsKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIGZyb20gaXRzIHNlcmlhbGl6ZWQgZm9ybS48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS51dGlsLlByb3BlcnRpZXM8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0T3V0cHV0UHJvcGVydGllcyI+Z2V0T3V0cHV0UHJvcGVydGllczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgb3V0cHV0IHByb3BlcnRpZXMgZm9yIHRoaXMuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEudXRpbC5TZXQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0UGFyYW1ldGVycyI+Z2V0UGFyYW1ldGVyczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFRoZSBzZXQgb2YgcGFyYW1ldGVyczwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTWFwPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFBhcmFtZXRlcnNBc01hcCI+Z2V0UGFyYW1ldGVyc0FzTWFwPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgR2V0IHRoZSBwYXJhbWV0ZXJzIGFzIGEgbWFwIG9mIG5hbWUgKDxjb2RlPlN0cmluZzwvY29kZT4pIHYuIHZhbHVlIDxjb2RlPlR5cGVkVmFsdWU8L2NvZGU+LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFJlc29sdmVyQ2xhc3MiPmdldFJlc29sdmVyQ2xhc3M8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBHZXQgdGhlIG5hbWUgb2YgdGhlIDxjb2RlPlVSSVJlc29sdmVyPC9jb2RlPiBjbGFzcyB0byB1c2UuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0U3R5bGVzaGVldFVSTCI+Z2V0U3R5bGVzaGVldFVSTDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIEdldCB0aGUgVVJMIG9mIHRoZSBzdHlsZXNoZWV0LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3JlbW92ZU91dHB1dFByb3BlcnR5Ij5yZW1vdmVPdXRwdXRQcm9wZXJ0eTwvYT4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIFJlbW92ZSBhbiBvdXRwdXQgcHJvcGVydHkuPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcmVtb3ZlUGFyYW1ldGVyIj5yZW1vdmVQYXJhbWV0ZXI8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHlwZWRWYWx1ZSBwYXJhbWV0ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgUmVtb3ZlIGEgcGFyYW1ldGVyLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldE91dHB1dFByb3BlcnRpZXMiPnNldE91dHB1dFByb3BlcnRpZXM8L2E+KGphdmEudXRpbC5Qcm9wZXJ0aWVzIG91dHB1dFByb3BlcnRpZXMpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBvdXRwdXQgcHJvcGVydGllcyBmb3IgdGhpcy48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9zZXRPdXRwdXRQcm9wZXJ0eSI+c2V0T3V0cHV0UHJvcGVydHk8L2E+KGphdmEubGFuZy5TdHJpbmcgbmFtZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB2YWx1ZSk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWMgb3V0cHV0IHByb3BlcnR5LjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFJlc29sdmVyQ2xhc3MiPnNldFJlc29sdmVyQ2xhc3M8L2E+KGphdmEubGFuZy5TdHJpbmcgcmVzb2x2ZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgU2V0IHRoZSBuYW1lIG9mIHRoZSA8Y29kZT5VUklSZXNvbHZlcjwvY29kZT4gY2xhc3MgdG8gdXNlLjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldFN0eWxlc2hlZXRVUkwiPnNldFN0eWxlc2hlZXRVUkw8L2E+KGphdmEubGFuZy5TdHJpbmcgc3R5bGVzaGVldCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICBTZXQgdGhlIFVSTCBvZiB0aGUgc3R5bGVzaGVldC48L3RkPjwvdHI+PC90YWJsZT48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9ImNvbl9UcmFuc2Zvcm1EZWZpbml0aW9uIj5UcmFuc2Zvcm1EZWZpbml0aW9uPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+VHJhbnNmb3JtRGVmaW5pdGlvbjwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9hZGRQYXJhbWV0ZXIiPmFkZFBhcmFtZXRlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkUGFyYW1ldGVyPC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHlwZWRWYWx1ZSBwYXJhbWV0ZXIpPC9jb2RlPjwvcD48cD5BZGQgYSBwYXJhbWV0ZXIgdG8gdGhlIHNldCBvZiBwYXJhbWV0ZXJzPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5wYXJhbWV0ZXI8L2NvZGU+IC0gdGhlIHBhcmFtZXRlciB0byBhZGQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfYXNYTUwiPmFzWE1MPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy53M2MuZG9tLkVsZW1lbnQgPHN0cm9uZz5hc1hNTDwvc3Ryb25nPihvcmcudzNjLmRvbS5Eb2N1bWVudCBkb2MpPC9jb2RlPjwvcD48cD5TZXJpYWxpemUgdGhpcyB0byBhIERvY3VtZW50IGZyYWdtZW50LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZG9jPC9jb2RlPiAtIHRoZSBkb2N1bWVudCB0byBhdHRhY2ggdG88L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy53M2MuZG9tLkVsZW1lbnQ8L2NvZGU+IC0gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgZnJhZ21lbnQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZnJvbVhNTCI+ZnJvbVhNTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlRyYW5zZm9ybURlZmluaXRpb24gPHN0cm9uZz5mcm9tWE1MPC9zdHJvbmc+KG9yZy53M2MuZG9tLkVsZW1lbnQgdHJhbnNmb3JtRWwpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmcm9tIGl0cyBzZXJpYWxpemVkIGZvcm0uPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50cmFuc2Zvcm1FbDwvY29kZT4gLSB0aGUgZWxlbWVudCB0byBjcmVhdGUgdGhpcyBmcm9tPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlRyYW5zZm9ybURlZmluaXRpb248L2NvZGU+IC0gYSBuZXcgaW5zdGFuY2Ugb2YgdGhpczwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRPdXRwdXRQcm9wZXJ0aWVzIj5nZXRPdXRwdXRQcm9wZXJ0aWVzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5Qcm9wZXJ0aWVzIDxzdHJvbmc+Z2V0T3V0cHV0UHJvcGVydGllczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIG91dHB1dCBwcm9wZXJ0aWVzIGZvciB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLlByb3BlcnRpZXM8L2NvZGU+IC0gdGhlIG91dHB1dCBwcm9wZXJ0aWVzPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFBhcmFtZXRlcnMiPmdldFBhcmFtZXRlcnM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLlNldCA8c3Ryb25nPmdldFBhcmFtZXRlcnM8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+VGhlIHNldCBvZiBwYXJhbWV0ZXJzPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuU2V0PC9jb2RlPiAtIGEgc2V0IG9mIDxjb2RlPlR5cGVkVmFsdWU8L2NvZGU+J3M8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UGFyYW1ldGVyc0FzTWFwIj5nZXRQYXJhbWV0ZXJzQXNNYXA8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS51dGlsLk1hcCA8c3Ryb25nPmdldFBhcmFtZXRlcnNBc01hcDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIHBhcmFtZXRlcnMgYXMgYSBtYXAgb2YgbmFtZSAoPGNvZGU+U3RyaW5nPC9jb2RlPikgdi4gdmFsdWUgPGNvZGU+VHlwZWRWYWx1ZTwvY29kZT4uPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLnV0aWwuTWFwPC9jb2RlPiAtIGEgbWFwIG9mIG5hbWVzIGFuZCB2YWx1ZXM8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuQ3JlYXRpb25FeGNlcHRpb24gLSBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQgZHVyaW5nIG9iamVjdCBjcmVhdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0UmVzb2x2ZXJDbGFzcyI+Z2V0UmVzb2x2ZXJDbGFzczwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0UmVzb2x2ZXJDbGFzczwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIG5hbWUgb2YgdGhlIDxjb2RlPlVSSVJlc29sdmVyPC9jb2RlPiBjbGFzcyB0byB1c2UuPC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPiAtIHRoZSByZXNvbHZlcidzIGNsYXNzIG5hbWU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0U3R5bGVzaGVldFVSTCI+Z2V0U3R5bGVzaGVldFVSTDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U3R5bGVzaGVldFVSTDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD5HZXQgdGhlIFVSTCBvZiB0aGUgc3R5bGVzaGVldC48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+IC0gdGhlIHN0eWxlc2hlZXQgVVJMPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3JlbW92ZU91dHB1dFByb3BlcnR5Ij5yZW1vdmVPdXRwdXRQcm9wZXJ0eTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cmVtb3ZlT3V0cHV0UHJvcGVydHk8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBuYW1lKTwvY29kZT48L3A+PHA+UmVtb3ZlIGFuIG91dHB1dCBwcm9wZXJ0eS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPm5hbWU8L2NvZGU+IC0gdGhlIG91dHB1dCBwcm9wZXJ0eSB0byByZW1vdmU8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcmVtb3ZlUGFyYW1ldGVyIj5yZW1vdmVQYXJhbWV0ZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnJlbW92ZVBhcmFtZXRlcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlR5cGVkVmFsdWUgcGFyYW1ldGVyKTwvY29kZT48L3A+PHA+UmVtb3ZlIGEgcGFyYW1ldGVyLjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+cGFyYW1ldGVyPC9jb2RlPiAtIHRoZSBwYXJhbWV0ZXIgdG8gcmVtb3ZlPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldE91dHB1dFByb3BlcnRpZXMiPnNldE91dHB1dFByb3BlcnRpZXM8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldE91dHB1dFByb3BlcnRpZXM8L3N0cm9uZz4oamF2YS51dGlsLlByb3BlcnRpZXMgb3V0cHV0UHJvcGVydGllcyk8L2NvZGU+PC9wPjxwPlNldCB0aGUgb3V0cHV0IHByb3BlcnRpZXMgZm9yIHRoaXMuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5vdXRwdXRQcm9wZXJ0aWVzPC9jb2RlPiAtIHRoZSBvdXRwdXQgcHJvcGVydGllcyB0byBzZXQ8L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0T3V0cHV0UHJvcGVydHkiPnNldE91dHB1dFByb3BlcnR5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRPdXRwdXRQcm9wZXJ0eTwvc3Ryb25nPihqYXZhLmxhbmcuU3RyaW5nIG5hbWUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpPC9jb2RlPjwvcD48cD5TZXQgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWMgb3V0cHV0IHByb3BlcnR5LjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+bmFtZTwvY29kZT4gLSB0aGUgb3V0cHV0IHByb3BlcnR5PC9wPjxwPjxjb2RlPnZhbHVlPC9jb2RlPiAtIHRoZSB2YWx1ZTwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZXRSZXNvbHZlckNsYXNzIj5zZXRSZXNvbHZlckNsYXNzPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRSZXNvbHZlckNsYXNzPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgcmVzb2x2ZXIpPC9jb2RlPjwvcD48cD5TZXQgdGhlIG5hbWUgb2YgdGhlIDxjb2RlPlVSSVJlc29sdmVyPC9jb2RlPiBjbGFzcyB0byB1c2UuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5yZXNvbHZlcjwvY29kZT4gLSB0aGUgcmVzb2x2ZXIncyBjbGFzcyBuYW1lPC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFN0eWxlc2hlZXRVUkwiPnNldFN0eWxlc2hlZXRVUkw8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNldFN0eWxlc2hlZXRVUkw8L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyBzdHlsZXNoZWV0KTwvY29kZT48L3A+PHA+U2V0IHRoZSBVUkwgb2YgdGhlIHN0eWxlc2hlZXQuPC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5zdHlsZXNoZWV0PC9jb2RlPiAtIHRoZSBzdHlsZXNoZWV0IFVSTDwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UeXBlZFZhbHVlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UeXBlZFZhbHVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4Mzk1NjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHlwZWRWYWx1ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWc8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgVHlwZWRWYWx1ZTwvaDI+PGJyPjxocj48cHJlPnB1YmxpYyBjbGFzcyA8c3Ryb25nPlR5cGVkVmFsdWU8L3N0cm9uZz4KLWV4dGVuZHMgamF2YS5sYW5nLk9iamVjdDwvcHJlPkEgdmFsdWUgdGhhdCBpcyB0byBiZSBpbnN0YW50aWF0ZWQgZnJvbSBhIHBhcnRpY3VsYXIgdHlwZSBlLmcuIERvdWJsZSwgT2JqZWN0LjxwPjwvcD48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5GaWVsZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3R5cGUiPnR5cGU8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF91cmkiPnVyaTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wYWNrYWdlLXByaXZhdGUgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iODAlIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI2ZpZWxkX3ZhbHVlIj52YWx1ZTwvYT48L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fVHlwZWRWYWx1ZSI+VHlwZWRWYWx1ZTwvYT48L3N0cm9uZz4oamF2YS5sYW5nLlN0cmluZyB1cmkKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdHlwZQotICAgICAgICAgLAotICAgICAgamF2YS5sYW5nLlN0cmluZyB2YWx1ZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2NyZWF0ZVZhbHVlIj5jcmVhdGVWYWx1ZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIENyZWF0ZSB0aGUgdHlwZSBvZiBvYmplY3QgZGVmaW5lZCBieSB0aGlzLjwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfdHlwZSI+dHlwZTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dHlwZTwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJmaWVsZF91cmkiPnVyaTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dXJpPC9zdHJvbmc+PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9ImZpZWxkX3ZhbHVlIj52YWx1ZTwvYT48L2gyPjxwPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+dmFsdWU8L3N0cm9uZz48L2NvZGU+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iY29uX1R5cGVkVmFsdWUiPlR5cGVkVmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5UeXBlZFZhbHVlPC9zdHJvbmc+KGphdmEubGFuZy5TdHJpbmcgdXJpCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHR5cGUKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgdmFsdWUpPC9jb2RlPjwvcD48cD5DcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhpcyBmcm9tIHRoZSBnaXZlbiBpbmZvcm1hdGlvbi48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgTWV0aG9kcyBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+PC90ZD48L3RyPjwvdGFibGU+PGgyPjxhIG5hbWU9Im1ldGhvZF9jcmVhdGVWYWx1ZSI+Y3JlYXRlVmFsdWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLk9iamVjdCA8c3Ryb25nPmNyZWF0ZVZhbHVlPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPkNyZWF0ZSB0aGUgdHlwZSBvZiBvYmplY3QgZGVmaW5lZCBieSB0aGlzLjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gLSB0aGUgdmFsdWU8L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuQ3JlYXRpb25FeGNlcHRpb24gLSBpZiBhIHByb2JsZW0gb2NjdXJyZWQ8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiYjgxMS4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYYWxhbkRlYnVnZ2VyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGFsYW5EZWJ1Z2dlcjwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkFic3RyYWN0RGVidWdnZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGFsYW5EZWJ1Z2dlciI+WGFsYW5EZWJ1Z2dlcjwvYT48L3N0cm9uZz4oKTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfYWRkVHJhbnNmb3JtZXIiPmFkZFRyYW5zZm9ybWVyPC9hPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlZhcmlhYmxlPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFZhcmlhYmxlIj5nZXRWYXJpYWJsZTwvYT4oaW50IGlkKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnBhY2thZ2UtcHJpdmF0ZSB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NldEN1cnJlbnRUcmFjZUxpc3RlbmVyIj5zZXRDdXJyZW50VHJhY2VMaXN0ZW5lcjwvYT4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblRyYWNlTGlzdGVuZXIgY3VycmVudFRyYWNlTGlzdGVuZXIpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2V0VHJhbnNmb3JtZXJGYWN0b3J5Ij5zZXRUcmFuc2Zvcm1lckZhY3Rvcnk8L2E+KGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5IGZhY3RvcnkpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5EZWJ1Z2dlciI+WGFsYW5EZWJ1Z2dlcjwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhhbGFuRGVidWdnZXI8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfYWRkVHJhbnNmb3JtZXIiPmFkZFRyYW5zZm9ybWVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5hZGRUcmFuc2Zvcm1lcjwvc3Ryb25nPihqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT50cmFuc2Zvcm1lcjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGUgPHN0cm9uZz5nZXRWYXJpYWJsZTwvc3Ryb25nPihpbnQgaWQpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmlkPC9jb2RlPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5WYXJpYWJsZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2V0Q3VycmVudFRyYWNlTGlzdGVuZXIiPnNldEN1cnJlbnRUcmFjZUxpc3RlbmVyPC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIHZvaWQgPHN0cm9uZz5zZXRDdXJyZW50VHJhY2VMaXN0ZW5lcjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lciBjdXJyZW50VHJhY2VMaXN0ZW5lcik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+Y3VycmVudFRyYWNlTGlzdGVuZXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NldFRyYW5zZm9ybWVyRmFjdG9yeSI+c2V0VHJhbnNmb3JtZXJGYWN0b3J5PC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5zZXRUcmFuc2Zvcm1lckZhY3Rvcnk8L3N0cm9uZz4oamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnkgZmFjdG9yeSk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZmFjdG9yeTwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5QcmludFRyYWNlTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZjE3MzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5QcmludFRyYWNlTGlzdGVuZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGFsYW5QcmludFRyYWNlTGlzdGVuZXI8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5QcmludFRyYWNlTGlzdGVuZXI8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGFsYW5QcmludFRyYWNlTGlzdGVuZXIiPlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyPC9hPjwvc3Ryb25nPihqYXZhLmlvLlByaW50V3JpdGVyIHB3KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfX3RyYWNlIj5fdHJhY2U8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0ZWQiPnNlbGVjdGVkPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdEVuZCI+c2VsZWN0RW5kPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkVuZFNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RyYWNlIj50cmFjZTwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90cmFjZUVuZCI+dHJhY2VFbmQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5QcmludFRyYWNlTGlzdGVuZXIiPlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIDxzdHJvbmc+WGFsYW5QcmludFRyYWNlTGlzdGVuZXI8L3N0cm9uZz4oamF2YS5pby5QcmludFdyaXRlciBwdyk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX190cmFjZSI+X3RyYWNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz5fdHJhY2U8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3NlbGVjdGVkIj5zZWxlY3RlZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2VsZWN0ZWQ8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5TZWxlY3Rpb25FdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxoMz5UaHJvd3M6PC9oMz48cD48Y29kZT5qYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3RFbmQiPnNlbGVjdEVuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+c2VsZWN0RW5kPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuRW5kU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHJhY2UiPnRyYWNlPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz50cmFjZTwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfdHJhY2VFbmQiPnRyYWNlRW5kPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIHZvaWQgPHN0cm9uZz50cmFjZUVuZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGhyPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5Sb290U3R5bGVGcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5Sb290U3R5bGVGcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWRkMzY2Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUm9vdFN0eWxlRnJhbWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxodG1sPjxib2R5PjxwPjxmb250IHNpemU9IisxIj48c3Ryb25nPlBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48L3A+PGhyPjxoMj48Zm9udCBzaXplPSItMSI+PHN0cm9uZz5vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250Pjxicj4KLSAgICAgICAgICAgICAgIENsYXNzIFhhbGFuUm9vdFN0eWxlRnJhbWU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YYWxhblJvb3RTdHlsZUZyYW1lPC9zdHJvbmc+Ci1leHRlbmRzIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5TdHlsZUZyYW1lPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuUm9vdFN0eWxlRnJhbWUiPlhhbGFuUm9vdFN0eWxlRnJhbWU8L2E+PC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXZlbnQpPC9jb2RlPjwvdGQ+PC90cj48L3RhYmxlPjxicj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHM9IjIiIGJnY29sb3I9IiNDQ0NDRkYiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PGgyPk1ldGhvZCBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9hZGRWYXJpYWJsZSI+YWRkVmFyaWFibGU8L2E+KG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZSB4dmFyKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnByb3RlY3RlZCBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRHbG9iYWxzIj5nZXRHbG9iYWxzPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPihpbnQgaWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5Sb290U3R5bGVGcmFtZSI+WGFsYW5Sb290U3R5bGVGcmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhhbGFuUm9vdFN0eWxlRnJhbWU8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2FkZFZhcmlhYmxlIj5hZGRWYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+YWRkVmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlIHh2YXIpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPnh2YXI8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEdsb2JhbHMiPmdldEdsb2JhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRHbG9iYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhcmlhYmxlIj5nZXRWYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlZhcmlhYmxlIDxzdHJvbmc+Z2V0VmFyaWFibGU8L3N0cm9uZz4oaW50IGlkKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5pZDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGU8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZS5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5TdHlsZUZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlN2ZiZjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5TdHlsZUZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYYWxhblN0eWxlRnJhbWU8L2gyPjxicj48aHI+PHByZT5wdWJsaWMgY2xhc3MgPHN0cm9uZz5YYWxhblN0eWxlRnJhbWU8L3N0cm9uZz4KLWV4dGVuZHMgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+RmllbGQgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IjgwJSIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNmaWVsZF9ldmVudCI+ZXZlbnQ8L2E+PC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuU3R5bGVGcmFtZSI+WGFsYW5TdHlsZUZyYW1lPC9hPjwvc3Ryb25nPihvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUgcGFyZW50Ci0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IGV2ZW50KTwvY29kZT48L3RkPjwvdHI+PC90YWJsZT48YnI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzPSIyIiBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGludDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRDdXJyZW50TGluZSI+Z2V0Q3VycmVudExpbmU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRGaWxlbmFtZSI+Z2V0RmlsZW5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3Q8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0R2xvYmFscyI+Z2V0R2xvYmFsczwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+KCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgaW50PC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNvdXJjZUN1cnJlbnRMaW5lIj5nZXRTb3VyY2VDdXJyZW50TGluZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dldFNvdXJjZUZpbGVuYW1lIj5nZXRTb3VyY2VGaWxlbmFtZTwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBqYXZhLnV0aWwuTGlzdDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRWYXJpYWJsZVN0YWNrIj5nZXRWYXJpYWJsZVN0YWNrPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcGVla0VsZW1lbnQiPnBlZWtFbGVtZW50PC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfcG9wRWxlbWVudCI+cG9wRWxlbWVudDwvYT4oKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3B1c2hFbGVtZW50Ij5wdXNoRWxlbWVudDwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48L3RhYmxlPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIEZpZWxkIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0iZmllbGRfZXZlbnQiPmV2ZW50PC9hPjwvaDI+PHA+PGNvZGU+cGFja2FnZS1wcml2YXRlIG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgPHN0cm9uZz5ldmVudDwvc3Ryb25nPjwvY29kZT48L3A+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5TdHlsZUZyYW1lIj5YYWxhblN0eWxlRnJhbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YYWxhblN0eWxlRnJhbWU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5TdHlsZUZyYW1lIHBhcmVudAotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldmVudCk8L2NvZGU+PC9wPjxwPjwvcD48aHI+PHRhYmxlIGNvbHM9IjIiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0NDQ0NGRiIgYWxpZ249ImxlZnQiPjx0ZD48aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj48L3RkPjwvdHI+PC90YWJsZT48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEN1cnJlbnRMaW5lIj5nZXRDdXJyZW50TGluZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBpbnQgPHN0cm9uZz5nZXRDdXJyZW50TGluZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0RmlsZW5hbWUiPmdldEZpbGVuYW1lPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmcgPHN0cm9uZz5nZXRGaWxlbmFtZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldEdsb2JhbHMiPmdldEdsb2JhbHM8L2E+PC9oMj48cD48Y29kZT5wcm90ZWN0ZWQgamF2YS51dGlsLkxpc3QgPHN0cm9uZz5nZXRHbG9iYWxzPC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+amF2YS51dGlsLkxpc3Q8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldE5hbWUiPmdldE5hbWU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZyA8c3Ryb25nPmdldE5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRTb3VyY2VDdXJyZW50TGluZSI+Z2V0U291cmNlQ3VycmVudExpbmU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Z2V0U291cmNlQ3VycmVudExpbmU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5pbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFNvdXJjZUZpbGVuYW1lIj5nZXRTb3VyY2VGaWxlbmFtZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0U291cmNlRmlsZW5hbWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYXJpYWJsZVN0YWNrIj5nZXRWYXJpYWJsZVN0YWNrPC9hPjwvaDI+PHA+PGNvZGU+cHVibGljIGphdmEudXRpbC5MaXN0IDxzdHJvbmc+Z2V0VmFyaWFibGVTdGFjazwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEudXRpbC5MaXN0PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9wZWVrRWxlbWVudCI+cGVla0VsZW1lbnQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCA8c3Ryb25nPnBlZWtFbGVtZW50PC9zdHJvbmc+KCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UmV0dXJuczwvaDM+PHA+PGNvZGU+b3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfcG9wRWxlbWVudCI+cG9wRWxlbWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlRyYWNlckV2ZW50IDxzdHJvbmc+cG9wRWxlbWVudDwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPm9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQ8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3B1c2hFbGVtZW50Ij5wdXNoRWxlbWVudDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+cHVzaEVsZW1lbnQ8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblRyYWNlTGlzdGVuZXIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjJhYjUwLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPGh0bWw+PGJvZHk+PHA+PGZvbnQgc2l6ZT0iKzEiPjxzdHJvbmc+UGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyPC9zdHJvbmc+PC9mb250PjwvcD48aHI+PGgyPjxmb250IHNpemU9Ii0xIj48c3Ryb25nPm9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PGJyPgotICAgICAgICAgICAgICAgQ2xhc3MgWGFsYW5UcmFjZUxpc3RlbmVyPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGFsYW5UcmFjZUxpc3RlbmVyPC9zdHJvbmc+Ci1leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L3ByZT48aHI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPjx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj48dGQgd2lkdGg9IjEwMCUiPjxoMj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9oMj48L3RkPjwvdHI+PHRyPjx0ZD48Y29kZT48c3Ryb25nPjxhIGhyZWY9IiNjb25fWGFsYW5UcmFjZUxpc3RlbmVyIj5YYWxhblRyYWNlTGlzdGVuZXI8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5EZWJ1Z2dlciBkZWJ1Z2dlcik8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4dGVuc2lvbiI+ZXh0ZW5zaW9uPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkV4dGVuc2lvbkV2ZW50IGVlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2V4dGVuc2lvbkVuZCI+ZXh0ZW5zaW9uRW5kPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkV4dGVuc2lvbkV2ZW50IGVlKTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX2dlbmVyYXRlZCI+Z2VuZXJhdGVkPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkdlbmVyYXRlRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIG9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGU8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFyaWFibGUiPmdldFZhcmlhYmxlPC9hPihpbnQgaWQpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIHZvaWQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2Rfc2VsZWN0ZWQiPnNlbGVjdGVkPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLlNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3NlbGVjdEVuZCI+c2VsZWN0RW5kPC9hPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkVuZFNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48YnI+Ci0gICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgIDwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyB2b2lkPC9jb2RlPjwvdGQ+PHRkIHdpZHRoPSIiIGFsaWduPSJsZWZ0Ij48Y29kZT48YSBocmVmPSIjbWV0aG9kX3RyYWNlIj50cmFjZTwvYT4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgdm9pZDwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF90cmFjZUVuZCI+dHJhY2VFbmQ8L2E+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuVHJhY2VyRXZlbnQgZXYpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5UcmFjZUxpc3RlbmVyIj5YYWxhblRyYWNlTGlzdGVuZXI8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgPHN0cm9uZz5YYWxhblRyYWNlTGlzdGVuZXI8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyIGRlYnVnZ2VyKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfZXh0ZW5zaW9uIj5leHRlbnNpb248L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmV4dGVuc2lvbjwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkV4dGVuc2lvbkV2ZW50IGVlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZXh0ZW5zaW9uRW5kIj5leHRlbnNpb25FbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmV4dGVuc2lvbkVuZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkV4dGVuc2lvbkV2ZW50IGVlKTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5lZTwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2VuZXJhdGVkIj5nZW5lcmF0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPmdlbmVyYXRlZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkdlbmVyYXRlRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9nZXRWYXJpYWJsZSI+Z2V0VmFyaWFibGU8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5WYXJpYWJsZSA8c3Ryb25nPmdldFZhcmlhYmxlPC9zdHJvbmc+KGludCBpZCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+aWQ8L2NvZGU+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlZhcmlhYmxlPC9jb2RlPjwvcD48aHI+PGgyPjxhIG5hbWU9Im1ldGhvZF9zZWxlY3RlZCI+c2VsZWN0ZWQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdGVkPC9zdHJvbmc+KG9yZy5hcGFjaGUueGFsYW4udHJhY2UuU2VsZWN0aW9uRXZlbnQgZXYpPC9jb2RlPjwvcD48cD48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjxwPjxjb2RlPmV2PC9jb2RlPjwvcD48aDM+VGhyb3dzOjwvaDM+PHA+PGNvZGU+amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2Rfc2VsZWN0RW5kIj5zZWxlY3RFbmQ8L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgdm9pZCA8c3Ryb25nPnNlbGVjdEVuZDwvc3Ryb25nPihvcmcuYXBhY2hlLnhhbGFuLnRyYWNlLkVuZFNlbGVjdGlvbkV2ZW50IGV2KTwvY29kZT48L3A+PHA+PC9wPjxoMz5QYXJhbWV0ZXJzPC9oMz48cD48Y29kZT5ldjwvY29kZT48L3A+PGgzPlRocm93czo8L2gzPjxwPjxjb2RlPmphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb248L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RyYWNlIj50cmFjZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dHJhY2U8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX3RyYWNlRW5kIj50cmFjZUVuZDwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyB2b2lkIDxzdHJvbmc+dHJhY2VFbmQ8L3N0cm9uZz4ob3JnLmFwYWNoZS54YWxhbi50cmFjZS5UcmFjZXJFdmVudCBldik8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+ZXY8L2NvZGU+PC9wPjxocj48L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhOWQ5Ni4uMDAwMDAwMAotLS0gYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblZhcmlhYmxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08aHRtbD48Ym9keT48cD48Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXI8L3N0cm9uZz48L2ZvbnQ+PC9wPjxocj48aDI+PGZvbnQgc2l6ZT0iLTEiPjxzdHJvbmc+b3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlcjwvc3Ryb25nPjwvZm9udD48YnI+Ci0gICAgICAgICAgICAgICBDbGFzcyBYYWxhblZhcmlhYmxlPC9oMj48YnI+PGhyPjxwcmU+cHVibGljIGNsYXNzIDxzdHJvbmc+WGFsYW5WYXJpYWJsZTwvc3Ryb25nPgotZXh0ZW5kcyBvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlZhcmlhYmxlPC9wcmU+PGhyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIHdpZHRoPSIxMDAlIj48aDI+Q29uc3RydWN0b3IgU3VtbWFyeTwvaDI+PC90ZD48L3RyPjx0cj48dGQ+PGNvZGU+PHN0cm9uZz48YSBocmVmPSIjY29uX1hhbGFuVmFyaWFibGUiPlhhbGFuVmFyaWFibGU8L2E+PC9zdHJvbmc+KG9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5TdHlsZUZyYW1lIHhhbGFuU3R5bGVGcmFtZQotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54cGF0aC5WYXJpYWJsZVN0YWNrIHZhclN0YWNrCi0gICAgICAgICAsCi0gICAgICBqYXZhLmxhbmcuU3RyaW5nIHNjb3BlCi0gICAgICAgICAsCi0gICAgICBpbnQgc2xvdE51bWJlcgotICAgICAgICAgLAotICAgICAgb3JnLmFwYWNoZS54YWxhbi50ZW1wbGF0ZXMuRWxlbVZhcmlhYmxlIGVsZW1WYXJpYWJsZSk8L2NvZGU+PC90ZD48L3RyPjwvdGFibGU+PGJyPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29scz0iMiIgYmdjb2xvcj0iI0NDQ0NGRiI+PHRkIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIj48aDI+TWV0aG9kIFN1bW1hcnk8L2gyPjwvdGQ+PC90cj48dHIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxjb2RlPnB1YmxpYyBpbnQ8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfY29tcGFyZVRvIj5jb21wYXJlVG88L2E+KGphdmEubGFuZy5PYmplY3QgYXJnMCk8L2NvZGU+PGJyPgotICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ci0gICAgICAgICAgICAgICA8L3RkPjwvdHI+PHRyIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48Y29kZT5wdWJsaWMgamF2YS5sYW5nLlN0cmluZzwvY29kZT48L3RkPjx0ZCB3aWR0aD0iIiBhbGlnbj0ibGVmdCI+PGNvZGU+PGEgaHJlZj0iI21ldGhvZF9nZXRUeXBlIj5nZXRUeXBlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjx0ciB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJyaWdodCI+PGNvZGU+cHVibGljIGphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC90ZD48dGQgd2lkdGg9IiIgYWxpZ249ImxlZnQiPjxjb2RlPjxhIGhyZWY9IiNtZXRob2RfZ2V0VmFsdWUiPmdldFZhbHVlPC9hPigpPC9jb2RlPjxicj4KLSAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwotICAgICAgICAgICAgICAgPC90ZD48L3RyPjwvdGFibGU+PGhyPjx0YWJsZSBjb2xzPSIyIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIxIj48dHIgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNDQ0NDRkYiIGFsaWduPSJsZWZ0Ij48dGQ+PGgyPgotICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJjb25fWGFsYW5WYXJpYWJsZSI+WGFsYW5WYXJpYWJsZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyA8c3Ryb25nPlhhbGFuVmFyaWFibGU8L3N0cm9uZz4ob3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUgeGFsYW5TdHlsZUZyYW1lCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhwYXRoLlZhcmlhYmxlU3RhY2sgdmFyU3RhY2sKLSAgICAgICAgICwKLSAgICAgIGphdmEubGFuZy5TdHJpbmcgc2NvcGUKLSAgICAgICAgICwKLSAgICAgIGludCBzbG90TnVtYmVyCi0gICAgICAgICAsCi0gICAgICBvcmcuYXBhY2hlLnhhbGFuLnRlbXBsYXRlcy5FbGVtVmFyaWFibGUgZWxlbVZhcmlhYmxlKTwvY29kZT48L3A+PHA+PC9wPjxocj48dGFibGUgY29scz0iMiIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMSI+PHRyIGNvbHNwYW49IjIiIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjQ0NDQ0ZGIiBhbGlnbj0ibGVmdCI+PHRkPjxoMj4KLSAgICAgICAgICAgICAgICAgIE1ldGhvZHMgRGV0YWlsCi0gICAgICAgICAgICAgICA8L2gyPjwvdGQ+PC90cj48L3RhYmxlPjxoMj48YSBuYW1lPSJtZXRob2RfY29tcGFyZVRvIj5jb21wYXJlVG88L2E+PC9oMj48cD48Y29kZT5wdWJsaWMgaW50IDxzdHJvbmc+Y29tcGFyZVRvPC9zdHJvbmc+KGphdmEubGFuZy5PYmplY3QgYXJnMCk8L2NvZGU+PC9wPjxwPjwvcD48aDM+UGFyYW1ldGVyczwvaDM+PHA+PGNvZGU+YXJnMDwvY29kZT48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmludDwvY29kZT48L3A+PGhyPjxoMj48YSBuYW1lPSJtZXRob2RfZ2V0VHlwZSI+Z2V0VHlwZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VHlwZTwvc3Ryb25nPigpPC9jb2RlPjwvcD48cD48L3A+PGgzPlJldHVybnM8L2gzPjxwPjxjb2RlPmphdmEubGFuZy5TdHJpbmc8L2NvZGU+PC9wPjxocj48aDI+PGEgbmFtZT0ibWV0aG9kX2dldFZhbHVlIj5nZXRWYWx1ZTwvYT48L2gyPjxwPjxjb2RlPnB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIDxzdHJvbmc+Z2V0VmFsdWU8L3N0cm9uZz4oKTwvY29kZT48L3A+PHA+PC9wPjxoMz5SZXR1cm5zPC9oMz48cD48Y29kZT5qYXZhLmxhbmcuU3RyaW5nPC9jb2RlPjwvcD48aHI+PC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvdG9jLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2h0bWwvdG9jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNmYwYTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9odG1sL3RvYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLQk8dGl0bGU+VGFibGUgb2YgQ29udGVudHM8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keT4KLTxoMT5UYWJsZSBvZiBDb250ZW50czwvaDE+Ci1QbGVhc2UgZW50ZXIgeW91ciB0ZXh0IGhlcmUuCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9qZWx0b2h0bWwueHNsIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9qZWx0b2h0bWwueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGFmMDBmLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvamVsdG9odG1sLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDM5MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBidWcgMjMxNDcyIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotIC0tPgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKLSAgICAgICAgICAgICAgICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICAgICAgICAgICAgICB4bWxuczpyZWRpcmVjdD0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuL3JlZGlyZWN0IgotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzPSJyZWRpcmVjdCI+Ci0gICAgPHhzbDpvdXRwdXQgZW5jb2Rpbmc9IlVURi04IiBtZXRob2Q9Imh0bWwiIGluZGVudD0ibm8iIG9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiLz4KLSAgICAKLSAgICA8IS0tIENyZWF0ZSB0aGUgSFRNTCBzdHJ1Y3R1cmUgLS0+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0gICAJCTx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLy9qZWxjbGFzcyIvPgotCTwveHNsOnRlbXBsYXRlPgotICAgCi0gICAgPCEtLSBUaGlzIGlzIHRoZSBtYWluIHdvcmsgaG9yc2UgdGhhdCBkb2VzIHRoZSBnZW5lcmFsIGxheW91dCBmb3IgdGhlIGNsYXNzIHBhZ2UgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iamVsY2xhc3MiPgotICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJvdXRwdXRGaWxlIj4KLSAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICA8eHNsOnRleHQ+Lmh0bWw8L3hzbDp0ZXh0PgotICAgICAgPC94c2w6dmFyaWFibGU+Ci0gICAgICA8eHNsOm1lc3NhZ2UgdGVybWluYXRlPSJubyI+Ci0gICAgICAgICA8eHNsOnRleHQ+R2VuZXJhdGluZyBKYXZhRG9jIGZvciA8L3hzbDp0ZXh0PgotICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgPHhzbDp0ZXh0Pi48L3hzbDp0ZXh0PgotICAgICAgPC94c2w6bWVzc2FnZT4KLSAgICAgIDxyZWRpcmVjdDp3cml0ZSBzZWxlY3Q9IiRvdXRwdXRGaWxlIj4KLSAgICAgICA8aHRtbD4KLSAgICAgICAgIDxib2R5PgotICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICA8Zm9udCBzaXplPSIrMSI+PHN0cm9uZz5QYWNrYWdlIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAcGFja2FnZSIvPjwvc3Ryb25nPjwvZm9udD4KLSAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgIDxoci8+Ci0gICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICA8Zm9udCBzaXplPSItMSI+PHN0cm9uZz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHBhY2thZ2UiLz48L3N0cm9uZz48L2ZvbnQ+PGJyLz4KLSAgICAgICAgICAgICAgIENsYXNzIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdHlwZSIvPgotICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICA8aHIvPgotICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImZvcm1hdC1oZWFkZXIiLz4KLSAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2F0dHJpYnV0ZSIvPgotICAgICAgICAgICAgPGhyLz4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZGVzY2VuZGFudDo6ZmllbGRzIj4KLSAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIiBjb2xzPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+PGgyPkZpZWxkIFN1bW1hcnk8L2gyPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJmaWVsZHMvZmllbGQiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgICAgICAgICAgICAgPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmFwcGx5LXRlbXBsYXRlcz4KLSAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICA8YnIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9ImRlc2NlbmRhbnQ6OmNvbnN0cnVjdG9yIj4KLSAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIj4KLSAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjQ0NDQ0ZGIj4KLSAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSI+PGgyPkNvbnN0cnVjdG9yIFN1bW1hcnk8L2gyPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJkZXNjZW5kYW50Ojpjb25zdHJ1Y3RvciIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICAgICAgICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgICAgICAgICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iZGVzY2VuZGFudDo6bWV0aG9kcyI+Ci0gICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSI+Ci0gICAgICAgICAgICAgICAgICA8dHIgYmdjb2xvcj0iI0NDQ0NGRiIgY29scz0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGNvbHNwYW49IjIiPjxoMj5NZXRob2QgU3VtbWFyeTwvaDI+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Im1ldGhvZHMvbWV0aG9kIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8aHIvPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJmaWVsZHMiPgotICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImZpZWxkRGV0YWlsIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0ibWV0aG9kcy9jb25zdHJ1Y3RvciI+Ci0gICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29uc3RydWN0b3JEZXRhaWwiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJtZXRob2RzL21ldGhvZCI+Ci0gICAgICAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibWV0aG9kc0RldGFpbCIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgIDwvYm9keT4KLSAgICAgICAgIDwvaHRtbD4KLSAgICAgIDwvcmVkaXJlY3Q6d3JpdGU+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPCEtLSBPdXRwdXQgYW55IGRlc2NyaXB0aW9uIHRoYXQgbWF5IGJlIHRoZXJlIGZvciBjb21tZW50cy4gLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY29tbWVudC9kZXNjcmlwdGlvbiI+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDwhLS0gT3V0cHV0IHRoZSB2YXJpb3VzIGF0dHJpYnV0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGNsYXNzIC0tPgotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvbW1lbnQvYXR0cmlidXRlIj4KLSAgICAgICAgIDxwPgotICAgICAgICAgICAgPHhzbDpjaG9vc2U+Ci0gICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGF1dGhvciI+Ci0gICAgICAgICAgICAgICAgICA8c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz48YnIvPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRlc2NyaXB0aW9uIiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+IAotICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KLSAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAc2VlIj4KLSAgICAgICAgICAgICAgICAgIDxzdHJvbmc+U2VlIEFsc286PC9zdHJvbmc+PGJyLz4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJkZXNjcmlwdGlvbiIgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIvPgotICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KLSAgICAgICAgICAgIDwveHNsOmNob29zZT4KLSAgICAgICAgIDwvcD4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLQotCi0gICAgICAgIDwhLS0gQ3JlYXRlIHRoZSBmaWVsZCBzdW1tYXJ5IHJvd3MgLS0+Ci0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZmllbGQiIG1vZGU9InN1bW1hcnkiPgotICAgICAgICAgPHRyIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiIHdpZHRoPSIyMCUiPgotICAgICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4KLSAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0iQHN0YXRpYyA9ICd0cnVlJyI+Ci0gICAgICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IHN0YXRpYyA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+IDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGZ1bGx0eXBlIi8+ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iODAlIj4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ZpZWxkX3tAbmFtZX0iPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICA8L2NvZGU+Ci0gICAgICAgICAgICAgICA8YnIvPgotICAgICAgICAgICAgICAgJiMxNjA7JiMxNjA7JiMxNjA7JiMxNjA7Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgCi0gICAgPCEtLSBDcmVhdGUgdGhlIGNvbnN0cnVjdG9ycyByb3dzIC0tPgotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvbnN0cnVjdG9yIiBtb2RlPSJzdW1tYXJ5Ij4KLSAgICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2Nvbl97QG5hbWV9Ij4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICA8L3N0cm9uZz4gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4oPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icGFyYW1zIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyYW1zL3BhcmFtIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBhcmFtIj4KLSAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAZnVsbHR5cGUiLz48eHNsOnRleHQ+IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCkgIT0gbGFzdCgpIj4KLSAgICAgICAgICwKLSAgICAgIDwveHNsOmlmPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDwhLS0gQ3JlYXRlIHRoZSBtZXRob2Qgc3VtbWFyeSByb3dzIC0tPgotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1ldGhvZCIgbW9kZT0ic3VtbWFyeSI+Ci0gICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCIgd2lkdGg9IjIwJSI+Ci0gICAgICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJAc3RhdGljID0gJ3RydWUnIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gc3RhdGljPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgd2lkdGg9IiI+Ci0gICAgICAgICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNtZXRob2Rfe0BuYW1lfSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4oPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0icGFyYW1zIj4KLSAgICAgICAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0icGFyYW1zL3BhcmFtIi8+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD4pPC94c2w6dGV4dD4KLSAgICAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgICAgIDxici8+Ci0gICAgICAgICAgICAgICAmIzE2MDsmIzE2MDsmIzE2MDsmIzE2MDsKLSAgICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgIDwvdHI+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXQtaGVhZGVyIj4KLSAgICAgICAgIDxwcmU+Ci08eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4gY2xhc3MgPHN0cm9uZz48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHR5cGUiLz48L3N0cm9uZz4KLWV4dGVuZHMgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBzdXBlcmNsYXNzZnVsbHR5cGUiLz4KLSAgICAgICAgIDwvcHJlPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iZmllbGREZXRhaWwiPgotICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNvbHM9IjIiPgotICAgICAgICAgPHRyIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjQ0NDQ0ZGIiB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICBGaWVsZCBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImZpZWxkcy9maWVsZCIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIi8+Ci0gICAgICA8L3hzbDphcHBseS10ZW1wbGF0ZXM+Ci0gICAgPC94c2w6dGVtcGxhdGU+Ci0gICAgCi0gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZmllbGRzL2ZpZWxkIiBtb2RlPSJkZXRhaWwiPgotICAgICAgPGgyPgotICAgICAgICAgPGEgbmFtZT0iZmllbGRfe0BuYW1lfSI+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgIDwvYT4KLSAgICAgIDwvaDI+Ci0gICAgICA8cD4KLSAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2aXNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9IkBzdGF0aWMgPSAndHJ1ZSciPgotICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiBzdGF0aWMgPC94c2w6dGV4dD4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9zdHJvbmc+ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgPC9jb2RlPgotICAgICAgPC9wPgotICAgICAgPHhzbDppZiB0ZXN0PSJjb21tZW50Ij4KLSAgICAgICAgIDx0YWJsZT4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb21tZW50L2Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgPC90YWJsZT4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPGhyLz4KLSAgICAgIAotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29uc3RydWN0b3JEZXRhaWwiPgotICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNvbHM9IjIiPgotICAgICAgICAgPHRyIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjQ0NDQ0ZGIiB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvciBEZXRhaWwKLSAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgPC90cj4KLSAgICAgIDwvdGFibGU+Ci0gICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Im1ldGhvZHMvY29uc3RydWN0b3IiIG1vZGU9ImRldGFpbCI+Ci0gICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1ldGhvZHMvY29uc3RydWN0b3IiIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8aDI+Ci0gICAgICAgICA8YSBuYW1lPSJjb25fe0BuYW1lfSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+PC9hPgotICAgICAgPC9oMj4KLSAgICAgIDxwPgotICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZpc2liaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2w6dGV4dD4gPC94c2w6dGV4dD4KLSAgICAgICAgICAgIDxzdHJvbmc+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgIDwvc3Ryb25nPgotICAgICAgICAgICAgPHhzbDp0ZXh0Pig8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPHhzbDp0ZXh0Pik8L3hzbDp0ZXh0PgotICAgICAgICAgPC9jb2RlPgotICAgICAgPC9wPgotICAgICAgPHA+Ci0gICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImNvbW1lbnQvZGVzY3JpcHRpb24iLz4KLSAgICAgIDwvcD4KLSAgICAgIDxoci8+Ci0gICAgICAKLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG5hbWU9Im1ldGhvZHNEZXRhaWwiPgotICAgICAgPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNvbHM9IjIiPgotICAgICAgICAgPHRyIGFsaWduPSJsZWZ0IiBiZ2NvbG9yPSIjQ0NDQ0ZGIiB3aWR0aD0iMTAwJSIgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICBNZXRob2RzIERldGFpbAotICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICA8L3RyPgotICAgICAgPC90YWJsZT4KLSAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0ibWV0aG9kcy9tZXRob2QiIG1vZGU9ImRldGFpbCI+Ci0gICAgICAgICA8eHNsOnNvcnQgc2VsZWN0PSJAbmFtZSIgb3JkZXI9ImFzY2VuZGluZyIvPgotICAgICAgPC94c2w6YXBwbHktdGVtcGxhdGVzPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgIAotICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1ldGhvZHMvbWV0aG9kIiBtb2RlPSJkZXRhaWwiPgotICAgICAgPGgyPgotICAgICAgICAgPGEgbmFtZT0ibWV0aG9kX3tAbmFtZX0iPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBuYW1lIi8+Ci0gICAgICAgICA8L2E+Ci0gICAgICA8L2gyPgotICAgICAgPHA+Ci0gICAgICAgICA8Y29kZT4KLSAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmlzaWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgPHhzbDp0ZXh0PiA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgPHN0cm9uZz4KLSAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPgotICAgICAgICAgICAgPC9zdHJvbmc+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KDwveHNsOnRleHQ+Ci0gICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBhcmFtcyI+Ci0gICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9InBhcmFtcy9wYXJhbSIvPgotICAgICAgICAgICAgPC94c2w6aWY+Ci0gICAgICAgICAgICA8eHNsOnRleHQ+KTwveHNsOnRleHQ+Ci0gICAgICAgICA8L2NvZGU+Ci0gICAgICA8L3A+Ci0gICAgICA8cD4KLSAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iY29tbWVudC9kZXNjcmlwdGlvbiIvPgotICAgICAgPC9wPgotICAgICAgPHhzbDppZiB0ZXN0PSJwYXJhbXMiPgotICAgICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgotICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJwYXJhbXMvcGFyYW0iIG1vZGU9ImRldGFpbCIvPgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8eHNsOmlmIHRlc3Q9IkB0eXBlICE9ICd2b2lkJyI+Ci0gICAgICAgICA8aDM+UmV0dXJuczwvaDM+Ci0gICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgICAgPC9jb2RlPgotICAgICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEByZXR1cm5jb21tZW50KSA+IDAiPgotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiAtIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHJldHVybmNvbW1lbnQiIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4KLSAgICAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgICAgPC9wPgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8eHNsOmlmIHRlc3Q9ImV4Y2VwdGlvbnMiPgotICAgICAgICAgPGgzPlRocm93czo8L2gzPgotICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJleGNlcHRpb25zL2V4Y2VwdGlvbiIgbW9kZT0iZGV0YWlsIi8+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDxoci8+Ci0gICAgICAKLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJwYXJhbSIgbW9kZT0iZGV0YWlsIj4KLSAgICAgICAgIDxwPgotICAgICAgICAgICAgPGNvZGU+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KLSAgICAgICAgICAgIDwvY29kZT4KLSAgICAgICAgICAgIDx4c2w6aWYgdGVzdD0ic3RyaW5nLWxlbmd0aChAY29tbWVudCkgPiAwIj4KLSAgICAgICAgICAgICAgIDx4c2w6dGV4dD4gLSA8L3hzbDp0ZXh0PgotICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBjb21tZW50IiBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIi8+Ci0gICAgICAgICAgICA8L3hzbDppZj4KLSAgICAgICAgIDwvcD4KLSAgICA8L3hzbDp0ZW1wbGF0ZT4KLSAgICAKLSAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJleGNlcHRpb24iIG1vZGU9ImRldGFpbCI+Ci0gICAgICA8cD4KLSAgICAgICAgIDxjb2RlPgotICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBmdWxsdHlwZSIvPgotICAgICAgICAgICAgPHhzbDppZiB0ZXN0PSJzdHJpbmctbGVuZ3RoKEBjb21tZW50KSA+IDAiPgotICAgICAgICAgICAgICAgPHhzbDp0ZXh0PiAtIDwveHNsOnRleHQ+Ci0gICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGNvbW1lbnQiIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiLz4KLSAgICAgICAgICAgIDwveHNsOmlmPgotICAgICAgICAgPC9jb2RlPgotICAgICAgPC9wPgotICAgIDwveHNsOnRlbXBsYXRlPgotICAgICAgIAotPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL2plbHRvdG9jLnhzbCBiL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvamVsdG90b2MueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmU5NDU3Li4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9kb2MvamVsdG90b2MueHNsCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gYnVnIDIzMTQ3MiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gLS0+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgIHhtbG5zOnNldD0iaHR0cDovL2V4c2x0Lm9yZy9zZXRzIgotICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94YWxhbiIKLSAgICBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0ic2V0IgotPgotICAgPHhzbDpwYXJhbSBuYW1lPSJzZGtuYW1lIj5Tb21lIE5hbWU8L3hzbDpwYXJhbT4KLSAgIDx4c2w6cGFyYW0gbmFtZT0iZGlyIj5kb2MvaHRtbDwveHNsOnBhcmFtPiAgIAotICAgPHhzbDpvdXRwdXQgaW5kZW50PSJ5ZXMiIGVuY29kaW5nPSJVVEYtOCIgeGFsYW46aW5kZW50LWFtb3VudD0iMyIvPgotICAgPHhzbDprZXkgbmFtZT0iYWxsUGFja2FnZXMiIG1hdGNoPSJqZWxjbGFzcyIgdXNlPSJAcGFja2FnZSIvPgotICAgICAKLSAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9qZWwiPgotICAgICAgPHRvYyBsYWJlbD0ieyRzZGtuYW1lfSI+Ci0gICAgICAgICA8dG9waWMgbGFiZWw9IlJlZmVyZW5jZSI+Ci0gICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0ic2V0OmRpc3RpbmN0KGplbGNsYXNzL0BwYWNrYWdlKSI+Ci0gICAgICAgICAgICAgICA8dG9waWMgbGFiZWw9InsufSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImtleSgnYWxsUGFja2FnZXMnLCAuKSIvPgotICAgICAgICAgICAgICAgPC90b3BpYz4KLSAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgotICAgICAgICAgPC90b3BpYz4KLSAgICAgIDwvdG9jPgotICAgPC94c2w6dGVtcGxhdGU+Ci0gICAKLSAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImplbGNsYXNzIj4KLSAgICAgIDx0b3BpYyBsYWJlbD0ie0BmdWxsdHlwZX0iIGhyZWY9InskZGlyfS97QGZ1bGx0eXBlfS5odG1sIi8+Ci0gICA8L3hzbDp0ZW1wbGF0ZT4KLSAgIAotPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL3NjaGVtYS5jc3MgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vZG9jL3NjaGVtYS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiMjAyOGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2RvYy9zY2hlbWEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotSDYuU2NoZW1hSGVhZGVyIHsKLQlmb250LXNpemU6MTZweDsgCi0JZGlzcGxheTppbmxpbmUKLX0KLQotUC5TY2hlbWFDb3B5cmlnaHQgewotCWZvbnQtc2l6ZTogc21hbGxlcjsgCi0JZm9udC1zdHlsZTogbm9ybWFsOwotCWNvbG9yOiAjMzM2Njk5OyAKLQlkaXNwbGF5OmlubGluZTsKLQltYXJnaW4tdG9wOiAzLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDExLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMC4wMDAwMDBwdDsKLX0KLQotUC5TY2hlbWFEdGQgewotCWNvbG9yOiAjODAwMDAwOyAKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAxMC4wMDAwMDBwdDsKLX0KLQotUC5TY2hlbWFEdGRBdHRsaXN0IHsKLQljb2xvcjogIzgwMDAwMDsgCi0JbWFyZ2luLXRvcDogMC4wMDAwMDBwdDsKLQltYXJnaW4tYm90dG9tOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1yaWdodDogMC4wMDAwMDBwdDsKLQltYXJnaW4tbGVmdDogMjAuMDAwMDAwcHQ7Ci19Ci0KLXNwYW4uU2NoZW1hVGFnIHsKLQljb2xvcjogIzAwMDA4MDsKLX0KLQotc3Bhbi5TY2hlbWFDc3RyaW5nIHsKLQljb2xvcjogIzAwODAwMDsKLX0KLQotcHJlLkV4YW1wbGUgewotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci19Ci0KLS5Db25maWdNYXJrdXBFbGVtZW50RGVzYyB7Ci0JY29sb3I6IGJsYWNrOwotCW1hcmdpbi10b3A6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWJvdHRvbTogMC4wMDAwMDBwdDsKLQltYXJnaW4tcmlnaHQ6IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLWxlZnQ6IDEwLjAwMDAwMHB0OwotfQotCi0uQ29uZmlnTWFya3VwQXR0bGlzdERlc2MgewotCWNvbG9yOiBibGFjazsKLQltYXJnaW4tdG9wOiAwLjAwMDAwMHB0OwotCW1hcmdpbi1ib3R0b206IDAuMDAwMDAwcHQ7Ci0JbWFyZ2luLXJpZ2h0OiAwLjAwMDAwMHB0OwotCW1hcmdpbi1sZWZ0OiAzMi4wMDAwMDBwdDsKLX0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2xpYi8uY3ZzaWdub3JlIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL2xpYi8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzhmNWRhLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9saWIvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotamVsZG9jbGV0LmphcgotZG9jY2hlY2suamFyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLndzdC54c2wuc2RrLmRvY3VtZW50YXRpb24vcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YTZhNDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDIxNTEyNiwgMjEzODUzCi0jICAgICAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi1wbHVnaW5OYW1lPVhTTCBTREsgRG9jdW1lbnRhdGlvbiAoSW5jdWJhdGluZykKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9wbHVnaW4ueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Mjc5MTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLQotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj4KLSAgICAgIDx0b2MKLSAgICAgICAgICAgIGZpbGU9InRvYy54bWwiCi0gICAgICAgICAgICBwcmltYXJ5PSJ0cnVlIj4KLSAgICAgIDwvdG9jPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3Nkay9kb2N1bWVudGF0aW9uL0FjdGl2YXRvci5qYXZhIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3NyYy9vcmcvZWNsaXBzZS93c3QveHNsL3Nkay9kb2N1bWVudGF0aW9uL0FjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODRlNDExLi4wMDAwMDAwCi0tLSBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzbC9zZGsvZG9jdW1lbnRhdGlvbi9BY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbiI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbi90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3RvYy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YTc0NjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9vcmcuZWNsaXBzZS53c3QueHNsLnNkay5kb2N1bWVudGF0aW9uL3RvYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRvYyB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hhbGFuIiBsYWJlbD0iWFNMIFRvb2xzIFNESyBEb2N1bWVudGF0aW9uIj4KLSAgIDx0b3BpYyBsYWJlbD0iUmVmZXJlbmNlIj4KLSAgICAgIDx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlIj4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUuWFBhdGhDb3JlUGx1Z2luIi8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbCI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC5jb3JlLnV0aWwuWFNMVFhQYXRoSGVscGVyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUudXRpbC5YU0xUWFBhdGhIZWxwZXIiLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkiPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhVSU1lc3NhZ2VzLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVUlNZXNzYWdlcyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkuWFBhdGhWaWV3UGx1Z2luLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLlhQYXRoVmlld1BsdWdpbiIvPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cyI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01Ob2RlTGFiZWxQcm92aWRlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01Ob2RlTGFiZWxQcm92aWRlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVHJlZUNvbnRlbnRQcm92aWRlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01UcmVlQ29udGVudFByb3ZpZGVyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5ET01WaWV3ZXJGaWx0ZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuRE9NVmlld2VyRmlsdGVyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5FZGl0TmFtZXNwYWNlUHJlZml4RGlhbG9nLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLkVkaXROYW1lc3BhY2VQcmVmaXhEaWFsb2ciLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbi5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YUGF0aEFjdGlvbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbi5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5SZWZyZXNoQWN0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5TaG93SW5Tb3VyY2VBY3Rpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlhNTEVkaXRvcnNDb250ZW50UHJvdmlkZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuRWRpdG9yUmVmZXJlbmNlTGFiZWxQcm92aWRlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWFBhdGhBY3Rpb24iLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlJlZnJlc2hBY3Rpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuUmVmcmVzaEFjdGlvbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuU2hvd0luU291cmNlQWN0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLlNob3dJblNvdXJjZUFjdGlvbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkudmlld3MuWFBhdGhOYXZpZ2F0b3IuWE1MRWRpdG9yc0NvbnRlbnRQcm92aWRlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5YTUxFZGl0b3JzQ29udGVudFByb3ZpZGVyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhtbC54cGF0aC51aS52aWV3cy5YUGF0aE5hdmlnYXRvci5FZGl0b3JSZWZlcmVuY2VMYWJlbFByb3ZpZGVyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLnVpLnZpZXdzLlhQYXRoTmF2aWdhdG9yLkVkaXRvclJlZmVyZW5jZUxhYmVsUHJvdmlkZXIiLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZSI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLlZhbGlkYXRpb25QcmVmZXJlbmNlcyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5YU0xDb3JlLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUuWFNMQ29yZSIvPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyIj4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmNvcmUucmVzb2x2ZXIuUmVzb2x2ZXJFeHRlbnNpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5SZXNvbHZlckV4dGVuc2lvbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuY29yZS5yZXNvbHZlci5YU0xWZXJzaW9uSGFuZGxlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5jb3JlLnJlc29sdmVyLlhTTFZlcnNpb25IYW5kbGVyIi8+Ci0gICAgICA8L3RvcGljPgotICAgICAgPHRvcGljIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyIj4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLkFic3RyYWN0RGVidWdnZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQWJzdHJhY3REZWJ1Z2dlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuQnJlYWtQb2ludC5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5CcmVha1BvaW50Ii8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5EZWJ1Z0NvbnN0YW50cy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5EZWJ1Z0NvbnN0YW50cyIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuRGVidWdSdW5uZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuRGVidWdSdW5uZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLklYU0xEZWJ1Z2dlci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5kZWJ1Z2dlci5JWFNMRGVidWdnZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnZ2VyLlN0eWxlRnJhbWUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuU3R5bGVGcmFtZSIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuZGVidWdnZXIuVmFyaWFibGUiLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlciI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLkNvbmZpZ3VyYXRpb25FeGNlcHRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5Db25maWd1cmF0aW9uRXhjZXB0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLklQcm9jZXNzb3JJbnZva2VyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuSVByb2Nlc3Nvckludm9rZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuSkFYUFNBWFByb2Nlc3Nvckludm9rZXIuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5KQVhQU0FYUHJvY2Vzc29ySW52b2tlciIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5NYWluLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuTWFpbiIvPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5NZXNzYWdlcy5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLk1lc3NhZ2VzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLlRyYW5zZm9ybWF0aW9uRXhjZXB0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuVHJhbnNmb3JtYXRpb25FeGNlcHRpb24iLz4KLSAgICAgIDwvdG9waWM+Ci0gICAgICA8dG9waWMgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWciPgotICAgICAgICAgPHRvcGljIGhyZWY9ImRvYy9odG1sL29yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuQ3JlYXRpb25FeGNlcHRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuQ3JlYXRpb25FeGNlcHRpb24iLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLk1lc3NhZ2VzLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLk1lc3NhZ2VzIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5QaXBlbGluZURlZmluaXRpb24uaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuUGlwZWxpbmVEZWZpbml0aW9uIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC5pbnZva2VyLmNvbmZpZy5UcmFuc2Zvcm1EZWZpbml0aW9uLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlRyYW5zZm9ybURlZmluaXRpb24iLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLmludm9rZXIuY29uZmlnLlR5cGVkVmFsdWUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wuaW52b2tlci5jb25maWcuVHlwZWRWYWx1ZSIvPgotICAgICAgPC90b3BpYz4KLSAgICAgIDx0b3BpYyBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlciI+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhbkRlYnVnZ2VyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuRGVidWdnZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUHJpbnRUcmFjZUxpc3RlbmVyIi8+Ci0gICAgICAgICA8dG9waWMgaHJlZj0iZG9jL2h0bWwvb3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblJvb3RTdHlsZUZyYW1lLmh0bWwiIGxhYmVsPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuUm9vdFN0eWxlRnJhbWUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuU3R5bGVGcmFtZS5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblN0eWxlRnJhbWUiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVHJhY2VMaXN0ZW5lci5odG1sIiBsYWJlbD0ib3JnLmVjbGlwc2Uud3N0LnhzbC54YWxhbi5kZWJ1Z2dlci5YYWxhblRyYWNlTGlzdGVuZXIiLz4KLSAgICAgICAgIDx0b3BpYyBocmVmPSJkb2MvaHRtbC9vcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuLmRlYnVnZ2VyLlhhbGFuVmFyaWFibGUuaHRtbCIgbGFiZWw9Im9yZy5lY2xpcHNlLndzdC54c2wueGFsYW4uZGVidWdnZXIuWGFsYW5WYXJpYWJsZSIvPgotICAgICAgPC90b3BpYz4KLSAgIDwvdG9waWM+Ci08L3RvYz4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNDQ4N2MuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1idWlsZC54bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlZTYxZC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLSAgICA8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmU8L25hbWU+Ci0gICAgPGNvbW1lbnQ+PC9jb21tZW50PgotICAgIDxwcm9qZWN0cz48L3Byb2plY3RzPgotICAgIDxidWlsZFNwZWM+Ci0gICAgICAgIDxidWlsZENvbW1hbmQ+Ci0gICAgICAgICAgICA8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0gICAgICAgICAgICA8YXJndW1lbnRzPjwvYXJndW1lbnRzPgotICAgICAgICA8L2J1aWxkQ29tbWFuZD4KLSAgICA8L2J1aWxkU3BlYz4KLSAgICA8bmF0dXJlcz4KLSAgICAgICAgPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotICAgIDwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NTBkZjEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1N1biBEZWMgMTYgMTY6NTc6NTcgRVNUIDIwMDcKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkODU2OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNGcmkgSmFuIDA0IDA5OjA0OjQzIEVTVCAyMDA4Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTEKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAubWlzc2luZy1idW5kbGUtY2xhc3NwYXRoLWVudHJpZXM9MAotY29tcGlsZXJzLnAubWlzc2luZy1wYWNrYWdlcz0yCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0xCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0xCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYjAyMTMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGY3MDguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDY2Mjc3Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVhTTCBUb29scyAoSW5jdWJhdGluZykKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1YU0xUIEVkaXRvciwgdmFsaWRhdG9yLCBsYXVuY2hpbmcgYW5kIGRlYnVnZ2luZyBzdXBwb3J0Ci0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwOCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLFxuXAotRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwpIGFuZCBvdGhlcnMgMjAwOC5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51aylcblwKLSAgICBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCAtIGh0dHA6Ly93d3cuc3RhcnN0YW5kYXJkLm9yZylcblwKLSAgICBKZXNwZXIgTW9sbGVyIChOaW5lQ29uc3VsdCAtIGh0dHA6Ly93d3cubmluZWNvbnN1bHQuZGspXG4KLSMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1KdW5lIDA2LCAyMDA3XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotICAgIC0gQ29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNWY0ZjkuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIxLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgcGx1Z2luPSJvcmcuZWNsaXBzZS53c3QueHNsIj4KLQotICAgPGRlc2NyaXB0aW9uPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcy8iLz4KLSAgICAgIDxkaXNjb3ZlcnkgbGFiZWw9IldlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBVcGRhdGVzIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzIi8+Ci0gICA8L3VybD4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS53c3QueG1sX3VpLmZlYXR1cmUiIHZlcnNpb249IjMuMC4wIi8+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLmpkdCIgdmVyc2lvbj0iMy40LjAiLz4KLSAgIDwvcmVxdWlyZXM+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmNvcmUiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRlYnVnLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5sYXVuY2hpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLnhhbGFuIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLnhhbGFuIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsLmRvYyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5qeHBhdGgiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnhwYXRoLmNvcmUiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmFwYWNoZS5iY2VsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0iamF2YV9jdXAucnVudGltZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuc2F4b24iCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNsIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmRlYnVnLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5qYXhwLmxhdW5jaGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwM2U2NjUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KQotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KQotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0gIAotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIDwvTEk+Ci0gIAotICA8bGk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhNWE0MC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQuaW5pCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBhYm91dC5pbmkKLSMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmZWF0dXJlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jICIla2V5IiBhcmUgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZGVmaW5lZCBpbiBhYm91dC5wcm9wZXJ0aWVzCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLSMgUHJvcGVydHkgImFib3V0VGV4dCIgY29udGFpbnMgYmx1cmIgZm9yICJBYm91dCIgZGlhbG9nICh0cmFuc2xhdGVkKQotYWJvdXRUZXh0PSVibHVyYgotCi0jIFByb3BlcnR5ICJ3aW5kb3dJbWFnZSIgY29udGFpbnMgcGF0aCB0byB3aW5kb3cgaWNvbiAoMTZ4MTYpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImZlYXR1cmVJbWFnZSIgY29udGFpbnMgcGF0aCB0byBmZWF0dXJlIGltYWdlICgzMngzMikKLWZlYXR1cmVJbWFnZT13dHBfcHJvZDMyLnBuZwotCi0jIFByb3BlcnR5ICJhYm91dEltYWdlIiBjb250YWlucyBwYXRoIHRvIHByb2R1Y3QgaW1hZ2UgKDUwMHgzMzAgb3IgMTE1eDE2NCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiYXBwTmFtZSIgY29udGFpbnMgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gKG5vdCB0cmFuc2xhdGVkKQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJ3ZWxjb21lUGFnZSIgY29udGFpbnMgcGF0aCB0byB3ZWxjb21lIHBhZ2UgKHNwZWNpYWwgWE1MLWJhc2VkIGZvcm1hdCkKLSMgb3B0aW9uYWwKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBlcnNwZWN0aXZlIiBjb250YWlucyB0aGUgaWQgb2YgdGhlIHBlcnNwZWN0aXZlIGluIHdoaWNoIHRoZQotIyB3ZWxjb21lIHBhZ2UgaXMgdG8gYmUgb3BlbmVkLgotIyBvcHRpb25hbAotCi0KLQotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODM5MGEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0Lm1hcHBpbmdzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIGFib3V0Lm1hcHBpbmdzCi0jIGNvbnRhaW5zIGZpbGwtaW5zIGZvciBhYm91dC5wcm9wZXJ0aWVzCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHRyYW5zbGF0ZWQuCi0KLTA9QGJ1aWxkQApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2Fib3V0LnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmMWJhNy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgYWJvdXQucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgYWJvdXQuaW5pCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIGZpbGwtaW5zIGFyZSBzdXBwbGllZCBieSBhYm91dC5tYXBwaW5ncwotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0jCi0jIERvIG5vdCB0cmFuc2xhdGUgYW55IHZhbHVlcyBzdXJyb3VuZGVkIGJ5IHt9Ci0KLWJsdXJiPVdUUCBYU0wgU291cmNlXG5cCi1cblwKLVZlcnNpb246IHtmZWF0dXJlVmVyc2lvbn1cblwKLUJ1aWxkIGlkOiB7MH1cblwKLVxuXAotKGMpIENvcHlyaWdodCBEb3VnIFNhdGNod2VsbCAoQ2hhc2UgVGVjaG5vbG9neSBMdGQpLCBEYXZpZCBDYXJ2ZXIgKFN0YW5kYXJkcyBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbClcblwKLWFuZCBvdGhlcnMgMjAwOC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMKLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhNTc1Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotCi1iaW4uaW5jbHVkZXMgPSBhYm91dC5odG1sLCBhYm91dC5pbmksIGFib3V0Lm1hcHBpbmdzLCBhYm91dC5wcm9wZXJ0aWVzLCB3dHBfcHJvZDMyLnBuZywgcGx1Z2luLnByb3BlcnRpZXMsIHBsdWdpbi54bWwsIHNyYy8qKiwgTUVUQS1JTkYvCi1zb3VyY2VQbHVnaW4gPSB0cnVlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzQxY2EuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1wbHVnaW5OYW1lPVdUUCBYU0wgU291cmNlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZiBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUJ1bmRsZS93dHBfcHJvZDMyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmYjQ0YS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVCdW5kbGUvd3RwX3Byb2QzMi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmY2VhYjMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlQnVuZGxlL3d0cF9wcm9kMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ5ZTlmLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPVwKLWVwbC12MTAuaHRtbCxcCi1lY2xpcHNlX3VwZGF0ZV8xMjAuanBnLFwKLWZlYXR1cmUueG1sLFwKLWZlYXR1cmUucHJvcGVydGllcyxcCi1saWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjJhZDI5Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZUZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFkOTVmZi4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9WFNMIFRvb2xzIERldmVsb3BlciBSZXNvdXJjZXMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1Tb3VyY2UgY29kZSBXVFAgWFNMLgotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDggRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSxcblwKLURhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKSBhbmQgb3RoZXJzIDIwMDguXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWspXG5cCi0gICAgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgLSBodHRwOi8vd3d3LnN0YXJzdGFuZGFyZC5vcmcpXG5cCi0gICAgSmVzcGVyIE1vbGxlciAoTmluZUNvbnN1bHQgLSBodHRwOi8vd3d3Lm5pbmVjb25zdWx0LmRrKVxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSwgMjAwOFxuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlRmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNGE0OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVGZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+SnVuZSAwNiwgMjAwNzwvcD4KLQotPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgotCi08cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKLSAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCi0gICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgotICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+Ci0gICAKLTxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKLSAgIAotPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAotICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLSAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCi0gICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KLSAgIAotPHVsPgotCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+Ci0JPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgotCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucwotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+Ci0JPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Ci08L3VsPiAgIAotIAotPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKLUluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+Ci0KLTx1bD4KLQk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KLQk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgotCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KLQk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgotCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KLTwvdWw+Ci0JCQotPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKLWluc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgotU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCi10aGF0IGRpcmVjdG9yeS48L3A+Ci0KLTxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCi1PVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KLQotPHVsPgotCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+Ci0JPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQotCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+Ci0JPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KLSAgPExJPkNvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbCI+aHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKTwvQT4KLSAgPC9MST4KLTwvVUw+Ci0KLTxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCi1jb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KLQotPGgzPkNyeXB0b2dyYXBoeTwvaDM+Ci0KLTxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KLSAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAotICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+Ci0gICAKLTxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYTVhNDAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LmluaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgYWJvdXQuaW5pCi0jIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmVhdHVyZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyAiJWtleSIgYXJlIGV4dGVybmFsaXplZCBzdHJpbmdzIGRlZmluZWQgaW4gYWJvdXQucHJvcGVydGllcwotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0jIFByb3BlcnR5ICJhYm91dFRleHQiIGNvbnRhaW5zIGJsdXJiIGZvciAiQWJvdXQiIGRpYWxvZyAodHJhbnNsYXRlZCkKLWFib3V0VGV4dD0lYmx1cmIKLQotIyBQcm9wZXJ0eSAid2luZG93SW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2luZG93IGljb24gKDE2eDE2KQotIyBuZWVkZWQgZm9yIHByaW1hcnkgZmVhdHVyZXMgb25seQotCi0jIFByb3BlcnR5ICJmZWF0dXJlSW1hZ2UiIGNvbnRhaW5zIHBhdGggdG8gZmVhdHVyZSBpbWFnZSAoMzJ4MzIpCi1mZWF0dXJlSW1hZ2U9d3RwX3Byb2QzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKLQotCi0KLQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0Lm1hcHBpbmdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjgzOTBhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5tYXBwaW5ncworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyBhYm91dC5tYXBwaW5ncwotIyBjb250YWlucyBmaWxsLWlucyBmb3IgYWJvdXQucHJvcGVydGllcwotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgZG9lcyBub3QgbmVlZCB0byBiZSB0cmFuc2xhdGVkLgotCi0wPUBidWlsZEAKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9hYm91dC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3Yzk4YjEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL2Fib3V0LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBhYm91dC5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBhYm91dC5pbmkKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgZmlsbC1pbnMgYXJlIHN1cHBsaWVkIGJ5IGFib3V0Lm1hcHBpbmdzCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLSMKLSMgRG8gbm90IHRyYW5zbGF0ZSBhbnkgdmFsdWVzIHN1cnJvdW5kZWQgYnkge30KLQotYmx1cmI9V1RQIFhTTCBTb3VyY2VcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi0oYykgQ29weXJpZ2h0IERvdWcgU2F0Y2h3ZWxsIChDaGFzZSBUZWNobm9sb2d5IEx0ZCksIERhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKVxuXAotYW5kIG90aGVycyAyMDA4LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXAotVmlzaXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scwotCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGE1NzVjLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0KLWJpbi5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsIGFib3V0LmluaSwgYWJvdXQubWFwcGluZ3MsIGFib3V0LnByb3BlcnRpZXMsIHd0cF9wcm9kMzIucG5nLCBwbHVnaW4ucHJvcGVydGllcywgcGx1Z2luLnhtbCwgc3JjLyoqLCBNRVRBLUlORi8KLXNvdXJjZVBsdWdpbiA9IHRydWUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIzNDFjYS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXBsdWdpbk5hbWU9V1RQIFhTTCBTb3VyY2UKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlL3NvdXJjZVRlbXBsYXRlUGx1Z2luL3d0cF9wcm9kMzIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWZiNDRhLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS9zb3VyY2VUZW1wbGF0ZVBsdWdpbi93dHBfcHJvZDMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjZWFiMy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUvc291cmNlVGVtcGxhdGVQbHVnaW4vd3RwX3Byb2QzMi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NTRlNC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NTBkZjEuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNTdW4gRGVjIDE2IDE2OjU3OjU3IEVTVCAyMDA3Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkODU2OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jRnJpIEphbiAwNCAwOTowNDo0MyBFU1QgMjAwOAotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0xCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLm1pc3NpbmctYnVuZGxlLWNsYXNzcGF0aC1lbnRyaWVzPTAKLWNvbXBpbGVycy5wLm1pc3NpbmctcGFja2FnZXM9MgotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MQotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MQotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwM2NiNzYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCi0KLWdlbmVyYXRlLmZlYXR1cmVAb3JnLmVjbGlwc2Uud3N0LnhzbC5mZWF0dXJlLnNvdXJjZT1vcmcuZWNsaXBzZS53c3QueHNsLmZlYXR1cmUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZXBsLXYxMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLTxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCi14bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Ci0KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Ci08bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Ci08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KLTxsaW5rIHJlbD1GaWxlLUxpc3QKLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgotPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Ci08IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+Ci0gIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+Ci0gIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgotICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgotICA8bzpQYWdlcz40PC9vOlBhZ2VzPgotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgotICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KLSAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+Ci0gIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgotICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Ci08L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KLSA8dzpXb3JkRG9jdW1lbnQ+Ci0gIDx3OlRyYWNrUmV2aXNpb25zLz4KLSA8L3c6V29yZERvY3VtZW50PgotPC94bWw+PCFbZW5kaWZdLS0+Ci08c3R5bGU+Ci08IS0tCi0gLyogRm9udCBEZWZpbml0aW9ucyAqLwotQGZvbnQtZmFjZQotCXtmb250LWZhbWlseTpUYWhvbWE7Ci0JcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7Ci0JbXNvLWZvbnQtY2hhcnNldDowOwotCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOwotCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOwotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQotIC8qIFN0eWxlIERlZmluaXRpb25zICovCi1wLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZToxMi4wcHQ7Ci0JZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotcAotCXttYXJnaW4tcmlnaHQ6MGluOwotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOwotCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOwotCW1hcmdpbi1sZWZ0OjBpbjsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0Ci0Je21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOwotCW1hcmdpbjowaW47Ci0JbWFyZ2luLWJvdHRvbTouMDAwMXB0OwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6OC4wcHQ7Ci0JZm9udC1mYW1pbHk6VGFob21hOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLUBwYWdlIFNlY3Rpb24xCi0Je3NpemU6OC41aW4gMTEuMGluOwotCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOwotCW1zby1oZWFkZXItbWFyZ2luOi41aW47Ci0JbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKLQltc28tcGFwZXItc291cmNlOjA7fQotZGl2LlNlY3Rpb24xCi0Je3BhZ2U6U2VjdGlvbjE7fQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+Ci0KLTxkaXYgY2xhc3M9U2VjdGlvbjE+Ci0KLTxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KLTwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgotVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQotT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLWluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+Ci1iKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCi1zdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCi1ieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCi1zdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKLVByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQotd29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCi1lbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50Ci1jbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQotb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKLWRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCi1yZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAotYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQotZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKLUNvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQotZm9ybS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cwotUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQotY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KLW9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgotdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcwotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cwotQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKLXRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAotZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKLXRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCi1pZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCi1kaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKLUVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0Ci1yaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQotUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgotPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKLWNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKLWFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5Ci1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKLWluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKLWFzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQotc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAotaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQotbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQotY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKLWNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKLWNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQotb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKLWFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCi1vZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKLXByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCi1Db250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCi1jb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCi1sZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgotY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKLW9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcwotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCi10byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAotYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKLWluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCi1Qcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQotY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAotd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQotb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQotY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKLUFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi1XSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi1NRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKLVByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKLUFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCi1lcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKLVRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCi1vciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0Ci1mdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQotbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KLWFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKLW90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAotUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKLWNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQotcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAotZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKLVJlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcwotY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50Ci1TdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCi10aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCi1BZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bwotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCi1vZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KLShpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQotKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwotdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKLWV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgotQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCi1BZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KLQotPC9kaXY+Ci0KLTwvYm9keT4KLQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMDY5MTguLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVhTTCBUb29scyBTREsgKEluY3ViYXRpbmcpCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1UaGUgRWNsaXBzZSBXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgUHJvamVjdCB1cGRhdGUgc2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249WFNMVCBFZGl0b3IsIHZhbGlkYXRvciwgbGF1bmNoaW5nIGFuZCBkZWJ1Z2dpbmcgc3VwcG9ydAotCi0jICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDggRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSxcblwKLURhdmlkIENhcnZlciAoU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsKSBhbmQgb3RoZXJzIDIwMDguXG5cCi1BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1Db250cmlidXRvcnM6XG5cCi0gICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkIC0gaHR0cDovL3d3dy5jaGFzZXRlY2hub2xvZ3kuY28udWspXG5cCi0gICAgRGF2aWQgQ2FydmVyIChTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgLSBodHRwOi8vd3d3LnN0YXJzdGFuZGFyZC5vcmcpXG5cCi0gICAgSmVzcGVyIE1vbGxlciAoTmluZUNvbnN1bHQgLSBodHRwOi8vd3d3Lm5pbmVjb25zdWx0LmRrKVxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZGU3ODAuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2xfc2RrLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMS4wLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICAgICA8ZGlzY292ZXJ5IGxhYmVsPSJXZWIgVG9vbHMgUGxhdGZvcm0gKFdUUCkgVXBkYXRlcyIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvdXBkYXRlcyIvPgotICAgPC91cmw+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZSIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxpbmNsdWRlcwotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2wuZmVhdHVyZS5zb3VyY2UiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhzbC5zZGsuZG9jdW1lbnRhdGlvbiIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhzbF9zZGsuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzZTY2NS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueHNsX3Nkay5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KQotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KQotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0gIAotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIDwvTEk+Ci0gIAotICA8bGk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+Cg==