ZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS8uY2xhc3NwYXRoIGIvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpLy5wcm9qZWN0IGIvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzEzM2QxLi4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjdkMmI4Li4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNNb24gTWFyIDMwIDEwOjI3OjE3IEVEVCAyMDA5Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDZhMWE1Li4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpLkFjdGl2YXRvcgotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZTtidW5kbGUtdmVyc2lvbj0iNS4wLjEwMCIsCi0gb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLnhsYy5jb3JlO2J1bmRsZS12ZXJzaW9uPSI1LjAuMCIsCi0gb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLnhsYy51aTtidW5kbGUtdmVyc2lvbj0iNi4wLjAiLAotIG9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iMS4wLjAiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSIzLjUuMCIsCi0gb3JnLmVjbGlwc2UucHRwLnJkdC5zZXJ2aWNlcztidW5kbGUtdmVyc2lvbj0iMS4wLjEiLAotIG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZTtidW5kbGUtdmVyc2lvbj0iMi4xLjAiLAotIG9yZy5lY2xpcHNlLmNkdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSI1LjEuMCIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aQpkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpL2Fib3V0Lmh0bWwgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY2Nzg3ZC4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5BcHJpbCAzMCwgMjAwOTwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmciPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpL2J1aWxkLnByb3BlcnRpZXMgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjMzRmNy4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS9wbHVnaW4ucHJvcGVydGllcyBiL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBlZmQ3MC4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1wbHVnaW5OYW1lID0gUmVtb3RlIFhMIEMvQysrIE1hbmFnZWQgQnVpbGQgVUkgUGx1Z2luCi1wcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwotCi12YXJpYWJsZURlc2NyaXB0aW9uID0gWEwgQy9DKysgQ29tcGlsZXIgUm9vdCBMb2NhdGlvbgotCi0jQnVpbGQgbW9kZWwgbmFtZXMKLVRhcmdldE5hbWUueGxjLmV4ZSA9IFJlbW90ZSBFeGVjdXRhYmxlIChYTCBDL0MrKykKLVRhcmdldE5hbWUueGxjLnNvID0gUmVtb3RlIFNoYXJlZCBMaWJyYXJ5IChYTCBDL0MrKykKLVRhcmdldE5hbWUueGxjLmxpYiA9IFJlbW90ZSBTdGF0aWMgTGlicmFyeShYTCBDL0MrKykKLQotIyBEZWZhdWx0IENvbmZpZ3VyYXRpb24gTmFtZXMKLSMgU1RBUlQgTk9OLVRSQU5TTEFUQUJMRQotQ29uZmlnTmFtZS5SZWwgPSBSZWxlYXNlCi1Db25maWdOYW1lLkRiZyA9IERlYnVnCi0jIEVORCBOT04tVFJBTlNMQVRBQkxFCi0KLSMgR2VuZXJpYyB0b29sLWNoYWluIG5hbWVzCi1Ub29sQ2hhaW5OYW1lLlJlbD1SZW1vdGUgWEwgQy9DKysgVG9vbCBDaGFpbgotVG9vbENoYWluTmFtZS5EYmc9UmVtb3RlIFhMIEMvQysrIFRvb2wgQ2hhaW4KLQotIyBHZW5lcmljIHBsYXRmb3JtIG5hbWVzCi1QbGF0Zm9ybU5hbWUuUmVsPVJlbGVhc2UgUGxhdGZvcm0KLVBsYXRmb3JtTmFtZS5EYmc9RGVidWcgUGxhdGZvcm0KLQotIyBHZW5lcmljIGJ1aWxkZXIgbmFtZXMKLUJ1aWxkZXJOYW1lLlJlbD1HTlUgTWFrZQotQnVpbGRlck5hbWUuRGJnPUdOVSBNYWtlCi0KLSMgVG9vbCBuYW1lcwotVG9vbE5hbWUuY29tcGlsZXIueGxjLmMgPSBSZW1vdGUgWEwgQyBDb21waWxlcgotVG9vbE5hbWUuY29tcGlsZXIueGxjLmNwcCA9IFJlbW90ZSBYTCBDKysgQ29tcGlsZXIKLVRvb2xOYW1lLmxpbmtlci54bGMuYyA9IFJlbW90ZSBYTCBDIEV4ZWN1dGFibGUgTGlua2VyCi1Ub29sTmFtZS5saW5rZXIueGxjLmNwcCA9IFJlbW90ZSBYTCBDKysgRXhlY3V0YWJsZSBMaW5rZXIKLVRvb2xOYW1lLmFyY2hpdmVyLnhsYyA9IEFyY2hpdmVyCi1Ub29sTmFtZS5hc3NlbWJsZXIueGxjID0gWEwgQXNzZW1ibGVyCi1Ub29sTmFtZS5saW5rZXIueGxjLmNwcC5zbyA9IFJlbW90ZSBYTCBDKysgU2hhcmVkIE9iamVjdCBMaW5rZXIKLVRvb2xOYW1lLmxpbmtlci54bGMuYy5zbyA9IFJlbW90ZSBYTCBDIFNoYXJlZCBPYmplY3QgTGlua2VyCi0KLSMgR2VuZXJpYyBDYXRlZ29yeSBOYW1lcwotT3B0aW9uQ2F0ZWdvcnkuTGlua2luZyA9IExpbmtpbmcKLU9wdGlvbkNhdGVnb3J5LkxpYnMgPSBMaWJyYXJpZXMgYW5kIFBhdGhzCi1PcHRpb25DYXRlZ29yeS5pZnAgPSBJbnRlZ2VyIGFuZCBGbG9hdGluZyBQb2ludAotT3B0aW9uQ2F0ZWdvcnkuY2MgPSBDb21waWxlciBDdXN0b21pemF0aW9uCi1PcHRpb25DYXRlZ29yeS5sbSA9IExpc3RpbmdzIGFuZCBNZXNzYWdlcwotT3B0aW9uQ2F0ZWdvcnkuZWNkID0gRXJyb3IgQ2hlY2tpbmcgYW5kIERlYnVnZ2luZwotT3B0aW9uQ2F0ZWdvcnkuSW5wdXQgPSBJbnB1dCBDb250cm9sCi1PcHRpb25DYXRlZ29yeS5PdXRwdXQgPSBPdXRwdXQgQ29udHJvbAotT3B0aW9uQ2F0ZWdvcnkuT3B0aW1pemU9T3B0aW1pemF0aW9uCi1PcHRpb25DYXRlZ29yeS5Db21wID0gQ29tcGF0aWJpbGl0eQotT3B0aW9uQ2F0ZWdvcnkuTWlzYz1NaXNjZWxsYW5lb3VzCi1PcHRpb25DYXRlZ29yeS5Bc3NlbWJsZXI9QXNzZW1ibGVyIE9wdGlvbnMKLU9wdGlvbkNhdGVnb3J5LkdlbmVyYWw9R2VuZXJhbAotT3B0aW9uQ2F0ZWdvcnkub2JqY2M9T2JqZWN0IGNvZGUgY29udHJvbAotCi0KLSMgZ2VuZXJpYyBuYW1lcyB1c2VkIGJ5IG11bHRpcGxlIG9wdGlvbnMKLU9wdGlvbi5ub25lID0gbm9uZQotT3B0aW9uLmRlZmF1bHQgPSBkZWZhdWx0Ci0KLSMgTWlzY2VsbGFuZW91cyBvcHRpb25zCi1PcHRpb24uY29tcGlsZXIub3RoZXIgPSBPdGhlciBjb21waWxlciBmbGFncwotCi0jIElucHV0IENvbnRyb2wgb3B0aW9ucwotT3B0aW9uLlByZXByb2Njb21tZW50cyA9IFByZXNlcnZlIGNvbW1lbnRzIGluIHByZS1wcm9jZXNzZWQgb3V0cHV0ICgtQykKLU9wdGlvbi5EZWZTeW0gPSBEZWZpbmUgYSBtYWNybyBuYW1lICgtRCkKLU9wdGlvbi5JbmNsUGF0aHMgPSBTcGVjaWZ5IGFuIGFkZGl0aW9uYWwgc2VhcmNoIHBhdGggZm9yICNpbmNsdWRlIHMgKC1JKQotT3B0aW9uLlVuZGVmU3ltID0gVW5kZWZpbmUgYSBtYWNybyBuYW1lICgtVSkKLU9wdGlvbi5hbHRpdmVjID0gRW5hYmxlIGNvbXBpbGVyIHN1cHBvcnQgZm9yIHZlY3RvciBkYXRhIHR5cGVzICgtcWFsdGl2ZWMpCi1PcHRpb24uYXNtID0gQ29udHJvbCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYW5kIHN1YnNlcXVlbnQgZ2VuZXJhdGlvbiBvZiBjb2RlIGZvciBhc20gc3RhdGVtZW50ICgtcWFzbSkKLU9wdGlvbi5hc20uZGVmYXVsdCA9IERlZmF1bHQKLU9wdGlvbi5hc20uc3RkY3BwID0gU3RhbmRhcmQgKC1xYXNtPXN0ZGNwcCkKLU9wdGlvbi5hc20uZ2NjID0gR0NDICgtcWFzbT1nY2MpCi1PcHRpb24uQ3N0ZGluYyA9IFNwZWNpZnkgQyBzdGFuZGFyZCBzZWFyY2ggbG9jYXRpb24gKC1xY19zdGRpbmMpCi1PcHRpb24uY3Bwc3RkaW5jID0gU3BlY2lmeSBDKysgc3RhbmRhcmQgc2VhcmNoIGxvY2F0aW9uICgtcWNwcF9zdGRpbmMpCi1PcHRpb24ucWNvbXBsZXhnY2NpbmNsID0gV3JhcCBpbmNsdWRlIGZpbGVzIGluIEdDQyBwcmFnbWFzICgtcWNvbXBsZXhnY2NpbmNsKQotT3B0aW9uLk5vY3BsdXMgPSBEb24ndCByZWNvZ25pemUgQysrIGNvbW1lbnRzIGluIEMgc291cmNlIGZpbGVzKC1xbm9jcGx1c2NtdCkKLU9wdGlvbi5NYmNzID0gRW5hYmxlIHJlY29nbml0aW9uIG9mIG11bHRpLWJ5dGUgY2hhcmFjdGVycyAoLXFtYmNzKQotT3B0aW9uLkRpZ3JhcGggPSBFbmFibGUgcmVjb2duaXRpb24gb2YgZGlncmFwaCBjaGFyYWN0ZXJzICgtcWRpZ3JhcGgpCi1PcHRpb24uRG9sbGFyID0gQWxsb3cgJCBzeW1ib2xzIHRvIGJlIHVzZWQgaW4gaWRlbnRpZmllcnMgKC1xZG9sbGFyKQotT3B0aW9uLkluY2RpcmZpcnN0ID0gIENoYW5nZSB0aGUgc2VhcmNoIHBhdGggKC1xaWRpcmZpcnN0KQotT3B0aW9uLmlnbnByYWcgPSBJZ25vcmUgY2VydGFpbiBwcmFnbWFzICgtcWlnbnByYWc9KQotT3B0aW9uLmlnbnByYWcuZGlzam9pbnQgPSBkaXNqb2ludAotT3B0aW9uLmlnbnByYWcuaXNvbGF0ZWQgPSBpc29sYXRlZAotT3B0aW9uLmlnbnByYWcuYWxsID0gYWxsCi1PcHRpb24uaWducHJhZy5pYm0gPSBJQk0oUikKLU9wdGlvbi5pZ25wcmFnLm9tcCA9IG9tcAotT3B0aW9uLktleXdvcmQgPSBUcmVhdCBzcGVjaWZpZWQgbmFtZSBhcyBhIGtleXdvcmQoLXFrZXl3b3JkKQotT3B0aW9uLmxhbmdsdmwgPSBMYW5ndWFnZSBsZXZlbCAoLXFsYW5nbHZsPSkKLU9wdGlvbi5sYW5nbHZsLmNsYXNzaWMgPSBjbGFzc2ljCi1PcHRpb24ubGFuZ2x2bC5leHRlbmRlZCA9IGV4dGVuZGVkCi1PcHRpb24ubGFuZ2x2bC5zYWEgPSBTQUEKLU9wdGlvbi5sYW5nbHZsLnNhYWwyID0gU0FBIExldmVsIDIKLU9wdGlvbi5sYW5nbHZsLnN0ZGM4OSA9IEM4OSBzdGFuZGFyZAotT3B0aW9uLmxhbmdsdmwuc3RkYzk5ID0gQzk5IHN0YW5kYXJkCi1PcHRpb24ubGFuZ2x2bC5leHRjODkgPSBDODkgd2l0aCBleHRlbnNpb25zCi1PcHRpb24ubGFuZ2x2bC5leHRjOTkgPSBDOTkgd2l0aCBleHRlbnNpb25zCi1PcHRpb24ubGFuZ2x2bC51Y3MgPSBVQ1MKLU9wdGlvbi5NYWNwc3RyID0gQ29udmVydCBwYXNjYWwgc3RyaW5nIGxpdGVyYWxzIGludG8gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBsaXRlcmFscyAoLXFtYWNwc3RyKQotT3B0aW9uLlBhc2NhbCA9IFJlY29nbml6ZSBhbmQgYWNjZXB0IHRoZSBrZXl3b3JkIHBhc2NhbCAoLXFwYXNjYWwpCi1PcHRpb24uc291cmNldHlwZSA9IE92ZXJyaWRlIHNvdXJjZSB0eXBlICgtcXNvdXJjZXR5cGUpCi1PcHRpb24uc291cmNldHlwZS5jID0gYwotT3B0aW9uLnNvdXJjZXR5cGUuYysrID0gQysrCi1PcHRpb24uc291cmNldHlwZS5hc3NlbWJsZXIgPSBhc3NlbWJsZXIKLU9wdGlvbi5zdGRmcmFtZXdvcmsgPSBTZWFyY2ggc3RhbmRhcmQgZnJhbWV3b3JrIGRpcmVjdG9yaWVzICgtcXN0ZGZyYW1ld29yaykKLU9wdGlvbi5mcmFtZXdvcmtkaXJzID0gU3BlY2lmeSBhZGRpdGlvbmFsIGZyYW1ld29yayBkaXJlY3RvcmllcyAoLXFmcmFtZXdvcmtkaXIpCi1PcHRpb24uSW5wdXQgPSBEb24ndCBzZWFyY2ggdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggZGlyZWN0b3JpZXMgKC1xbm9zdGRpbmMpCi1PcHRpb24uV2Fybi5TeW50YXggPVBlcmZvcm0gc3ludGF4IGNoZWNraW5nIHdpdGhvdXQgZ2VuZXJhdGluZyBhbiBvYmplY3QgZmlsZSgtcXN5bnRheG9ubHkpIAotT3B0aW9uLlRyaWdyYXBoPVJlY29nbml6ZSB0cmktZ3JhcGgga2V5IGNvbWJpbmF0aW9ucwotT3B0aW9uLlV0Zj1FbmFibGUgcmVjb2duaXRpb24gb2YgVVRGIGxpdGVyYWwgc3ludGF4ICgtcXV0ZikKLU9wdGlvbi5wbHVzID0gQ29tcGlsZSBhbnkgZmlsZSBhcyBhIEMrKyBmaWxlICgtKykKLU9wdGlvbi5jaW5jID0gSW5zZXJ0IGV4dGVybiAiQyIge30gaW4gdGhlIHNwZWNpZmllZCBpbmNsdWRlIGZpbGVzICgtcWNpbmMpCi1PcHRpb24uZ2NjX2Nfc3RkaW5jID0gQ2hhbmdlIEdDQyBoZWFkZXJzIHNlYXJjaCBsb2NhdGlvbiAoLXFnY2NfY19zdGRpbmMpCi1PcHRpb24uZ2NjX2NwcF9zdGRpbmMgPSBDaGFuZ2UgRysrIGhlYWRlcnMgc2VhcmNoIGxvY2F0aW9uICgtcWdjY19jcHBfc3RkaW5jKQotCi0jIE91dHB1dCBDb250cm9sIG9wdGlvbnMKLQotT3B0aW9uLlRyYWNlPVByZXZpZXcgdGhlIHN0ZXBzIGZvciBjb21waWxhdGlvbigtIykKLU9wdGlvbi5ibWF4ZGF0YT1NYXhpbXVtIHNpemUgb2YgdGhlIGFyZWEgc2hhcmVkIGJ5IHRoZSBzdGF0aWMgZGF0YSBhbmQgdGhlIGhlYXAgKC1ibWF4ZGF0YT0pCi1PcHRpb24uYz1QYXNzIHRoZSBzb3VyY2UgZmlsZXMgdGhyb3VnaCBjb21waWxlciBjb21wb25lbnQgb25seSgtYykKLU9wdGlvbi5QcmVwcm9jT25seT1QcmVwcm9jZXNzIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGNyZWF0ZSBhbiBvdXRwdXQgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlICgtRSkKLU9wdGlvbi5QcmVwcm9jUmVtb3ZlQ29tbWVudHM9UmVtb3ZlIGNvbW1lbnRzIGZyb20gcHJlcHJvY2Vzc2VkIG91dHB1dCAoLUMhKQotT3B0aW9uLk09Q3JlYXRlIGFuIG91dHB1dCBmaWxlIHRoYXQgY29udGFpbnMgdGFyZ2V0cyBmb3IgdGhlIG1ha2UgY29tbWFuZCAoLU0pCi1PcHRpb24ubWE9U3Vic3RpdHV0ZSBpbmxpbmUgY29kZSBmb3IgY2FsbHMgdG8gYWxsb2NhICgtbWEpCi1PcHRpb24ubz1TcGVjaWZ5IGFuIG91dHB1dCBsb2NhdGlvbiBmb3IgdGhlIGZpbGVzIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyICgtbykgCi1PcHRpb24uUD1QcmVwcm9jZXNzIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGNyZWF0ZSBhbiBvdXRwdXQgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlIGZvciBlYWNoIHNvdXJjZSBmaWxlKC1QKQotT3B0aW9uLkFzc2VtPUdlbmVyYXRlIGFuIGFzc2VtYmxlciBsYW5ndWFnZSBmaWxlIGZvciBlYWNoIHNvdXJjZSBmaWxlKC1TKQotT3B0aW9uLlN0cmlwPVN0cmlwIHN5bWJvbCB0YWJsZSwgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gYW5kIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gZnJvbSBzb3VyY2UgZmlsZSgtcykKLU9wdGlvbi42ND1TZWxlY3QgNjQtYml0IGNvbXBpbGVyIG1vZGUoLXE2NCkKLU9wdGlvbi5BbGlnbj1TcGVjaWZ5IHdoYXQgYWxpZ25tZW50IHJ1bGVzIGNvbXBpbGVyIHVzZXMgZm9yIGNvbXBpbGF0aW9uKC1xYWxpZ24pCi1PcHRpb24uQWxpZ24uRnVsbD1mdWxsCi1PcHRpb24uQWxpZ24uTmF0dXJhbD1uYXR1cmFsCi1PcHRpb24uQWxpZ24udHdvYnl0ZT10d28gYnl0ZQotT3B0aW9uLkFsaWduLnBhY2tlZD1wYWNrZWQKLU9wdGlvbi5BbGlnbi5iaXRwYWNrZWQ9Yml0IHBhY2tlZAotT3B0aW9uLmFsbG9jYT1TdWJzdGl0dXRlIGlubGluZSBjb2RlIGZvciBjYWxscyB0byBmdW5jdGlvbiBhbGxvY2EoLXFhbGxvY2EpCi1PcHRpb24uQml0ZmllbGRzPVNwZWNpZnkgaWYgYml0IGZpZWxkcyBhcmUgc2lnbmVkKC1xYml0ZmllbGRzKQotT3B0aW9uLkJpdGZpZWxkcy5zaWduZWQgPSBzaWduZWQKLU9wdGlvbi5CaXRmaWVsZHMudW5zaWduZWQgPSB1bnNpZ25lZAotT3B0aW9uLkNoYXJzPVNwZWNpZnkgaWYgY2hhcnMgYXJlIHNpZ25lZAotT3B0aW9uLmNoYXJzLnNpZ25lZCA9IHNpZ25lZCAoLXFjaGFycz1zaWduZWQpCi1PcHRpb24uY2hhcnMudW5zaWduZWQgPSB1bnNpZ25lZCAoLXFjaGFyc2U9dW5zaWduZWQpCi1PcHRpb24uZW5hYmxldm14PUVuYWJsZSBnZW5lcmF0aW9uIG9mIFZNWCBpbnN0cnVjdGlvbnMoLXFlbmFibGV2bXgpCi1PcHRpb24uRW51bT1TcGVjaWZ5IHRoZSBhbW91bnQgb2Ygc3RvcmFnZSBvY2N1cGllZCBieSBlbnVtZXJhdGlvbnMoLXFlbnVtPSkKLU9wdGlvbi5lbnVtLkludD1JbnQKLU9wdGlvbi5lbnVtLkludGxvbmc9SW50bG9uZwotT3B0aW9uLmVudW0uc21hbGw9c21hbGwKLU9wdGlvbi5lbnVtLjE9MQotT3B0aW9uLmVudW0uMj0yCi1PcHRpb24uZW51bS40PTQKLU9wdGlvbi5lbnVtLjg9OAotT3B0aW9uLlBpYz1HZW5lcmF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHN1aXRhYmxlIGZvciB1c2UgaW4gbGlicmFyaWVzKC1xcGljPSkKLU9wdGlvbi5QaWMuU21hbGw9U21hbGwKLU9wdGlvbi5QaWMuTGFyZ2U9TGFyZ2UKLU9wdGlvbi5ub3JvPURvIG5vdCBwbGFjZSBzdHJpbmcgbGl0ZXJhbHMgaW4gcmVhZCBvbmx5IHN0b3JhZ2UgKC1xbm9ybykKLU9wdGlvbi5ub3JvY29uc3Q9RG8gbm90IHBsYWNlIGNvbnN0YW50IHZhbHVlcyBpbiByZWFkIG9ubHkgc3RvcmFnZSAoLXFub3JvY29uc3QpCi1PcHRpb24ucm9wdHI9UGxhY2UgY29uc3RhbnQgcG9pbnRlcnMgaW4gcmVhZCBvbmx5IHN0b3JhZ2UgKC1xcm9wdHIpIAotT3B0aW9uLlN0YXRzeW09R2VuZXJhdGUgc3ltYm9scyBmb3Igc3RhdGljIHZhcmlhYmxlcyAoLXFzdGF0c3ltICkKLU9wdGlvbi54Y2FsbD1HZW5lcmF0ZSBjb2RlIHRvIHRyZWF0IHN0YXRpYyBmdW5jdGlvbnMgYXMgZXh0ZXJuYWwgZnVuY3Rpb25zICgtcXhjYWxsICkKLU9wdGlvbi5mdW5jc2V0PVBsYWNlIGluc3RydWN0aW9ucyBmb3IgZWFjaCBmdW5jdGlvbiBpbiBhIHNlcGFyYXRlIG9iamVjdCBmaWxlIGNvbnRyb2wgc2VjdGlvbiBvciBjc2VjdCAoLXFmdW5jc2V0KQotT3B0aW9uLnBwbGluZT1FbmFibGUgZ2VuZXJhdGlvbiBvZiAjbGluZSBkaXJlY3RpdmUgaW4gdGhlIHByZXByb2Nlc3NlZCBvdXRwdXQgKC1xcHBsaW5lKQotT3B0aW9uLnVwY29udj1QcmVzZXJ2ZSB0aGUgdW5zaWduZWQgc3BlY2lmaWNhdGlvbiB3aGVuIHBlcmZvcm1pbmcgaW50ZWdyYWwgcHJvbW90aW9ucyAoLXF1cGNvbnYpCi1PcHRpb24ubmFtZW1hbmdsaW5nPU5hbWUgbWFuZ2xpbmcgc2NoZW1lIGZvciBleHRlcm5hbCBzeW1ib2wgbmFtZXMgKC1xbmFtZW1hbmdsaW5nPSkKLU9wdGlvbi5uYW1lbWFuZ2xpbmcudjEwLm5hbWU9TmFtZSBtYW5nbGluZyBzY2hlbWUgZm9yIGV4dGVybmFsIHN5bWJvbCBuYW1lcyAoLXFuYW1lbWFuZ2xpbmc9KQotT3B0aW9uLm5hbWVtYW5nbGluZy5hbnNpID0gQU5TSSAoLXFuYW1lbWFuZ2xpbmc9YW5zaSkKLU9wdGlvbi5uYW1lbWFuZ2xpbmcudjYgPSBWaXN1YWxBZ2UoUikgQysrIHY2ICgtcW5hbWVtYW5nbGluZz12NikKLU9wdGlvbi5uYW1lbWFuZ2xpbmcudjUgPSBWaXN1YWxBZ2UoUikgQysrIHY1ICgtcW5hbWVtYW5nbGluZz12NSkKLU9wdGlvbi5uYW1lbWFuZ2xpbmcudjQgPSBWaXN1YWxBZ2UoUikgQysrIHY0ICgtcW5hbWVtYW5nbGluZz12NCkKLU9wdGlvbi5uYW1lbWFuZ2xpbmcudjMgPSBDb21wYXRpYmlsaXR5IG1vZGUgKC1xbmFtZW1hbmdsaW5nPXYzKQotT3B0aW9uLm5hbWVtYW5nbGluZy52Nz1JQk0gWEwgQy9DKysgdjcgKC1xbmFtZW1hbmdsaW5nPXY3KQotT3B0aW9uLm5hbWVtYW5nbGluZy52OD1JQk0gWEwgQy9DKysgdjggKC1xbmFtZW1hbmdsaW5nPXY4KQotT3B0aW9uLm5hbWVtYW5nbGluZy52OT1JQk0gWEwgQy9DKysgdjkgKC1xbmFtZW1hbmdsaW5nPXY5KQotT3B0aW9uLm5hbWVtYW5nbGluZy52MTA9SUJNIFhMIEMvQysrIHYxMCAoLXFuYW1lbWFuZ2xpbmc9djEwKQotT3B0aW9uLm9iamVjdG1vZGVsID0gT2JqZWN0IG1vZGVsICgtcW9iam1vZGVsPSkKLU9wdGlvbi5vYmplY3Rtb2RlbC5jbGFzc2ljID0gY2xhc3NpYyAoLXFvYmptb2RlbD1jbGFzc2ljKQotT3B0aW9uLm9iamVjdG1vZGVsLmlibSA9IElCTShSKSAoLXFvYmptb2RlbD1pYm0pCi1PcHRpb24ucnR0aSA9IEdlbmVyYXRlIFJ1blRpbWUgVHlwZSBJbmZvcm1hdGlvbiAoLXFydHRpKQotT3B0aW9uLnJ0dGkuYWxsID0gYWxsICgtcXJydGk9YWxsKQotT3B0aW9uLnJ0dGkudHlwZSA9IHR5cGUgKC1xcnR0aT10eXBlKQotT3B0aW9uLnJ0dGkuZHluYW1pY2Nhc3QgPSBkeW5hbWljIGNhc3QgKC1xcnR0aT1keW5hbWljY2FzdCkKLU9wdGlvbi5zYXZlb3B0ID0gU2F2ZSB0aGUgY29tbWFuZCBsaW5lIGNvbXBpbGVyIG9wdGlvbnMgaW50byBhbiBvYmplY3QgZmlsZSAgKC1xc2F2ZW9wdCkKLU9wdGlvbi5zdGF0aWNpbmxpbmUgPSBUcmVhdCBpbmxpbmUgZnVuY3Rpb25zIGFzIHN0YXRpYyAoLXFzdGF0aWNpbmxpbmUpCi1PcHRpb24uc3RhdHN5bSA9IEFkZCBzdGF0aWMgdmFyaWFibGVzIHRvIHRoZSBzeW1ib2wgdGFibGUgICgtcXN0YXRzeW0pCi1PcHRpb24udGhyZWFkZWQgPSBFbmFibGUgbXVsdGktdGhyZWFkZWQgZXhlY3V0aW9uICgtcXRocmVhZGVkKQotT3B0aW9uLnVuaXF1ZSA9IEdlbmVyYXRlIHVuaXF1ZSBuYW1lcyBmb3Igc3RhdGljIGNvbnN0cnVjdG9yL2RlY29uc3RydWN0b3IgZmlsZSBjb21waWxhdGlvbiB1bml0cyAoLXF1bmlxdWUpCi1PcHRpb24udW5pcXVlLnYxMCA9IEdlbmVyYXRlIHVuaXF1ZSBuYW1lcyBmb3Igc3RhdGljIGNvbnN0cnVjdG9yL2RlY29uc3RydWN0b3IgZmlsZSBjb21waWxhdGlvbiB1bml0cyAoLXF1bmlxdWUpCi1PcHRpb24ubm92ZnRhYmxlID0gRG8gbm90IGdlbmVyYXRlIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgKC1xbm92ZnRhYmxlKQotT3B0aW9uLnZyc2F2ZSA9IE1haW50YWluIHRoZSBWUlNBVkUgcmVnaXN0ZXIgKC1xdnJzYXZlKQotT3B0aW9uLndlYWtzeW1ib2wgPSBHZW5lcmF0ZSB3ZWFrIHN5bWJvbHMgKC1xd2Vha3N5bWJvbCkKLU9wdGlvbi5tYWNyb3M9RW1pdCBtYWNybyBkZWZpbml0aW9ucyB0byBwcmVwcm9jZXNzZWQgb3V0cHV0ICgtcXNob3dtYWNyb3MpCi1PcHRpb24ubWFjcm9zLmFsbD1hbGwgKC1xc2hvd21hY3Jvcz1hbGwpCi1PcHRpb24ubWFjcm9zLnByZT1wcmVkZWZpbmVkICgtcXNob3dtYWNyb3M9cHJlKQotT3B0aW9uLm1hY3Jvcy5ub3ByZT1ubyBtYWNyb3MgKC1xc2hvd21hY3Jvcz1ub3ByZSkKLU9wdGlvbnMudGltZXN0YW1wcz1TdXBwcmVzcyBpbnNlcnQgb2YgaW1wbGljaXQgdGltZXN0YW1wcyBpbnRvIGFuIG9iamVjdCBmaWxlICgtcW5vdGltZXN0YW1wcykKLQotIyBPcHRpbWl6YXRpb24gb3B0aW9ucwotT3B0aW9uLk9wdExldmVsID0gT3B0aW1pemF0aW9uIGxldmVsCi1PcHRpb24uT3B0aW1pemUuT3B0aW1pemUgPSAtTwotT3B0aW9uLk9wdGltaXplLkxldmVsMiA9IC1PMgotT3B0aW9uLk9wdGltaXplLkxldmVsMyA9IC1PMwotT3B0aW9uLk9wdGltaXplLkxldmVsNCA9IC1PNAotT3B0aW9uLk9wdGltaXplLkxldmVsNSA9IC1PNQotT3B0aW9uLmlubGluaW5nID0gRnVuY3Rpb24gaW5saW5pbmcKLU9wdGlvbi5pbmxpbmluZy5RID0gaW5saW5lIGFsbCBmdW5jdGlvbnMgKC1RKQotT3B0aW9uLmlubGluaW5nLlFleGNsYW1hdGlvbiA9IGRpc2FibGUgaW5saW5pbmcgKC1RISkKLU9wdGlvbi5RcGx1cyA9IFNwZWNpZnkgZnVuY3Rpb25zIHRvIGJlIGlubGluZWQoLVErbmFtZTE6bmFtZTI6Li4uOm5hbWVOKQotT3B0aW9uLlFtaW51cyA9IFNwZWNpZnkgZnVuY3Rpb25zIHRvIG5vdCBpbmxpbmUgKC1RLW5hbWUxOm5hbWUyOi4uLjpuYW1lTikKLU9wdGlvbi5hZ2dyY29weSA9IEVuYWJsZSBkZXN0cnVjdGl2ZSBjb3B5IG9wZXJhdGlvbnMgZm9yIHN0cnVjdHMgYW5kIHVuaW9ucwotT3B0aW9uLmFnZ3Jjb3B5Lm5vb3ZlcmxhcD1ubyBvdmVybGFwICgtcWFnZ3Jjb3B5PW5vb3ZlcmxhcCkKLU9wdGlvbi5hZ2dyY29weS5vdmVybGFwPW92ZXJsYXAgKC1xYWdncmNvcHk9b3ZlcmxhcCkKLU9wdGlvbi5hbGlhcz0gQXBwbHkgYWxpYXNpbmcgaW5zdHJ1Y3Rpb25zIHRvIGNvbXBpbGF0aW9uIHVuaXQgKC1xYWxpYXM9KQotT3B0aW9uLmFsaWFzLmFkZHJ0YWtlbj0gVmFyaWFibGVzIGFyZSBub3QgZGlzam9pbnQgZnJvbSBwb2ludGVycyAoLXFhbGlhcz1hZGRydGFrZW4pCi1PcHRpb24uYWxpYXMubm9hZGRydGFrZW49VmFyaWFibGVzIGFyZSBkaXNqb2ludCBmcm9tIHBvaW50ZXJzIHVubGVzcyB0aGVpciBhZGRyZXNzIGlzIHRha2VuICgtcWFsaWFzPW5vdGFkZHJ0YWtlbikKLU9wdGlvbi5hbGlhcy5hbGxwdHJzPVBvaW50ZXJzIGFyZSBhbGlhc2VkICgtcWFsaWFzPWFsbHB0cnMpCi1PcHRpb24uYWxpYXMubm9hbGxwdHJzPVBvaW50ZXJzIGFyZSBuZXZlciBhbGlhc2VkICgtcWFsaWFzPW5vYWxscHRycykKLU9wdGlvbi5hbGlhcy5hbnNpPVBvaW50ZXJzIGNhbiBvbmx5IHBvaW50IHRvIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlICgtcWFsaWFzPWFuc2kpCi1PcHRpb24uYWxpYXMubm9hbnNpPVBvaW50ZXJzIGNhbiBwb2ludCB0byBhbiBvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZSAoLXFhbGlhcz1ub3RhbnNpKQotT3B0aW9uLmFsaWFzLnR5cGVwdHI9UG9pbnRlcnMgdG8gZGlmZmVyZW50IHR5cGVzIGFyZSBhbGlhc2VkICgtcWFsaWFzPXR5cGVwdHIpCi1PcHRpb24uYWxpYXMubm90eXBlcHRyPVBvaW50ZXJzIHRvIGRpZmZlcmVudCB0eXBlcyBhcmUgbmV2ZXIgYWxpYXNlZCAoLXFhbGlhcz1ub3R5cGVwdHIpCi1PcHRpb24ub3B0aW1pemF0aW9uLmFyY2ggPSBTcGVjaWZ5IHRoZSBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIHRvIGdlbmVyYXRlIGNvZGUgYW5kIG9wdGltaXplIGZvciAoLXFhcmNoPSkKLU9wdGlvbi5vcHRpbWl6YXRpb24uYXJjaC5wcGM2NCA9IFBvd2VyUEMoUikgNjQtYml0Ci1PcHRpb24ub3B0aW1pemF0aW9uLmFyY2gucHBjZ3IgPSBQb3dlclBDKFIpIHdpdGggZ3JhcGhpY3MgaW5zdHJ1Y3Rpb25zCi1PcHRpb24ub3B0aW1pemF0aW9uLmFyY2gucHBjNjRnciA9IFBvd2VyUEMoUikgNjQtYml0IHdpdGggZ3JhcGhpY3MgaW5zdHJ1Y3Rpb25zCi1PcHRpb24ub3B0aW1pemF0aW9uLmFyY2gucHBjNjRncnNxID0gUG93ZXJQQyhSKSA2NC1iaXQgd2l0aCBncmFwaGljcyBhbmQgc3F1YXJlIHJvb3QgaW5zdHJ1Y3Rpb25zCi1PcHRpb24ub3B0aW1pemF0aW9uLmFyY2gucHBjNjR2ID0gUG93ZXJQQyhSKSA2NC1iaXQgd2l0aCBBbHRpVmVjCi1PcHRpb24ub3B0aW1pemF0aW9uLnR1bmUgPSBTcGVjaWZ5IHRoZSBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIHRvIHR1bmUgY29kZSBmb3IgKC1xdHVuZT0pCi1PcHRpb24ub3B0aW1pemF0aW9uLnR1bmUuYXV0byA9IGF1dG8KLU9wdGlvbi5vcHRpbWl6YXRpb24uYXNzZXJ0ID0gQXNzZXJ0IHByb2dyYW0gYmVoYXZpb3VycyAoLXFhc3NlcnQ9KQotT3B0aW9uLm9wdGltaXphdGlvbi5DYWNoZSA9IFNwZWNpZnkgdGhlIGNhY2hlIGNvbmZpZ3VyYXRpb24gKC1xY2FjaGU9b3B0aW9uMTpvcHRpb24yOi4uLjpvcHRpb25OKQotT3B0aW9uLmNvbXBhY3QgPSBBdm9pZCB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBsZWFkIHRvIGNvZGUgZXhwYW5zaW9uICgtcWNvbXBhY3QpCi1PcHRpb24ub3B0aW1pemF0aW9uLmRhdGFpbXBvcnRlZCA9IE5hbWUgdGhlIHZhcmlhYmxlcyB0byBiZSBpbXBvcnRlZCAoLXFkYXRhaW1wb3J0ZWQ9bmFtZTE6bmFtZTI6Li4uOm5hbWVOKQotT3B0aW9uLm9wdGltaXphdGlvbi5kYXRhbG9jYWwgPSBOYW1lIHRoZSB2YXJpYWJsZXMgd2hpY2ggYXJlIGxvY2FsICgtcWRhdGFsb2NhbD1uYW1lMTpuYW1lMjouLi46bmFtZU4pCi1PcHRpb24uZGlyZWN0c3RvcmFnZSA9IFdyaXRlLXRocm91Z2ggZW5hYmxlZCBvciBjYWNoZS1pbmhpYml0ZWQgc3RvcmFnZSBtYXkgYmUgcmVmZXJlbmNlZCAoLXFkaXJlY3RzdG9yYWdlKQotT3B0aW9uLm9wdGltaXphdGlvbi5leGNlcHRpb25oYW5kbGluZyA9IEV4Y2VwdGlvbiBoYW5kbGluZwotT3B0aW9uLm9wdGltaXphdGlvbi5leGNlcHRpb25oYW5kbGluZy5laCA9IEVuYWJsZSBleGNlcHRpb24gaGFuZGxpbmcgKC1xZWgpCi1PcHRpb24ub3B0aW1pemF0aW9uLmV4Y2VwdGlvbmhhbmRsaW5nLm5vZWggPSBEaXNhYmxlIGV4Y2VwdGlvbiBoYW5kbGluZyAoLXFub2VoKQotT3B0aW9uLm9wdGltaXphdGlvbi5leGNlcHRpb25oYW5kbGluZy52NSA9IFZpc3VhbEFnZShSKSBDKysgdjUuMCBjb21wYXRpYmlsaXR5Ci1PcHRpb24ub3B0aW1pemF0aW9uLmV4Y2VwdGlvbmhhbmRsaW5nLnY2ID0gVmlzdWFsQWdlKFIpIEMrKyB2Ni4wIGNvbXBhdGliaWxpdHkKLU9wdGlvbi5mZHByID0gSW5jbHVkZSBkYXRhIHJlcXVpcmVkIGJ5IGZkcHIgdXRpbGl0eSAoLXFmZHByKQotT3B0aW9uLm9wdGltaXphdGlvbi5ob3QgPSBQZXJmb3JtIGhpZ2gtb3JkZXIgbG9vcCBhbmFseXNpcyBhbmQgdHJhbnNmb3JtYXRpb25zIGR1cmluZyBvcHRpbWl6YXRpb24gKC1xaG90PSkKLU9wdGlvbi5pZ25lcnJubyA9IFBlcmZvcm0gb3B0aW1pemF0aW9ucyB3aGljaCBhc3N1bWUgZXJybm8gaXMgbm90IG1vZGlmaWVkIGJ5IHN5c3RlbSBjYWxscyAoLXFpZ25lcnJubykKLU9wdGlvbi5vcHRpbWl6YXRpb24uaW5saW5lID0gQXR0ZW1wdCB0byBpbmxpbmUgZnVuY3Rpb25zICgtcWlubGluZT0pCi1PcHRpb24ub3B0aW1pemF0aW9uLmlwYSA9IEN1c3RvbWl6ZSBpbnRlcnByb2NlZHVyYWwgYW5hbHlzaXMgb3B0aW1pemF0aW9ucygtcWlwYT0pCi1PcHRpb24ub3B0aW1pemF0aW9uLmlzb2xhdGVkY2FsbCA9IEZ1bmN0aW9ucyBpbiBzb3VyY2UgZmlsZSB0aGF0IGhhdmUgbm8gc2lkZSBlZmZlY3RzICgtcWlzb2xhdGVkX2NhbGw9bmFtZTE6bmFtZTI6Li4uOm5hbWVOKQotT3B0aW9uLm9wdGltaXphdGlvbi5rZWVwaW5saW5lcyA9IAotT3B0aW9uLmxhcmdlcGFnZSA9IEV4cGxvaXQgbGFyZ2UgcGFnZSBoZWFwcyBhdmFpbGFibGUgb24gUE9XRVI0KFRNKSBzeXN0ZW1zIHJ1bm5pbmcgQUlYKFIpIDUuMUQgb3IgbGF0ZXIgKC1xbGFyZ2VwYWdlKQotT3B0aW9uLmxpYmFuc2kgPSBBc3N1bWUgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgbmFtZSBvZiBhbnNpIEMgZnVuY3Rpb24gYXJlIHN5c3RlbSBmdW5jdGlvbnMgKC1xbGliYW5zaSkKLU9wdGlvbi5wZGYxID0gVHVuZSBvcHRpbWl6YXRpb25zIHRocm91Z2ggUHJvZmlsZSBEaXJlY3RlZCBGZWVkYmFjazogZmlyc3QgcnVuICgtcXBkZjEpCi1PcHRpb24ucGRmMiA9IFR1bmUgb3B0aW1pemF0aW9ucyB0aHJvdWdoIFByb2ZpbGUgRGlyZWN0ZWQgRmVlZGJhY2s6IHNlY29uZCBydW4gKC1xcGRmMikKLU9wdGlvbi5vcHRpbWl6YXRpb24uUHJlZmV0Y2ggPSBEaXNhYmxlIGdlbmVyYXRpb24gb2YgcHJlZmV0Y2hpbmcgaW5zdHJ1Y3Rpb25zIGluIGNvbXBpbGVkIGNvZGUgKC1xbm9wcmVmZXRjaCkKLU9wdGlvbi5vcHRpbWl6YXRpb24ucHJvY2ltcG9ydGVkID0gTWFyayBmdW5jdGlvbnMgYXMgaW1wb3J0ZWQgKC1xcHJvY2ltcG9ydGVkPSkKLU9wdGlvbi5vcHRpbWl6YXRpb24ucHJvY2xvY2FsID0gTWFyayBmdW5jdGlvbnMgYXMgbG9jYWwgKC1xbG9jYWw9KQotT3B0aW9uLm9wdGltaXphdGlvbi5wcm9jaW1wb3J0ZWQgPSBNYXJrIGZ1bmN0aW9ucyBhcyBpbXBvcnRlZCAoLXFwcm9jaW1wb3J0ZWQ9KQotT3B0aW9uLm9wdGltaXphdGlvbi5wcm9jdW5rbm93biA9IE1hcmsgZnVuY3Rpb25zIGFzIHVua25vd24gKC1xcHJvY3Vua25vd249KQotT3B0aW9uLm9wdGltaXphdGlvbi5zaG93cGRmID0gQWRkIGFkZGl0aW9uYWwgY2FsbCBhbmQgYmxvY2sgY291bnQgcHJvZmlsaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBleGVjdXRhYmxlICgtcXNob3dwZGYpCi1PcHRpb24ub3B0aW1pemF0aW9uLnNtYWxsc3RhY2sgPSBSZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHN0YWNrIGZyYW1lICgtcXNtYWxsc3RhY2spCi1PcHRpb24ub3B0aW1pemF0aW9uLnNtcCA9IEVuYWJsZSBwYXJhbGxlbGl6YXRpb24gb2YgY29kZSAoLXFzbXApCi1PcHRpb24ub3B0aW1pemF0aW9uLnNtcC52MTAgPSBTcGVjaWZ5IHBhcmFsbGVsaXphdGlvbiBvZiBjb2RlICgtcXNtcD1uYW1lMTpuYW1lMjouLi46bmFtZU4pCi1PcHRpb24ub3B0aW1pemF0aW9uLnNtcC52MTAudG9vbHRpcD1Qb3NzaWJsZSB2YWx1ZXM6IG5vc3RhY2tjaGVjaywgb3B0LCBub3JlY19sb2Nrcywgbm9vbXAsIG5vbmVzdGVkX3BhciwgXG5leHBsaWNpdCwgYXV0bywgb21wLCBuZXN0ZWRfcGFyLCBub2F1dG8sIG5vZXhwbGljaXQsIG5vb3B0LCByZWNfbG9ja3MsIFxuc2NoZWR1bGU9KHJ1bnRpbWUgfCBhdXRvIHwgYWZmaW5pdHk9biB8IGR5bmFtaWM9biB8IGd1aWRlZD1uIHwgc3RhdGljPW4pLCBzdGFja2NoZWNrLCB0aHJlc2hvbGQ9bgotT3B0aW9uLm9wdGltaXphdGlvbi5TcGlsbCA9IFNwZWNpZnkgdGhlIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3BpbGwgYXJlYSAoLXFzcGlsbD0pCi1PcHRpb24ub3B0aW1pemF0aW9uLlN0cmljdD1UdXJuIG9mZiBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbnMgKC1xc3RyaWN0KQotT3B0aW9uLm9wdGltaXphdGlvbi5TdHJpY3QudjEwID0gU3BlY2lmeSB0aGUgb3B0aW1pemF0aW9ucyAoLXFzdHJpY3Q9bmFtZTE6bmFtZTI6Li4uOm5hbWVOKQotT3B0aW9uLm9wdGltaXphdGlvbi5TdHJpY3QudjEwLnRvb2x0aXA9UG9zc2libGUgdmFsdWVzOiBhbGwsIG5vbmUsIHByZWNpc2lvbiwgbm9wcmVjaXNpb24sIGV4Y2VwdGlvbnMsIG5vZXhjZXB0aW9ucywgXG5pZWVlZnAsIG5vaWVlZWZwLCBuYW5zLCBub25hbnMsIGluZmluaXRpZXMsIG5vaW5maW5pdGllcywgc3Vibm9ybWFscywgbm9zdWJub3JtYWxzLCBcbnplcm9zaWducywgbm96ZXJvc2lnbnMsIG9wZXJhdGlvbnByZWNpc2lvbiwgbm9vcGVyYXRpb25wcmVjaXNpb24sIG9yZGVyLCBub29yZGVyLCBcbmFzc29jaWF0aW9uLCBub2Fzc29jaWF0aW9uLCByZWR1Y3Rpb25vcmRlciwgbm9yZWR1Y3Rpb25vcmRlciwgZ3VhcmRzLCBub2d1YXJkcywgbGlicmFyeSwgbm9saWJyYXJ5Ci1PcHRpb24ub3B0aW1pemF0aW9uLmxvb3BpbmR1Y3Rpb24gPSBMb29wIGluZHVjdGlvbiBzZXR0aW5ncwotT3B0aW9uLm9wdGltaXphdGlvbi5zdHJpY3RfaW5kdWN0aW9uID0gU3RyaWN0IGluZHVjdGlvbgotT3B0aW9uLm9wdGltaXphdGlvbi5ub3N0cmljdF9pbmR1Y3Rpb24gPSBObyBpbmR1Y3Rpb24KLU9wdGlvbi5vcHRpbWl6YXRpb24udG9jZGF0YSA9IE1hcmsgZGF0YSBhcyBsb2NhbAotT3B0aW9uLm9wdGltaXphdGlvbi53ID0gU3BlY2lmeSBvcHRpb25zIHRvIHBhc3MgdG8gc3BlY2lmaWMgY29tcGlsZXIgY29tcG9uZW50cyAgKC1XKQotCi0jIExpbmtlciBPcHRpb25zCi1PcHRpb24uTGlua2luZy5iID0gQ29udHJvbCBob3cgc2hhcmVkIG9iamVjdHMgYXJlIHByb2Nlc3NlZCBieSB0aGUgZWRpdG9yICgtYikKLU9wdGlvbi5saW5raW5nLmJydGwgPSBFbmFibGUgcnVudGltZSBsaW5raW5nIGZvciB0aGUgb3V0cHV0IGZpbGUgKC1icnRsKQotT3B0aW9uLmxpbmtpbmcuYnVuZGxlID0gCi1PcHRpb24uTGlua2luZy5idW5kbGVfbG9hZGVyCi1PcHRpb24uTGlua2luZy5lID0gU2V0IHRoZSBlbnRyeSBuYW1lIGZvciB0aGUgc2hhcmVkIGV4ZWN1dGFibGUoLWUgKQotT3B0aW9uLkxpbmtpbmcuZiA9IAotT3B0aW9uLmxpbmtpbmcuRyA9IENyZWF0ZSBhIHNoYXJlZCBvYmplY3QgZW5hYmxlZCBmb3IgcnVudGltZSBsaW5raW5nICgtRykKLU9wdGlvbi5MaW5raW5nLkwgPSBTZWFyY2ggdGhlIHBhdGggZGlyZWN0b3J5IGZvciB0aGUgbGlicmFyeSBmaWxlcyBzcGVjaWZpZWQgYnkgdGhlIC1sa2V5IG9wdGlvbiAoLUwpCi1PcHRpb24uTGlua2luZy5sID0gU2VhcmNoIHRoZSBzcGVjaWZpZWQgbGlicmFyeSBmaWxlKC1sKQotT3B0aW9uLmxpbmtpbmcuciA9IFByb2R1Y2UgYSByZWxvY2F0YWJsZSBvYmplY3QgKC1yKQotT3B0aW9uLkxpbmtpbmcuWiA9IFNwZWNpZnkgYSBwcmVmaXggZm9yIGxpYnJhcnkgc2VhcmNoIHBhdGggKC1aKQotT3B0aW9uLmxpbmtpbmcuaW5sZ2x1ZSA9IEdlbmVyYXRlIGZhc3QgZXh0ZXJuYWwgbGlua2FnZSAoLXFpbmxnbHVlKQotT3B0aW9uLmxpbmtpbmcubGliID0gTGluayB3aXRoIHN0YW5kYXJkIHN5c3RlbSBsaWJyYXJpZXMgKC1xbGliKQotT3B0aW9uLkxpbmtpbmcubWtzaHJvYmogPSBDcmVhdGUgYSBzaGFyZWQgb2JqZWN0IGZyb20gZ2VuZXJhdGVkIG9iamVjdCBmaWxlcyAoLXFta3Nocm9iaikKLU9wdGlvbi5MaW5raW5nLnByaW9yaXR5ID0gU3BlY2lmeSB0aGUgcHJpb3JpdHkgbGV2ZWwgZm9yIGluaXRpYWxpemF0aW9uIG9mIHN0YXRpYyBvYmplY3RzICgtcXByaW9yaXR5KQotT3B0aW9uLkxpbmtlci5FbmFibGVSdW49RW5hYmxlIFJ1biB0aW1lIGxpbmtpbmcgKC1icnRsKQotT3B0aW9uLkxpbmtlci5Ob1N0YXJ0RmlsZXM9RG8gbm90IHVzZSBzdGFuZGFyZCBzdGFydCBmaWxlcyAoLW5vc3RhcnRmaWxlcykKLU9wdGlvbi5MaW5rZXIuTm9EZWZMaWJzPURvIG5vdCB1c2UgZGVmYXVsdCBsaWJyYXJpZXMgKC1ub2RlZmF1bHRsaWJzKQotT3B0aW9uLkxpbmtlci5Ob1N0ZExpYnM9Tm8gc3RhcnR1cCBvciBkZWZhdWx0IGxpYnMgKC1ub3N0ZGxpYikKLU9wdGlvbi5MaW5rZXIuU3RyaXA9U3RyaXAgYWxsIHN5bWJvbCBpbmZvcm1hdGlvbiAoLXMpCi1PcHRpb24uTGlua2VyLlN0cmlwLmRlYnVnPVN0cmlwIGRlYnVnIHN5bWJvbCBpbmZvcm1hdGlvbiAoLVMpCi1PcHRpb24uTGlua2VyLlN0YXRpYz1ObyBzaGFyZWQgbGlicmFyaWVzICgtYnN0YXRpYykKLU9wdGlvbi5MaW5rZXIuV0xpbmtlcj1PdGhlciBvcHRpb25zICgtV2wsIFtvcHRpb24xLG9wdGlvbjIsLi4ub3B0aW9uTl0pCi1PcHRpb24uTGlua2VyLkZsYWdzPU90aGVyIGxpbmtlciBmbGFncwotT3B0aW9uLkxpYnM9TGlicmFyaWVzICgtbCkKLU9wdGlvbi5MaWJzZWFyY2g9TGlicmFyeSBzZWFyY2ggcGF0aCAoLUwpCi1PcHRpb24uVXNlck9ianM9T3RoZXIgb2JqZWN0cwotT3B0aW9uLkxpbmtlci5TaGFyZWQ9U2hhcmVkICgtcW1rc2hyb2JqKQotT3B0aW9uLkxpbmtlci5TT05hbWU9U2hhcmVkIG9iamVjdCBuYW1lICgtbz0pCi1PcHRpb24uTGlua2VyLkltcGxpYj1JbXBvcnQgTGlicmFyeSBuYW1lICgtV2wsLS1vdXQtaW1wbGliPSkKLU9wdGlvbi5MaW5rZXIuRGVmbmFtZT1ERUYgZmlsZSBuYW1lICgtV2wsLS1vdXRwdXQtZGVmPSkKLU9wdGlvbi5saW5raW5nLmJ1bmRsZSA9IENyZWF0ZSBhIGJ1bmRsZSAoLWJ1bmRsZSkKLU9wdGlvbi5saW5raW5nLmJ1bmRsZV9sb2FkZXIgPSBTcGVjaWZ5IHRoZSBuYW1lIG9mIGJ1bmRsZSBsb2FkZXIgcHJvZ3JhbSAoLWJ1bmRsZV9sb2FkZXI9KQotT3B0aW9uLmxpbmtpbmcuZiA9IFNwZWNpZnkgZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm9yIHRoZSBjb21waWxlciB0byBwYXNzIHRvIHRoZSBsaW5rZXIgKC1mKQotT3B0aW9uLmxpbmtpbmcuZXhwZmlsZSA9IFNhdmUgYWxsIHRoZSBleHBvcnRlZCBzeW1ib2xzIGluIHRoZSBkZXNpZ25hdGVkIGZpbGUgKC1xZXhwZmlsZT0pCi0KLSNBcmNoaXZlciBvcHRpb25zCi1PcHRpb24uQXJjaGl2ZXIuRmxhZ3M9T3RoZXIgYXJjaGl2ZXIgZmxhZ3MKLQotIyBJbnRlZ2VyIGFuZCBGbG9hdGluZyBQb2ludCBvcHRpb25zCi1PcHRpb24ueSA9IFNwZWNpZnkgY29tcGlsZSB0aW1lIHJvdW5kaW5nIG1vZGUgKC15KQotT3B0aW9uLnkubiA9IG4KLU9wdGlvbi55Lm0gPSBtCi1PcHRpb24ueS5wID0gcAotT3B0aW9uLnkueiA9IHoKLU9wdGlvbi5mbG9hdCA9IFNwZWNpZnkgZmxvYXRpbmcgcG9pbnQgb3B0aW9ucyAoLXFmbG9hdD0pCi1PcHRpb24uZmx0dHJhcCA9IFRyYXAgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9ucyAoLXFmbHR0cmFwPSkKLU9wdGlvbi5sb25nbG9uZyA9IEFsbG93IGxvbmcgbG9uZyBpbnRlZ2VyIHR5cGVzIGluIHRoZSBwcm9ncmFtCi1PcHRpb24ubG9uZ2xvbmcubG9uZ2xvbmcgPSBBbGxvdyBsb25nIGxvbmcgKC1xbG9uZ2xvbmcpCi1PcHRpb24ubG9uZ2xvbmcubm9sb25nbG9uZyA9IERvIG5vdCBhbGxvdyBsb25nIGxvbmcgKC1xbm9sb25nbG9uZykKLU9wdGlvbi5ybmRmbHQgPSBDb250cm9sIGNvbXBpbGUtdGltZSByb3VuZGluZyBtb2RlIG9mIGZsb2F0aW5nIHBvaW50IGV4cHJlc3Npb25zKCAtcXJuZGZsdCkKLU9wdGlvbi5ybmRmbHQubmVhcmVzdCA9IE5lYXJlc3QKLU9wdGlvbi5ybmRmbHQubWludXNpbmYgPSBNaW51cyBpbmZpbml0eQotT3B0aW9uLnJuZGZsdC5wbHVzaW5mID0gUGx1cyBpbmZpbml0eQotT3B0aW9uLnJuZGZsdC56ZXJvID0gWmVybwotT3B0aW9uLmRmcCA9IERlY2ltYWwgZmxvYXRpbmctcG9pbnQgc3VwcG9ydCBmb3IgdHlwZXMgYW5kIGxpdGVyYWxzCi1PcHRpb24uZGZwLmVuYWJsZWQgPSBFbmFibGVkICgtcWRmcCkKLU9wdGlvbi5kZnAuZGlzYWJsZWQgPSBEaXNhYmxlZCAoLXFub2RmcCkKLQotIyBDb21waWxlciBDdXN0b21pemF0aW9uIG9wdGlvbnMKLU9wdGlvbi5CID0gRGV0ZXJtaW5lIHN1YnN0aXR1dGUgcHJvZ3JhbSBwYXRoIG5hbWUgKC1CKQotT3B0aW9uLkYgPSBTcGVjaWZ5IGFsdGVybmF0ZSBjb25maWd1cmF0aW9uIGZpbGUgKC1GKQotT3B0aW9uLnQgPSBBZGQgcHJlZml4IHRvIGRlc2lnbmF0ZWQgcHJvZ3JhbXMgKC10KQotT3B0aW9uLm1heG1lbSA9IEFtb3VudCBvZiBtZW1vcnkgdXNlZCBkdXJpbmcgb3B0aW1pemF0aW9uICgtcW1heG1lbT0pCi1PcHRpb24ucGF0aCA9IEFsdGVybmF0ZSBwcm9ncmFtIG5hbWUgZm9yIGNvbXBpbGVyIGNvbXBvbmVudHMgKC1xcGF0aD0pCi1PcHRpb24udGxzID0gU3BlY2lmeSB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgbW9kZWwgKC1xdGxzPSkKLU9wdGlvbi50bHMudW5zdXBwb3J0ZWQ9dW5zdXBwb3J0ZWQKLU9wdGlvbi50bHMuZGVmYXVsdD1kZWZhdWx0Ci1PcHRpb24udGxzLmdsb2JhbC1keW5hbWljPWdsb2JhbC1keW5hbWljCi1PcHRpb24udGxzLmluaXRpYWwtZXhlYz1pbml0aWFsLWV4ZWMKLU9wdGlvbi50bHMubG9jYWwtZHluYW1pYz1sb2NhbC1keW5hbWljCi1PcHRpb24udGxzLmxvY2FsLWV4ZWM9bG9jYWwtZXhlYwotT3B0aW9uLnRscy5ub3Rscz1ObyB0bHMKLQotIyBMaXN0aW5ncyBhbmQgTWVzc2FnZXMgb3B0aW9ucwotT3B0aW9uLlYgPSBSZXBvcnQgaW5mb3JtYXRpb24gb24gdGhlIHByb2dyZXNzIG9mIGNvbXBpbGF0aW9uICgtVikKLU9wdGlvbi5XYXJuLm5vd2FybiA9IFN1cHByZXNzIHdhcm5pbmdzIGFuZCBsb3ctbGV2ZWwgbWVzc2FnZXMgKC13KQotT3B0aW9uLldhcm4uUGVkYW5kaWM9UGVkYW50aWMgKC1wZWRhbnRpYykKLU9wdGlvbi5XYXJuLlBlZEVycm9ycz1QZWRhbnRpYyB3YXJuaW5ncyBhcyBlcnJvcnMgKC1wZWRhbnRpYy1lcnJvcnMpCi1PcHRpb24uV2Fybi5ub3dhcm49SW5oaWJpdCBhbGwgd2FybmluZ3MgKC13KQotT3B0aW9uLldhcm4uYWxsd2Fybj1BbGwgd2FybmluZ3MgKC1XYWxsKQotT3B0aW9uLldhcm4udG9lcnJzPVdhcm5pbmdzIGFzIGVycm9ycyAoLVdlcnJvcikKLU9wdGlvbi5hdHRyID0gUHJvZHVjZSBhIGNvbXBpbGVyIGxpc3RpbmcgKC1xYXR0cikKLU9wdGlvbi5hdHRyLm5vYXR0ciA9IERvZXMgbm90IHByb2R1Y2UgYW4gYXR0cmlidXRlIGxpc3RpbmcgZm9yIGlkZW50aWZpZXJzIGluIHByb2dyYW0gKC1xbm9hdHRyKQotT3B0aW9uLmF0dHIuZnVsbGF0dHIgPSBSZXBvcnQgYXR0cmlidXRlcyBvZiBhbGwgaWRlbnRpZmllcnMgKC1xYXR0cj1mdWxsKQotT3B0aW9uLmF0dHIuYXR0ciA9IFJlcG9ydCBhdHRyaWJ1dGVzIG9mIG9ubHkgdXNlZCBpZGVudGlmaWVycyAoLXFhdHRyKQotT3B0aW9uLmZsYWcgPSBTcGVjaWZ5IHRoZSBtaW5pbXVtIHNldmVyaXR5IGxldmVsIG9mIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2VzICgtcWZsYWc9KQotT3B0aW9uLmZvcm1hdCA9IFdhcm4gb2YgcG9zc2libGUgcHJvYmxlbXMgd2l0aCBzdHJpbmcgaW5wdXQgYW5kIG91dHB1dCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgKC1xZm9ybWF0PSkKLU9wdGlvbi5oYWx0ID0gSW5zdHJ1Y3QgdGhlIGNvbXBpbGVyIHRvIHN0b3AgYWZ0ZXIgY29tcGlsYXRpb24gaWYgaXQgZW5jb3VudGVycyBlcnJvcnMgb2Ygc3BlY2lmaWVkIHNldmVyaXR5IG9yIGhpZ2hlciAoLXFoYWx0PSkKLU9wdGlvbi5oYWx0LmluZm9ybWF0aW9uID0gSW5mb3JtYXRpb24gKC1xaGFsdD1pKQotT3B0aW9uLmhhbHQud2FybmluZyA9IFdhcm5pbmcgKC1xaGFsdD13KQotT3B0aW9uLmhhbHQuZXJyb3IgPSBFcnJvciAoLXFoYWx0PWUpCi1PcHRpb24uaGFsdC5zZXZlcmVFcnJvciA9IFNldmVyZSBlcnJvciAoLXFoYWx0PXMpCi1PcHRpb24uaGFsdC51bnJlY292ZXJhYmxlRXJyb3IgPSBVbnJlY292ZXJhYmxlIGVycm9yICgtcWhhbHQ9dSkKLU9wdGlvbi5pbmZvID0gUHJvZHVjZSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICgtcWluZm89KQotT3B0aW9uLmxpc3QgPSBQcm9kdWNlIGEgY29tcGlsZXIgbGlzdGluZyB0aGF0IGluY2x1ZGVzIGFuIG9iamVjdCBsaXN0aW5nICgtcWxpc3QpCi1PcHRpb24ubGlzdG9wdCA9IFByb2R1Y2UgYSBjb21waWxlciBsaXN0aW5nIHRoYXQgZGlzcGxheXMgYWxsIG9wdGlvbnMgaW4gZWZmZWN0KC1xbGlzdG9wdCkKLU9wdGlvbi5waHNpbmZvID0gUmVwb3J0IHRoZSB0aW1lIHRha2VuIGluIGVhY2ggY29tcGlsYXRpb24gcGhhc2UgKC1xcGhzaW5mbykKLU9wdGlvbi5ub3ByaW50ID0gU3VwcHJlc3MgYWxsIGxpc3RpbmdzICgtcW5vcHJpbnQgKQotT3B0aW9uLnJlcG9ydCA9IEluc3RydWN0IHRoZSBjb21waWxlciB0byBwcm9kdWNlIHRyYW5zZm9ybWF0aW9uIHJlcG9ydHMgKC1xcmVwb3J0KQotT3B0aW9uLnNob3dpbmMgPSBTaG93IGFsbCBpbmNsdWRlZCBmaWxlcyBpbiB0aGUgc291cmNlIGxpc3RpbmcgKC1xc2hvd2luYykKLU9wdGlvbi5zb3VyY2UgPSBQcm9kdWNlIGEgY29tcGlsZXIgbGlzdGluZyBhbmQgaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgKC1xc291cmNlKQotT3B0aW9uLnNyY21zZyA9IEFkZCB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSBsaW5lcyB0byB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlcyBpbiBzdGRlcnIgZmlsZSAoLXFzcmNtc2cpCi1PcHRpb24uc3VwcHJlc3MgPSBTdXBwcmVzcyB0aGUgc3BlY2lmaWVkIGluZm9ybWF0aW9uYWwgb3Igd2FybmluZyBtZXNzYWdlcyAoLXFzdXBwcmVzcz0pCi1PcHRpb24udGFic2l6ZSA9IENoYW5nZSB0aGUgdGFiLXNpemUgKC1xdGFic2l6ZT0pCi1PcHRpb24ueHJlZiA9IFByb2R1Y2UgYSBjcm9zcyByZWZlcmVuY2UgbGlzdGluZyBvZiBpZGVudGlmaWVycyAoLXF4cmVmKQotT3B0aW9uLnhyZWYubm94cmVmID0gRG8gbm90IHJlcG9ydCBpZGVudGlmaWVycyBpbiB0aGUgcHJvZ3JhbSAoLXFub3hyZWYpCi1PcHRpb24ueHJlZi5mdWxseHJlZiA9IFJlcG9ydCBhbGwgdGhlIGlkZW50aWZpZXJzIGluIHRoZSBwcm9ncmFtICgtcXhyZWYgPSBmdWxsKQotT3B0aW9uLnhyZWYueHJlZiA9IFJlcG9ydCBvbmx5IHRob3NlIGlkZW50aWZpZXJzIHdoaWNoIGFyZSB1c2VkICgtcXhyZWYpCi1PcHRpb24ud2FybmZvdXJjaGFyY29uc3RzID0gRW5hYmxlIHdhcm5pbmcgb2YgZm91ci1jaGFyYWN0ZXIgY29uc3RhbnRzIGluIHNvdXJjZQotT3B0aW9uLnJlcG9ydCA9IFByb2R1Y2UgbGlzdGluZyBmaWxlcyB0aGF0IHNob3cgaG93IHNlY3Rpb25zIG9mIGNvZGUgaGF2ZSBiZWVuIG9wdGltaXplZCAoLXFyZXBvcnQpCi0KLSMgRXJyb3IgQ2hlY2tpbmcgYW5kIERlYnVnZ2luZwotT3B0aW9uLmcgPSBHZW5lcmF0ZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKC1nKQotT3B0aW9uLm9wdGRlYnVnID0gRW5hYmxlIGRlYnVnZ2luZyBvZiBvcHRpbWl6ZWQgY29kZSAoLXFvcHRkZWJ1ZykKLU9wdGlvbi5EZWJ1Z0xldmVsPURlYnVnIExldmVsCi1PcHRpb24uRGVidWcuTWluPU1pbmltYWwgKC1nMSkKLU9wdGlvbi5EZWJ1Zy5EZWY9RGVmYXVsdCAoLWcpCi1PcHRpb24uRGVidWcuTWF4PU1heGltdW0gKC1nMykKLU9wdGlvbi5EZWJ1Zy5PdGhlcj1PdGhlciBkZWJ1Z2dpbmcgZmxhZ3MKLU9wdGlvbi5EZWJ1Zy5ncHJvZj1HZW5lcmF0ZSBncHJvZiBpbmZvcm1hdGlvbiAoLXBnKQotT3B0aW9uLkRlYnVnLnByb2Y9R2VuZXJhdGUgcHJvZiBpbmZvcm1hdGlvbiAoLXApCi1PcHRpb24uRGVidWcuVW5yZWY9SW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCB1bnJlZmVyZW5jZWQgc3ltYm9scyAoLXFkYnhleHRyYSkKLU9wdGlvbi5wID0gR2VuZXJhdGUgcHJvZiBpbmZvcm1hdGlvbiAoLXApCi1PcHRpb24ucGcgPSBHZW5lcmF0ZSBncHJvZiBpbmZvcm1hdGlvbiAoLXBnKQotT3B0aW9uLmNoZWNrID0gR2VuZXJhdGUgY29kZSB3aGljaCBwZXJmb3JtcyBjZXJ0YWluIHR5cGVzIG9mIHJ1bnRpbWUgY2hlY2tpbmcgKC1xY2hlY2spCi1PcHRpb24uZGJ4ZXh0cmEgPSBJbmNsdWRlIGFsbCB0eXBlZGVmcywgc3RydWN0cywgdW5pb25zLCBlbnVtcyBmb3IgZGVidWdnaW5nICgtcWRieGV4dHJhKQotT3B0aW9uLmV4dGNoayA9IEdlbmVyYXRlIGJpbmQtdGltZSB0eXBlIGNoZWNraW5nIGluZm9ybWF0aW9uIGFuZCBjaGVjayBmb3IgY29tcGlsZSB0aW1lIGNvbnNpc3RlbmN5ICgtcWV4dGNoaykKLU9wdGlvbi5mdWxscGF0aCA9IFByZXNlcnZlIGFic29sdXRlIHBhdGggbmFtZSBvZiBzb3VyY2UgZmlsZXMgdXNlZCB3aXRoIC1nIG9wdGlvbiAoLXFmdWxscGF0aCkKLU9wdGlvbi5nZW5wcm90byA9IFByb2R1Y2UgQU5TSSBwcm90b3R5cGVzIGZyb20gSyZSIGRlZmluaXRpb25zCi1PcHRpb24uZ2VucHJvdG8gPSBHZW5lcmF0ZSBwcm90b3R5cGVzIHdpdGggcGFyYW1ldGVyIG5hbWVzCi1PcHRpb24uZ2VucHJvdG8ucGFybWdlbnByb3RvID0gSW5jbHVkZSBwYXJhbWV0ZXIgbmFtZXMgaW4gcHJvdG90eXBlcwotT3B0aW9uLmhlYXBkZWJ1ZyA9IEVuYWJsZSBkZWJ1ZyB2ZXJzaW9ucyBvZiBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgKC1xaGVhcGRlYnVnKQotT3B0aW9uLmluaXRhdXRvID0gSW5pdGlhbGl6ZSB0aGUgYXV0b21hdGljIHZhcmlhYmxlcyAoLXFpbml0YXV0bz0pCi1PcHRpb24ubGluZWRlYnVnID0gR2VuZXJhdGUgbGluZSBudW1iZXIgYW5kIHNvdXJjZSBmaWxlIG5hbWUgaW5mbyBmb3IgdGhlIGRlYnVnZ2VyICgtcWxpbmVkZWJ1ZykKLU9wdGlvbi5tYXhlcnIgPSBIYWx0IGNvbXBpbGF0aW9uIGFmdGVyIHRoaXMgbWFueSBlcnJvcnMgKC1xbWF4ZXJyPSkKLU9wdGlvbi5wcm90byA9IEFsbCBmdW5jdGlvbnMgYXJlIHByb3RvdHlwZWQgKC1xcHJvdG8pCi0KLQotIyBBc3NlbWJsZXIgb3B0aW9ucwotT3B0aW9uLlhsYy5Bc3NlbWJsZXIuRmxhZ3M9T3RoZXIgYXNzZW1ibGVyIGZsYWdzCi1PcHRpb24uWGxjLkFzc2VtYmxlci53YXJuLnN1cHByZXNzPVN1cHByZXNzIHdhcm5pbmdzICgtVykKLU9wdGlvbi5YbGMuQXNzZW1ibGVyLnZlcnNpb249QW5ub3VuY2UgdmVyc2lvbiAoLXYpCi0KLQotIyBYTCBDL0MrKyBQcmVmZXJlbmNlIHBhZ2UKLVhMQ29tcGlsZXJQcmVmZXJlbmNlUGFnZS5uYW1lID0gWEwgQy9DKysgQ29tcGlsZXIKLVhMQ29tcGlsZXJQcm9wZXJ0eVBhZ2UubmFtZSA9IFhMIEMvQysrIENvbXBpbGVyCi0KLQotCi0KLUJ1bmRsZS1WZW5kb3IgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUgPSBYTCBDL0MrKyBSZW1vdGUgTWFuYWdlZCBCdWlsZCBTdXBwb3J0Ci1idWlsZGVyLm5hbWUgPSBSZW1vdGUgR05VIE1ha2UKLWV4dGVuc2lvbi5uYW1lID0gUmVtb3RlIFhMIEMvQysrIFBlciBQcm9qZWN0IFByb2ZpbGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvcGx1Z2luLnhtbCBiL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWI2MGYwLi4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Ci08cGx1Z2luPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5jb3JlLmJ1aWxkRGVmaW5pdGlvbnMiPgotICAgICAgPG1hbmFnZWRCdWlsZFJldmlzaW9uCi0gICAgICAgICAgICBmaWxlVmVyc2lvbj0iNC4wLjAiPgotICAgICAgPC9tYW5hZ2VkQnVpbGRSZXZpc2lvbj4KLSAgICAgIDxidWlsZGVyCi0gICAgICAgICAgICBjb21tYW5kTGF1bmNoZXI9Im9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS5yZW1vdGVtYWtlLlJlbW90ZUNvbW1hbmRMYXVuY2hlciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS5idWlsZGVyMSIKLSAgICAgICAgICAgIGlzQWJzdHJhY3Q9ImZhbHNlIgotICAgICAgICAgICAgaXNWYXJpYWJsZUNhc2VTZW5zaXRpdmU9ImZhbHNlIgotICAgICAgICAgICAgbmFtZT0iJWJ1aWxkZXIubmFtZSIKLSAgICAgICAgICAgIHN1cGVyQ2xhc3M9ImNkdC5tYW5hZ2VkYnVpbGQudGFyZ2V0LmdudS5idWlsZGVyIj4KLSAgICAgIDwvYnVpbGRlcj4KLSAgICAgIDxwcm9qZWN0VHlwZQotICAgICAgICAgICAgYnVpbGRBcnRlZmFjdFR5cGU9Im9yZy5lY2xpcHNlLmNkdC5idWlsZC5jb3JlLmJ1aWxkQXJ0ZWZhY3RUeXBlLmV4ZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50YXJnZXQueGxjLmV4ZSIKLSAgICAgICAgICAgIGlzQWJzdHJhY3Q9ImZhbHNlIgotICAgICAgICAgICAgaXNUZXN0PSJmYWxzZSIKLSAgICAgICAgICAgIG5hbWU9IiVUYXJnZXROYW1lLnhsYy5leGUiCi0gICAgICAgICAgICBwcm9qZWN0RW52aXJvbm1lbnRTdXBwbGllcj0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkuUmVtb3RlUHJvamVjdEVudmlyb25tZW50U3VwcGxpZXIiCi0gICAgICAgICAgICBwcm9qZWN0TWFjcm9TdXBwbGllcj0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS5YTENQcm9qZWN0TWFjcm9TdXBwbGllciI+Ci0gICAgICAJPGNvbmZpZ3VyYXRpb24KLSAgICAgIAkJbmFtZT0iJUNvbmZpZ05hbWUuRGJnIgotICAgICAgCQlhcnRpZmFjdEV4dGVuc2lvbj0iZXhlIgotICAgICAgCQljbGVhbkNvbW1hbmQ9InJtIC1yZiIKLSAgICAgIAkJZXJyb3JQYXJzZXJzPSJvcmcuZWNsaXBzZS5jZHQuZXJyb3JwYXJzZXJzLnhsYy5YbGNFcnJvclBhcnNlciIKLQkJCWlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC5jb25maWcueGxjLmV4ZS5kZWJ1ZyI+Ci0JCQk8dG9vbENoYWluCi0gICAgICAgICAgICAgICAgICBhcmNoTGlzdD0iYWxsIgotICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbkVudmlyb25tZW50U3VwcGxpZXI9Im9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci54bGMuYWl4LkFpeENvbmZpZ3VyYXRpb25FbnZpcm9ubWVudFN1cHBsaWVyIgotICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2xjaGFpbi54bGMuZXhlLmRlYnVnIgotICAgICAgICAgICAgICAgICAgbmFtZT0iJVRvb2xDaGFpbk5hbWUuRGJnIgotICAgICAgICAgICAgICAgICAgb3NMaXN0PSJhbGwiCi0gICAgICAgICAgICAgICAgICB0YXJnZXRUb29sPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jLmxpbmtlci5leGUuZGVidWc7b3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuY3BwLmxpbmtlci5leGUuZGVidWciPgotCQkJICAgICAgPHRhcmdldFBsYXRmb3JtCi0JCQkJCSAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRhcmdldC54bGMucGxhdGZvcm0uZXhlLmRlYnVnIgotCQkJCSAJICBuYW1lPSIlUGxhdGZvcm1OYW1lLkRiZyIKLSAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlQYXJzZXI9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLlhDT0ZGMzIiICAgICAgICAgICAgCQkJCQkgIAotCQkJCQkgIG9zTGlzdD0iYWxsIgkJCQkJICAKLQkJCQkJICBhcmNoTGlzdD0iYWxsIj4KLQkJCQkgIDwvdGFyZ2V0UGxhdGZvcm0+Ci0JCQkgIAkgIDxidWlsZGVyCi0JCQkJCSAgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMuYnVpbGRlci5iYXNlIgotCQkJCQkgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy5idWlsZGVyLmV4ZS5kZWJ1ZyI+CQkgICAgICAgICAgICAgIAotCQkJICAgICAgPC9idWlsZGVyPgotCQkJICAgICAgPHRvb2wKLSAgICAgICAgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuY3BwLmNvbXBpbGVyLmV4ZS5kZWJ1ZyIKLSAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jcHAuY29tcGlsZXIuYmFzZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC54bGMuY3BwLmNvbXBpbGVyLmV4ZS5kZWJ1Zy5vcHRpb24ub3B0aW1pemF0aW9uLmxldmVsIgotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9InhsYy5jLmNvbXBpbGVyLm9wdGltaXphdGlvbi5sZXZlbC5ub25lIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJ4bGMuYy5jb21waWxlci5vcHRpb24ub3B0aW1pemF0aW9uLmxldmVsIj4KLSAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uCi0JCQkJCQkgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0LnhsYy5jcHAuY29tcGlsZXIuZXhlLmRlYnVnLm9wdGlvbi5kZWJ1Z2dpbmcuZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJ4bGMuYy5jb21waWxlci5vcHRpb24uZWNkLmciPgotICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgotICAgICAgICAgICAgICAgICAgPC90b29sPgotICAgICAgICAgICAgICAgICAgPHRvb2wKLQkJCQkJICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYy5jb21waWxlci5leGUuZGVidWciCi0gICAgICAgICAgICAgICAgICAgICAgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYy5jb21waWxlci5iYXNlIj4KLQkJCQkJICA8b3B0aW9uCi0JCQkJCQkgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0LnhsYy5jLmNvbXBpbGVyLmV4ZS5kZWJ1Zy5vcHRpb24ub3B0aW1pemF0aW9uLmxldmVsIgotCQkJCQkJICBkZWZhdWx0VmFsdWU9InhsYy5jLm9wdGltaXphdGlvbi5sZXZlbC5ub25lIgotCQkJCQkJICBzdXBlckNsYXNzPSJ4bGMuYy5jb21waWxlci5vcHRpb24ub3B0aW1pemF0aW9uLmxldmVsIj4KLQkJCQkJICA8L29wdGlvbj4KLQkJCQkJICA8b3B0aW9uCi0JCQkJCQkgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0LnhsYy5jLmNvbXBpbGVyLmV4ZS5kZWJ1Zy5vcHRpb24uZGVidWdnaW5nLmciCi0JCQkJCQkgIGRlZmF1bHRWYWx1ZT0idHJ1ZSIKLQkJCQkJCSAgc3VwZXJDbGFzcz0ieGxjLmMuY29tcGlsZXIub3B0aW9uLmVjZC5nIj4KLQkJCQkJICA8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgIDwvdG9vbD4KLSAgICAgICAgICAgICAgICAgIDx0b29sCi0gICAgICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmMubGlua2VyLmV4ZS5kZWJ1ZyIKLSAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jLmxpbmtlci5leGUuYmFzZSI+Ci0gICAgICAgICAgICAgICAgICA8L3Rvb2w+Ci0gICAgICAgICAgICAgICAgICA8dG9vbAotICAgICAgICAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jcHAubGlua2VyLmV4ZS5kZWJ1ZyIKLSAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jcHAubGlua2VyLmV4ZS5iYXNlIj4KLSAgICAgICAgICAgICAgICAgIDwvdG9vbD4gICAgICAgICAgICAgICAgICAKLQkJCQkgIDx0b29sCi0JCQkJCSAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmFzc2VtYmxlci5leGUuZGVidWciCi0JCQkJCSAgc3VwZXJDbGFzcz0iY2R0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5hc3NlbWJsZXIiPgotCQkJCSAgPC90b29sPgotCQkJIDwvdG9vbENoYWluPiAgCi0JCTwvY29uZmlndXJhdGlvbj4KLQkJPGNvbmZpZ3VyYXRpb24KLQkJCW5hbWU9IiVDb25maWdOYW1lLlJlbCIKLQkJCWFydGlmYWN0RXh0ZW5zaW9uPSJleGUiCi0JCQljbGVhbkNvbW1hbmQ9InJtIC1yZiIKLQkJCWVycm9yUGFyc2Vycz0ib3JnLmVjbGlwc2UuY2R0LmVycm9ycGFyc2Vycy54bGMuWGxjRXJyb3JQYXJzZXIiCi0JCQlpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQuY29uZmlnLnhsYy5leGUucmVsZWFzZSI+Ci0JCQk8dG9vbENoYWluCi0gICAgICAgICAgICAgICAgICBhcmNoTGlzdD0iYWxsIgotICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2xjaGFpbi54bGMuZXhlLnJlbGVhc2UiCi0gICAgICAgICAgICAgICAgICBuYW1lPSIlVG9vbENoYWluTmFtZS5SZWwiCi0gICAgICAgICAgICAgICAgICBvc0xpc3Q9ImFsbCIKLSAgICAgICAgICAgICAgICAgIHRhcmdldFRvb2w9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmMubGlua2VyLmV4ZS5yZWxlYXNlO29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmNwcC5saW5rZXIuZXhlLnJlbGVhc2UiPgotCQkgICAgICAgICAgPHRhcmdldFBsYXRmb3JtCi0JCSAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRhcmdldC54bGMucGxhdGZvcm0uZXhlLnJlbGVhc2UiCi0JCSAgICAgICAgICAgICAgbmFtZT0iJVBsYXRmb3JtTmFtZS5SZWwiCQkgICAgICAgICAgICAgCi0JCSAgICAgICAgICAgICAgYmluYXJ5UGFyc2VyPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5YQ09GRjMyIgotCQkgICAgICAgICAgICAgIG9zTGlzdD0iYWxsIgotCQkgICAgICAgICAgICAgIGFyY2hMaXN0PSJhbGwiPgkJICAgICAgICAgICAgICAKLQkJICAgICAgICAgIDwvdGFyZ2V0UGxhdGZvcm0+Ci0JCQkJICA8YnVpbGRlcgotCQkJCSAgCSAgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMuYnVpbGRlci5iYXNlIgotCQkJCSAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy5idWlsZGVyLnJlbGVhc2UiPgotCQkJCSAgPC9idWlsZGVyPiAKLQkJCQkgIDx0b29sCi0gICAgICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmNwcC5jb21waWxlci5leGUucmVsZWFzZSIKLSAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jcHAuY29tcGlsZXIuYmFzZSI+ICAgICAgICAgICAgICAgICAgICAgCi0JCQkJCSAgPG9wdGlvbgotCQkJCQkJICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC54bGMuY3BwLmNvbXBpbGVyLmV4ZS5yZWxlYXNlLm9wdGlvbi5vcHRpbWl6YXRpb24ubGV2ZWwiCi0JCQkJCQkgIGRlZmF1bHRWYWx1ZT0ieGxjLmMub3B0aW1pemF0aW9uLmxldmVsLkxldmVsNSIKLQkJCQkJCSAgc3VwZXJDbGFzcz0ieGxjLmMuY29tcGlsZXIub3B0aW9uLm9wdGltaXphdGlvbi5sZXZlbCI+Ci0JCQkJCSAgPC9vcHRpb24+Ci0JCQkJCSAgPG9wdGlvbgotCQkJCQkJICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC54bGMuY3BwLmNvbXBpbGVyLmV4ZS5yZWxlYXNlLm9wdGlvbi5kZWJ1Z2dpbmcuZyIKLQkJCQkJCSAgZGVmYXVsdFZhbHVlPSJmYWxzZSIKLQkJCQkJCSAgc3VwZXJDbGFzcz0ieGxjLmMuY29tcGlsZXIub3B0aW9uLmVjZC5nIj4KLQkJCQkJICA8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgIDwvdG9vbD4KLSAgICAgICAgICAgICAgICAgIDx0b29sCi0gICAgICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmMuY29tcGlsZXIuZXhlLnJlbGVhc2UiCi0gICAgICAgICAgICAgICAgICAgICAgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYy5jb21waWxlci5iYXNlIj4gICAgICAgICAgICAgICAgICAgICAgICAgIAotCQkJCQkgIDxvcHRpb24KLQkJCQkJCSAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQueGxjLmMuY29tcGlsZXIuZXhlLnJlbGVhc2Uub3B0aW9uLm9wdGltaXphdGlvbi5sZXZlbCIKLQkJCQkJCSAgZGVmYXVsdFZhbHVlPSJ4bGMuYy5vcHRpbWl6YXRpb24ubGV2ZWwuTGV2ZWw1IgotCQkJCQkJICBzdXBlckNsYXNzPSJ4bGMuYy5jb21waWxlci5vcHRpb24ub3B0aW1pemF0aW9uLmxldmVsIj4KLQkJCQkJICA8L29wdGlvbj4KLQkJCQkJICA8b3B0aW9uCi0JCQkJCQkgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0LnhsYy5jLmNvbXBpbGVyLmV4ZS5yZWxlYXNlLm9wdGlvbi5kZWJ1Z2dpbmcuZyIKLQkJCQkJCSAgZGVmYXVsdFZhbHVlPSJmYWxzZSIKLQkJCQkJCSAgc3VwZXJDbGFzcz0ieGxjLmMuY29tcGlsZXIub3B0aW9uLmVjZC5nIj4KLQkJCQkJICA8L29wdGlvbj4KLSAgICAgICAgICAgICAgICAgIDwvdG9vbD4KLSAgICAgICAgICAgICAgICAgIDx0b29sCi0gICAgICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmMubGlua2VyLmV4ZS5yZWxlYXNlIgotICAgICAgICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3M9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmMubGlua2VyLmV4ZS5iYXNlIj4KLSAgICAgICAgICAgICAgICAgIDwvdG9vbD4gCi0gICAgICAgICAgICAgICAgICA8dG9vbAotICAgICAgICAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jcHAubGlua2VyLmV4ZS5yZWxlYXNlIgotICAgICAgICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3M9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmNwcC5saW5rZXIuZXhlLmJhc2UiPgotICAgICAgICAgICAgICAgICAgPC90b29sPiAgCi0JCQkJICA8dG9vbAotCQkJCQkgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5hc3NlbWJsZXIuZXhlLnJlbGVhc2UiCi0JCQkJCSAgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYXNzZW1ibGVyLmV4ZS5iYXNlIj4KLQkJCQkgIDwvdG9vbD4KLSAgICAgICAgICAgIDwvdG9vbENoYWluPgotICAgICAgICAgICAgCi0JCTwvY29uZmlndXJhdGlvbj4KLQk8L3Byb2plY3RUeXBlPgkKLQk8dG9vbENoYWluCi0gICAgICAgICAgICAgICAgICBhcmNoTGlzdD0iYWxsIgotICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbkVudmlyb25tZW50U3VwcGxpZXI9IlJlbW90ZUNvbmZpZ3VyYXRpb25FbnZpcm9ubWVudFN1cHBsaWVyIgotICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2xjaGFpbi54bGMuYmFzZSIKLSAgICAgICAgICAgICAgICAgIG5hbWU9IiVUb29sQ2hhaW5OYW1lLkRiZyIKLSAgICAgICAgICAgICAgICAgIG9zTGlzdD0iYWxsIgotICAgICAgICAgICAgICAgICAgdGFyZ2V0VG9vbD0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYy5saW5rZXIuZXhlLmRlYnVnO29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmNwcC5saW5rZXIuZXhlLmRlYnVnIj4KLQkJCSAgCSAgPGJ1aWxkZXIKLQkJCQkJICBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS5idWlsZGVyMSIKLQkJCQkJICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMuYnVpbGRlci5iYXNlIj4JCSAgICAgICAgICAgICAgCi0JCQkgICAgICA8L2J1aWxkZXI+Ci0JCQkgICAgICA8dG9vbAotICAgICAgICAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jcHAuY29tcGlsZXIuYmFzZSIKLSAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJjZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmNwcC5jb21waWxlciI+Ci0gICAgICAgICAgICAgICAgICA8L3Rvb2w+Ci0gICAgICAgICAgICAgICAgICA8dG9vbAotCQkJCQkgIGlkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jLmNvbXBpbGVyLmJhc2UiCi0gICAgICAgICAgICAgICAgICAgICAgc3VwZXJDbGFzcz0iY2R0Lm1hbmFnZWRidWlsZC50b29sLnhsYy5jLmNvbXBpbGVyIj4KLSAgICAgICAgICAgICAgICAgIDwvdG9vbD4KLSAgICAgICAgICAgICAgICAgIDx0b29sCi0gICAgICAgICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmMubGlua2VyLmV4ZS5iYXNlIgotICAgICAgICAgICAgICAgICAgICAgIHN1cGVyQ2xhc3M9ImNkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYy5saW5rZXIiPgotICAgICAgICAgICAgICAgICAgPC90b29sPgotICAgICAgICAgICAgICAgICAgPHRvb2wKLSAgICAgICAgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuY3BwLmxpbmtlci5leGUuYmFzZSIKLSAgICAgICAgICAgICAgICAgICAgICBzdXBlckNsYXNzPSJjZHQubWFuYWdlZGJ1aWxkLnRvb2wueGxjLmNwcC5saW5rZXIiPgotICAgICAgICAgICAgICAgICAgPC90b29sPiAgICAgICAgICAgICAgICAgIAotCQkJCSAgPHRvb2wKLQkJCQkJICBpZD0ib3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYXNzZW1ibGVyLmV4ZS5iYXNlIgotCQkJCQkgIHN1cGVyQ2xhc3M9ImNkdC5tYW5hZ2VkYnVpbGQudG9vbC54bGMuYXNzZW1ibGVyIj4KLQkJCQkgIDwvdG9vbD4KLQkJCSA8L3Rvb2xDaGFpbj4gICAgICAgIAkJCi0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIGlkPSJSZW1vdGVYTENQZXJQcm9qZWN0UHJvZmlsZSIKLSAgICAgICAgIG5hbWU9IiVleHRlbnNpb24ubmFtZSIKLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLlNjYW5uZXJDb25maWd1cmF0aW9uRGlzY292ZXJ5UHJvZmlsZSI+Ci0gICAgIDxzY2FubmVySW5mb0NvbGxlY3RvcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS5yZW1vdGVtYWtlLlByb2plY3REZXNjcmlwdGlvbkNvbGxlY3RvciIKLSAgICAgICAgICAgIHNjb3BlPSJwcm9qZWN0Ii8+Ci0gICAgIAkJPCEtLSBUaGUgU2Nhbm5lckluZm9Qcm92aWRlciBzZWFyY2ggZm9yIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIHByb2ZpbGUgYW5kIHNlbmQgaXQgdG8gdGhlIFNjYW5uZXJJbmZvQ29sbGVjdG9yIC0tPgotCQk8c2Nhbm5lckluZm9Qcm92aWRlciBwcm92aWRlcklkPSJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS5zcGVjc0ZpbGUiPgotCQkJPCEtLSBTcGVjaWZpZXMgdGhlIGNvbXBpbGVyIGNvbW1hbmQgdGhhdCByZXR1cm5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBzdGFuZGFyZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGFuZCBzdGFuZGFyZCBkZWZpbml0aW9ucyAtLT4KLQkJCTwhLS0gVGhlIGNvbXBpbGVyIGNvbW1hbmQgdXNlZCB3aWxsIGJlIGFsd2F5cyBhIEMgY29tcGlsZXIgY29tbWFuZCAtLT4KLQkJCTwhLS0gVGhlIG91dHB1dCBmb3IgQyBvciBDKysgcHJvamVjdHMgd2lsbCBiZSBkaWZmZXJlbnQgYXMgdGhlIFNjYW5uZXJJbmZvUHJvdmlkZXIgc3Vic3RpdHV0ZSB0aGUgJHtzcGVjc19maWxlfSB2YXJpYWJsZSBiZWxvdyB3aXRoIGEgZHVtbXkgImMiIGZpbGUgb3IgImNwcCIgZmlsZSAtLT4KLQkJCTxydW4KLQkJCQkJYXJndW1lbnRzPSItRSAtdiAke3NwZWNzX2ZpbGVfcGF0aH0iCi0JCQkJCWNvbW1hbmQ9IiR7WExfY29tcGlsZXJSb290fS94bEMiCi0JCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUucmVtb3RlbWFrZS5SZW1vdGVTcGVjc1J1blNJUHJvdmlkZXIiPgotCQkJPC9ydW4+Ci0JCQk8IS0tIFNwZWNpZmllcyB0aGUgcGFyc2VyIGZvciB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBsaW5lIC0tPgotCQkJPHNjYW5uZXJJbmZvQ29uc29sZVBhcnNlcgotCQkJCQljbGFzcz0ib3JnLmVjbGlwc2UuY2R0Lm1ha2UueGxjLmNvcmUuc2Nhbm5lcmNvbmZpZy5YbENTcGVjc0NvbnNvbGVQYXJzZXIiPgotCQkJPC9zY2FubmVySW5mb0NvbnNvbGVQYXJzZXI+Ci0JCTwvc2Nhbm5lckluZm9Qcm92aWRlcj4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS9zcmMvUmVtb3RlQ29uZmlndXJhdGlvbkVudmlyb25tZW50U3VwcGxpZXIuamF2YSBiL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aS9zcmMvUmVtb3RlQ29uZmlndXJhdGlvbkVudmlyb25tZW50U3VwcGxpZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4ZDJlYS4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvc3JjL1JlbW90ZUNvbmZpZ3VyYXRpb25FbnZpcm9ubWVudFN1cHBsaWVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5jb3JlLklDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5jb3JlLklNYW5hZ2VkUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuZW52dmFyLklCdWlsZEVudmlyb25tZW50VmFyaWFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmVudnZhci5JQ29uZmlndXJhdGlvbkVudmlyb25tZW50VmFyaWFibGVTdXBwbGllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuZW52dmFyLklFbnZpcm9ubWVudFZhcmlhYmxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmludGVybmFsLmVudnZhci5CdWlsZEVudlZhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUuUkRUTG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS5zZXJ2aWNlcHJvdmlkZXJzLklSZW1vdGVFeGVjdXRpb25TZXJ2aWNlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlLnNlcnZpY2VzLklSRFRTZXJ2aWNlQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuc2VydmljZXMuY29yZS5JU2VydmljZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmR0LnNlcnZpY2VzLmNvcmUuSVNlcnZpY2VDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuc2VydmljZXMuY29yZS5JU2VydmljZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuc2VydmljZXMuY29yZS5Qcm9qZWN0Tm90Q29uZmlndXJlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmR0LnNlcnZpY2VzLmNvcmUuU2VydmljZU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmVtb3RlLmNvcmUuSVJlbW90ZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlLklSZW1vdGVQcm9jZXNzQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmVtb3RlLmNvcmUuSVJlbW90ZVNlcnZpY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZS5leGNlcHRpb24uUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbjsKLQotCi0vKioKLSAqIFN1cHBsaWVzIHJlbW90ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gYSBwZXItY29uZmlndXJhdGlvbiBiYXNpcy4KLSAqIFJpZ2h0IG5vdyBpdCBhY3R1YWxseSBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHNlcnZpY2UgbW9kZWwgY29uZmlndXJhdGlvbnMsIHNvIHRoaXMganVzdAotICogYWN0cyB0aGUgc2FtZSBhcyB0aGUgUmVtb3RlUHJvamVjdEVudmlyb25tZW50U3VwcGxpZXIgYXQgdGhlIG1vbWVudC4KLSAqIAotICogQGF1dGhvciBjcmVjb3NraWUKLSAqCi0gKi8KLUBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpCi1wdWJsaWMgY2xhc3MgUmVtb3RlQ29uZmlndXJhdGlvbkVudmlyb25tZW50U3VwcGxpZXIgaW1wbGVtZW50cwotCQlJQ29uZmlndXJhdGlvbkVudmlyb25tZW50VmFyaWFibGVTdXBwbGllciB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuZW52dmFyLklDb25maWd1cmF0aW9uRW52aXJvbm1lbnRWYXJpYWJsZVN1cHBsaWVyI2dldFZhcmlhYmxlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5jb3JlLklDb25maWd1cmF0aW9uLCBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuZW52dmFyLklFbnZpcm9ubWVudFZhcmlhYmxlUHJvdmlkZXIpCi0JICovCi0JcHVibGljIElCdWlsZEVudmlyb25tZW50VmFyaWFibGUgZ2V0VmFyaWFibGUoU3RyaW5nIHZhcmlhYmxlTmFtZSwKLQkJCUlDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIElFbnZpcm9ubWVudFZhcmlhYmxlUHJvdmlkZXIgcHJvdmlkZXIpIHsKLQkJTWFwPFN0cmluZywgU3RyaW5nPiBlbnZNYXAgPSBnZXRSZW1vdGVFbnZpcm9ubWVudChjb25maWd1cmF0aW9uLmdldE1hbmFnZWRQcm9qZWN0KCkpOwotCQlTdHJpbmcgdmFsdWUgPSBlbnZNYXAuZ2V0KHZhcmlhYmxlTmFtZSkgPT0gbnVsbCA/IG5ldyBTdHJpbmcoKSA6IGVudk1hcC5nZXQodmFyaWFibGVOYW1lKTsKLQkJSUJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZSBlbnZWYXIgPSBuZXcgQnVpbGRFbnZWYXIodmFyaWFibGVOYW1lLCB2YWx1ZSk7Ci0JCXJldHVybiBlbnZWYXI7Ci0JfQotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmVudnZhci5JQ29uZmlndXJhdGlvbkVudmlyb25tZW50VmFyaWFibGVTdXBwbGllciNnZXRWYXJpYWJsZXMob3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuSUNvbmZpZ3VyYXRpb24sIG9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5lbnZ2YXIuSUVudmlyb25tZW50VmFyaWFibGVQcm92aWRlcikKLQkgKi8KLQlwdWJsaWMgSUJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVtdIGdldFZhcmlhYmxlcygKLQkJCUlDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIElFbnZpcm9ubWVudFZhcmlhYmxlUHJvdmlkZXIgcHJvdmlkZXIpIHsKLQkJTGlzdDxJQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlPiB2YXJzID0gbmV3IExpbmtlZExpc3Q8SUJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZT4oKTsKLQkJTWFwPFN0cmluZywgU3RyaW5nPiByZW1vdGVFbnZNYXAgPSBudWxsOwotCQkKLQkJcmVtb3RlRW52TWFwID0gZ2V0UmVtb3RlRW52aXJvbm1lbnQoY29uZmlndXJhdGlvbi5nZXRNYW5hZ2VkUHJvamVjdCgpKTsKLQkJCi0JCWlmIChyZW1vdGVFbnZNYXAgIT0gbnVsbCkgewotCQkJZm9yIChTdHJpbmcgdmFyIDogcmVtb3RlRW52TWFwLmtleVNldCgpKSB7Ci0JCQkJU3RyaW5nIHZhbHVlID0gcmVtb3RlRW52TWFwLmdldCh2YXIpOwotCi0JCQkJSUJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZSBidWlsZEVudlZhciA9IG5ldyBCdWlsZEVudlZhcih2YXIsCi0JCQkJCQl2YWx1ZSk7Ci0JCQkJdmFycy5hZGQoYnVpbGRFbnZWYXIpOwotCQkJfQotCi0JCQlyZXR1cm4gdmFycy50b0FycmF5KG5ldyBJQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlWzBdKTsKLQkJfQotCQkKLQkJZWxzZQotCQkJcmV0dXJuIG5ldyBJQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlWzBdOwotCX0KLQkKLQkvKioKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSByZW1vdGVFbnZNYXAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldFJlbW90ZUVudmlyb25tZW50KElNYW5hZ2VkUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQcm9qZWN0IGlQcm9qID0gKElQcm9qZWN0KSBwcm9qZWN0LmdldE93bmVyKCk7Ci0JCU1hcDxTdHJpbmcsIFN0cmluZz4gcmVtb3RlRW52TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0KLQkJU2VydmljZU1vZGVsTWFuYWdlciBzbW0gPSBTZXJ2aWNlTW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0KLQkJdHJ5IHsKLQkJCUlTZXJ2aWNlQ29uZmlndXJhdGlvbiBzZXJ2aWNlQ29uZmlnID0gc21tCi0JCQkJCS5nZXRBY3RpdmVDb25maWd1cmF0aW9uKGlQcm9qKTsKLQkJCUlTZXJ2aWNlIGJ1aWxkU2VydmljZSA9IHNtbQotCQkJCQkuZ2V0U2VydmljZShJUkRUU2VydmljZUNvbnN0YW50cy5TRVJWSUNFX0JVSUxEKTsKLQkJCUlTZXJ2aWNlUHJvdmlkZXIgc2VydmljZVByb3ZpZGVyID0gc2VydmljZUNvbmZpZwotCQkJCQkuZ2V0U2VydmljZVByb3ZpZGVyKGJ1aWxkU2VydmljZSk7Ci0JCQlJUmVtb3RlRXhlY3V0aW9uU2VydmljZVByb3ZpZGVyIGV4ZWN1dGlvblByb3ZpZGVyID0gbnVsbDsKLQkJCWlmIChzZXJ2aWNlUHJvdmlkZXIgaW5zdGFuY2VvZiBJUmVtb3RlRXhlY3V0aW9uU2VydmljZVByb3ZpZGVyKSB7Ci0JCQkJZXhlY3V0aW9uUHJvdmlkZXIgPSAoSVJlbW90ZUV4ZWN1dGlvblNlcnZpY2VQcm92aWRlcikgc2VydmljZVByb3ZpZGVyOwotCQkJfQotCi0JCQlpZiAoZXhlY3V0aW9uUHJvdmlkZXIgIT0gbnVsbCkgewotCi0JCQkJSVJlbW90ZVNlcnZpY2VzIHJlbW90ZVNlcnZpY2VzID0gZXhlY3V0aW9uUHJvdmlkZXIKLQkJCQkJCS5nZXRSZW1vdGVTZXJ2aWNlcygpOwotCi0JCQkJSVJlbW90ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGV4ZWN1dGlvblByb3ZpZGVyCi0JCQkJCQkuZ2V0Q29ubmVjdGlvbigpOwotCi0JCQkJaWYgKCFjb25uZWN0aW9uLmlzT3BlbigpKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQljb25uZWN0aW9uLm9wZW4obnVsbCk7Ci0JCQkJCX0gY2F0Y2ggKFJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb24gZSkgewotCQkJCQkJUkRUTG9nLmxvZ0Vycm9yKGUpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJTGlzdDxTdHJpbmc+IGNvbW1hbmQgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0KLQkJCQlJUmVtb3RlUHJvY2Vzc0J1aWxkZXIgcHJvY2Vzc0J1aWxkZXIgPSByZW1vdGVTZXJ2aWNlcwotCQkJCQkJLmdldFByb2Nlc3NCdWlsZGVyKGNvbm5lY3Rpb24sIGNvbW1hbmQpOwotCi0JCQkJcmVtb3RlRW52TWFwID0gcHJvY2Vzc0J1aWxkZXIuZW52aXJvbm1lbnQoKTsKLQotCQkJfQotCQl9IGNhdGNoIChQcm9qZWN0Tm90Q29uZmlndXJlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBXZSBjYW4gZ2V0IGhlcmUgd2hlbiB0aGUgZW52aXJvbm1lbnQgc3VwcGxpZXIgaXMgY2FsbGVkIGR1cmluZwotCQkJLy8gcHJvamVjdCBjcmVhdGlvbiwgc2luY2UgdGhlIHNlcnZpY2UgbW9kZWwgaXMgbm90IHlldCBzZXR1cC4KLQkJCS8vIFN3YWxsb3cgdGhlIGVycm9yLgotCQl9Ci0JCXJldHVybiByZW1vdGVFbnZNYXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9yZHQvbWFuYWdlZGJ1aWxkZXIveGxjL3VpL0FjdGl2YXRvci5qYXZhIGIvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcmR0L21hbmFnZWRidWlsZGVyL3hsYy91aS9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2N2ViMi4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9yZHQvbWFuYWdlZGJ1aWxkZXIveGxjL3VpL0FjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5wdHAucmR0Lm1hbmFnZWRidWlsZGVyLnhsYy51aSI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9yZHQvbWFuYWdlZGJ1aWxkZXIveGxjL3VpL1JlbW90ZVByb2plY3RFbnZpcm9ubWVudFN1cHBsaWVyLmphdmEgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9yZHQvbWFuYWdlZGJ1aWxkZXIveGxjL3VpL1JlbW90ZVByb2plY3RFbnZpcm9ubWVudFN1cHBsaWVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Mzc4ZDcuLjAwMDAwMDAKLS0tIGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQubWFuYWdlZGJ1aWxkZXIueGxjLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcmR0L21hbmFnZWRidWlsZGVyL3hsYy91aS9SZW1vdGVQcm9qZWN0RW52aXJvbm1lbnRTdXBwbGllci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJkdC5tYW5hZ2VkYnVpbGRlci54bGMudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmludGVybmFsLmVudnZhci5CdWlsZEVudlZhcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5JTWFuYWdlZFByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmVudnZhci5JQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5lbnZ2YXIuSUVudmlyb25tZW50VmFyaWFibGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuZW52dmFyLklQcm9qZWN0RW52aXJvbm1lbnRWYXJpYWJsZVN1cHBsaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS5SRFRMb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlLnNlcnZpY2Vwcm92aWRlcnMuSVJlbW90ZUV4ZWN1dGlvblNlcnZpY2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUuc2VydmljZXMuSVJEVFNlcnZpY2VDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJkdC5zZXJ2aWNlcy5jb3JlLklTZXJ2aWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuc2VydmljZXMuY29yZS5JU2VydmljZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJkdC5zZXJ2aWNlcy5jb3JlLklTZXJ2aWNlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJkdC5zZXJ2aWNlcy5jb3JlLlByb2plY3ROb3RDb25maWd1cmVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuc2VydmljZXMuY29yZS5TZXJ2aWNlTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZS5JUmVtb3RlQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmVtb3RlLmNvcmUuSVJlbW90ZVByb2Nlc3NCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZS5JUmVtb3RlU2VydmljZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlLmV4Y2VwdGlvbi5SZW1vdGVDb25uZWN0aW9uRXhjZXB0aW9uOwotCi0vKioKLSAqIFN1cHBsaWVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIHRoZSByZW1vdGUgc3lzdGVtLgotICogCi0gKiBAYXV0aG9yIGNyZWNvc2tpZQotICoKLSAqLwotQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKLXB1YmxpYyBjbGFzcyBSZW1vdGVQcm9qZWN0RW52aXJvbm1lbnRTdXBwbGllciBpbXBsZW1lbnRzCi0JCUlQcm9qZWN0RW52aXJvbm1lbnRWYXJpYWJsZVN1cHBsaWVyIHsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5lbnZ2YXIuSVByb2plY3RFbnZpcm9ubWVudFZhcmlhYmxlU3VwcGxpZXIjZ2V0VmFyaWFibGUoamF2YS5sYW5nLlN0cmluZywgb3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuSU1hbmFnZWRQcm9qZWN0LCBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuZW52dmFyLklFbnZpcm9ubWVudFZhcmlhYmxlUHJvdmlkZXIpCi0JICovCi0JcHVibGljIElCdWlsZEVudmlyb25tZW50VmFyaWFibGUgZ2V0VmFyaWFibGUoU3RyaW5nIHZhcmlhYmxlTmFtZSwKLQkJCUlNYW5hZ2VkUHJvamVjdCBwcm9qZWN0LCBJRW52aXJvbm1lbnRWYXJpYWJsZVByb3ZpZGVyIHByb3ZpZGVyKSB7Ci0JCU1hcDxTdHJpbmcsIFN0cmluZz4gZW52TWFwID0gZ2V0UmVtb3RlRW52aXJvbm1lbnQocHJvamVjdCk7Ci0JCVN0cmluZyB2YWx1ZSA9IGVudk1hcC5nZXQodmFyaWFibGVOYW1lKSA9PSBudWxsID8gbmV3IFN0cmluZygpIDogZW52TWFwLmdldCh2YXJpYWJsZU5hbWUpOwotCQlJQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlIGVudlZhciA9IG5ldyBCdWlsZEVudlZhcih2YXJpYWJsZU5hbWUsIHZhbHVlKTsKLQkJcmV0dXJuIGVudlZhcjsKLQl9Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuZW52dmFyLklQcm9qZWN0RW52aXJvbm1lbnRWYXJpYWJsZVN1cHBsaWVyI2dldFZhcmlhYmxlcyhvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5JTWFuYWdlZFByb2plY3QsIG9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5lbnZ2YXIuSUVudmlyb25tZW50VmFyaWFibGVQcm92aWRlcikKLQkgKi8KLQlwdWJsaWMgSUJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZVtdIGdldFZhcmlhYmxlcyhJTWFuYWdlZFByb2plY3QgcHJvamVjdCwKLQkJCUlFbnZpcm9ubWVudFZhcmlhYmxlUHJvdmlkZXIgcHJvdmlkZXIpIHsKLQkJCi0JCUxpc3Q8SUJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZT4gdmFycyA9IG5ldyBMaW5rZWRMaXN0PElCdWlsZEVudmlyb25tZW50VmFyaWFibGU+KCk7Ci0JCU1hcDxTdHJpbmcsIFN0cmluZz4gcmVtb3RlRW52TWFwID0gbnVsbDsKLQkJCi0JCXJlbW90ZUVudk1hcCA9IGdldFJlbW90ZUVudmlyb25tZW50KHByb2plY3QpOwotCQkKLQkJaWYgKHJlbW90ZUVudk1hcCAhPSBudWxsKSB7Ci0JCQlmb3IgKFN0cmluZyB2YXIgOiByZW1vdGVFbnZNYXAua2V5U2V0KCkpIHsKLQkJCQlTdHJpbmcgdmFsdWUgPSByZW1vdGVFbnZNYXAuZ2V0KHZhcik7Ci0KLQkJCQlJQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlIGJ1aWxkRW52VmFyID0gbmV3IEJ1aWxkRW52VmFyKHZhciwKLQkJCQkJCXZhbHVlKTsKLQkJCQl2YXJzLmFkZChidWlsZEVudlZhcik7Ci0JCQl9Ci0KLQkJCXJldHVybiB2YXJzLnRvQXJyYXkobmV3IElCdWlsZEVudmlyb25tZW50VmFyaWFibGVbMF0pOwotCQl9Ci0JCQotCQllbHNlCi0JCQlyZXR1cm4gbmV3IElCdWlsZEVudmlyb25tZW50VmFyaWFibGVbMF07Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gcHJvamVjdAotCSAqIEBwYXJhbSByZW1vdGVFbnZNYXAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldFJlbW90ZUVudmlyb25tZW50KElNYW5hZ2VkUHJvamVjdCBwcm9qZWN0KSB7Ci0JCUlQcm9qZWN0IGlQcm9qID0gKElQcm9qZWN0KSBwcm9qZWN0LmdldE93bmVyKCk7Ci0JCU1hcDxTdHJpbmcsIFN0cmluZz4gcmVtb3RlRW52TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0KLQkJU2VydmljZU1vZGVsTWFuYWdlciBzbW0gPSBTZXJ2aWNlTW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0KLQkJdHJ5IHsKLQkJCUlTZXJ2aWNlQ29uZmlndXJhdGlvbiBzZXJ2aWNlQ29uZmlnID0gc21tCi0JCQkJCS5nZXRBY3RpdmVDb25maWd1cmF0aW9uKGlQcm9qKTsKLQkJCUlTZXJ2aWNlIGJ1aWxkU2VydmljZSA9IHNtbQotCQkJCQkuZ2V0U2VydmljZShJUkRUU2VydmljZUNvbnN0YW50cy5TRVJWSUNFX0JVSUxEKTsKLQkJCUlTZXJ2aWNlUHJvdmlkZXIgc2VydmljZVByb3ZpZGVyID0gc2VydmljZUNvbmZpZwotCQkJCQkuZ2V0U2VydmljZVByb3ZpZGVyKGJ1aWxkU2VydmljZSk7Ci0JCQlJUmVtb3RlRXhlY3V0aW9uU2VydmljZVByb3ZpZGVyIGV4ZWN1dGlvblByb3ZpZGVyID0gbnVsbDsKLQkJCWlmIChzZXJ2aWNlUHJvdmlkZXIgaW5zdGFuY2VvZiBJUmVtb3RlRXhlY3V0aW9uU2VydmljZVByb3ZpZGVyKSB7Ci0JCQkJZXhlY3V0aW9uUHJvdmlkZXIgPSAoSVJlbW90ZUV4ZWN1dGlvblNlcnZpY2VQcm92aWRlcikgc2VydmljZVByb3ZpZGVyOwotCQkJfQotCi0JCQlpZiAoZXhlY3V0aW9uUHJvdmlkZXIgIT0gbnVsbCkgewotCi0JCQkJSVJlbW90ZVNlcnZpY2VzIHJlbW90ZVNlcnZpY2VzID0gZXhlY3V0aW9uUHJvdmlkZXIKLQkJCQkJCS5nZXRSZW1vdGVTZXJ2aWNlcygpOwotCi0JCQkJSVJlbW90ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGV4ZWN1dGlvblByb3ZpZGVyCi0JCQkJCQkuZ2V0Q29ubmVjdGlvbigpOwotCi0JCQkJaWYgKCFjb25uZWN0aW9uLmlzT3BlbigpKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQljb25uZWN0aW9uLm9wZW4obnVsbCk7Ci0JCQkJCX0gY2F0Y2ggKFJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb24gZSkgewotCQkJCQkJUkRUTG9nLmxvZ0Vycm9yKGUpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJTGlzdDxTdHJpbmc+IGNvbW1hbmQgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0KLQkJCQlJUmVtb3RlUHJvY2Vzc0J1aWxkZXIgcHJvY2Vzc0J1aWxkZXIgPSByZW1vdGVTZXJ2aWNlcwotCQkJCQkJLmdldFByb2Nlc3NCdWlsZGVyKGNvbm5lY3Rpb24sIGNvbW1hbmQpOwotCi0JCQkJcmVtb3RlRW52TWFwID0gcHJvY2Vzc0J1aWxkZXIuZW52aXJvbm1lbnQoKTsKLQotCQkJfQotCQl9IGNhdGNoIChQcm9qZWN0Tm90Q29uZmlndXJlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBXZSBjYW4gZ2V0IGhlcmUgd2hlbiB0aGUgZW52aXJvbm1lbnQgc3VwcGxpZXIgaXMgY2FsbGVkIGR1cmluZwotCQkJLy8gcHJvamVjdCBjcmVhdGlvbiwgc2luY2UgdGhlIHNlcnZpY2UgbW9kZWwgaXMgbm90IHlldCBzZXR1cC4KLQkJCS8vIFN3YWxsb3cgdGhlIGVycm9yLgotCQl9Ci0JCXJldHVybiByZW1vdGVFbnZNYXA7Ci0JfQotfQotCi0KZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzLy5jbGFzc3BhdGggYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWFlZWE4Li4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0ZXN0Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3VpdGUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvLnByb2plY3QgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIxOTI2Yy4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTQ4MmYyLi4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI1dlZCBOb3YgMTkgMTM6NTA6NTkgRVNUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhhNWRkZi4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFRlc3RzIFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLVJlcXVpcmUtQnVuZGxlOiBjb20uaWJtLmljdTtidW5kbGUtdmVyc2lvbj0iMy44LjEiLAotIG9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZTtidW5kbGUtdmVyc2lvbj0iMS4wLjAiLAotIG9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS50ZXN0cztidW5kbGUtdmVyc2lvbj0iMS4wLjAiLAotIG9yZy5lY2xpcHNlLnB0cC5yZHQudWk7YnVuZGxlLXZlcnNpb249IjEuMC4wIiwKLSBvcmcuZWNsaXBzZS5jZHQudWkudGVzdHM7YnVuZGxlLXZlcnNpb249IjUuMC4yIiwKLSBvcmcuZWNsaXBzZS5jZHQudWk7YnVuZGxlLXZlcnNpb249IjUuMC4yIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IjMuNC4wIiwKLSBvcmcuZWNsaXBzZS5wdHAucmR0LnNlcnZpY2VzO2J1bmRsZS12ZXJzaW9uPSIxLjAuMSIsCi0gb3JnLmVjbGlwc2UuY2R0LmNvcmU7YnVuZGxlLXZlcnNpb249IjUuMC4yIiwKLSBvcmcuZWNsaXBzZS5jZHQuY29yZS50ZXN0cztidW5kbGUtdmVyc2lvbj0iNS4wLjEiLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjIiLAotIG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSIzLjQuMCIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IjMuNC4wIiwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0O2J1bmRsZS12ZXJzaW9uPSIzLjQuMCIsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycztidW5kbGUtdmVyc2lvbj0iMy40LjAiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy5uYXZpZ2F0aW9uLAotIG9yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMuc3VpdGUKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMuUkRUVUlUZXN0UGx1Z2luCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnVpLnBhcnQKZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTU2YWNjLi4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXNvdXJjZS4uID0gdGVzdC8sXAotICAgICAgICAgICBzdWl0ZS8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4KZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL2ZpeHR1cmVzL25hdmlnYXRpb25fdGVzdF9wcm9qZWN0L3Rlc3QuYyBiL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL2ZpeHR1cmVzL25hdmlnYXRpb25fdGVzdF9wcm9qZWN0L3Rlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzYjUzZC4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy9maXh0dXJlcy9uYXZpZ2F0aW9uX3Rlc3RfcHJvamVjdC90ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSNpbXBvcnQgInRlc3QuaCIKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7Ci0KLX0KZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL2ZpeHR1cmVzL25hdmlnYXRpb25fdGVzdF9wcm9qZWN0L3Rlc3QuaCBiL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL2ZpeHR1cmVzL25hdmlnYXRpb25fdGVzdF9wcm9qZWN0L3Rlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy9maXh0dXJlcy9uYXZpZ2F0aW9uX3Rlc3RfcHJvamVjdC90ZXN0LmgKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvc3VpdGUvb3JnL2VjbGlwc2UvcHRwL3JkdC91aS90ZXN0cy9SRFRVSVRlc3RQbHVnaW4uamF2YSBiL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL3N1aXRlL29yZy9lY2xpcHNlL3B0cC9yZHQvdWkvdGVzdHMvUkRUVUlUZXN0UGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5Yzc3YzYuLjAwMDAwMDAKLS0tIGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvc3VpdGUvb3JnL2VjbGlwc2UvcHRwL3JkdC91aS90ZXN0cy9SRFRVSVRlc3RQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgUkRUVUlUZXN0UGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkKLQlwcml2YXRlIHN0YXRpYyBSRFRVSVRlc3RQbHVnaW4gcGx1Z2luOwotCQotCXB1YmxpYyBSRFRVSVRlc3RQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSRFRVSVRlc3RQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci19CmRpZmYgLS1naXQgYS9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy9zdWl0ZS9vcmcvZWNsaXBzZS9wdHAvcmR0L3VpL3Rlc3RzL3N1aXRlL1VJQmFzaWNUZXN0U3VpdGUuamF2YSBiL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL3N1aXRlL29yZy9lY2xpcHNlL3B0cC9yZHQvdWkvdGVzdHMvc3VpdGUvVUlCYXNpY1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjc2MjYwLi4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL3N1aXRlL29yZy9lY2xpcHNlL3B0cC9yZHQvdWkvdGVzdHMvc3VpdGUvVUlCYXNpY1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMuc3VpdGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0vKioKLSAqIFRlc3RzIHRoYXQgZG8gbm90IHJlcXVpcmUgYSBjb25uZWN0aW9uIHRvIGEgcmVtb3RlIHNlcnZlci4KLSAqLwotcHVibGljIGNsYXNzIFVJQmFzaWNUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKFVJQmFzaWNUZXN0U3VpdGUuY2xhc3MuZ2V0TmFtZSgpKTsKLQkJLy8gVE9ETyBhZGQgc29tZSB0ZXN0cwotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL3N1aXRlL29yZy9lY2xpcHNlL3B0cC9yZHQvdWkvdGVzdHMvc3VpdGUvVUlDb25uZWN0aW9uVGVzdFN1aXRlLmphdmEgYi9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy9zdWl0ZS9vcmcvZWNsaXBzZS9wdHAvcmR0L3VpL3Rlc3RzL3N1aXRlL1VJQ29ubmVjdGlvblRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjQ2OGI3Li4wMDAwMDAwCi0tLSBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL3N1aXRlL29yZy9lY2xpcHNlL3B0cC9yZHQvdWkvdGVzdHMvc3VpdGUvVUlDb25uZWN0aW9uVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy5zdWl0ZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJkdC51aS50ZXN0cy5uYXZpZ2F0aW9uLk5hdmlnYXRpb25UZXN0czsKLQotCi0vKioKLSAqIFRlc3RzIHRoYXQgcmVxdWlyZSBhIGNvbm5lY3Rpb24gdG8gYmUgcnVuLAotICogdGhpcyBzdWl0ZSBtdXN0IGJlIGxhdW5jaGVkIGZyb20gYSBDb25uZWN0aW9uU3VpdGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBVSUNvbm5lY3Rpb25UZXN0U3VpdGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKFVJQ29ubmVjdGlvblRlc3RTdWl0ZS5jbGFzcy5nZXROYW1lKCkpOwotCQkKLQkJc3VpdGUuYWRkVGVzdChOYXZpZ2F0aW9uVGVzdHMuc3VpdGUoKSk7Ci0JCQotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzL3Rlc3Qvb3JnL2VjbGlwc2UvcHRwL3JkdC91aS90ZXN0cy9uYXZpZ2F0aW9uL05hdmlnYXRpb25UZXN0cy5qYXZhIGIvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvdGVzdC9vcmcvZWNsaXBzZS9wdHAvcmR0L3VpL3Rlc3RzL25hdmlnYXRpb24vTmF2aWdhdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MDJjNzQuLjAwMDAwMDAKLS0tIGEvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkudGVzdHMvdGVzdC9vcmcvZWNsaXBzZS9wdHAvcmR0L3VpL3Rlc3RzL25hdmlnYXRpb24vTmF2aWdhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucmR0LnVpLnRlc3RzLm5hdmlnYXRpb247Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuQ0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNUTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1ROb2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5jb3JlLmRvbS5hc3QuSUFTVFRyYW5zbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5pbmRleC5JSW5kZXg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUubW9kZWwuSUxhbmd1YWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5jb3JlLm1vZGVsLklUcmFuc2xhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmludGVybmFsLmNvcmUubW9kZWwuQVNUQ2FjaGUuQVNUUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmludGVybmFsLmNvcmUucGFyc2VyLlBhcnNlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuaW50ZXJuYWwudWkuZWRpdG9yLkFTVFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5pbnRlcm5hbC51aS5lZGl0b3IuQ0VkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQudWkudGVzdHMudGV4dC5FZGl0b3JUZXN0SGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC51aS50ZXN0cy50ZXh0LnNlbGVjdGlvbi5DUFBTZWxlY3Rpb25UZXN0c0FueUluZGV4ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmludGVybmFsLnJkdC5jb3JlLmluZGV4LlJlbW90ZUZhc3RJbmRleGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5pbnRlcm5hbC5yZHQudWkuc2VhcmNoLmFjdGlvbnMuT3BlbkRlY2xhcmF0aW9uc0FjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUudGVzdHMuQ29ubmVjdGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlLnRlc3RzLlJlbW90ZVRlc3RQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZHQuc2VydmljZXMuY29yZS5TZXJ2aWNlTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5BYnN0cmFjdFRleHRFZGl0b3I7Ci0KLQotQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKLQotcHVibGljIGNsYXNzIE5hdmlnYXRpb25UZXN0cyBleHRlbmRzIENQUFNlbGVjdGlvblRlc3RzQW55SW5kZXhlciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1dBSVRfVElNRSA9IDEyMDAwMDsKLQotCS8qIEkgdGhpbmsgYSBsb3Qgb2YgdGhlIHRlc3RzIHRoYXQgZmFpbCBkbyBzbyBiZWNhdXNlIG9mIHR3byByZWFzb25zOgotCSAqIC0gSGVhZGVycyBhcmUgbm90IGJlaW5nIHNraXBwZWQgYXMgdGhleSBzaG91bGQgYmUsIAotCSAqICAKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBURVNUU19UT19SVU4gPSB7Ci0JCSJ0ZXN0QnVnOTMyODEiLAotCQkidGVzdEJ1ZzIwNzMyMCIsCi0JCSJ0ZXN0VGVtcGxhdGVDbGFzc01ldGhvZF8yMDczMjAiLAotCQkvLyJ0ZXN0QmFzaWNEZWZpbml0aW9uIiwgLy8gRkFJTCBjYW5ub3QgcmVwcm9kdWNlIGZhaWx1cmUKLQkJInRlc3RCYXNpY1RlbXBsYXRlSW5zdGFuY2VfMjA3MzIwIiwKLQkJInRlc3RCdWc4NjgyOUEiLAotCQkvLyJ0ZXN0Q1BQU3BlY0RlY2xzRGVmcyIsIC8vIEZBSUwgY2Fubm90IHJlcHJvZHVjZSBmYWlsdXJlCi0JCSJ0ZXN0QnVnMTY4NTMzIiwKLQkJInRlc3RCdWc5NTIyNSIsCi0JCS8vInRlc3RCdWc5NTIwMiIsIC8vIEZBSUwsIHNob3VsZCBub3QgZmFpbCB3aGVuIGhlYWRlcnMgYXJlIHNraXBwZWQgcHJvcGVybHkKLQkJInRlc3RCdWcxMDEyODciLAotCQkidGVzdEJ1ZzEwMjI1OCIsCi0JCSJ0ZXN0QnVnMTAzMzIzIiwKLQkJInRlc3RCdWc3ODM1NCIsCi0JCS8vInRlc3RCdWcxMDM2OTciLCAvLyBGQUlMIHRyeWluZyB0byB1c2UgbG9jYWwgcGF0aCB3aGljaCBmYWlscwotCQkvLyJ0ZXN0QnVnMTA4MjAyIiwgLy8gRkFJTAotCQkvLyJ0ZXN0Q05hdmlnYXRpb25JbkNwcFByb2plY3RfYnVnMTgzOTczIiwgLy8gRkFJTAotCQkvLyJ0ZXN0RnVuY1dpdGhUeXBlZGVmRm9yQW5vbnltb3VzU3RydWN0XzE5MDczMCIsIC8vIEZBSUwKLQkJLy8idGVzdEZ1bmNXaXRoVHlwZWRlZkZvckFub255bW91c0VudW1fMTkwNzMwIiwgLy8gRkFJTAotCQkidGVzdE1hY3JvTmF2aWdhdGlvbiIsCi0JCSJ0ZXN0TWFjcm9OYXZpZ2F0aW9uX0J1ZzIwODMwMCIsCi0JCSJ0ZXN0SW5jbHVkZU5hdmlnYXRpb24iLAotCQkvLyJ0ZXN0TmF2aWdhdGlvbkNwcENhbGxzQyIsIC8vIEZBSUwKLQkJLy8idGVzdE5hdmlnYXRpb25DQ2FsbHNDcHAiLCAvLyBGQUlMCi0JCSJ0ZXN0TmF2aWdhdGlvbkluRGVmaW5lZEV4cHJlc3Npb25fMjE1OTA2IiwKLQl9OwotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJLy9yZXR1cm4gc3VpdGUoTmF2aWdhdGlvblRlc3RzLmNsYXNzKTsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCQlmb3IoU3RyaW5nIHRlc3ROYW1lIDogVEVTVFNfVE9fUlVOKQotCQkJc3VpdGUuYWRkVGVzdChuZXcgTmF2aWdhdGlvblRlc3RzKHRlc3ROYW1lKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0JCi0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJuYXZpZ2F0aW9uX3Rlc3RfcHJvamVjdCI7Ci0JCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRFZGl0b3JJRCgpIHsKLQkJcmV0dXJuICJvcmcuZWNsaXBzZS5wZHQucmR0LnVpLmVkaXRvci5DRWRpdG9yIjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCB3YWl0VW50aWxGaWxlSXNJbmRleGVkKElJbmRleCBpbmRleCwgSUZpbGUgZmlsZSwgaW50IG1heG1pbGxpcykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVRocmVhZC5zbGVlcCgxMDAwMCk7Ci0gICAgICAgIENDb3JlUGx1Z2luLmdldEluZGV4TWFuYWdlcigpLmpvaW5JbmRleGVyKE1BWF9XQUlUX1RJTUUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCX0KLQotCXB1YmxpYyBOYXZpZ2F0aW9uVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSwgUmVtb3RlRmFzdEluZGV4ZXIuSUQpOwotCX0KLQkKLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSUFTVE5vZGUgdGVzdEYzKElGaWxlIGZpbGUsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHRocm93cyBQYXJzZXJFeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlpZiAob2Zmc2V0IDwgMCkKLQkJCXRocm93IG5ldyBQYXJzZXJFeGNlcHRpb24oIm9mZnNldCBjYW4gbm90IGJlIGxlc3MgdGhhbiAwIGFuZCB3YXMgIiArIG9mZnNldCk7IC8vJE5PTi1OTFMtMSQKLQkJCi0gICAgICAgIElXb3JrYmVuY2hQYWdlIHBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLSAgICAgICAgSUVkaXRvclBhcnQgcGFydCA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBwYXJ0ID0gcGFnZS5vcGVuRWRpdG9yKG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSksIGdldEVkaXRvcklEKCksIHRydWUpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIH0gY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocGFydCBpbnN0YW5jZW9mIENFZGl0b3IpIHsKLSAgICAgICAgCUNFZGl0b3IgZWRpdG9yPSAoQ0VkaXRvcikgcGFydDsKLSAgICAJCUVkaXRvclRlc3RIZWxwZXIuam9pblJlY29uY2lsZXIoRWRpdG9yVGVzdEhlbHBlci5nZXRTb3VyY2VWaWV3ZXIoZWRpdG9yKSwgMTAwLCA1MDAsIDEwKTsKLSAgICAgICAgICAgICgoQWJzdHJhY3RUZXh0RWRpdG9yKXBhcnQpLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuc2V0U2VsZWN0aW9uKG5ldyBUZXh0U2VsZWN0aW9uKG9mZnNldCxsZW5ndGgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmluYWwgT3BlbkRlY2xhcmF0aW9uc0FjdGlvbiBhY3Rpb24gPSAoT3BlbkRlY2xhcmF0aW9uc0FjdGlvbikgZWRpdG9yLmdldEFjdGlvbigiT3BlbkRlY2xhcmF0aW9ucyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBhY3Rpb24ucnVuU3luYygpOwotCQkJCi0gICAgICAgIAkvLyB1cGRhdGUgdGhlIGZpbGUvcGFydCB0byBwb2ludCB0byB0aGUgbmV3bHkgb3BlbmVkIElGaWxlL0lFZGl0b3JQYXJ0Ci0gICAgICAgICAgICBwYXJ0ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7IAotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSAocGFydCBpbnN0YW5jZW9mIENFZGl0b3IpOwotICAgICAgICAgICAgZWRpdG9yPSAoQ0VkaXRvcikgcGFydDsKLSAgICAJCUVkaXRvclRlc3RIZWxwZXIuam9pblJlY29uY2lsZXIoRWRpdG9yVGVzdEhlbHBlci5nZXRTb3VyY2VWaWV3ZXIoZWRpdG9yKSwgMTAwLCA1MDAsIDEwKTsKLQotICAgIAkJLy8gdGhlIGFjdGlvbiBhYm92ZSBzaG91bGQgaGlnaGxpZ2h0IHRoZSBkZWNsYXJhdGlvbiwgc28gbm93IHJldHJpZXZlIGl0IGFuZCB1c2UgdGhhdCBzZWxlY3Rpb24gdG8gZ2V0IHRoZSBJQVNUTmFtZSBzZWxlY3RlZCBvbiB0aGUgVFUKLSAgICAgICAgICAgIElTZWxlY3Rpb24gc2VsPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmluYWwgSUFTVE5hbWVbXSByZXN1bHQ9IHtudWxsfTsKLSAgICAgICAgICAgIGlmIChzZWwgaW5zdGFuY2VvZiBJVGV4dFNlbGVjdGlvbikgewotICAgICAgICAgICAgCWZpbmFsIElUZXh0U2VsZWN0aW9uIHRleHRTZWwgPSAoSVRleHRTZWxlY3Rpb24pc2VsOwotICAgICAgICAgICAgCUlUcmFuc2xhdGlvblVuaXQgdHUgPSAoSVRyYW5zbGF0aW9uVW5pdCllZGl0b3IuZ2V0SW5wdXRDRWxlbWVudCgpOwotICAgICAgICAJCUlTdGF0dXMgb2s9IEFTVFByb3ZpZGVyLmdldEFTVFByb3ZpZGVyKCkucnVuT25BU1QodHUsIEFTVFByb3ZpZGVyLldBSVRfSUZfT1BFTiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSwgbmV3IEFTVFJ1bm5hYmxlKCkgewotICAgICAgICAJCQlwdWJsaWMgSVN0YXR1cyBydW5PbkFTVChJTGFuZ3VhZ2UgbGFuZ3VhZ2UsIElBU1RUcmFuc2xhdGlvblVuaXQgYXN0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAkJCQlyZXN1bHRbMF09IGFzdC5nZXROb2RlU2VsZWN0b3IobnVsbCkuZmluZE5hbWUodGV4dFNlbC5nZXRPZmZzZXQoKSwgdGV4dFNlbC5nZXRMZW5ndGgoKSk7Ci0gICAgICAgIAkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLSAgICAgICAgCQkJfQotICAgICAgICAJCX0pOwotICAgICAgICAJCWFzc2VydFRydWUob2suaXNPSygpKTsKLQkJCQlyZXR1cm4gcmVzdWx0WzBdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0JCi0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvL3N1cGVyLnNldFVwKCk7Ci0JCQotCQlJV29ya2JlbmNoUGFnZSBwYWdlPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJSVZpZXdSZWZlcmVuY2VbXSByZWZzPSBwYWdlLmdldFZpZXdSZWZlcmVuY2VzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVmcy5sZW5ndGg7IGkrKykgewotCQkJSVZpZXdSZWZlcmVuY2Ugdmlld1JlZmVyZW5jZSA9IHJlZnNbaV07Ci0JCQlwYWdlLnNldFBhcnRTdGF0ZSh2aWV3UmVmZXJlbmNlLCBJV29ya2JlbmNoUGFnZS5TVEFURV9SRVNUT1JFRCk7Ci0JCX0KLQkJCi0JCVVSSSBwcm9qZWN0Um9vdFVSSSA9IENvbm5lY3Rpb25NYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0V29ya3NwYWNlVVJJKFBST0pFQ1RfTkFNRSk7Ci0JCVJlbW90ZVRlc3RQcm9qZWN0IHJlbW90ZVByb2plY3QgPSBuZXcgUmVtb3RlVGVzdFByb2plY3QoUFJPSkVDVF9OQU1FLCBwcm9qZWN0Um9vdFVSSSk7Ci0JCQotCQlDb25uZWN0aW9uTWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlc2V0U2VydmljZU1vZGVsKHJlbW90ZVByb2plY3QuZ2V0TmFtZSgpKTsKLQkJU2VydmljZU1vZGVsTWFuYWdlci5nZXRJbnN0YW5jZSgpLnByaW50U2VydmljZU1vZGVsKCk7Ci0JCQotCQlmQ1Byb2plY3QgPSByZW1vdGVQcm9qZWN0LmdldENQcm9qZWN0KCk7Ci0JCi0JCUNDb3JlUGx1Z2luLmdldEluZGV4TWFuYWdlcigpLnNldEluZGV4ZXJJZChmQ1Byb2plY3QsIFJlbW90ZUZhc3RJbmRleGVyLklEKTsKLQl9Ci0JCi0JCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsgCi0JfQotCi19CmRpZmYgLS1naXQgYS9yZWxlbmcvLmN2c2lnbm9yZSBiL3JlbGVuZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTRlZGY2Li4wMDAwMDAwCi0tLSBhL3JlbGVuZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnByb2plY3QKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZS8ucHJvamVjdCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhhNmJiYy4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLWZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy1mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjZlOTguLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy1mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sCi1nZW5lcmF0ZUZlYXR1cmVWZXJzaW9uU3VmZml4PXRydWUKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLWZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MTA3NzUuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAwNSwyMDA4IElCTSBDb3Jwb3JhdGlvbgotIwotIyBmZWF0dXJlcy5wcm9wZXJ0aWVzCi0jIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAotIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1QVFAgUGFyYWxsZWwgTGFuZ3VhZ2UgRGV2ZWxvcG1lbnQgVG9vbHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPUVjbGlwc2UgUFRQIFVwZGF0ZSBTaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1BZGRzIGEgcmFuZ2Ugb2Ygc3RhdGljIGFuYWx5c2lzIGFuZCBwcm9ncmFtbWluZyBhc3Npc3RhbmNlIHRvb2xzLgotCi0jIGNvcHlyaWdodAotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiwyMDA4IElCTVxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLQotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLU1hcmNoIDE3LCAyMDA1XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy1mZWF0dXJlL2ZlYXR1cmUueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy1mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2Y5NjUzLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMtZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYyIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIzLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucGxkdC5jb21tb24iPgotCi0gICA8ZGVzY3JpcHRpb24+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2U+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9wdHAvcmVsZWFzZXMvMy4wIi8+Ci0gICA8L3VybD4KLQotICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jZHQuY29yZSIgdmVyc2lvbj0iNC4wLjIiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNkdC51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmhlbHAiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jZHQuZG9jLnVzZXIiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucGxkdC5jb21tb24iLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5wYXJzZXIudXBjIiB2ZXJzaW9uPSI1LjAuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLWZlYXR1cmUvbGljZW5zZS5odG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy1mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhZjk2Ni4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLWZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgotPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Ci08cD5NYXJjaCAxNywgMjAwNTwvcD4KLQotPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgotCi08cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKLSAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCi0gICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgotICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+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+Ci0JPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KLTwvdWw+Ci0KLTxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCi1jb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KLQotPGgzPkNyeXB0b2dyYXBoeTwvaDM+Ci0KLTxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KLSAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAotICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+Ci0gICAKLTxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvLmN2c2lnbm9yZSBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkOTQyOWUuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotcmVzdWx0cwotdG9vbHMKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMDFkZTcuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5wdHAucmVsZW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvYnVpbGQuc2ggYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9idWlsZC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE5Nzg4Yi4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9idWlsZC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0jIGV4cG9ydCBkaXNwbGF5IGZvciBydW5uaW5nIHRoZSB0ZXN0cwotZXhwb3J0IERJU1BMQVk9OjEKLQotIyBzZXQgdXAgdG8gdXNlIHRoZSBKYXZhIDUgSlJFCi1leHBvcnQgUEFUSD0vb3B0L3B1YmxpYy9jb21tb24vaWJtLWphdmEyLXBwYy01MC9iaW46JFBBVEgKLQotIyBtYWtlIHN1cmUgd2UncmUgaW4gdGhlIHJlbGVuZyBwcm9qZWN0IGRpciAKLWNkIGBkaXJuYW1lICQwYAotCi11bWFzayAwMDIyCi0KLSMgQ2hlY2tvdXQgYmFzZWJ1aWxkZXIgdG8gcnVuIHRoZSBidWlsZAotbWtkaXIgLXAgdG9vbHMKLWNkIHRvb2xzCi1jdnMgLWQ6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L2VjbGlwc2UgXAotCWNoZWNrb3V0IC1yIFIzNV9SQzIgb3JnLmVjbGlwc2UucmVsZW5nLmJhc2VidWlsZGVyCi1jZCAuLgotCi0jIExldCdzIGdvIQotamF2YSAtamFyIHRvb2xzL29yZy5lY2xpcHNlLnJlbGVuZy5iYXNlYnVpbGRlci9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXIuamFyIFwKLQktd3MgZ3RrIC1hcmNoIHBwYyAtb3MgbGludXggLWFwcGxpY2F0aW9uIG9yZy5lY2xpcHNlLmFudC5jb3JlLmFudFJ1bm5lciAkKgotCi1leGl0IDAKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL2J1aWxkLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI2N2VkMS4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MzggKzAsMCBAQAotPHByb2plY3QgbmFtZT0iUFRQIiBkZWZhdWx0PSJuaWdodGx5Ij4KLQk8dGFyZ2V0IG5hbWU9ImhpIj4KLQkJPGVjaG8gbWVzc2FnZT0iJHtlY2xpcHNlLmhvbWV9Ii8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iemlwcyx0ZXN0Ii8+Ci0JPHRhcmdldCBuYW1lPSJuaWdodGx5IiBkZXBlbmRzPSJ0YWcsemlwcyxzaWduLHRlc3QsY29weSIvPgotCTx0YXJnZXQgbmFtZT0idGVzdGJ1aWxkIiBkZXBlbmRzPSJ6aXBzLHRlc3QsY29weSIvPgotCTx0YXJnZXQgbmFtZT0iYnVpbGRjb3B5IiBkZXBlbmRzPSJ6aXBzLGNvcHkiLz4KLQkKLQk8dGFyZ2V0IG5hbWU9ImluaXQiPgotCQk8dG91Y2ggZmlsZT0iJHt1c2VyLmhvbWV9Ly5jdnNwYXNzIiAvPgotCQk8dHN0YW1wLz4KLQkJPHByb3BlcnR5IG5hbWU9ImVjbGlwc2VEaXN0IiB2YWx1ZT0iL2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2Rvd25sb2Fkcy9kcm9wcy9SLTMuNS0yMDA5MDYxMTE1NDAvZWNsaXBzZS1TREstMy41LWxpbnV4LWd0ay1wcGMudGFyLmd6Ii8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJjZHREaXN0IiB2YWx1ZT0iL2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9jZHQvYnVpbGRzLzYuMS4wL0kuSTIwMDkwNzI0MDgwNS9jZHQtbWFzdGVyLTYuMS4wLUkyMDA5MDcyNDA4MDUuemlwIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJteWx5bkRpc3QiIHZhbHVlPSIvaG9tZS9kYXRhL2h0dHBkL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL215bHluL3VwZGF0ZS9nYWxpbGVvL215bHluLTMuMi4wLkkyMDA5MDUyMC0yMzAwLWUzLjQuemlwIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJyc2VEaXN0IiB2YWx1ZT0iL2hvbWUvZGF0YS9odHRwZC9kb3dubG9hZC5lY2xpcHNlLm9yZy9kc2RwL3RtL2Rvd25sb2Fkcy9kcm9wcy9SLTMuMS0yMDA5MDYxNzE0MDAvUlNFLVNESy0zLjEuemlwIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ0YXVKYXJzIiB2YWx1ZT0iJHt1c2VyLmhvbWV9L3RhdV9qYXJzLnppcCIvPgotCQk8cHJvcGVydHkgbmFtZT0iYnJhbmNoVmVyc2lvbiIgdmFsdWU9IjMuMC4wIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ0aW1lc3RhbXAiIHZhbHVlPSIke0RTVEFNUH0ke1RTVEFNUH0iIC8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJmb3JjZUNvbnRleHRRdWFsaWZpZXIiIHZhbHVlPSIke3RpbWVzdGFtcH0iLz4KLQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkaW5nT1NHaSIgdmFsdWU9InRydWUiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkRGlyZWN0b3J5IiB2YWx1ZT0iJHtiYXNlZGlyfS9yZXN1bHRzIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJjb3B5VG9EaXIiIHZhbHVlPSIvaG9tZS93d3cvdG9vbHMvcHRwL2J1aWxkcy8ke2JyYW5jaFZlcnNpb259Ii8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0RGlyZWN0b3J5IiB2YWx1ZT0iJHtidWlsZERpcmVjdG9yeX0vdGVzdCIvPgotCQk8cHJvcGVydHkgbmFtZT0iYmFzZUxvY2F0aW9uIiB2YWx1ZT0iJHtidWlsZERpcmVjdG9yeX0vZWNsaXBzZSIvPgotCQk8cHJvcGVydHkgbmFtZT0icGRlLmJ1aWxkLnNjcmlwdHMiIHZhbHVlPSIke2VjbGlwc2UucGRlYnVpbGQuc2NyaXB0c30iLz4KLQkJPHByb3BlcnR5IG5hbWU9ImNvbGxlY3RpbmdGb2xkZXIiIHZhbHVlPSJlY2xpcHNlIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlUHJlZml4IiB2YWx1ZT0iZWNsaXBzZSIvPgotCQk8cHJvcGVydHkgbmFtZT0iYnVpbGRUeXBlIiB2YWx1ZT0iSSIgLz4KLQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkSWQiIHZhbHVlPSIke2J1aWxkVHlwZX0ke3RpbWVzdGFtcH0iLz4KLQkJPHByb3BlcnR5IG5hbWU9InppcHNkaXIiIHZhbHVlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkVHlwZX0uJHtidWlsZElkfSIvPgotCQk8cHJvcGVydHkgbmFtZT0ibWFzdGVyRmlsZSIgdmFsdWU9InB0cC1tYXN0ZXItJHticmFuY2hWZXJzaW9ufS0ke2J1aWxkSWR9LnppcCIvPgotCQk8cHJvcGVydHkgbmFtZT0iZWNsaXBzZVRlc3QiIHZhbHVlPSJvcmcuZWNsaXBzZS50ZXN0XzMuMi4wIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJtYWlsdG8iIHZhbHVlPSJnLndhdHNvbkBjb21wdXRlci5vcmciLz4KLQkJPHByb3BlcnR5IG5hbWU9ImVjbGlwc2VSb290IiB2YWx1ZT0iOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC9lY2xpcHNlIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJiYXNlb3MiIHZhbHVlPSIke29zZ2kub3N9Ii8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJiYXNld3MiIHZhbHVlPSIke29zZ2kud3N9Ii8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJiYXNlYXJjaCIgdmFsdWU9IiR7b3NnaS5hcmNofSIvPgotCQk8cHJvcGVydHkgbmFtZT0idGFnYnJhbmNoIiB2YWx1ZT0iIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ0YWduYW1lIiB2YWx1ZT0idiR7dGltZXN0YW1wfSIvPgotCQk8cHJvcGVydHkgbmFtZT0idGVzdFJlcG9ydHMiIHZhbHVlPSIke3ppcHNkaXJ9L3Rlc3RSZXBvcnRzIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJqdW5pdC1yZXBvcnQtb3V0cHV0IiB2YWx1ZT0iJHt0ZXN0UmVwb3J0c30iLz4KLQkJPGNvbmRpdGlvbiBwcm9wZXJ0eT0ib25XaW5kb3dzIj4KLQkJCTxvcyBmYW1pbHk9IndpbmRvd3MiLz4KLQkJPC9jb25kaXRpb24+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9Ii8+Ci0JCTxta2RpciBkaXI9IiR7dGVzdFJlcG9ydHN9Ii8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJmZXRjaCIgZGVwZW5kcz0iaW5pdCI+Ci0JCTxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7cGRlLmJ1aWxkLnNjcmlwdHN9IiB0YXJnZXQ9InByZUJ1aWxkIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZGVyIiB2YWx1ZT0iJHtiYXNlZGlyfS9tYXN0ZXIiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7cGRlLmJ1aWxkLnNjcmlwdHN9IiB0YXJnZXQ9ImZldGNoIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZGVyIiB2YWx1ZT0iJHtiYXNlZGlyfS9tYXN0ZXIiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJ1bnppcCIgZGVwZW5kcz0iaW5pdCIgdW5sZXNzPSJkb250VW56aXAiPgotCQk8dW50YXIgc3JjPSIke2VjbGlwc2VEaXN0fSIgZGVzdD0iJHtidWlsZERpcmVjdG9yeX0iIGNvbXByZXNzaW9uPSJnemlwIi8+Ci0JCTx1bnppcCBzcmM9IiR7cnNlRGlzdH0iIGRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9Ii8+Ci0JCTx1bnppcCBzcmM9IiR7Y2R0RGlzdH0iIGRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9L2VjbGlwc2UiLz4KLQkJPHVuemlwIHNyYz0iJHtteWx5bkRpc3R9IiBkZXN0PSIke2J1aWxkRGlyZWN0b3J5fS9lY2xpcHNlIi8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJ6aXBzIiBkZXBlbmRzPSJpbml0LHVuemlwIj4KLQkJPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtwZGUuYnVpbGQuc2NyaXB0c30iPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkZXIiIHZhbHVlPSIke2Jhc2VkaXJ9L21hc3RlciIgLz4KLQkJPC9hbnQ+Ci0JCTxjb25jYXQgZGVzdGZpbGU9IiR7emlwc2Rpcn0vY29tcGlsZWxvZy50eHQiPgotCQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zIiBpbmNsdWRlcz0iKiovKi5iaW4ubG9nIi8+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMiIGluY2x1ZGVzPSIqKi8qQGRvdC5sb2ciLz4KLQkJPC9jb25jYXQ+Ci0JCTxsb2FkZmlsZSBwcm9wZXJ0eT0iY29tcGlsZUxvZyIgc3JjRmlsZT0iJHt6aXBzZGlyfS9jb21waWxlbG9nLnR4dCIvPgotCQk8Y29uZGl0aW9uIHByb3BlcnR5PSJoYXNFcnJvcnMiPgotCQkJPGNvbnRhaW5zIHN0cmluZz0iJHtjb21waWxlTG9nfSIgc3Vic3RyaW5nPSIgRVJST1IiLz4KLQkJPC9jb25kaXRpb24+Ci0JCTxtb3ZlIGZpbGU9IiR7emlwc2Rpcn0vJHttYXN0ZXJGaWxlfSIgdG9kaXI9IiR7YnVpbGREaXJlY3Rvcnl9Ii8+Ci0JCTx1bnppcCBzcmM9IiR7YnVpbGREaXJlY3Rvcnl9LyR7bWFzdGVyRmlsZX0iIGRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9L3NpdGUiLz4KLQkJPG1vdmUgZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vZWNsaXBzZS9lcGwtdjEwLmh0bWwiIHRvZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9zaXRlL2VjbGlwc2UiLz4KLQkJPG1vdmUgZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vZWNsaXBzZS9ub3RpY2UuaHRtbCIgdG9kaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3NpdGUvZWNsaXBzZSIvPgotCQk8Y29weSBmaWxlPSJidWlsZHNpdGUueG1sIiB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3NpdGUvZWNsaXBzZS9zaXRlLnhtbCIvPgotCQk8cmVwbGFjZSBmaWxlPSIke2J1aWxkRGlyZWN0b3J5fS9zaXRlL2VjbGlwc2Uvc2l0ZS54bWwiPgotCQkJPHJlcGxhY2VmaWx0ZXIgdG9rZW49IkBidWlsZFZlcnNpb25AIiB2YWx1ZT0iJHticmFuY2hWZXJzaW9ufS4ke3RpbWVzdGFtcH0iLz4KLQkJPC9yZXBsYWNlPgotCQk8Y29weSBmaWxlPSJwYWNrLnByb3BlcnRpZXMiIHRvZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9zaXRlL2VjbGlwc2UiLz4KLQotCQk8emlwIGRlc3RmaWxlPSIke3ppcHNkaXJ9LyR7bWFzdGVyRmlsZX0iCi0JCQliYXNlZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9zaXRlL2VjbGlwc2UiLz4KLQk8L3RhcmdldD4KLQotCTx0YXJnZXQgbmFtZT0ic2lnbiIgZGVwZW5kcz0iaW5pdCIgdW5sZXNzPSJoYXNFcnJvcnMiPgotCQk8ZXhlYyBleGVjdXRhYmxlPSJzaWduIj4KLQkJCTxhcmcgdmFsdWU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRUeXBlfS4ke2J1aWxkSWR9LyR7bWFzdGVyRmlsZX0iLz4KLQkJCTxhcmcgdmFsdWU9Im5vbWFpbCIvPgotCQkJPGFyZyB2YWx1ZT0iJHtidWlsZERpcmVjdG9yeX0vc2lnbmVkIi8+Ci0JCTwvZXhlYz4KLQkJPHdhaXRmb3IgbWF4d2FpdD0iMzAiIG1heHdhaXR1bml0PSJtaW51dGUiPgotCQkJPGF2YWlsYWJsZSBmaWxlPSIke2J1aWxkRGlyZWN0b3J5fS9zaWduZWQvJHttYXN0ZXJGaWxlfSIvPgotCQk8L3dhaXRmb3I+Ci0JCTxtb3ZlIGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3NpZ25lZC8ke21hc3RlckZpbGV9IiB0b2Rpcj0iJHt6aXBzZGlyfSIvPgotCTwvdGFyZ2V0PgotCTx0YXJnZXQgbmFtZT0idGVzdCIgZGVwZW5kcz0iaW5pdCIgdW5sZXNzPSJoYXNFcnJvcnMiLz4KLQk8dGFyZ2V0IG5hbWU9ImNvcHkiIGRlcGVuZHM9ImluaXQiIHVubGVzcz0iaGFzRXJyb3JzIj4KLQkJPG1rZGlyIGRpcj0iJHtjb3B5VG9EaXJ9LyR7YnVpbGRUeXBlfS4ke2J1aWxkSWR9Ii8+Ci0JCTxjb3B5IHRvZGlyPSIke2NvcHlUb0Rpcn0vJHtidWlsZFR5cGV9LiR7YnVpbGRJZH0iPgotCQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkVHlwZX0uJHtidWlsZElkfSIvPgotCQk8L2NvcHk+Ci0JCTwhLS0gQ3JlYXRlIHN5bWxpbmsgdG8gbGF0ZXN0IGJ1aWxkIC0tPgotCQk8c3ltbGluayBhY3Rpb249ImRlbGV0ZSIgbGluaz0iJHtjb3B5VG9EaXJ9L2xhdGVzdCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxzeW1saW5rIGxpbms9IiR7Y29weVRvRGlyfS9sYXRlc3QiIHJlc291cmNlPSIke2NvcHlUb0Rpcn0vJHtidWlsZFR5cGV9LiR7YnVpbGRJZH0iIG92ZXJ3cml0ZT0idHJ1ZSIvPgotCQk8c3ltbGluayBhY3Rpb249ImRlbGV0ZSIgbGluaz0iJHtjb3B5VG9EaXJ9L3B0cC1tYXN0ZXItJHticmFuY2hWZXJzaW9ufS1sYXRlc3QuemlwIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQkJPHN5bWxpbmsgbGluaz0iJHtjb3B5VG9EaXJ9L3B0cC1tYXN0ZXItJHticmFuY2hWZXJzaW9ufS1sYXRlc3QuemlwIiByZXNvdXJjZT0iJHtjb3B5VG9EaXJ9LyR7YnVpbGRUeXBlfS4ke2J1aWxkSWR9LyR7bWFzdGVyRmlsZX0iIG92ZXJ3cml0ZT0idHJ1ZSIvPgotCQk8c3ltbGluayBhY3Rpb249ImRlbGV0ZSIgbGluaz0iJHtjb3B5VG9EaXJ9L3JkdC1zZXJ2ZXItdW5peC0xLjAtbGF0ZXN0LnRhciIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxzeW1saW5rIGxpbms9IiR7Y29weVRvRGlyfS9yZHQtc2VydmVyLXVuaXgtMS4wLWxhdGVzdC50YXIiIHJlc291cmNlPSIke2NvcHlUb0Rpcn0vJHtidWlsZFR5cGV9LiR7YnVpbGRJZH0vcmR0LXNlcnZlci11bml4LTEuMC50YXIiIG92ZXJ3cml0ZT0idHJ1ZSIvPgotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0idGFnb25lIj4KLQkJPGN2cyBjdnNyb290PSIvY3Zzcm9vdC90b29scyIgY29tbWFuZD0icnRhZyAke3RhZ2JyYW5jaH0gJHt0YWduYW1lfSAke3RhZ21vZHVsZX0iLz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9InRhZyIgZGVwZW5kcz0iaW5pdCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5tYXN0ZXIiLz4KLQkJPC9hbnRjYWxsPgotCQkKLQkJPCEtLUZlYXR1cmVzLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnV0aWxzLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAuY29yZS1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVtb3RlLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVtb3RlLnJlbW90ZXRvb2xzLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVtb3RlLnJzZS1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMtZmVhdHVyZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwtZmVhdHVyZSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5wZS1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpY2gyLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcGVubXBpLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5leHRlcm5hbC1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnNkbS1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC5sYXBpLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGVyZi1mZWF0dXJlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnBlcmYudGF1LWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS5mb3J0cmFuLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZHQtZmVhdHVyZSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnNlcnZpY2VzLWZlYXR1cmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCQotCQk8IS0tUGx1Z2lucy0tPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLmNvcmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnV0aWxzLmNvcmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAudXRpbHMudWkiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnByb3h5LnByb3RvY29sIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5yZW1vdGUucmVtb3RldG9vbHMuY29yZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAucmVtb3RlLnJlbW90ZXRvb2xzLnVpIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5yc2UuY29yZSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5yZW1vdGUucnNlLnVpIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5jb3JlIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLmxsLmNvcmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwuaGVscCIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5sbC5wcm94eSIvPgotCQk8L2FudGNhbGw+CQkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwudWkiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLmNvcmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLmhlbHAiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ucGUucHJveHkiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLnVpIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waWNoMi5jb3JlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waWNoMi5wcm94eSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGljaDIudWkiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm9wZW5tcGkuY29yZSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5vcGVubXBpLnVpIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5ybS5yZW1vdGUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS51aSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC51aSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcuY29yZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvZGVidWcvb3JnLmVjbGlwc2UucHRwLmRlYnVnLnNkbSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtLmNvcmUiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvZGVidWcvb3JnLmVjbGlwc2UucHRwLmRlYnVnLnNkbS51aSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcudWkiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvZGVidWcvb3JnLmVjbGlwc2UucHRwLmRlYnVnLnNkbSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAucHJveHkiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnV0aWxzIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy5jb3JlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMuZW52aXJvbm1lbnQuY29yZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzLmVudmlyb25tZW50LmdlbmVyaWNob3N0Ii8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy5lbnZpcm9ubWVudC5sYXVuY2hlciIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzLmVudmlyb25tZW50LnVpIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy5wcmVmZXJlbmNlcyIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMudXRpbHMiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAubGF1bmNoIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9kb2Mvb3JnLmVjbGlwc2UucHRwLmhlbHAiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQuY29tbW9uIi8+Ci0JCTwvYW50Y2FsbD4JCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0LmhlbHAiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQubGFwaSIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuYW5hbHlzaXMiLz4KLQkJPC9hbnRjYWxsPgkJCQotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5hbmFseXNpcy5jZHQiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5jb3JlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucGxkdC5vcGVubXAuYW5hbHlzaXMiLz4KLQkJPC9hbnRjYWxsPgkJCi0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQub3Blbm1wLmNvcmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0Lm9wZW5tcC51aS5wdiIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQud2l6YXJkcyIvPgotCQk8L2FudGNhbGw+CQkKLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC90b29scy9wZXJmL29yZy5lY2xpcHNlLnB0cC5wZXJmIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC90b29scy9wZXJmL29yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuamFycyIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUucGFwaXNlbGVjdCIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUucGVyZmRtZiIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuc2VsaW5zdCIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuc2VsaW5zdGZvcnQiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3Rvb2xzL3BlcmYvb3JnLmVjbGlwc2UucHRwLnBlcmYudG9vbG9wdHMiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUucmVtb3RlamFycyIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS5zdHVicyIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQuc2VydmljZXMiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnVpIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5kb2MudXNlciIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5haXgucHBjIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLmxpbnV4LnBwYyIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5saW51eC54ODYiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAubGludXgueDg2XzY0Ii8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ0YWdvbmUiPgotCQkJPHBhcmFtIG5hbWU9InRhZ21vZHVsZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLm1hY29zeC5wcGMiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAubWFjb3N4Lng4NiIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi5wYXJhbGxlbCIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0idGFnb25lIj4KLQkJCTxwYXJhbSBuYW1lPSJ0YWdtb2R1bGUiIHZhbHVlPSJvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUucGFwaXRlc3QiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUudGVzdHMiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LnNlcnZpY2VzLnRlc3QiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnNlcnZpY2VzLmNvcmUiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnNlcnZpY2VzLnRlc3QiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InRhZ29uZSI+Ci0JCQk8cGFyYW0gbmFtZT0idGFnbW9kdWxlIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnNlcnZpY2VzLnVpIi8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL2J1aWxkc2l0ZS54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9idWlsZHNpdGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2ExNDVlLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL2J1aWxkc2l0ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNpdGU+Ci0JPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL3B0cC9yZWxlYXNlcy8zLjAiPgotCQlQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSB1cGRhdGUgc2l0ZSAtIFJlbGVhc2UgMy4wCi0JPC9kZXNjcmlwdGlvbj4KLQk8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnB0cF9AYnVpbGRWZXJzaW9uQC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5wdHAiIHZlcnNpb249IkBidWlsZFZlcnNpb25AIj4KLQkJPGNhdGVnb3J5IG5hbWU9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIvPgotCTwvZmVhdHVyZT4KLQk8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnB0cC5jb3JlX0BidWlsZFZlcnNpb25ALmphciIgaWQ9Im9yZy5lY2xpcHNlLnB0cC5jb3JlIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAuc2VydmljZXNfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLnNlcnZpY2VzIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAudXRpbHNfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLnV0aWxzIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHNfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLmxsX0BidWlsZFZlcnNpb25ALmphciIgaWQ9Im9yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwiIHZlcnNpb249IkBidWlsZFZlcnNpb25AIj4KLQkJPGNhdGVnb3J5IG5hbWU9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIvPgotCTwvZmVhdHVyZT4KLQk8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ucGVfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLmlibS5wZSIgdmVyc2lvbj0iQGJ1aWxkVmVyc2lvbkAiPgotCQk8Y2F0ZWdvcnkgbmFtZT0iUGFyYWxsZWwgVG9vbHMgUGxhdGZvcm0gMy4wIi8+Ci0JPC9mZWF0dXJlPgotCTxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5yZW1vdGV0b29sc19AYnVpbGRWZXJzaW9uQC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5wdHAucmVtb3RlLnJlbW90ZXRvb2xzIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAucmVtb3RlLnJzZV9AYnVpbGRWZXJzaW9uQC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5wdHAucmVtb3RlLnJzZSIgdmVyc2lvbj0iQGJ1aWxkVmVyc2lvbkAiPgotCQk8Y2F0ZWdvcnkgbmFtZT0iUGFyYWxsZWwgVG9vbHMgUGxhdGZvcm0gMy4wIi8+Ci0JPC9mZWF0dXJlPgotCTxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UucHRwLmRlYnVnLnNkbV9AYnVpbGRWZXJzaW9uQC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAuZXh0ZXJuYWxfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLmV4dGVybmFsIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAucmVtb3RlX0BidWlsZFZlcnNpb25ALmphciIgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZW1vdGUiIHZlcnNpb249IkBidWlsZFZlcnNpb25AIj4KLQkJPGNhdGVnb3J5IG5hbWU9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIvPgotCTwvZmVhdHVyZT4KLQk8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnB0cC5ybS5tcGljaDJfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLm1waWNoMiIgdmVyc2lvbj0iQGJ1aWxkVmVyc2lvbkAiPgotCQk8Y2F0ZWdvcnkgbmFtZT0iUGFyYWxsZWwgVG9vbHMgUGxhdGZvcm0gMy4wIi8+Ci0JPC9mZWF0dXJlPgotCTxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UucHRwLnJtLm9wZW5tcGlfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLm9wZW5tcGkiIHZlcnNpb249IkBidWlsZFZlcnNpb25AIj4KLQkJPGNhdGVnb3J5IG5hbWU9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIvPgotCTwvZmVhdHVyZT4KLQk8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnB0cC5wbGR0X0BidWlsZFZlcnNpb25ALmphciIgaWQ9Im9yZy5lY2xpcHNlLnB0cC5wbGR0IiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5sYXBpX0BidWlsZFZlcnNpb25ALmphciIgaWQ9Im9yZy5lY2xpcHNlLnB0cC5wbGR0LmxhcGkiIHZlcnNpb249IkBidWlsZFZlcnNpb25AIj4KLQkJPGNhdGVnb3J5IG5hbWU9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIvPgotCTwvZmVhdHVyZT4KLQk8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwY19AYnVpbGRWZXJzaW9uQC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMiIHZlcnNpb249IkBidWlsZFZlcnNpb25AIj4KLQkJPGNhdGVnb3J5IG5hbWU9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIvPgotCTwvZmVhdHVyZT4KLQk8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnB0cC5wZXJmX0BidWlsZFZlcnNpb25ALmphciIgaWQ9Im9yZy5lY2xpcHNlLnB0cC5wZXJmIiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXVfQGJ1aWxkVmVyc2lvbkAuamFyIiBpZD0ib3JnLmVjbGlwc2UucHRwLnBlcmYudGF1IiB2ZXJzaW9uPSJAYnVpbGRWZXJzaW9uQCI+Ci0JCTxjYXRlZ29yeSBuYW1lPSJQYXJhbGxlbCBUb29scyBQbGF0Zm9ybSAzLjAiLz4KLQk8L2ZlYXR1cmU+Ci0JPGZlYXR1cmUgaWQ9Im9yZy5lY2xpcHNlLnB0cC5yZHQiIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UucHRwLnJkdF9AYnVpbGRWZXJzaW9uQC5qYXIiIHZlcnNpb249IkBidWlsZFZlcnNpb25AIj4KLQkJPGNhdGVnb3J5IG5hbWU9IlJlbW90ZSBEZXZlbG9wbWVudCBUb29scyIvPgotCTwvZmVhdHVyZT4KLQk8Y2F0ZWdvcnktZGVmIG5hbWU9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIgbGFiZWw9IlBhcmFsbGVsIFRvb2xzIFBsYXRmb3JtIDMuMCIvPgotCTxjYXRlZ29yeS1kZWYgbmFtZT0iUmVtb3RlIERldmVsb3BtZW50IFRvb2xzIiBsYWJlbD0iUmVtb3RlIERldmVsb3BtZW50IFRvb2xzIi8+Ci08L3NpdGU+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9tYXBzL3B0cC5tYXAgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9tYXBzL3B0cC5tYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOGQ2MjEuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvbWFwcy9wdHAubWFwCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSEgVGhlIG1hc3RlcgotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAubWFzdGVyPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLm1hc3RlcgotCi0hIFBUUCBmZWF0dXJlcwotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHA9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAtZmVhdHVyZQotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAudXRpbHM9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAudXRpbHMtZmVhdHVyZQotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAuY29yZT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5jb3JlLWZlYXR1cmUKLWZlYXR1cmVAb3JnLmVjbGlwc2UucHRwLnJlbW90ZT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZW1vdGUtZmVhdHVyZQotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAucmVtb3RlLnJlbW90ZXRvb2xzPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5yZW1vdGV0b29scy1mZWF0dXJlCi1mZWF0dXJlQG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUucnNlPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5yc2UtZmVhdHVyZQotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHM9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMtZmVhdHVyZQotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAucm0uaWJtLmxsPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5sbC1mZWF0dXJlCi1mZWF0dXJlQG9yZy5lY2xpcHNlLnB0cC5ybS5pYm0ucGU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLWZlYXR1cmUKLWZlYXR1cmVAb3JnLmVjbGlwc2UucHRwLnJtLm1waWNoMj1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5tcGljaDItZmVhdHVyZQotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAucm0ub3Blbm1waT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcGVubXBpLWZlYXR1cmUKLWZlYXR1cmVAb3JnLmVjbGlwc2UucHRwLmV4dGVybmFsPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLmV4dGVybmFsLWZlYXR1cmUKLWZlYXR1cmVAb3JnLmVjbGlwc2UucHRwLmRlYnVnLnNkbT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5zZG0tZmVhdHVyZQotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAuc2VydmljZXM9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAuc2VydmljZXMtZmVhdHVyZQotCi0hIFBMRFQgZmVhdHVyZXMKLWZlYXR1cmVAb3JnLmVjbGlwc2UucHRwLnBsZHQ9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC1mZWF0dXJlCi1mZWF0dXJlQG9yZy5lY2xpcHNlLnB0cC5wbGR0LmxhcGk9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGxkdC5sYXBpLWZlYXR1cmUKLWZlYXR1cmVAb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLWZlYXR1cmUKLQotISBQVEYgZmVhdHVyZXMKLWZlYXR1cmVAb3JnLmVjbGlwc2UucHRwLnBlcmY9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucGVyZi1mZWF0dXJlCi1mZWF0dXJlQG9yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS1mZWF0dXJlCi1mZWF0dXJlQG9yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS5mb3J0cmFuPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnBlcmYudGF1LmZvcnRyYW4tZmVhdHVyZQotCi0hIFJEVCBmZWF0dXJlcwotZmVhdHVyZUBvcmcuZWNsaXBzZS5wdHAucmR0PUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJkdC1mZWF0dXJlCi0KLSEgUFRQIFBsdWdpbnMKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHA9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAuY29yZT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAuY29yZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC51dGlscy5jb3JlPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC51dGlscy5jb3JlCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnV0aWxzLnVpPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC51dGlscy51aQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wcm94eS5wcm90b2NvbD1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAucHJveHkucHJvdG9jb2wKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucmVtb3RlLmNvcmU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJlbW90ZS5yZW1vdGV0b29scy5jb3JlPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5yZW1vdGUucmVtb3RldG9vbHMuY29yZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUucmVtb3RldG9vbHMudWk9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5yZW1vdGV0b29scy51aQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUucnNlLmNvcmU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5yc2UuY29yZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUucnNlLnVpPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5yZW1vdGUucnNlLnVpCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAucmVtb3RlLnVpCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJtLmNvcmU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uY29yZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwuY29yZT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwuY29yZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwuaGVscD1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwuaGVscAotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwucHJveHk9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLmxsLnByb3h5Ci1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJtLmlibS5sbC51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0ubGwudWkKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLmNvcmU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLmNvcmUKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLmhlbHA9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLmhlbHAKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLnByb3h5PUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5wZS5wcm94eQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5ybS5pYm0ucGUudWk9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLnBlLnVpCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJtLm1waS5vcGVubXBpLmNvcmU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm9wZW5tcGkuY29yZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkub3Blbm1waS51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkub3Blbm1waS51aQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5ybS5yZW1vdGU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL2NvcmUvb3JnLmVjbGlwc2UucHRwLnJtLnJlbW90ZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5ybS51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS51aQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAudWkKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAuZGVidWcuY29yZT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvZGVidWcvb3JnLmVjbGlwc2UucHRwLmRlYnVnLmNvcmUKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLmRlYnVnLnNkbS5jb3JlPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtLmNvcmUKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtLnVpPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtLnVpCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLmRlYnVnLnVpPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcudWkKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9kZWJ1Zy9vcmcuZWNsaXBzZS5wdHAuZGVidWcuc2RtCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnByb3h5PUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5wcm94eQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC51dGlscz1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvY29yZS9vcmcuZWNsaXBzZS5wdHAudXRpbHMKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAubGF1bmNoPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5sYXVuY2gKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAuaGVscD1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvZG9jL29yZy5lY2xpcHNlLnB0cC5oZWxwCi0KLSEgU2VydmljZXMgUGx1Z2lucwotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5zZXJ2aWNlcy5jb3JlPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5zZXJ2aWNlcy5jb3JlCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnNlcnZpY2VzLnVpPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9jb3JlL29yZy5lY2xpcHNlLnB0cC5zZXJ2aWNlcy51aQotCi0hIFJlbW90ZSBUb29scyBQbHVnaW5zCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzLmNvcmU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy5jb3JlCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzLmVudmlyb25tZW50LmNvcmU9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy5lbnZpcm9ubWVudC5jb3JlCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzLmVudmlyb25tZW50LmdlbmVyaWNob3N0PUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMuZW52aXJvbm1lbnQuZ2VuZXJpY2hvc3QKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMuZW52aXJvbm1lbnQubGF1bmNoZXI9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy5lbnZpcm9ubWVudC5sYXVuY2hlcgotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy5lbnZpcm9ubWVudC51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzLmVudmlyb25tZW50LnVpCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJlbW90ZXRvb2xzLnByZWZlcmVuY2VzPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMucHJlZmVyZW5jZXMKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucmVtb3RldG9vbHMudXRpbHM9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5yZW1vdGV0b29scy51dGlscwotCi0hIFBMRFQgUGx1Z2lucwotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbj1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQuY29tbW9uCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnBsZHQuaGVscD1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQuaGVscAotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wbGR0LmxhcGk9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0LmxhcGkKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuYW5hbHlzaXM9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5hbmFseXNpcwotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5hbmFseXNpcy5jZHQ9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5hbmFseXNpcy5jZHQKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuY29yZT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmNvcmUKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGxkdC5vcGVubXAuYW5hbHlzaXM9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL29yZy5lY2xpcHNlLnB0cC5wbGR0Lm9wZW5tcC5hbmFseXNpcwotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wbGR0Lm9wZW5tcC5jb3JlPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucGxkdC5vcGVubXAuY29yZQotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wbGR0Lm9wZW5tcC51aS5wdj1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvb3JnLmVjbGlwc2UucHRwLnBsZHQub3Blbm1wLnVpLnB2Ci1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnBsZHQudXBjPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGxkdC53aXphcmRzPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC90b29scy9vcmcuZWNsaXBzZS5wdHAucGxkdC53aXphcmRzCi0KLSEgRVRGIFBsdWdpbnMKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGVyZj1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZgotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuamFycz1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuamFycwotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS5wYXBpc2VsZWN0PUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC90b29scy9wZXJmL29yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS5wYXBpc2VsZWN0Ci1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnBlcmYudGF1LnBlcmZkbWY9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3Rvb2xzL3BlcmYvb3JnLmVjbGlwc2UucHRwLnBlcmYudGF1LnBlcmZkbWYKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuc2VsaW5zdD1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuc2VsaW5zdAotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS5zZWxpbnN0Zm9ydD1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50YXUuc2VsaW5zdGZvcnQKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucGVyZi50b29sb3B0cz1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi50b29sb3B0cwotCi0hIFJEVCBQbHVnaW5zCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnJkdC51aT1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQudWkKLXBsdWdpbkBvcmcuZWNsaXBzZS5wdHAucmR0LnNlcnZpY2VzPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5zZXJ2aWNlcwotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5yZHQuZG9jLnVzZXI9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LmRvYy51c2VyCi0KLSEgRnJhZ21lbnRzCi1mcmFnbWVudEBvcmcuZWNsaXBzZS5wdHAuYWl4LnBwYz1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5haXgucHBjCi1mcmFnbWVudEBvcmcuZWNsaXBzZS5wdHAubGludXgucHBjPUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLmxpbnV4LnBwYwotZnJhZ21lbnRAb3JnLmVjbGlwc2UucHRwLmxpbnV4Lng4Nj1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5saW51eC54ODYKLWZyYWdtZW50QG9yZy5lY2xpcHNlLnB0cC5saW51eC54ODZfNjQ9QHB0cFRhZ0AsOnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scywsb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAubGludXgueDg2XzY0Ci1mcmFnbWVudEBvcmcuZWNsaXBzZS5wdHAubWFjb3N4LnBwYz1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5tYWNvc3gucHBjCi1mcmFnbWVudEBvcmcuZWNsaXBzZS5wdHAubWFjb3N4Lng4Nj1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5tYWNvc3gueDg2Ci1mcmFnbWVudEBvcmcuZWNsaXBzZS5wdHAucGVyZi5wYXJhbGxlbD1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvdG9vbHMvcGVyZi9vcmcuZWNsaXBzZS5wdHAucGVyZi5wYXJhbGxlbAotCi0hIFRlc3RzCi1wbHVnaW5Ab3JnLmVjbGlwc2UucHRwLnBlcmYudGF1LnBhcGl0ZXN0PUBwdHBUYWdALDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsLG9yZy5lY2xpcHNlLnB0cC90b29scy9wZXJmL29yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS5wYXBpdGVzdAotcGx1Z2luQG9yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS50ZXN0cz1AcHRwVGFnQCw6cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzLCxvcmcuZWNsaXBzZS5wdHAvcmR0L29yZy5lY2xpcHNlLnB0cC5yZHQuY29yZS50ZXN0cwotCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9tYXN0ZXIvYnVpbGQucHJvcGVydGllcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL21hc3Rlci9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjM2Y2UyLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL21hc3Rlci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBhcmFtZXRlcnMgZGVzY3JpYmluZyBob3cgYW5kIHdoZXJlIHRvIGV4ZWN1dGUgdGhlIGJ1aWxkLgotIyBUeXBpY2FsIHVzZXJzIG5lZWQgb25seSB1cGRhdGUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgotIyAgICBiYXNlTG9jYXRpb24gLSB3aGVyZSB0aGluZ3MgeW91IGFyZSBidWlsZGluZyBhZ2FpbnN0IGFyZSBpbnN0YWxsZWQKLSMgICAgYm9vdGNsYXNzcGF0aCAtIFRoZSBiYXNlIGphcnMgdG8gY29tcGlsZSBhZ2FpbnN0ICh0eXBpY2FseSBydC5qYXIpCi0jICAgIGNvbmZpZ3MgLSB0aGUgbGlzdCBvZiB7b3MsIHdzLCBhcmNofSBjb25maWd1cmF0aW9ucyB0byBidWlsZC4gIAotIwotIyBPZiBjb3Vyc2UgYW55IG9mIHRoZSBzZXR0aW5ncyBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWMnaW5nIAotIyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgKGUuZy4sIC1EYmFzZUxvY2F0aW9uPWQ6L2VjbGlwc2UKLQotIyMjIyMjIyMjIyMjIyBDVlMgQ09OVFJPTCAjIyMjIyMjIyMjIyMjIyMjCi0jIFRoZSBDVlMgdGFnIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSBtYXAgZmlsZXMgZnJvbSB0aGUgcmVwb3NpdG9yeQotbWFwVmVyc2lvblRhZz1IRUFECi0KLSMgVGhlIENWUyB0YWcgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgZWxlbWVudHMgdG8gYnVpbGQuICBCeSBkZWZhdWx0IHRoZQotIyBidWlsZGVyIHdpbGwgdXNlIHdoYXRldmVyIGlzIGluIHRoZSBtYXBzLiAgVXNlIHRoaXMgdmFsdWUgdG8gb3ZlcnJpZGUKLSMgZm9yIGV4YW1wbGUsIHdoZW4gZG9pbmcgYSBuaWdodGx5IGJ1aWxkIG91dCBvZiBIRUFECi0jIGZldGNoVGFnPUhFQUQKLQotcHRwVGFnPUhFQUQKLQotIyMjIyMjIyMjIyMjIyMgQlVJTEQgLyBHRU5FUkFUSU9OIENPTlRST0wgIyMjIyMjIyMjIyMjIyMjIwotIyBUaGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIGJ1aWxkIGVsZW1lbnRzIHdpbGwgYmUgZmV0Y2hlZCBhbmQgd2hlcmUKLSMgdGhlIGJ1aWxkIHdpbGwgdGFrZSBwbGFjZS4gIGJ1aWxkRGlyZWN0b3J5IGFuZCBpbnN0YWxsIHNob3VsZCBiZSB0aGUgc2FtZQotIyB2YWx1ZS4KLWJ1aWxkRGlyZWN0b3J5PWJ1aWxkCi0KLSMgVHlwZSBvZiBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQuICBUeXBpY2FsbHkgdGhpcyB2YWx1ZSBpcwotIyBvbmUgb2YgSSwgTiwgTSwgUywgLi4uCi1idWlsZFR5cGU9SQotCi0jIElEIG9mIHRoZSBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQuCi1idWlsZElkPVRlc3RCdWlsZAotCi0jIExhYmVsIGZvciB0aGUgYnVpbGQuICBVc2VkIGluIG5hbWluZyB0aGUgYnVpbGQgb3V0cHV0Ci1idWlsZExhYmVsPSR7YnVpbGRUeXBlfS4ke2J1aWxkSWR9Ci0KLSMgVGltZXN0YW1wIGZvciB0aGUgYnVpbGQuICBVc2VkIGluIG5hbWluZyB0aGUgYnVpbGQgb3V0cHV0Ci10aW1lc3RhbXA9MDA3Ci0KLSMgQmFzZSBsb2NhdGlvbiBmb3IgYW55dGhpbmcgdGhlIGJ1aWxkIG5lZWRzIHRvIGNvbXBpbGUgYWdhaW5zdC4gIEZvciBleGFtcGxlLAotIyB3aGVuIGJ1aWxkaW5nIEdFRiwgdGhlIGJhc2VMb2NhdGlvbiBzaG91bGQgYmUgdGhlIGxvY2F0aW9uIG9mIGEgcHJldmlvdXNseQotIyBpbnN0YWxsZWQgRWNsaXBzZSBhZ2FpbnN0IHdoaWNoIHRoZSBHRUYgY29kZSB3aWxsIGJlIGNvbXBpbGVkLgotYmFzZUxvY2F0aW9uPQotCi0jT3MvV3MvQXJjaC9ubCBvZiB0aGUgZWNsaXBzZSBzcGVjaWZpZWQgYnkgYmFzZUxvY2F0aW9uCi0jYmFzZW9zCi0jYmFzZXdzCi0jYmFzZWFyY2gKLSNiYXNlbmwKLQotIyBUaGUgbG9jYXRpb24gdW5kZXJ3aGljaCBhbGwgb2YgdGhlIGJ1aWxkIG91dHB1dCB3aWxsIGJlIGNvbGxlY3RlZC4gIFRoaXMgd2lsbCBiZQotIyB0aGUgcm9vdCBwYXRoIGluIHRoZSByZXN1bHRhbnQgemlwIGZpbGUuCi1jb2xsUGxhY2U9ZWNsaXBzZQotCi0jIFRoZSBkaXJlY3RvcnkgIGluIHdoaWNoIHRvIGV4ZWN1dGUgemlwIG9mIHRoZSAke2NvbGxQbGFjZX0gZGlyZWN0b3J5Ci1jb2xsQmFzZT0uCi0KLSMgVGhlIGxpc3Qgb2Yge29zLCB3cywgYXJjaH0gY29uZmlndXJhdGlvbnMgdG8gYnVpbGQuICBUaGlzIAotIyB2YWx1ZSBpcyBhICcmJyBzZXBhcmF0ZWQgbGlzdCBvZiAnLCcgc2VwYXJhdGUgdHJpcGxlcy4gIEZvciBleGFtcGxlLCAKLSMgICAgIGNvbmZpZ3M9d2luMzIsd2luMzIseDg2ICYgbGludXgsbW90aWYseDg2Ci0jIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzICosKiwqCi1jb25maWdzPSBcCi0JICBhaXgsbW90aWYscHBjIFwKLSAgICAmIGxpbnV4LGd0ayx4ODYgXAotICAgICYgbGludXgsZ3RrLHg4Nl82NCBcCi0gICAgJiBsaW51eCxndGsscHBjIFwKLSAgICAmIG1hY29zeCxjYXJib24scHBjIFwKLSAgICAmIHdpbjMyLHdpbjMyLHg4NgotCi1vdXRwdXRVcGRhdGVKYXJzPXRydWUKLWdyb3VwQ29uZmlndXJhdGlvbnM9dHJ1ZQotCi0jQXJndW1lbnRzIHRvIHNlbmQgdG8gdGhlIHppcCBleGVjdXRhYmxlCi16aXBhcmdzPQotCi0jIyMjIyMjIyMjIyMjIEpBVkEgQ09NUElMRVIgT1BUSU9OUyAjIyMjIyMjIyMjIyMjIwotIyBUaGUgbG9jYXRpb24gb2YgdGhlIEphdmEgamFycyB0byBjb21waWxlIGFnYWluc3QuICBUeXBpY2FsbHkgdGhlIHJ0LmphciBmb3IgeW91ciBKREsvSlJFCi0jYm9vdGNsYXNzcGF0aD1kOi9pYm0xLjMuMS9qcmUvbGliL3J0LmphcgotCi1qYXZhY0RlYnVnSW5mbz1vbgotamF2YWNWZXJib3NlPXRydWUKLWphdmFjRmFpbE9uRXJyb3I9ZmFsc2UKLQotIyBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIGNvZGUKLWphdmFjU291cmNlPTEuNQotCi0jIFRoZSB2ZXJzaW9uIG9mIHRoZSBieXRlIGNvZGUgdGFyZ2V0ZWQKLWphdmFjVGFyZ2V0PTEuNQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvbWFzdGVyL2N1c3RvbVRhcmdldHMueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvbWFzdGVyL2N1c3RvbVRhcmdldHMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzU5MTE1Li4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL21hc3Rlci9jdXN0b21UYXJnZXRzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi08cHJvamVjdCBuYW1lPSJCdWlsZCBzcGVjaWZpYyB0YXJnZXRzIGFuZCBwcm9wZXJ0aWVzIiBkZWZhdWx0PSJub0RlZmF1bHQiID4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFJ1biBhIGdpdmVuICR7dGFyZ2V0fSBvbiBhbGwgZWxlbWVudHMgYmVpbmcgYnVpbHQgLS0+Ci08IS0tIEFkZCBvbiA8YW50PiB0YXNrIGZvciBlYWNoIHRvcCBsZXZlbCBlbGVtZW50IGJlaW5nIGJ1aWx0LiAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhcmdldCBuYW1lPSJhbGxFbGVtZW50cyI+Ci0JPGFudCBhbnRmaWxlPSIke2dlbmVyaWNUYXJnZXRzfSIgdGFyZ2V0PSIke3RhcmdldH0iPgotCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9ImZlYXR1cmUiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2UucHRwLm1hc3RlciIvPgotCTwvYW50PgotPC90YXJnZXQ+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBUYXJnZXRzIHRvIGFzc2VtYmxlIHRoZSBidWlsdCBlbGVtZW50cyBmb3IgcGFydGljdWxhciBjb25maWd1cmF0aW9ucyAgLS0+Ci08IS0tIFRoZXNlIGdlbmVyYWxseSBjYWxsIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibGUgc2NyaXB0cyAobmFtZWQgaW4gLS0+Ci08IS0tICR7YXNzZW1ibGVTY3JpcHROYW1lfSkgYnV0IG1heSBhbHNvIGFkZCBwcmUgYW5kIHBvc3QgcHJvY2Vzc2luZyAtLT4KLTwhLS0gQWRkIG9uZSB0YXJnZXQgZm9yIGVhY2ggcm9vdCBlbGVtZW50IGFuZCBlYWNoIGNvbmZpZ3VyYXRpb24gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotPHRhcmdldCBuYW1lPSJhc3NlbWJsZS5vcmcuZWNsaXBzZS5wdHAubWFzdGVyLmdyb3VwLmdyb3VwLmdyb3VwIj4KLQk8YW50IGFudGZpbGU9IiR7YXNzZW1ibGVTY3JpcHROYW1lfSIgZGlyPSIke2J1aWxkRGlyZWN0b3J5fSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlTmFtZSIgdmFsdWU9InB0cC1tYXN0ZXItJHticmFuY2hWZXJzaW9ufS0ke2J1aWxkSWR9LnppcCIvPgotCTwvYW50PgotPC90YXJnZXQ+Ci0JCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gQ2hlY2sgb3V0IG1hcCBmaWxlcyBmcm9tIGNvcnJlY3QgcmVwb3NpdG9yeSAtLT4KLTwhLS0gUmVwbGFjZSB2YWx1ZXMgZm9yIGN2c1Jvb3QsIHBhY2thZ2UgYW5kIG1hcFZlcnNpb25UYWcgYXMgZGVzaXJlZC4gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YXJnZXQgbmFtZT0iZ2V0TWFwRmlsZXMiPgotCTxjb3B5IGZpbGU9IiR7YnVpbGRlcn0vLi4vbWFwcy9wdHAubWFwIiB0b2Rpcj0iJHtidWlsZERpcmVjdG9yeX0vbWFwcyIvPgotCTxyZXBsYWNlIGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L21hcHMvcHRwLm1hcCI+Ci0JCTxyZXBsYWNlZmlsdGVyIHRva2VuPSJAcHRwVGFnQCIgdmFsdWU9IiR7cHRwVGFnfSIvPgotCTwvcmVwbGFjZT4KLTwvdGFyZ2V0PgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHNldHVwIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFyZ2V0IG5hbWU9InByZVNldHVwIj4KLTwvdGFyZ2V0PgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgc2V0dXAgYnV0IGJlZm9yZSBzdGFydGluZyB0aGUgYnVpbGQgcHJvcGVyIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFyZ2V0IG5hbWU9InBvc3RTZXR1cCI+Ci08L3RhcmdldD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBmZXRjaGluZyB0aGUgYnVpbGQgZWxlbWVudHMgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YXJnZXQgbmFtZT0icHJlRmV0Y2giPgotPC90YXJnZXQ+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBTdGVwcyB0byBkbyBhZnRlciBmZXRjaGluZyB0aGUgYnVpbGQgZWxlbWVudHMgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YXJnZXQgbmFtZT0icG9zdEZldGNoIj4KLQk8Y29uZGl0aW9uIHByb3BlcnR5PSJwYXRjaGVzQXZhaWxhYmxlIj4KLQkJPGF2YWlsYWJsZSBmaWxlPSIke2J1aWxkZXJ9L3BhdGNoLnhtbCIvPgotCTwvY29uZGl0aW9uPgotCTxhbnRjYWxsIHRhcmdldD0iYXBwbHlQYXRjaGVzIi8+Ci08L3RhcmdldD4KLQotPHRhcmdldCBuYW1lPSJhcHBseVBhdGNoZXMiIGlmPSJwYXRjaGVzQXZhaWxhYmxlIj4KLQk8YW50IGFudGZpbGU9IiR7YnVpbGRlcn0vcGF0Y2gueG1sIi8+Ci08L3RhcmdldD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBidWlsZCBzY3JpcHRzLiAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhcmdldCBuYW1lPSJwcmVHZW5lcmF0ZSI+Ci08L3RhcmdldD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIGdlbmVyYXRpbmcgdGhlIGJ1aWxkIHNjcmlwdHMuIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFyZ2V0IG5hbWU9InBvc3RHZW5lcmF0ZSI+Ci08L3RhcmdldD4KLQotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHJ1bm5pbmcgdGhlIGJ1aWxkLnhtbHMgZm9yIHRoZSBlbGVtZW50cyBiZWluZyBidWlsdC4gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YXJnZXQgbmFtZT0icHJlUHJvY2VzcyI+Ci0JPHJlcGxhY2UgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zIiB2YWx1ZT0iJHt0aW1lc3RhbXB9IiB0b2tlbj0iQGJ1aWxkQCI+Ci0JCTxpbmNsdWRlIG5hbWU9IioqL2Fib3V0Lm1hcHBpbmdzIiAvPgotCTwvcmVwbGFjZT4KLQk8dW56aXAgc3JjPSIke3RhdUphcnN9IiBkZXN0PSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnB0cC5wZXJmLnRhdS5qYXJzIi8+Ci0JPHJlcGxhY2UgZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5wdHAuYWl4LnBwYy9CVUlMRCI+Ci0JCTxyZXBsYWNlZmlsdGVyIHRva2VuPSJAYnVpbGRWZXJzaW9uQCIgdmFsdWU9IiR7YnJhbmNoVmVyc2lvbn0uJHt0aW1lc3RhbXB9Ii8+Ci0JPC9yZXBsYWNlPgotCTxyZXBsYWNlIGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2UucHRwLmxpbnV4LnBwYy9CVUlMRCI+Ci0JCTxyZXBsYWNlZmlsdGVyIHRva2VuPSJAYnVpbGRWZXJzaW9uQCIgdmFsdWU9IiR7YnJhbmNoVmVyc2lvbn0uJHt0aW1lc3RhbXB9Ii8+Ci0JPC9yZXBsYWNlPgotCTxyZXBsYWNlIGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2UucHRwLmxpbnV4Lng4Ni9CVUlMRCI+Ci0JCTxyZXBsYWNlZmlsdGVyIHRva2VuPSJAYnVpbGRWZXJzaW9uQCIgdmFsdWU9IiR7YnJhbmNoVmVyc2lvbn0uJHt0aW1lc3RhbXB9Ii8+Ci0JPC9yZXBsYWNlPgotCTxyZXBsYWNlIGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2UucHRwLmxpbnV4Lng4Nl82NC9CVUlMRCI+Ci0JCTxyZXBsYWNlZmlsdGVyIHRva2VuPSJAYnVpbGRWZXJzaW9uQCIgdmFsdWU9IiR7YnJhbmNoVmVyc2lvbn0uJHt0aW1lc3RhbXB9Ii8+Ci0JPC9yZXBsYWNlPgotCTxyZXBsYWNlIGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2UucHRwLm1hY29zeC5wcGMvQlVJTEQiPgotCQk8cmVwbGFjZWZpbHRlciB0b2tlbj0iQGJ1aWxkVmVyc2lvbkAiIHZhbHVlPSIke2JyYW5jaFZlcnNpb259LiR7dGltZXN0YW1wfSIvPgotCTwvcmVwbGFjZT4KLQk8cmVwbGFjZSBmaWxlPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnB0cC5tYWNvc3gueDg2L0JVSUxEIj4KLQkJPHJlcGxhY2VmaWx0ZXIgdG9rZW49IkBidWlsZFZlcnNpb25AIiB2YWx1ZT0iJHticmFuY2hWZXJzaW9ufS4ke3RpbWVzdGFtcH0iLz4KLQk8L3JlcGxhY2U+Ci08L3RhcmdldD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIHJ1bm5pbmcgdGhlIGJ1aWxkLnhtbHMgZm9yIHRoZSBlbGVtZW50cyBiZWluZyBidWlsdC4gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YXJnZXQgbmFtZT0icG9zdFByb2Nlc3MiPgotPC90YXJnZXQ+Ci0KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBydW5uaW5nIGFzc2VtYmxlLiAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhcmdldCBuYW1lPSJwcmVBc3NlbWJsZSI+Ci08L3RhcmdldD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIFN0ZXBzIHRvIGRvIGFmdGVyICBydW5uaW5nIGFzc2VtYmxlLiAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhcmdldCBuYW1lPSJwb3N0QXNzZW1ibGUiPgotPC90YXJnZXQ+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgYnVpbGQgaXMgZG9uZS4gLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTx0YXJnZXQgbmFtZT0icG9zdEJ1aWxkIj4KLTwvdGFyZ2V0PgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gU3RlcHMgdG8gZG8gdG8gdGVzdCB0aGUgYnVpbGQgcmVzdWx0cyAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhcmdldCBuYW1lPSJ0ZXN0Ij4KLTwvdGFyZ2V0PgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gU3RlcHMgdG8gZG8gdG8gcHVibGlzaCB0aGUgYnVpbGQgcmVzdWx0cyAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPHRhcmdldCBuYW1lPSJwdWJsaXNoIj4KLTwvdGFyZ2V0PgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gRGVmYXVsdCB0YXJnZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08dGFyZ2V0IG5hbWU9Im5vRGVmYXVsdCI+Ci0JPGVjaG8gbWVzc2FnZT0iWW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aGVuIGludm9raW5nIHRoaXMgZmlsZSIgLz4KLTwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9wYWNrLnByb3BlcnRpZXMgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9wYWNrLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYjVhNWUuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5yZWxlbmcvcGFjay5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcGFjazIwMC5kZWZhdWx0LmFyZ3M9LUU0CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJlbGVuZy9wdHBidWlsZCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL3B0cGJ1aWxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGYzNzhkLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nL3B0cGJ1aWxkCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIHB0cGJ1aWxkIHdyYXBwZXIgc2NyaXB0Ci0jCi0jIFVzYWdlOiBwdHBidWlsZCBbLXQgdGFnXSBbLWQgYnVpbGRfZGlyXSBbYnVpbGRfYXJnc10KLSMKLSMgd2hlcmUKLSMKLSMgdGFnIGlzIHRoZSBDVlMgdGFnIHVzZWQgdG8gY2hlY2sgb3V0IHRoZSByZWxlbmcgcHJvamVjdCAoZGVmYXVsdCBIRUFEKQotIyBidWlsZF9kaXIgaXMgdGhlIGxvY2F0aW9uIHRoYXQgdGhlIGJ1aWxkIHdpbGwgdGFrZSBwbGFjZQotIyBidWlsZF9hcmdzIGFyZSBhbnkgYXJndW1lbnRzIHlvdSB3YW50IHRvIHBhc3MgdG8gdGhlIGJ1aWxkIHNjcmlwdAotIwotIyBzZXQgdXAgYW55dGhpbmcgZW52aXJvbm1lbnQgc3BlY2lmaWMgdGhhdCBuZWVkcyB0byBiZSBkb25lIGJlZm9yZQotIyBsYXVuY2hpbmcgdGhlIGJ1aWxkIHNjcmlwdCBpbiB0aGUgcmVsZW5nIHByb2plY3QKLQotVEFHPUhFQUQKLUNEVF9UQUc9SEVBRAotCi0jIG1haW4gc3RhZ2luZyBkaXJlY3RvcnkKLUJVSUxEX0RJUj0vb3B0L3B1YmxpYy9kb3dubG9hZC1zdGFnaW5nLnByaXYvdG9vbHMvcHRwL3JlbGVuZwotCi1hcmdzPWBnZXRvcHQgZDp0OiAkKmAKLQotaWYgWyAkPyAhPSAwIF07IHRoZW4KLQllY2hvICJ1c2FnZTogcHRwYnVpbGQgWy10IHRhZ10gWy1jIGNkdF90YWddIFstZCBidWlsZF9kaXJdIFtidWlsZF9hcmdzXSIKLQlleGl0IDEKLWZpCi0KLXNldCAtLSAkYXJncwotZm9yIGkKLWRvCi0JY2FzZSAiJGkiCi0JaW4KLQktYykgQ0RUX1RBRz0iJDIiOyBzaGlmdDsgc2hpZnQ7OwotCS1kKSBCVUlMRF9ESVI9IiQyIjsgc2hpZnQ7IHNoaWZ0OzsKLQktdCkgVEFHPSIkMiI7IHNoaWZ0OyBzaGlmdDs7Ci0JLS0pIHNoaWZ0OyBicmVhazs7Ci0JZXNhYwotZG9uZQotCi1CVUlMRF9MT0c9JEJVSUxEX0RJUi9wdHBidWlsZF8ke1RBR31fYGRhdGUgKyVZJW0lZCVIJU1gLmxvZwotCi17Ci0jIGNyZWF0ZSB0aGUgcmVsZW5nIHN0YWdpbmcgZGlyZWN0b3J5IGFuZCBnbyB0aGVyZQotbWtkaXIgLXAgJEJVSUxEX0RJUiAmJiBjZCAkQlVJTERfRElSCi0KLSMgcmVtb3ZlIHRoZSBvbGQgYnVpbGQKLXJtIC1mciBvcmcuZWNsaXBzZS5wdHAKLQotIyBDaGVjayBvdXQgdGhlIHJlbGVuZyBwcm9qZWN0Ci1leHBvcnQgQ1ZTUk9PVD06cHNlcnZlcjphbm9ueW1vdXNAZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L3Rvb2xzCi1jdnMgY28gLXIgJFRBRyAtZCBvcmcuZWNsaXBzZS5wdHAgb3JnLmVjbGlwc2UucHRwL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucmVsZW5nCi0KLSMgcnVuIHRoZSBtYWluIHNjcmlwdAotY2Qgb3JnLmVjbGlwc2UucHRwCi1zaCBidWlsZC5zaCAkKgotCi0jIEJ1aWxkIFJEVCBzZXJ2ZXIgcGFja2FnZXMKLWNkIHJlc3VsdHMvcGx1Z2lucwotCi0jIENoZWNrIG91dCByZHQuY29yZS5yZW1vdGVqYXJzLCByZHQuY29yZS5zdHVicyBhbmQgY2R0LmNvcmUgZm9yIHNvdXJjZQotZXhwb3J0IENWU1JPT1Q9OnBzZXJ2ZXI6YW5vbnltb3VzQGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC90b29scwotY3ZzIGNvIC1yICRUQUcgLWQgb3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlLnJlbW90ZWphcnMgb3JnLmVjbGlwc2UucHRwL3JkdC9vcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUucmVtb3RlamFycwotY3ZzIGNvIC1yICRUQUcgLWQgb3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlLnN0dWJzIG9yZy5lY2xpcHNlLnB0cC9yZHQvb3JnLmVjbGlwc2UucHRwLnJkdC5jb3JlLnN0dWJzCi1jdnMgY28gLXIgJENEVF9UQUcgLWQgb3JnLmVjbGlwc2UuY2R0LmNvcmUgb3JnLmVjbGlwc2UuY2R0L2FsbC9vcmcuZWNsaXBzZS5jZHQuY29yZQotCi1jZCBvcmcuZWNsaXBzZS5wdHAucmR0LmNvcmUucmVtb3RlamFycwotCi0jIHJ1biB0aGUgc2NyaXB0IGluIHJlbW90ZWphcnMKLWV4cG9ydCBQQVRIPS9vcHQvcHVibGljL2NvbW1vbi9pYm0tamF2YTItcHBjLTUwL2JpbjokUEFUSAotZWNobyBgamF2YSAtdmVyc2lvbmAKLWphdmEgLWphciAuLi8uLi8uLi90b29scy9vcmcuZWNsaXBzZS5yZWxlbmcuYmFzZWJ1aWxkZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyLmphciBcCi0JLXdzIGd0ayAtYXJjaCBwcGMgLW9zIGxpbnV4IC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIKLQotfSA+JEJVSUxEX0xPRyAyPiYxCi0KLWlmIGdyZXAgLXEgJ0JVSUxEIEZBSUxFRCcgJEJVSUxEX0xPRzsgdGhlbgotCWVjaG8gIkJVSUxEIEZBSUxFRC4gU2VlICRCVUlMRF9MT0cgZm9yIGRldGFpbHMuIgotZmkKLQotZXhpdCAwCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS1mZWF0dXJlLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODYxZWI3Yi4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS1mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS1mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzlkZjhmLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLmJsdWVnZW5lLWZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLmJsdWVnZW5lLWZlYXR1cmUvZXBsLXYxMC5odG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTViMDk5My4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIAotIyBUaGlzIG1hdGVyaWFsIHdhcyBwcm9kdWNlZCB1bmRlciBVLlMuIEdvdmVybm1lbnQgY29udHJhY3QgVy03NDA1LUVORy0zNiAKLSMgZm9yIExvcyBBbGFtb3MgTmF0aW9uYWwgTGFib3JhdG9yeSwgd2hpY2ggaXMgb3BlcmF0ZWQgYnkgdGhlIFVuaXZlcnNpdHkgCi0jIG9mIENhbGlmb3JuaWEgZm9yIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgRW5lcmd5LiBUaGUgVS5TLiBHb3Zlcm5tZW50IGhhcyAKLSMgcmlnaHRzIHRvIHVzZSwgcmVwcm9kdWNlLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLiBORUlUSEVSIFRIRSAKLSMgR09WRVJOTUVOVCBOT1IgVEhFIFVOSVZFUlNJVFkgTUFLRVMgQU5ZIFdBUlJBTlRZLCBFWFBSRVNTIE9SIElNUExJRUQsIE9SIAotIyBBU1NVTUVTIEFOWSBMSUFCSUxJVFkgRk9SIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRS4gSWYgc29mdHdhcmUgaXMgbW9kaWZpZWQgCi0jIHRvIHByb2R1Y2UgZGVyaXZhdGl2ZSB3b3Jrcywgc3VjaCBtb2RpZmllZCBzb2Z0d2FyZSBzaG91bGQgYmUgY2xlYXJseSBtYXJrZWQsIAotIyBzbyBhcyBub3QgdG8gY29uZnVzZSBpdCB3aXRoIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSBmcm9tIExBTkwuCi0jIAotIyBBZGRpdGlvbmFsbHksIHRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgTEEtQ0MgMDQtMTE1Ci0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1QVFAgU3VwcG9ydCBGb3IgQmx1ZSBHZW5lCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1FY2xpcHNlIFBUUCBVcGRhdGUgU2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249QWRkcyBzdXBwb3J0IGZvciB0aGUgQmx1ZSBHZW5lIHN5c3RlbQotCi0jIGNvcHlyaWdodAotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLUlCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotTWFyY2ggMTcsIDIwMDVcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi1cblwKLUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKLVRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAotZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAotXG5cCi1DcnlwdG9ncmFwaHlcblwKLVxuXAotQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCi1hbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCi11c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwKLWFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAotXG5cCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgotIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS1mZWF0dXJlL2ZlYXR1cmUueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgwNjk1OS4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS1mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlCi0gICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIyLjAuMC5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgaW1hZ2U9ImVjbGlwc2VfdXBkYXRlXzEyMC5qcGciPgotCi0gICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vZWNsaXBzZS5vcmcvcHRwIj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zZWFyY2giLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucHJveHkucHJvdG9jb2wiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAuY29yZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC5yZW1vdGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAudWkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAubGF1bmNoIi8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS5jb3JlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLmlibS5ibHVlZ2VuZS5wcm94eSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uaWJtLmJsdWVnZW5lLWZlYXR1cmUvbGljZW5zZS5odG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YWY5NjYuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5pYm0uYmx1ZWdlbmUtZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPk1hcmNoIDE3LCAyMDA1PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotPC91bD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLSAgIAotPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmxzZi1mZWF0dXJlLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU1NmRmZi4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmxzZi1mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UucHRwLnJtLmxzZi1mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzlkZjhmLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ubHNmLWZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ubHNmLWZlYXR1cmUvZXBsLXYxMC5odG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmxzZi1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDViNjI2Ny4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmxzZi1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIAotIyBUaGlzIG1hdGVyaWFsIHdhcyBwcm9kdWNlZCB1bmRlciBVLlMuIEdvdmVybm1lbnQgY29udHJhY3QgVy03NDA1LUVORy0zNiAKLSMgZm9yIExvcyBBbGFtb3MgTmF0aW9uYWwgTGFib3JhdG9yeSwgd2hpY2ggaXMgb3BlcmF0ZWQgYnkgdGhlIFVuaXZlcnNpdHkgCi0jIG9mIENhbGlmb3JuaWEgZm9yIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgRW5lcmd5LiBUaGUgVS5TLiBHb3Zlcm5tZW50IGhhcyAKLSMgcmlnaHRzIHRvIHVzZSwgcmVwcm9kdWNlLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLiBORUlUSEVSIFRIRSAKLSMgR09WRVJOTUVOVCBOT1IgVEhFIFVOSVZFUlNJVFkgTUFLRVMgQU5ZIFdBUlJBTlRZLCBFWFBSRVNTIE9SIElNUExJRUQsIE9SIAotIyBBU1NVTUVTIEFOWSBMSUFCSUxJVFkgRk9SIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRS4gSWYgc29mdHdhcmUgaXMgbW9kaWZpZWQgCi0jIHRvIHByb2R1Y2UgZGVyaXZhdGl2ZSB3b3Jrcywgc3VjaCBtb2RpZmllZCBzb2Z0d2FyZSBzaG91bGQgYmUgY2xlYXJseSBtYXJrZWQsIAotIyBzbyBhcyBub3QgdG8gY29uZnVzZSBpdCB3aXRoIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSBmcm9tIExBTkwuCi0jIAotIyBBZGRpdGlvbmFsbHksIHRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgTEEtQ0MgMDQtMTE1Ci0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1QVFAgU3VwcG9ydCBGb3IgTFNGCi0KLSMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi0jICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCi11cGRhdGVTaXRlTmFtZT1FY2xpcHNlIFBUUCBVcGRhdGUgU2l0ZQotCi0jICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQotZGVzY3JpcHRpb249QWRkcyBzdXBwb3J0IGZvciB0aGUgTFNGIGpvYiBzY2hlZHVsZXIKLQotIyBjb3B5cmlnaHQKLWNvcHlyaWdodD1cCi1Db3B5cmlnaHQgKGMpIDIwMDUgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS5cblwKLVRoaXMgbWF0ZXJpYWwgd2FzIHByb2R1Y2VkIHVuZGVyIFUuUy4gR292ZXJubWVudCBjb250cmFjdCBXLTc0MDUtRU5HLTM2XG5cCi1mb3IgTG9zIEFsYW1vcyBOYXRpb25hbCBMYWJvcmF0b3J5LCB3aGljaCBpcyBvcGVyYXRlZCBieSB0aGUgVW5pdmVyc2l0eVxuXAotb2YgQ2FsaWZvcm5pYSBmb3IgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBFbmVyZ3kuIFRoZSBVLlMuIEdvdmVybm1lbnQgaGFzXG5cCi1yaWdodHMgdG8gdXNlLCByZXByb2R1Y2UsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUuIE5FSVRIRVIgVEhFXG5cCi1HT1ZFUk5NRU5UIE5PUiBUSEUgVU5JVkVSU0lUWSBNQUtFUyBBTlkgV0FSUkFOVFksIEVYUFJFU1MgT1IgSU1QTElFRCwgT1JcblwKLUFTU1VNRVMgQU5ZIExJQUJJTElUWSBGT1IgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLiBJZiBzb2Z0d2FyZSBpcyBtb2RpZmllZFxuXAotdG8gcHJvZHVjZSBkZXJpdmF0aXZlIHdvcmtzLCBzdWNoIG1vZGlmaWVkIHNvZnR3YXJlIHNob3VsZCBiZSBjbGVhcmx5IG1hcmtlZCxcblwKLXNvIGFzIG5vdCB0byBjb25mdXNlIGl0IHdpdGggdGhlIHZlcnNpb24gYXZhaWxhYmxlIGZyb20gTEFOTC5cblwKLVxuXAotQWRkaXRpb25hbGx5LCB0aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCi1hcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKLXdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCi1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAotXG5cCi1MQS1DQyAwNC0xMTVcbgotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLU1hcmNoIDE3LCAyMDA1XG5cCi1cblwKLVVzYWdlIE9mIENvbnRlbnRcblwKLVxuXAotVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCi1VU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKLUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAotQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAotQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCi1PRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAotXG5cCi1BcHBsaWNhYmxlIExpY2Vuc2VzXG5cCi1cblwKLVVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uXG5cCi1pcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpY1xuXAotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCi1cblwKLUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAotZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTXG5cCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAotYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCi1cblwKLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKLSAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAotICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cCi0gICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKLSAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCi0gICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAotICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAotICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cCi0iZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZlxuXAotSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLVRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKLWNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKLWluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKLUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAotXG5cCi0gICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAotICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCi0gICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAotXG5cCi1Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCi1JbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKLXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKLXRoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLFxuXAotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXJcblwKLXVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAotXG5cCi1USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKLVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAotXG5cCi0gICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAotICAgIC0gSUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sKVxuXAotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCi0gICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9mZWF0dXJlLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ubHNmLWZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiODU1MWYuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmVhdHVyZQotICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5ybS5sc2YiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4wLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIKLSAgICAgIGltYWdlPSJlY2xpcHNlX3VwZGF0ZV8xMjAuanBnIj4KLQotICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL2VjbGlwc2Uub3JnL3B0cCI+Ci0gICAgICAlZGVzY3JpcHRpb24KLSAgIDwvZGVzY3JpcHRpb24+Ci0KLSAgIDxjb3B5cmlnaHQ+Ci0gICAgICAlY29weXJpZ2h0Ci0gICA8L2NvcHlyaWdodD4KLQotICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UucHRwLmNvcmUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNlYXJjaCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucmVtb3RlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UucHRwLnByb3h5LnByb3RvY29sIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZGVidWcudWkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAudWkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAubGF1bmNoIi8+Ci0gICA8L3JlcXVpcmVzPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLmxzZi5jb3JlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLmxzZi5wcm94eSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLmxzZi51aSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKLSAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5sc2YtZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmxzZi1mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhZjk2Ni4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLmxzZi1mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgotPC9oZWFkPgotCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KLTxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgotPHA+TWFyY2ggMTcsIDIwMDU8L3A+Ci0KLTxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KLQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCi0gICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKLSAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAotICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgotICAgCi08aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCi0gICAKLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKLSAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi0gICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUwotICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+Ci0gICAKLTx1bD4KLQk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KLQk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKLSAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgotPC91bD4gICAKLSAKLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCi1JbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgotCi08dWw+Ci0JPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+Ci0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KLQk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+Ci0JPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Ci08L3VsPgotCQkKLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCi1pbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKLWluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgotdGhhdCBkaXJlY3RvcnkuPC9wPgotCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+Ci0KLTx1bD4KLQk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+Ci0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgotCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKLQk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Ci08L3VsPgotCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQotY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+Ci0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPgotCi08cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKLSAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgotICAgCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ODRkZWQuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3OWRmOGYuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlL2VwbC12MTAuaHRtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlL2VwbC12MTAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0YjE5Ni4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLm9ydGUtZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KLTxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgotPGxpbmsgcmVsPUZpbGUtTGlzdAotaHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Ci08dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDxvOkRvY3VtZW50UHJvcGVydGllcz4KLSAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgotICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+Ci0gIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+Ci0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+Ci0gIDxvOldvcmRzPjE2MjY8L286V29yZHM+Ci0gIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgotICAgPG86TGluZXM+Nzc8L286TGluZXM+Ci0gIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KLSAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+Ci0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+Ci0gPC9vOkRvY3VtZW50UHJvcGVydGllcz4KLTwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgotIDx3OldvcmREb2N1bWVudD4KLSAgPHc6VHJhY2tSZXZpc2lvbnMvPgotIDwvdzpXb3JkRG9jdW1lbnQ+Ci08L3htbD48IVtlbmRpZl0tLT4KLTxzdHlsZT4KLTwhLS0KLSAvKiBGb250IERlZmluaXRpb25zICovCi1AZm9udC1mYWNlCi0Je2ZvbnQtZmFtaWx5OlRhaG9tYTsKLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKLQltc28tZm9udC1jaGFyc2V0OjA7Ci0JbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7Ci0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7Ci0JbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9Ci0gLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKLQl7bXNvLXN0eWxlLXBhcmVudDoiIjsKLQltYXJnaW46MGluOwotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47Ci0JZm9udC1zaXplOjEyLjBwdDsKLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9Ci1wCi0Je21hcmdpbi1yaWdodDowaW47Ci0JbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87Ci0JbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87Ci0JbWFyZ2luLWxlZnQ6MGluOwotCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKLQlmb250LXNpemU6MTIuMHB0OwotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOwotCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KLXAuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7Ci0JbWFyZ2luOjBpbjsKLQltYXJnaW4tYm90dG9tOi4wMDAxcHQ7Ci0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOwotCWZvbnQtc2l6ZTo4LjBwdDsKLQlmb250LWZhbWlseTpUYWhvbWE7Ci0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQotQHBhZ2UgU2VjdGlvbjEKLQl7c2l6ZTo4LjVpbiAxMS4waW47Ci0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47Ci0JbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKLQltc28tZm9vdGVyLW1hcmdpbjouNWluOwotCW1zby1wYXBlci1zb3VyY2U6MDt9Ci1kaXYuU2VjdGlvbjEKLQl7cGFnZTpTZWN0aW9uMTt9Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci0KLTxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KLQotPGRpdiBjbGFzcz1TZWN0aW9uMT4KLQotPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgotPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAotUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCi1PRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KLWRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KLWIpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1hZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKLXN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgotaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KLXN1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCi13aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCi13b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKLWVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKLWNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucwotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKLVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50Ci1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KLXN0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5Ci1kaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCi1mb3JtLjwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCi1TdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCi1SZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAotYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCi1jb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKLWJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCi10byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCi1saWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCi1SZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCi1Db250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQotcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Ci1mb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCi1saWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQotdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKLXRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKLWRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQotRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KLXRoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Ci08L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKLWl0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQotZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAotY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKLWFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCi1lZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAotaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgotCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0Ci1Db250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCi1zdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCi1pbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+Ci0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cwotc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+Ci0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KLQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycwotYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKLW9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAotbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCi1Db250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKLWNvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCi10aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCi1jb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCi1yZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKLXRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKLXRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCi1hbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi1jbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcwotc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCi1vdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKLUNvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUwotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAotV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKLVdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5Ci1yZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQotUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcwotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAotY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKLWVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgotCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCi1BR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLU9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi1ORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KLQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCi1lbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKLWZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQotYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAotb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCi1zdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Ci1zaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgotY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncwotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCi1kaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5Ci1SZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+Ci0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQotY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCi1jb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgotdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKLXRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCi1zZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KLW9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKLXRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgotdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCi1pbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCi10aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgotCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCi1TdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCi1BbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKLWl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KLQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgotCi08L2Rpdj4KLQotPC9ib2R5PgotCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGM4ODdmLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIAotIyBUaGlzIG1hdGVyaWFsIHdhcyBwcm9kdWNlZCB1bmRlciBVLlMuIEdvdmVybm1lbnQgY29udHJhY3QgVy03NDA1LUVORy0zNiAKLSMgZm9yIExvcyBBbGFtb3MgTmF0aW9uYWwgTGFib3JhdG9yeSwgd2hpY2ggaXMgb3BlcmF0ZWQgYnkgdGhlIFVuaXZlcnNpdHkgCi0jIG9mIENhbGlmb3JuaWEgZm9yIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgRW5lcmd5LiBUaGUgVS5TLiBHb3Zlcm5tZW50IGhhcyAKLSMgcmlnaHRzIHRvIHVzZSwgcmVwcm9kdWNlLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLiBORUlUSEVSIFRIRSAKLSMgR09WRVJOTUVOVCBOT1IgVEhFIFVOSVZFUlNJVFkgTUFLRVMgQU5ZIFdBUlJBTlRZLCBFWFBSRVNTIE9SIElNUExJRUQsIE9SIAotIyBBU1NVTUVTIEFOWSBMSUFCSUxJVFkgRk9SIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRS4gSWYgc29mdHdhcmUgaXMgbW9kaWZpZWQgCi0jIHRvIHByb2R1Y2UgZGVyaXZhdGl2ZSB3b3Jrcywgc3VjaCBtb2RpZmllZCBzb2Z0d2FyZSBzaG91bGQgYmUgY2xlYXJseSBtYXJrZWQsIAotIyBzbyBhcyBub3QgdG8gY29uZnVzZSBpdCB3aXRoIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSBmcm9tIExBTkwuCi0jIAotIyBBZGRpdGlvbmFsbHksIHRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgTEEtQ0MgMDQtMTE1Ci0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotCi0jICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCi1mZWF0dXJlTmFtZT1QVFAgU3VwcG9ydCBGb3IgT3BlbiBNUEkKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPUVjbGlwc2UgUFRQIFVwZGF0ZSBTaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1BZGRzIHN1cHBvcnQgZm9yIE9wZW4gTVBJCi0KLSMgY29weXJpZ2h0Ci1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuXG5cCi1UaGlzIG1hdGVyaWFsIHdhcyBwcm9kdWNlZCB1bmRlciBVLlMuIEdvdmVybm1lbnQgY29udHJhY3QgVy03NDA1LUVORy0zNlxuXAotZm9yIExvcyBBbGFtb3MgTmF0aW9uYWwgTGFib3JhdG9yeSwgd2hpY2ggaXMgb3BlcmF0ZWQgYnkgdGhlIFVuaXZlcnNpdHlcblwKLW9mIENhbGlmb3JuaWEgZm9yIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgRW5lcmd5LiBUaGUgVS5TLiBHb3Zlcm5tZW50IGhhc1xuXAotcmlnaHRzIHRvIHVzZSwgcmVwcm9kdWNlLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLiBORUlUSEVSIFRIRVxuXAotR09WRVJOTUVOVCBOT1IgVEhFIFVOSVZFUlNJVFkgTUFLRVMgQU5ZIFdBUlJBTlRZLCBFWFBSRVNTIE9SIElNUExJRUQsIE9SXG5cCi1BU1NVTUVTIEFOWSBMSUFCSUxJVFkgRk9SIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRS4gSWYgc29mdHdhcmUgaXMgbW9kaWZpZWRcblwKLXRvIHByb2R1Y2UgZGVyaXZhdGl2ZSB3b3Jrcywgc3VjaCBtb2RpZmllZCBzb2Z0d2FyZSBzaG91bGQgYmUgY2xlYXJseSBtYXJrZWQsXG5cCi1zbyBhcyBub3QgdG8gY29uZnVzZSBpdCB3aXRoIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSBmcm9tIExBTkwuXG5cCi1cblwKLUFkZGl0aW9uYWxseSwgdGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotTEEtQ0MgMDQtMTE1XG4KLQotIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCi0jIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sCi0KLSMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKLWxpY2Vuc2U9XAotRUNMSVBTRSBGT1VOREFUSU9OIFNPRlRXQVJFIFVTRVIgQUdSRUVNRU5UXG5cCi1NYXJjaCAxNywgMjAwNVxuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlL2ZlYXR1cmUueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvZmVhdHVyZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YjI1MzIuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLWZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucm0ub3J0ZSIKLSAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSIyLjAuMS5xdWFsaWZpZXIiCi0gICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIgotICAgICAgaW1hZ2U9ImVjbGlwc2VfdXBkYXRlXzEyMC5qcGciPgotCi0gICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vZWNsaXBzZS5vcmcvcHRwIj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zZWFyY2giLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucHJveHkucHJvdG9jb2wiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAuY29yZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC5ybS5yZW1vdGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAudXRpbHMiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucHJveHkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAudWkiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAubGF1bmNoIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC51dGlscy51aSIvPgotICAgPC9yZXF1aXJlcz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5ybS5vcnRlLmNvcmUiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS5wcm94eSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLm9ydGUudWkiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCi0gICAgICAgICB1bnBhY2s9ImZhbHNlIi8+Ci0KLTwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS1mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhZjk2Ni4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLm9ydGUtZmVhdHVyZS9saWNlbnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KLTwvaGVhZD4KLQotPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Ci08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KLTxwPk1hcmNoIDE3LCAyMDA1PC9wPgotCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+Ci0KLTxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUwotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKLSAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKLSAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KLSAgIAotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAotICAgCi08cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgotICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KLQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKLSAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgotICAgCi08dWw+Ci0JPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KLQk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+Ci0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCi0gICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KLQk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KLTwvdWw+ICAgCi0gCi08cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KLQotPHVsPgotCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgotCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+Ci0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgotCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+Ci0JPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgotPC91bD4KLQkJCi08cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCi1pbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCi1TdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KLXRoYXQgZGlyZWN0b3J5LjwvcD4KLQotPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgotCi08dWw+Ci0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KLQk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgotCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCi0JPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KLQk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgotPC91bD4KLQotPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgotCi08aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KLQotPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bwotICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KLSAgIAotPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmUvLnByb2plY3QgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YWQzZjUuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS1mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0tZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTBhNzdiLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0tZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcDQotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwNCi0gICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXA0KLSAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbA0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0tZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGYyZDVlLi4wMDAwMDAwCi0tLSBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0tZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIg0KLXhtbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiDQoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPg0KLQ0KLTxoZWFkPg0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPg0KLTxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4NCi08bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4NCi08bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+DQotPGxpbmsgcmVsPUZpbGUtTGlzdA0KLWhyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPg0KLTx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPg0KLTwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KLSA8bzpEb2N1bWVudFByb3BlcnRpZXM+DQotICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPg0KLSAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPg0KLSAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPg0KLSAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4NCi0gIDxvOlBhZ2VzPjQ8L286UGFnZXM+DQotICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPg0KLSAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+DQotICAgPG86TGluZXM+Nzc8L286TGluZXM+DQotICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+DQotICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4NCi0gIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+DQotIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+DQotPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQotIDx3OldvcmREb2N1bWVudD4NCi0gIDx3OlRyYWNrUmV2aXNpb25zLz4NCi0gPC93OldvcmREb2N1bWVudD4NCi08L3htbD48IVtlbmRpZl0tLT4NCi08c3R5bGU+DQotPCEtLQ0KLSAvKiBGb250IERlZmluaXRpb25zICovDQotQGZvbnQtZmFjZQ0KLQl7Zm9udC1mYW1pbHk6VGFob21hOw0KLQlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsNCi0JbXNvLWZvbnQtY2hhcnNldDowOw0KLQltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsNCi0JbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7DQotCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQ0KLSAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLw0KLXAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwNCi0Je21zby1zdHlsZS1wYXJlbnQ6IiI7DQotCW1hcmdpbjowaW47DQotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCi0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KLQlmb250LXNpemU6MTIuMHB0Ow0KLQlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCi0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQ0KLXANCi0Je21hcmdpbi1yaWdodDowaW47DQotCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOw0KLQltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsNCi0JbWFyZ2luLWxlZnQ6MGluOw0KLQltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQotCWZvbnQtc2l6ZToxMi4wcHQ7DQotCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KLQltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9DQotcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dA0KLQl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7DQotCW1hcmdpbjowaW47DQotCW1hcmdpbi1ib3R0b206LjAwMDFwdDsNCi0JbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KLQlmb250LXNpemU6OC4wcHQ7DQotCWZvbnQtZmFtaWx5OlRhaG9tYTsNCi0JbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQ0KLUBwYWdlIFNlY3Rpb24xDQotCXtzaXplOjguNWluIDExLjBpbjsNCi0JbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47DQotCW1zby1oZWFkZXItbWFyZ2luOi41aW47DQotCW1zby1mb290ZXItbWFyZ2luOi41aW47DQotCW1zby1wYXBlci1zb3VyY2U6MDt9DQotZGl2LlNlY3Rpb24xDQotCXtwYWdlOlNlY3Rpb24xO30NCi0tLT4NCi08L3N0eWxlPg0KLTwvaGVhZD4NCi0NCi08Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+DQotDQotPGRpdiBjbGFzcz1TZWN0aW9uMT4NCi0NCi08cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+DQotPC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVINCi1USEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLA0KLVJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQ0KLU9GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPg0KLQ0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4NCi0NCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpDQotaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24NCi1kaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+DQotYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+DQotDQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkNCi1jaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQ0KLWFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlDQotc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZA0KLWJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcg0KLWlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uDQotc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlDQotUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uDQotd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQ0KLXdvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yDQotZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+DQotDQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50DQotY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UNCi1vciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zDQotZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobw0KLXJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4NCi0NCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpDQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQNCi1hIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4NCi1zdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQ0KLWRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoDQotQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlDQotZm9ybS48L3NwYW4+PC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpDQotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cw0KLVJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlDQotcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydA0KLWFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQ0KLWNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uDQotb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQNCi1ieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbg0KLXRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8NCi1hbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzDQotbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpDQotUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cw0KLUNvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yDQotdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQ0KLXJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudA0KLWZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwNCi1wcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kDQotbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkNCi10byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLA0KLWlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUNCi10aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlDQotZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+DQotDQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkNCi1FYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodA0KLXJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4NCi10aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4NCi0NCi08cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUNCi1Qcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+DQotPC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpDQotaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+DQotDQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikNCi1pdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4NCi0NCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQ0KLWVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQNCi1jb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlDQotYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkNCi1hbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+DQotDQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpDQotZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywNCi1pbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoDQotYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPg0KLQ0KLTxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkNCi1zdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0DQotQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+DQotDQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpDQotc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZA0KLWluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGENCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4NCi0NCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UNCi1jb2RlIGZvcm06PC9zcGFuPiA8L3A+DQotDQotPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkNCi1pdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4NCi0NCi08cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhDQotY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55DQotY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4NCi0NCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUNCi1vcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cw0KLXN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPg0KLQ0KLTxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4NCi0NCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5DQotYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycw0KLWFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlDQotb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsDQotcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbA0KLWxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlDQotUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbA0KLUNvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyDQotQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kDQotY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcg0KLWxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvDQotdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbg0KLWNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0DQotb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzDQotcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyDQotdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsDQotQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3INCi10byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZA0KLWFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlDQotaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQ0KLVByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGENCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQ0KLWNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQNCi13YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcw0KLXNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQ0KLW90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGENCi1jb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUNCi1Db21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+DQotDQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTDQotQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVA0KLVdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsDQotV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULA0KLU1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5DQotcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUNCi1Qcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzDQotQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLA0KLWNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yDQotZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+DQotDQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTDQotQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SDQotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQotKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkNCi1PRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KLU5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GDQotVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRg0KLVRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+DQotDQotPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+DQotDQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZA0KLW9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yDQotZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0DQotZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUNCi1taW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+DQotDQotPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uDQotYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQ0KLWFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgNCi1vdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gNCi1SZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlDQotc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50DQotc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3INCi1jb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUNCi1wZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncw0KLXJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZA0KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsDQotUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5DQotUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPg0KLQ0KLTxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQ0KLWNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcw0KLWNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudA0KLVN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZg0KLXRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzDQotdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbA0KLUFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvDQotc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uDQotb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtDQotKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YNCi10aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YNCi10aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0NCi0oaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkDQotaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bw0KLXRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyDQotZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdA0KLWV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4NCi0NCi08cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlDQotU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZg0KLUFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcw0KLUFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMNCi1pdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+DQotDQotPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPg0KLQ0KLTwvZGl2Pg0KLQ0KLTwvYm9keT4NCi0NCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0tZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YWQ5ODQuLjAwMDAwMDAKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS1mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0gIyBDb3B5cmlnaHQgKGMpIDIwMDgsMjAwOSBTY2hvb2wgb2YgQ29tcHV0ZXIgU2NpZW5jZSxOYXRpb25hbCBVbml2ZXJzaXR5IA0KLSAjIG9mIERlZmVuc2UgVGVjaG5vbG9neSxDaGFuZ3NoYSxDaGluYS5BbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0NCi0gIyBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiANCi0gIyB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLA0KLSAjIGFuZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gIyBDb250cmlidXRvcnM6DQotICMgTlVEVCBzY2hvb2wgb2YgY29tcHV0ZXIgLSA2MDUgc3RhZmYgcm9vbQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLQ0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUNCi1mZWF0dXJlTmFtZT1QVFAgU3VwcG9ydCBGb3IgU0xVUk0NCi0NCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlDQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnDQotDQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQ0KLXVwZGF0ZVNpdGVOYW1lPUVjbGlwc2UgUFRQIFVwZGF0ZSBTaXRlDQotDQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUNCi1kZXNjcmlwdGlvbj1BZGRzIHN1cHBvcnQgZm9yIFNsdXJtDQotDQotIyBjb3B5cmlnaHQNCi1jb3B5cmlnaHQ9XA0KLSAgIENvcHlyaWdodCAoYykgMjAwOCwyMDA5IFNjaG9vbCBvZiBDb21wdXRlcixOYXRpb25hbCBVbml2ZXJzaXR5IFxuXA0KLSAgb2YgRGVmZW5zZSBUZWNobm9sb2d5LFAuUi5DaGluYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtXG5cDQotICBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBcblwNCi0gIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sXG5cDQotICBhbmQgaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cDQotICBDb250cmlidXRvcnM6XG5cDQotICBTY2hvb2wgb2YgQ29tcHV0ZXIgLSA2MDUgc3RhZmYgcm9vbQ0KLQ0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIg0KLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQ0KLWxpY2Vuc2VVUkw9bGljZW5zZS5odG1sDQotDQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSINCi0jIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCINCi1saWNlbnNlPVwNCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwNCi1NYXJjaCAxNywgMjAwNVxuXA0KLVxuXA0KLVVzYWdlIE9mIENvbnRlbnRcblwNCi1cblwNCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cDQotT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cDQotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cDQotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cDQotTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXA0KLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwNCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXA0KLU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cDQotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXA0KLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cDQotQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXA0KLVxuXA0KLUFwcGxpY2FibGUgTGljZW5zZXNcblwNCi1cblwNCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXA0KLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cDQotTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXNcblwNCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwNCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwNCi1cblwNCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwNCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwNCi1yZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXA0KLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXA0KLVxuXA0KLSAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwNCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwNCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cDQotICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmE/IEFSY2hpdmUpXG5cDQotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cDQotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwNCi0gICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cDQotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwNCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwNCi0gICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXA0KLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cDQotXG5cDQotRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkXG5cDQotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwNCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwNCi1cblwNCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cDQotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cDQotY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwNCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cDQotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXA0KLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXA0KLVxuXA0KLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cDQotICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXA0KLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXA0KLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXA0KLSAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXA0KLVxuXA0KLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwNCi1FY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZVxuXA0KLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXA0KLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cDQotd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwNCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cDQotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cDQotRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kXG5cDQotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cDQotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cDQotXG5cDQotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cDQotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cDQotU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXA0KLVxuXA0KLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXA0KLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXA0KLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwNCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cDQotICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cDQotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwNCi1cblwNCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cDQotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwNCi1pcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXA0KLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwNCi1cblwNCi1DcnlwdG9ncmFwaHlcblwNCi1cblwNCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwNCi1jdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cDQotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXA0KLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXA0KLXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSxcblwNCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwNCi1cblwNCi1KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbg0KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0tZmVhdHVyZS9mZWF0dXJlLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0tZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyZGM5YS4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0iCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMi4xLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSIKLSAgICAgIHBsdWdpbj0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUiCi0gICAgICBpbWFnZT0iZWNsaXBzZV91cGRhdGVfMTIwLmpwZyI+Ci0KLSAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly9lY2xpcHNlLm9yZy9wdHAiPgotICAgICAgJWRlc2NyaXB0aW9uCi0gICA8L2Rlc2NyaXB0aW9uPgotCi0gICA8Y29weXJpZ2h0PgotICAgICAgJWNvcHlyaWdodAotICAgPC9jb3B5cmlnaHQ+Ci0KLSAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgotICAgICAgJWxpY2Vuc2UKLSAgIDwvbGljZW5zZT4KLQotICAgPHVybD4KLSAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvcHRwL3JlbGVhc2VzLzIuMSIvPgotICAgPC91cmw+Ci0KLSAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UucHRwLmNvcmUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucm0uY29yZSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC5ybS5yZW1vdGUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5wdHAucmVtb3RlLmNvcmUiLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0iLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNlYXJjaCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC5sYXVuY2giLz4KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5kZWJ1Zy51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC5ybS51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC51dGlscy51aSIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnB0cC5wcm94eS5wcm90b2NvbCIvPgotICAgPC9yZXF1aXJlcz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIgotICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmUvbGljZW5zZS5odG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS1mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVhMTBjZi4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLWZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPg0KLTxodG1sPg0KLTxoZWFkPg0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4NCi08dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPg0KLTwvaGVhZD4NCi0NCi08Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4NCi08aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4NCi08cD5NYXJjaCAxNywgMjAwNTwvcD4NCi0NCi08aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+DQotDQotPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTDQotICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQNCi0gICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFDQotICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1INCi0gICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQNCi0gICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+DQotICAgDQotPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIA0KLSAgIA0KLTxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjANCi0gICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+Lg0KLSAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+DQotDQotPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMNCi0gICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4NCi0gICANCi08dWw+DQotCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+DQotCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4NCi0JPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zDQotICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+DQotCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPg0KLTwvdWw+ICAgDQotIA0KLTxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kDQotSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUNCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+DQotDQotPHVsPg0KLQk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4NCi0JPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4NCi0JPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPg0KLQk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPg0KLQk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+DQotPC91bD4NCi0JCQ0KLTxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlDQotaW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yDQotaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLg0KLVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbg0KLXRoYXQgZGlyZWN0b3J5LjwvcD4NCi0NCi08cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQ0KLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPg0KLQ0KLTx1bD4NCi0JPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4NCi0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4NCi0JPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPg0KLQk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JDQotCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+DQotCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+DQotPC91bD4NCi0NCi08cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQ0KLWNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPg0KLQ0KLTxoMz5DcnlwdG9ncmFwaHk8L2gzPg0KLQ0KLTxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8NCi0gICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwNCi0gICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4NCi0gICANCi08c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICANCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLy5jbGFzc3BhdGggYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS8ucHJvamVjdCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjZjZTBhLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMWUzNTQuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotI01vbiBPY3QgMDYgMTQ6MzY6NDQgR01ULTAzOjAwIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NWEwNmUuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjEuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUuTVBJQ0gyUGx1Z2luCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwKLSBvcmcuZWNsaXBzZS5wdHAuY29yZSwKLSBvcmcuZWNsaXBzZS5wdHAucm0uY29yZSwKLSBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLAotIG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0sCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2Uuc2VhcmNoCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUsCi0gb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5ybXN5c3RlbSwKLSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLnJ0c3lzdGVtCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2Fib3V0Lmh0bWwgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjgxMDkzLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+TWF5IDIsIDIwMDY8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IGFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2Fib3V0LmluaSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2Fib3V0LmluaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2NzYyYS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9hYm91dC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIGFib3V0LmluaQotIyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIGZlYXR1cmUKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgIiVrZXkiIGFyZSBleHRlcm5hbGl6ZWQgc3RyaW5ncyBkZWZpbmVkIGluIGFib3V0LnByb3BlcnRpZXMKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotIyBQcm9wZXJ0eSAiYWJvdXRUZXh0IiBjb250YWlucyBibHVyYiBmb3IgIkFib3V0IiBkaWFsb2cgKHRyYW5zbGF0ZWQpCi1hYm91dFRleHQ9JWJsdXJiCi0KLSMgUHJvcGVydHkgIndpbmRvd0ltYWdlIiBjb250YWlucyBwYXRoIHRvIHdpbmRvdyBpY29uICgxNngxNikKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAiZmVhdHVyZUltYWdlIiBjb250YWlucyBwYXRoIHRvIGZlYXR1cmUgaW1hZ2UgKDMyeDMyKQotZmVhdHVyZUltYWdlPWVjbGlwc2UzMi5wbmcKLQotIyBQcm9wZXJ0eSAiYWJvdXRJbWFnZSIgY29udGFpbnMgcGF0aCB0byBwcm9kdWN0IGltYWdlICg1MDB4MzMwIG9yIDExNXgxNjQpCi0jIG5lZWRlZCBmb3IgcHJpbWFyeSBmZWF0dXJlcyBvbmx5Ci0KLSMgUHJvcGVydHkgImFwcE5hbWUiIGNvbnRhaW5zIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIChub3QgdHJhbnNsYXRlZCkKLSMgbmVlZGVkIGZvciBwcmltYXJ5IGZlYXR1cmVzIG9ubHkKLQotIyBQcm9wZXJ0eSAid2VsY29tZVBhZ2UiIGNvbnRhaW5zIHBhdGggdG8gd2VsY29tZSBwYWdlIChzcGVjaWFsIFhNTC1iYXNlZCBmb3JtYXQpCi0jIG9wdGlvbmFsCi0KLSMgUHJvcGVydHkgIndlbGNvbWVQZXJzcGVjdGl2ZSIgY29udGFpbnMgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSBpbiB3aGljaCB0aGUKLSMgd2VsY29tZSBwYWdlIGlzIHRvIGJlIG9wZW5lZC4KLSMgb3B0aW9uYWwKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2Fib3V0Lm1hcHBpbmdzIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvYWJvdXQubWFwcGluZ3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZGFhYjQuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvYWJvdXQubWFwcGluZ3MKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgYWJvdXQubWFwcGluZ3MKLSMgY29udGFpbnMgZmlsbC1pbnMgZm9yIGFib3V0LnByb3BlcnRpZXMKLSMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKLSMgVGhpcyBmaWxlIGRvZXMgbm90IG5lZWQgdG8gYmUgdHJhbnNsYXRlZC4KLQotMD1AYnVpbGRAClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvYWJvdXQucHJvcGVydGllcyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2Fib3V0LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDE1ZTguLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvYWJvdXQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBOTFNfTUVTU0FHRUZPUk1BVF9OT05FCi0jIE5MU19FTkNPRElORz1VVEYtOAotCi1ibHVyYj1QVFAgTVBJQ0gyIChuZXcpIFN1cHBvcnRcblwKLVxuXAotVmVyc2lvbjoge2ZlYXR1cmVWZXJzaW9ufVxuXAotQnVpbGQgaWQ6IHswfVxuXAotXG5cCi1Db3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLCBhbmQgb3RoZXJzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblwKLVZpc2l0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvcHRwXG4KLQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvYnVpbGQucHJvcGVydGllcyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MjFmODkuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZGF0YS8sXAotICAgICAgICAgICAgICAgYWJvdXQuaW5pLFwKLSAgICAgICAgICAgICAgIGFib3V0Lm1hcHBpbmdzLFwKLSAgICAgICAgICAgICAgIGFib3V0LnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgZWNsaXBzZTMyLnBuZyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvZGF0YS9kZWZhdWx0cy5wcm9wZXJ0aWVzIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvZGF0YS9kZWZhdWx0cy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzhkYjllLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL2RhdGEvZGVmYXVsdHMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotTEFVTkNIX0NNRD1tcGlleGVjIC1sIC1hICR7TVBJQ0gyX2pvYmlkfSAke01QSUNIMl9hcmdzfSAke01QSUNIMl9lbnZ9ICR7ZXhlY1BhdGh9LyR7ZXhlY05hbWV9ICR7cHJvZ0FyZ3N9Ci1ERUJVR19DTUQ9bXBpZXhlYyAgLWwgLWEgJHtNUElDSDJfam9iaWR9ICR7TVBJQ0gyX2FyZ3N9ICR7TVBJQ0gyX2Vudn0gJHtkZWJ1Z0V4ZWNQYXRofS8ke2RlYnVnRXhlY05hbWV9ICR7ZGVidWdBcmdzfQotRElTQ09WRVJfQ01EPW1wZHRyYWNlIC1sCi1QRVJJT0RJQ19DTUQ9bXBkbGlzdGpvYnMKLVBFUklPRElDX1RJTUU9NTAwMAotUEFUSD0KLVVTRV9ERUZBVUxUUz10cnVlCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9lY2xpcHNlMzIucG5nIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvZWNsaXBzZTMyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY4ZmFjMS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9lY2xpcHNlMzIucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmYjViYi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotcGx1Z2luTmFtZT1QVFAgTVBJQ0gyIChuZXcpIFN1cHBvcnQKLXBsdWdpblByb3ZpZGVyPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9wbHVnaW4ueG1sIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyMDM2Mi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UucHRwLmNvcmUucmVzb3VyY2VNYW5hZ2VycyI+Ci0gICAgICA8cmVzb3VyY2VNYW5hZ2VyCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5ybXN5c3RlbS5NUElDSDJSZXNvdXJjZU1hbmFnZXJGYWN0b3J5IgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5tcGljaDIuY29yZS5yZXNvdXJjZW1hbmFnZXIiCi0gICAgICAgICAgICBuYW1lPSJNUElDSDIiLz4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlcy5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyQXBwbGljYXRpb25BdHRyaWJ1dGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZGE0ZTYuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyQXBwbGljYXRpb25BdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXJyYXlBdHRyaWJ1dGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuU3RyaW5nQXR0cmlidXRlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLm1lc3NhZ2VzLk1lc3NhZ2VzOwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyQXBwbGljYXRpb25BdHRyaWJ1dGVzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUZGRUNUSVZFX01QSUNIMl9FTlZfQVRUUl9JRCA9ICJNUElDSDJfZW52IjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFRkZFQ1RJVkVfTVBJQ0gyX1BST0dfQVJHU19BVFRSX0lEID0gIk1QSUNIMl9wcm9nQXJncyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRUZGRUNUSVZFX01QSUNIMl9XT1JLSU5HX0RJUl9BVFRSX0lEID0gIk1QSUNIMl93b3JraW5nRGlyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQXJyYXlBdHRyaWJ1dGVEZWZpbml0aW9uPFN0cmluZz4gZWZmZWN0aXZlTVBJQ0gyRW52QXR0ckRlZiA9Ci0JCW5ldyBBcnJheUF0dHJpYnV0ZURlZmluaXRpb248U3RyaW5nPihFRkZFQ1RJVkVfTVBJQ0gyX0VOVl9BVFRSX0lELCBNZXNzYWdlcy5NUElDSDJBcHBsaWNhdGlvbkF0dHJpYnV0ZXNfZWZmZWN0aXZlTVBJQ0gyRW52QXR0ckRlZl90aXRsZSwKLQkJCQlNZXNzYWdlcy5NUElDSDJBcHBsaWNhdGlvbkF0dHJpYnV0ZXNfZWZmZWN0aXZlTVBJQ0gyRW52QXR0ckRlZl9kZXNjcmlwdGlvbiwgdHJ1ZSwgbnVsbCk7Ci0KLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBBcnJheUF0dHJpYnV0ZURlZmluaXRpb248U3RyaW5nPiBlZmZlY3RpdmVNUElDSDJQcm9nQXJnc0F0dHJEZWYgPQotCQluZXcgQXJyYXlBdHRyaWJ1dGVEZWZpbml0aW9uPFN0cmluZz4oRUZGRUNUSVZFX01QSUNIMl9QUk9HX0FSR1NfQVRUUl9JRCwgTWVzc2FnZXMuTVBJQ0gyQXBwbGljYXRpb25BdHRyaWJ1dGVzX2VmZmVjdGl2ZU1QSUNIMlByb2dBcmdzQXR0ckRlZl90aXRsZSwKLQkJCQlNZXNzYWdlcy5NUElDSDJBcHBsaWNhdGlvbkF0dHJpYnV0ZXNfZWZmZWN0aXZlTVBJQ0gyUHJvZ0FyZ3NBdHRyRGVmX2Rlc2NyaXB0aW9uLCB0cnVlLCBudWxsKTsKLQotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gZWZmZWN0aXZlTVBJQ0gyV29ya2luZ0RpckF0dHJEZWYgPQotCQluZXcgU3RyaW5nQXR0cmlidXRlRGVmaW5pdGlvbihFRkZFQ1RJVkVfTVBJQ0gyX1dPUktJTkdfRElSX0FUVFJfSUQsIE1lc3NhZ2VzLk1QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlc19lZmZlY3RpdmVNUElDSDJXb3JraW5nRGlyQXR0ckRlZl90aXRsZSwKLQkJCQlNZXNzYWdlcy5NUElDSDJBcHBsaWNhdGlvbkF0dHJpYnV0ZXNfZWZmZWN0aXZlTVBJQ0gyV29ya2luZ0RpckF0dHJEZWZfZGVzY3JpcHRpb24sIHRydWUsICIiKTsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgTVBJQ0gyIGhhcyBwYXNzZWQgdG8gdGhlIHByb2Nlc3Nlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFycmF5QXR0cmlidXRlRGVmaW5pdGlvbjxTdHJpbmc+IGdldEVmZmVjdGl2ZU1QSUNIMkVudkF0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBlZmZlY3RpdmVNUElDSDJFbnZBdHRyRGVmOwotCX0KLQotCS8qKgotCSAqIFByb2dyYW0gYXJndW1lbnRzIHRoYXQgTVBJQ0gyIGhhcyBwYXNzZWQgdG8gdGhlIHByb2Nlc3Nlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEFycmF5QXR0cmlidXRlRGVmaW5pdGlvbjxTdHJpbmc+IGdldEVmZmVjdGl2ZU1QSUNIMlByb2dBcmdzQXR0cmlidXRlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIGVmZmVjdGl2ZU1QSUNIMlByb2dBcmdzQXR0ckRlZjsKLQl9Ci0KLQkvKioKLQkgKiBXb3JraW5nIGRpcmVjdG9yeSB3aGVyZSBNUElDSDIgaGFzIHN0YXJ0ZWQgdGhlIHByb2Nlc3Nlcy4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gZ2V0RWZmZWN0aXZlTVBJQ0gyV29ya2luZ0RpckF0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBlZmZlY3RpdmVNUElDSDJXb3JraW5nRGlyQXR0ckRlZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9NUElDSDJEZWZhdWx0cy5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyRGVmYXVsdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiNGIyZC4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9NUElDSDJEZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLm1lc3NhZ2VzLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNUElDSDJEZWZhdWx0cyB7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBMQVVOQ0hfQ01EID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBERUJVR19DTUQgPSBudWxsOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIERJU0NPVkVSX0NNRCA9IG51bGw7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgUEVSSU9ESUNfQ01EID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIGludCBQRVJJT0RJQ19USU1FID0gMDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBQQVRIID0gbnVsbDsKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gVVNFX0RFRkFVTFRTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVmYXVsdHNSZXNvdXJjZVBhdGggPSAiL2RhdGEvZGVmYXVsdHMucHJvcGVydGllcyI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2FkRGVmYXVsdHMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVBhdGggZGVmYXVsdHNQcm9wZXJ0aWVzUGF0aCA9IG5ldyBQYXRoKGRlZmF1bHRzUmVzb3VyY2VQYXRoKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IE1QSUNIMlBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCk7Ci0JCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IHJlYWQoZGVmYXVsdHNQcm9wZXJ0aWVzUGF0aCwgYnVuZGxlKTsKLQotCQlMQVVOQ0hfQ01EID0gZ2V0U3RyaW5nKGJ1bmRsZSwgcHJvcGVydGllcywgIkxBVU5DSF9DTUQiKTsgLy8kTk9OLU5MUy0xJAotCQlERUJVR19DTUQgPSBnZXRTdHJpbmcoYnVuZGxlLCBwcm9wZXJ0aWVzLCAiREVCVUdfQ01EIik7IC8vJE5PTi1OTFMtMSQKLQkJRElTQ09WRVJfQ01EID0gZ2V0U3RyaW5nKGJ1bmRsZSwgcHJvcGVydGllcywgIkRJU0NPVkVSX0NNRCIpOyAvLyROT04tTkxTLTEkCi0JCVBFUklPRElDX0NNRCA9IGdldFN0cmluZyhidW5kbGUsIHByb3BlcnRpZXMsICJQRVJJT0RJQ19DTUQiKTsgLy8kTk9OLU5MUy0xJAotCQlQRVJJT0RJQ19USU1FID0gZ2V0SW50ZWdlcihidW5kbGUsIHByb3BlcnRpZXMsICJQRVJJT0RJQ19USU1FIik7IC8vJE5PTi1OTFMtMSQKLQkJUEFUSCA9IGdldFN0cmluZyhidW5kbGUsIHByb3BlcnRpZXMsICJQQVRIIik7IC8vJE5PTi1OTFMtMSQKLQkJVVNFX0RFRkFVTFRTID0gZ2V0Qm9vbGVhbihidW5kbGUsIHByb3BlcnRpZXMsICJVU0VfREVGQVVMVFMiKTsgLy8kTk9OLU5MUy0xJAotCi0JCWFzc2VydCBMQVVOQ0hfQ01EICE9IG51bGw7Ci0JCWFzc2VydCBERUJVR19DTUQgIT0gbnVsbDsKLQkJYXNzZXJ0IERJU0NPVkVSX0NNRCAhPSBudWxsOwotCQlhc3NlcnQgUEVSSU9ESUNfQ01EICE9IG51bGw7Ci0JCWFzc2VydCBQQVRIICE9IG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBQcm9wZXJ0aWVzIHJlYWQoUGF0aCBkZWZhdWx0c1Byb3BlcnRpZXNQYXRoLCBCdW5kbGUgYnVuZGxlKQotCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW07Ci0JCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCXRyeSB7Ci0JCQlpblN0cmVhbSA9IEZpbGVMb2NhdG9yLm9wZW5TdHJlYW0oYnVuZGxlLCBkZWZhdWx0c1Byb3BlcnRpZXNQYXRoLCBmYWxzZSk7Ci0JCQlwcm9wZXJ0aWVzLmxvYWQoaW5TdHJlYW0pOwotCi0KLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgTVBJQ0gyUGx1Z2luLmNvcmVFcnJvckV4Y2VwdGlvbihNZXNzYWdlcy5NUElDSDJEZWZhdWx0c19FeGNlcHRpb25fRmFpbGVkUmVhZEZpbGUsIGUpOwotCQl9Ci0JCXJldHVybiBwcm9wZXJ0aWVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhCdW5kbGUgYnVuZGxlLCBQcm9wZXJ0aWVzIHByb3BlcnRpZXMsIFN0cmluZyBrZXkpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHZhbHVlID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eShrZXkpOwotCQlpZiAodmFsdWUgPT0gbnVsbCkgewotCQkJdGhyb3cgbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBidW5kbGUuZ2V0U3ltYm9saWNOYW1lKCksIE5MUy5iaW5kKE1lc3NhZ2VzLk1QSUNIMkRlZmF1bHRzX01pc3NpbmdWYWx1ZSwga2V5KSkpOwotCQl9Ci0JCQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBpbnQgZ2V0SW50ZWdlcihCdW5kbGUgYnVuZGxlLCBQcm9wZXJ0aWVzIHByb3BlcnRpZXMsIFN0cmluZyBrZXkpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHZhbHVlID0gZ2V0U3RyaW5nKGJ1bmRsZSwgcHJvcGVydGllcywga2V5KTsKLQkJdHJ5IHsKLQkJCXJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTsKLQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgYnVuZGxlLmdldFN5bWJvbGljTmFtZSgpLCBOTFMuYmluZChNZXNzYWdlcy5NUElDSDJEZWZhdWx0c19GYWlsZWRQYXJzZUludGVnZXIsIGtleSkpKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBnZXRCb29sZWFuKEJ1bmRsZSBidW5kbGUsIFByb3BlcnRpZXMgcHJvcGVydGllcywgU3RyaW5nIGtleSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgdmFsdWUgPSBnZXRTdHJpbmcoYnVuZGxlLCBwcm9wZXJ0aWVzLCBrZXkpOwotCQlyZXR1cm4gQm9vbGVhbi5wYXJzZUJvb2xlYW4odmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMkpvYkF0dHJpYnV0ZXMuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMkpvYkF0dHJpYnV0ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxMTBkZi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9NUElDSDJKb2JBdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZTsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5JQXR0cmlidXRlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLlN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5tZXNzYWdlcy5NZXNzYWdlczsKLQotCi0vKioKLSAqIE5vZGUgYXR0cmlidXRlcy4KLSAqIEBhdXRob3IgRGFuaWVsIEZlbGl4IEZlcmJlcgotICoKLSAqLwotcHVibGljIGNsYXNzIE1QSUNIMkpvYkF0dHJpYnV0ZXMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpPQl9JRF9BVFRSX0lEID0gIk1QSUNIMl9qb2JpZCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVE5BTUVfQVRUUl9JRCA9ICJNUElDSDJfaG9zdG5hbWUiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYklkQXR0ckRlZiA9Ci0JCW5ldyBTdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uKEpPQl9JRF9BVFRSX0lELCBNZXNzYWdlcy5NUElDSDJKb2JBdHRyaWJ1dGVzX21waUpvYklkQXR0ckRlZl90aXRsZSwKLQkJCQlNZXNzYWdlcy5NUElDSDJKb2JBdHRyaWJ1dGVzX21waUpvYklkQXR0ckRlZl9kZXNjcmlwdGlvbiwgdHJ1ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uIGhvc3RuYW1lQXR0ckRlZiA9Ci0JCW5ldyBTdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uKEhPU1ROQU1FX0FUVFJfSUQsIE1lc3NhZ2VzLk1QSUNIMkpvYkF0dHJpYnV0ZXNfaG9zdG5hbWVBdHRyRGVmX3RpdGxlLCAKLQkJCQlNZXNzYWdlcy5NUElDSDJKb2JBdHRyaWJ1dGVzX2hvc3RuYW1lQXR0ckRlZl9kZXNjcmlwdGlvbiwgdHJ1ZSwgIiIpOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gZ2V0Sm9iSWRBdHRyaWJ1dGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gam9iSWRBdHRyRGVmOwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nQXR0cmlidXRlRGVmaW5pdGlvbiBnZXRIb3N0bmFtZUF0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBob3N0bmFtZUF0dHJEZWY7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJQXR0cmlidXRlRGVmaW5pdGlvbjw/LD8sPz5bXSBnZXREZWZhdWx0QXR0cmlidXRlRGVmaW5pdGlvbnMoKSB7Ci0JCXJldHVybiBuZXcgSUF0dHJpYnV0ZURlZmluaXRpb25bXXtqb2JJZEF0dHJEZWYsIGhvc3RuYW1lQXR0ckRlZn07Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMkxhdW5jaEF0dHJpYnV0ZXMuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMkxhdW5jaEF0dHJpYnV0ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzMGRhMi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9NUElDSDJMYXVuY2hBdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXJyYXlBdHRyaWJ1dGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuSUF0dHJpYnV0ZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5TdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUubWVzc2FnZXMuTWVzc2FnZXM7Ci0KLQotLyoqCi0gKiBPTVBJLXNwZWNpZmljIGF0dHJpYnV0ZXMKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKi8KLXB1YmxpYyBjbGFzcyBNUElDSDJMYXVuY2hBdHRyaWJ1dGVzIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFVTkNIX0FSR1NfQVRUUl9JRCA9ICJNUElDSDJfYXJncyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5WX0tFWVNfQVRUUl9JRCA9ICJNUElDSDJfZW52S2V5cyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5WX0FSR1NfQVRUUl9JRCA9ICJNUElDSDJfZW52IjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nQXR0cmlidXRlRGVmaW5pdGlvbiBsYXVuY2hBcmdzQXR0ckRlZiA9Ci0JCW5ldyBTdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uKExBVU5DSF9BUkdTX0FUVFJfSUQsIE1lc3NhZ2VzLk1QSUNIMkxhdW5jaEF0dHJpYnV0ZXNfbGF1bmNoQXJnc0F0dHJEZWZfdGl0bGUsCi0JCQkJTWVzc2FnZXMuTVBJQ0gyTGF1bmNoQXR0cmlidXRlc19sYXVuY2hBcmdzQXR0ckRlZl9kZXNjcmlwdGlvbiwgZmFsc2UsICIiKTsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQXJyYXlBdHRyaWJ1dGVEZWZpbml0aW9uPFN0cmluZz4gZW52aXJvbm1lbnRLZXlBdHRyRGVmID0gbmV3IEFycmF5QXR0cmlidXRlRGVmaW5pdGlvbjxTdHJpbmc+KAotCQkJRU5WX0tFWVNfQVRUUl9JRCwgTWVzc2FnZXMuTVBJQ0gyTGF1bmNoQXR0cmlidXRlc19lbnZpcm9ubWVudEtleUF0dHJEZWZfdGl0bGUsCi0JCQlNZXNzYWdlcy5NUElDSDJMYXVuY2hBdHRyaWJ1dGVzX2Vudmlyb25tZW50S2V5QXR0ckRlZl9kZXNjcmlwdGlvbiwgZmFsc2UsCi0JCQluZXcgU3RyaW5nWzBdKTsKLQotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gZW52aXJvbm1lbnRBcmdzQXR0ckRlZiA9IG5ldyBTdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uKAotCQkJRU5WX0FSR1NfQVRUUl9JRCwgTWVzc2FnZXMuTVBJQ0gyTGF1bmNoQXR0cmlidXRlc19lbnZpcm9ubWVudEFyZ3NBdHRyRGVmX3RpdGxlLCBNZXNzYWdlcy5NUElDSDJMYXVuY2hBdHRyaWJ1dGVzX2Vudmlyb25tZW50QXJnc0F0dHJEZWZfZGVzY3JpcHRpb24sIGZhbHNlLAotCSIke01QSUNIMl9lbnZLZXlzOjogLXggOjoteCA6fSIpOyAvLyROT04tTkxTLTEkCi0KLQkvKioKLQkgKiBMaXN0IG9mIG5hbWVzIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQXJyYXlBdHRyaWJ1dGVEZWZpbml0aW9uPFN0cmluZz4gZ2V0RW52aXJvbm1lbnRLZXlzQXR0cmlidXRlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIGVudmlyb25tZW50S2V5QXR0ckRlZjsKLQl9Ci0KLQkvKioKLQkgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBhcHBsaWNhdGlvbiwgYXMgZXhwZWN0ZWQgYnkgb3Blbm1waSBjb21tYW5kIGxpbmUuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uIGdldEVudmlyb25tZW50QXJnc0F0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBlbnZpcm9ubWVudEFyZ3NBdHRyRGVmOwotCX0KLQotCS8qKgotCSAqIEFyZ3VtZW50cyBmb3IgdGhlIGFwcGxpY2F0aW9uLCBhcyBleHBlY3RlZCBieSBvcGVubXBpIGNvbW1hbmQgbGluZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gZ2V0TGF1bmNoQXJndW1lbnRzQXR0cmlidXRlRGVmaW5pdGlvbigpIHsKLQkJcmV0dXJuIGxhdW5jaEFyZ3NBdHRyRGVmOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSUF0dHJpYnV0ZURlZmluaXRpb248Pyw/LD8+W10gZ2V0RGVmYXVsdEF0dHJpYnV0ZURlZmluaXRpb25zKCkgewotCQlyZXR1cm4gbmV3IElBdHRyaWJ1dGVEZWZpbml0aW9uW117Ci0JCQkJbGF1bmNoQXJnc0F0dHJEZWYsZW52aXJvbm1lbnRBcmdzQXR0ckRlZixlbnZpcm9ubWVudEtleUF0dHJEZWYKLQkJfTsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXMuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMk1hY2hpbmVBdHRyaWJ1dGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OGI1MWIuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlOwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogSUJNIENvcnBvcmF0aW9uIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLklBdHRyaWJ1dGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuU3RyaW5nQXR0cmlidXRlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLm1lc3NhZ2VzLk1lc3NhZ2VzOwotCi0KLS8qKgotICogTm9kZSBhdHRyaWJ1dGVzCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqLwotcHVibGljIGNsYXNzIE1QSUNIMk1hY2hpbmVBdHRyaWJ1dGVzIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUVVNfTUVTU0FHRSA9ICJNUElDSDJfc3RhdHVzTWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gc3RhdHVzTWVzc2FnZUF0dHJEZWYgPQotCQluZXcgU3RyaW5nQXR0cmlidXRlRGVmaW5pdGlvbihTVEFUVVNfTUVTU0FHRSwgTWVzc2FnZXMuTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfdGl0bGUsCi0JCQkJTWVzc2FnZXMuTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfZGVzY3JpcHRpb24sIHRydWUsICIiKTsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogU3RhdHVzIG1lc3NhZ2UgaWYgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBkaXNjb3ZlciB0aGUgbWFjaGluZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gZ2V0U3RhdHVzTWVzc2FnZUF0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBzdGF0dXNNZXNzYWdlQXR0ckRlZjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElBdHRyaWJ1dGVEZWZpbml0aW9uPD8sPyw/PltdIGdldERlZmF1bHRBdHRyaWJ1dGVEZWZpbml0aW9ucygpIHsKLQkJcmV0dXJuIG5ldyBJQXR0cmlidXRlRGVmaW5pdGlvbltde3N0YXR1c01lc3NhZ2VBdHRyRGVmfTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMk5vZGVBdHRyaWJ1dGVzLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9NUElDSDJOb2RlQXR0cmlidXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTIxYjk2Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMk5vZGVBdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZTsKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIElCTSBDb3Jwb3JhdGlvbiAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5Cb29sZWFuQXR0cmlidXRlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLklBdHRyaWJ1dGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5TdHJpbmdBdHRyaWJ1dGVEZWZpbml0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUubWVzc2FnZXMuTWVzc2FnZXM7Ci0KLQotLyoqCi0gKiBOb2RlIGF0dHJpYnV0ZXMKLSAqIEBhdXRob3IgRGFuaWVsIEZlbGl4IEZlcmJlcgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyTm9kZUF0dHJpYnV0ZXMgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5VTV9OT0RFU19JRCA9ICJNUElDSDJfbnVtTm9kZXMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BWF9OVU1fTk9ERVNfSUQgPSAiTVBJQ0gyX21heE51bU5vZGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUVVNfTUVTU0FHRSA9ICJNUElDSDJfc3RhdHVzTWVzc2FnZSI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1ZFUlNVQlNDUklCRUQgPSAiTVBJQ0gyX292ZXJzdWJzY3JpYmVkIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gbnVtTm9kZXNBdHRyRGVmID0KLQkJbmV3IEludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uKE5VTV9OT0RFU19JRCwgTWVzc2FnZXMuTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfbnVtTm9kZXNBdHRyRGVmX3RpdGxlLAotCQkJCU1lc3NhZ2VzLk1QSUNIMk5vZGVBdHRyaWJ1dGVzX251bU5vZGVzQXR0ckRlZl9kZXNjcmlwdGlvbiwgdHJ1ZSwgbmV3IEludGVnZXIoMCkpOwotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gbWF4TnVtTm9kZXNBdHRyRGVmID0KLQkJbmV3IEludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uKE1BWF9OVU1fTk9ERVNfSUQsIE1lc3NhZ2VzLk1QSUNIMk5vZGVBdHRyaWJ1dGVzX21heE51bU5vZGVzQXR0ckRlZl90aXRsZSwKLQkJCQlNZXNzYWdlcy5NUElDSDJOb2RlQXR0cmlidXRlc19tYXhOdW1Ob2Rlc0F0dHJEZWZfZGVzY3JpcHRpb24sIHRydWUsIG5ldyBJbnRlZ2VyKDApKTsKLQotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gc3RhdHVzTWVzc2FnZUF0dHJEZWYgPQotCQluZXcgU3RyaW5nQXR0cmlidXRlRGVmaW5pdGlvbihTVEFUVVNfTUVTU0FHRSwgTWVzc2FnZXMuTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfdGl0bGUsCi0JCQkJTWVzc2FnZXMuTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfZGVzY3JpcHRpb24sIHRydWUsICIiKTsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQm9vbGVhbkF0dHJpYnV0ZURlZmluaXRpb24gb3ZlcnN1YnNjcmliZWRBdHRyRGVmID0KLQkJbmV3IEJvb2xlYW5BdHRyaWJ1dGVEZWZpbml0aW9uKE9WRVJTVUJTQ1JJQkVELCBNZXNzYWdlcy5NUElDSDJOb2RlQXR0cmlidXRlc19vdmVyc3Vic2NyaWJlZEF0dHJEZWZfdGl0bGUsCi0JCQkJTWVzc2FnZXMuTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfb3ZlcnN1YnNjcmliZWRBdHRyRGVmX2Rlc2NyaXB0aW9uLCB0cnVlLCBuZXcgQm9vbGVhbihmYWxzZSkpOwotCi0JLyoqCi0JICogTnVtYmVyIG9mIHNsb3RzIHN1Z2dlc3RlZCBvbiB0aGUgbm9kZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGdldE51bWJlck9mTm9kZXNBdHRyaWJ1dGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gbnVtTm9kZXNBdHRyRGVmOwotCX0KLQotCS8qKgotCSAqIE1heGltYWwgbnVtYmVyIG9mIHNsb3RzIG9uIHRoZSBub2RlLiBaZXJvIGlmIG5vdCBzZXQuCi0JICovCi0JcHVibGljIHN0YXRpYyBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBnZXRNYXhpbWFsTnVtYmVyT2ZOb2Rlc0F0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBtYXhOdW1Ob2Rlc0F0dHJEZWY7Ci0JfQotCi0JLyoqCi0JICogU3RhdHVzIG1lc3NhZ2UgaWYgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBkaXNjb3ZlciB0aGUgbm9kZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZ0F0dHJpYnV0ZURlZmluaXRpb24gZ2V0U3RhdHVzTWVzc2FnZUF0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBzdGF0dXNNZXNzYWdlQXR0ckRlZjsKLQl9Ci0KLQkvKioKLQkgKiBJZiBub2RlIGlzIG92ZXJzdWJzY3JpYmVkLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQm9vbGVhbkF0dHJpYnV0ZURlZmluaXRpb24gZ2V0T3ZlcnN1YnNjcmliZWRBdHRyaWJ1dGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gb3ZlcnN1YnNjcmliZWRBdHRyRGVmOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSUF0dHJpYnV0ZURlZmluaXRpb248Pyw/LD8+W10gZ2V0RGVmYXVsdEF0dHJpYnV0ZURlZmluaXRpb25zKCkgewotCQlyZXR1cm4gbmV3IElBdHRyaWJ1dGVEZWZpbml0aW9uW117bnVtTm9kZXNBdHRyRGVmLG1heE51bU5vZGVzQXR0ckRlZixzdGF0dXNNZXNzYWdlQXR0ckRlZn07Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyUGx1Z2luLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9NUElDSDJQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkNzRiMS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9NUElDSDJQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS5Ub29sc1JNUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUubWVzc2FnZXMuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqLwotcHVibGljIGNsYXNzIE1QSUNIMlBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlIjsgLy8kTk9OLU5MUy0xJAotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIE1QSUNIMlBsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgTVBJQ0gyUGx1Z2luKCkgewotCQkvLyBOb3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luID0gdGhpczsKLQkJTVBJQ0gyRGVmYXVsdHMubG9hZERlZmF1bHRzKCk7Ci0JCU1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLmluaXRpYWxpemVQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgTVBJQ0gyUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmFpc2UgY29yZSBleGNlcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBDb3JlRXhjZXB0aW9uIGNvcmVFcnJvckV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgewotCQlyZXR1cm4gbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBUb29sc1JNUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgbWVzc2FnZSkpOwotCX0KLQotCS8qKgotCSAqIFJhaXNlIGNvcmUgZXhjZXB0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlCi0JICogQHBhcmFtIHQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBDb3JlRXhjZXB0aW9uIGNvcmVFcnJvckV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIHQpIHsKLQkJcmV0dXJuIG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgVG9vbHNSTVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIG1lc3NhZ2UsIHQpKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgbG9nIGVudHJ5IGZyb20gYW4gSVN0YXR1cwotCSAqIAotCSAqIEBwYXJhbSBzdGF0dXMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKElTdGF0dXMgc3RhdHVzKSB7Ci0JCWdldERlZmF1bHQoKS5nZXRMb2coKS5sb2coc3RhdHVzKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGUgbG9nIGVudHJ5IGZyb20gYSBzdHJpbmcKLQkgKiAKLQkgKiBAcGFyYW0gbXNnCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhTdHJpbmcgbXNnKSB7Ci0JCWxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIGdldFVuaXF1ZUlkZW50aWZpZXIoKSwgSVN0YXR1cy5FUlJPUiwgbXNnLCBudWxsKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGxvZyBlbnRyeSBmcm9tIGEgVGhyb3dhYmxlCi0JICogCi0JICogQHBhcmFtIGUKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKFRocm93YWJsZSBlKSB7Ci0JCWxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIGdldFVuaXF1ZUlkZW50aWZpZXIoKSwgSVN0YXR1cy5FUlJPUiwgTWVzc2FnZXMuTVBJQ0gyUGx1Z2luX0V4Y2VwdGlvbl9JbnRlcm5hbEVycm9yLCBlKSk7Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhdGUgYSB1bmlxdWUgaWRlbnRpZmllcgotCSAqIAotCSAqIEByZXR1cm4gdW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VW5pcXVlSWRlbnRpZmllcigpIHsKLQkJaWYgKGdldERlZmF1bHQoKSA9PSBudWxsKQotCQkJLy8gSWYgdGhlIGRlZmF1bHQgaW5zdGFuY2UgaXMgbm90IHlldCBpbml0aWFsaXplZCwKLQkJCS8vIHJldHVybiBhIHN0YXRpYyBpZGVudGlmaWVyLiBUaGlzIGlkZW50aWZpZXIgbXVzdAotCQkJLy8gbWF0Y2ggdGhlIHBsdWdpbiBpZCBkZWZpbmVkIGluIHBsdWdpbi54bWwKLQkJCXJldHVybiBQTFVHSU5fSUQ7Ci0JCXJldHVybiBnZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL01QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxOGRkYjMuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5jb3JlLkFic3RyYWN0VG9vbHNQcmVmZXJlbmNlTWFuYWdlcjsKLQotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIgZXh0ZW5kcyBBYnN0cmFjdFRvb2xzUHJlZmVyZW5jZU1hbmFnZXIgewotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWCA9ICJtcGljaDItIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcygpIHsKLQkJcmV0dXJuIE1QSUNIMlBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2F2ZVByZWZlcmVuY2VzKCkgewotCQlNUElDSDJQbHVnaW4uZ2V0RGVmYXVsdCgpLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJlZmVyZW5jZXMoKSB7Ci0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gTVBJQ0gyUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlwcmVmZXJlbmNlcy5zZXREZWZhdWx0KFBSRUZJWCArIFBSRUZTX0xBVU5DSF9DTUQsIE1QSUNIMkRlZmF1bHRzLkxBVU5DSF9DTUQpOwotCQlwcmVmZXJlbmNlcy5zZXREZWZhdWx0KFBSRUZJWCArIFBSRUZTX0RFQlVHX0NNRCwgTVBJQ0gyRGVmYXVsdHMuREVCVUdfQ01EKTsKLQkJcHJlZmVyZW5jZXMuc2V0RGVmYXVsdChQUkVGSVggKyBQUkVGU19ESVNDT1ZFUl9DTUQsIE1QSUNIMkRlZmF1bHRzLkRJU0NPVkVSX0NNRCk7Ci0JCXByZWZlcmVuY2VzLnNldERlZmF1bHQoUFJFRklYICsgUFJFRlNfUEVSSU9ESUNfTU9OSVRPUl9DTUQsIE1QSUNIMkRlZmF1bHRzLlBFUklPRElDX0NNRCk7Ci0JCXByZWZlcmVuY2VzLnNldERlZmF1bHQoUFJFRklYICsgUFJFRlNfUEVSSU9ESUNfTU9OSVRPUl9USU1FLCBNUElDSDJEZWZhdWx0cy5QRVJJT0RJQ19USU1FKTsKLQkJcHJlZmVyZW5jZXMuc2V0RGVmYXVsdChQUkVGSVggKyBQUkVGU19SRU1PVEVfSU5TVEFMTF9QQVRILCBNUElDSDJEZWZhdWx0cy5QQVRIKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9tZXNzYWdlcy9NZXNzYWdlcy5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvbWVzc2FnZXMvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2M2I3YS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9tZXNzYWdlcy9NZXNzYWdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLm1lc3NhZ2VzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLQotLyoqCi0gKiAKLSAqIEBhdXRob3IgRGFuaWVsIEZlbGl4IEZlcmJlcgotICoKLSAqLwotcHVibGljIGNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgTkxTIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5tZXNzYWdlcy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEZWZhdWx0c19FeGNlcHRpb25fRmFpbGVkUmVhZEZpbGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyRGVmYXVsdHNfRmFpbGVkUGFyc2VJbnRlZ2VyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRlZmF1bHRzX01pc3NpbmdWYWx1ZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJBcHBsaWNhdGlvbkF0dHJpYnV0ZXNfZWZmZWN0aXZlTVBJQ0gyRW52QXR0ckRlZl9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJBcHBsaWNhdGlvbkF0dHJpYnV0ZXNfZWZmZWN0aXZlTVBJQ0gyRW52QXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJBcHBsaWNhdGlvbkF0dHJpYnV0ZXNfZWZmZWN0aXZlTVBJQ0gyUHJvZ0FyZ3NBdHRyRGVmX2Rlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlc19lZmZlY3RpdmVNUElDSDJQcm9nQXJnc0F0dHJEZWZfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyQXBwbGljYXRpb25BdHRyaWJ1dGVzX2VmZmVjdGl2ZU1QSUNIMldvcmtpbmdEaXJBdHRyRGVmX2Rlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlc19lZmZlY3RpdmVNUElDSDJXb3JraW5nRGlyQXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX2hvc3RuYW1lQXR0ckRlZl9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX2hvc3RuYW1lQXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX21hcHBpbmdNb2RlQXR0ckRlZl9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX21hcHBpbmdNb2RlQXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX21waUpvYklkQXR0ckRlZl9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX21waUpvYklkQXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX3ZwaWRSYW5nZUF0dHJEZWZfZGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gySm9iQXR0cmlidXRlc192cGlkUmFuZ2VBdHRyRGVmX3RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkpvYkF0dHJpYnV0ZXNfdnBpZFN0YXJ0QXR0ckRlZl9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJKb2JBdHRyaWJ1dGVzX3ZwaWRTdGFydEF0dHJEZWZfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTGF1bmNoQXR0cmlidXRlc19lbnZpcm9ubWVudEFyZ3NBdHRyRGVmX2Rlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkxhdW5jaEF0dHJpYnV0ZXNfZW52aXJvbm1lbnRBcmdzQXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJMYXVuY2hBdHRyaWJ1dGVzX2Vudmlyb25tZW50S2V5QXR0ckRlZl9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJMYXVuY2hBdHRyaWJ1dGVzX2Vudmlyb25tZW50S2V5QXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJMYXVuY2hBdHRyaWJ1dGVzX2xhdW5jaEFyZ3NBdHRyRGVmX2Rlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkxhdW5jaEF0dHJpYnV0ZXNfbGF1bmNoQXJnc0F0dHJEZWZfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfZGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfbWF4TnVtTm9kZXNBdHRyRGVmX2Rlc2NyaXB0aW9uOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMk5vZGVBdHRyaWJ1dGVzX21heE51bU5vZGVzQXR0ckRlZl90aXRsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJOb2RlQXR0cmlidXRlc19udW1Ob2Rlc0F0dHJEZWZfZGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfbnVtTm9kZXNBdHRyRGVmX3RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMk5vZGVBdHRyaWJ1dGVzX292ZXJzdWJzY3JpYmVkQXR0ckRlZl9kZXNjcmlwdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJOb2RlQXR0cmlidXRlc19vdmVyc3Vic2NyaWJlZEF0dHJEZWZfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfZGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfdGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUGx1Z2luX0V4Y2VwdGlvbl9JbnRlcm5hbEVycm9yOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbl9kZWZhdWx0RGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbl9kZWZhdWx0TmFtZTsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX2RlZmF1bHRRdWV1ZU5hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0Rpc2NvdmVyQ29tbWFuZEZhaWxlZDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fRGlzY292ZXJDb21tYW5kRmFpbGVkUGFyc2VIb3N0RmlsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fRGlzY292ZXJDb21tYW5kRmFpbGVkUmVhZEhvc3RGaWxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9EaXNjb3ZlckNvbW1hbmRIb3N0RmlsZUVtcHR5OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9EaXNjb3ZlckNvbW1hbmRIb3N0RmlsZU5vdEZvdW5kOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9EaXNjb3ZlckNvbW1hbmRIb3N0RmlsZVBhdGhOb3RBYnNvbHV0ZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fRGlzY292ZXJDb21tYW5kSW50ZXJuYWxFcnJvcjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fRGlzY292ZXJDb21tYW5kTWlzc2luZ0hvc3RGaWxlUGF0aDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fSG9zdEZpbGVFcnJvcnM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0hvc3RGaWxlUGFyc2VFcnJvcjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fSG9zdG5hbWVDb21tYW5kRmFpbGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9Ib3N0bmFtZUNvbW1hbmRGYWlsZWRQYXJzZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fSG9zdG5hbWVDb21tYW5kRmFpbGVkUGFyc2VPdXRwdXQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0hvc3RuYW1lQ29tbWFuZEZhaWxlZFdpdGhDb2RlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9JZ25vcmVkSW52YWxpZFBhcmFtZXRlcjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fSW52YWxpZE1heFNsb3RzUGFyYW1ldGVyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9JbnZhbGlkU2xvdHNQYXJhbWV0ZXI7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyRGlzY292ZXJKb2JfaW50ZXJydXB0ZWRFcnJvck1lc3NhZ2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyRGlzY292ZXJKb2JfbmFtZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJEaXNjb3ZlckpvYl9wYXJzaW5nRXJyb3JNZXNzYWdlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkRpc2NvdmVySm9iX3Byb2Nlc3NFcnJvck1lc3NhZ2U7Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTW9uaXRvckpvYl9pbnRlcnJ1cHRlZEVycm9yTWVzc2FnZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJNb25pdG9ySm9iX25hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTW9uaXRvckpvYl9wYXJzaW5nRXJyb3JNZXNzYWdlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMk1vbml0b3JKb2JfcHJvY2Vzc0Vycm9yTWVzc2FnZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJNb25pdG9ySm9iX0V4Y2VwdGlvbl9Db21tYW5kRmFpbGVkOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMk1vbml0b3JKb2JfRXhjZXB0aW9uX0ludGVybmFsRXJyb3I7Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUHJvY2Vzc01hcFRleHQxMlBhcnNlcl9FeGNlcHRpb25fSW52YWxpZExpbmU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUHJvY2Vzc01hcFRleHQxMlBhcnNlcl9FeGNlcHRpb25fTWlzc2luZ0Rpc3BsYXlNYXBJbmZvcm1hdGlvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJQcm9jZXNzTWFwVGV4dDEyUGFyc2VyX0V4Y2VwdGlvbl9Ccm9rZW5EaXNwbGF5TWFwSW5mb3JtYXRpb247Ci0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUHJvY2Vzc01hcFhtbDEzUGFyc2VyX0V4Y2VwdGlvbl9BdHRyaWJ1dGVOb3RJbnRlZ2VyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMlByb2Nlc3NNYXBYbWwxM1BhcnNlcl9FeGNlcHRpb25fTWlzc2luZ0F0dHJpYnV0ZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJQcm9jZXNzTWFwWG1sMTNQYXJzZXJfRXhjZXB0aW9uX1Vua25vd25BdHRyaWJ1dGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUHJvY2Vzc01hcFhtbDEzUGFyc2VyX0V4Y2VwdGlvbl9Vbmtub3duRWxlbWVudDsKLQkKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJSdW50aW1lU3lzdGVtX0pvYk5hbWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUnVudGltZVN5c3RlbUpvYl9FeGNlcHRpb25fRmFpbGVkUGFyc2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUnVudGltZVN5c3RlbUpvYl9FeGNlcHRpb25fSG9zdG5hbWVzRG9Ob3RNYXRjaDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJSdW50aW1lU3lzdGVtSm9iX1Byb2Nlc3NOYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMlJ1bnRpbWVTeXN0ZW1Kb2JfRXhjZXB0aW9uX0V4ZWN1dGlvbkZhaWxlZFdpdGhFeGl0VmFsdWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUnVudGltZVN5c3RlbUpvYl9FeGNlcHRpb25fRXhlY3V0aW9uRmFpbGVkV2l0aFNpZ25hbDsKLQkKLQlzdGF0aWMgewotCQkvLyBpbml0aWFsaXplIHJlc291cmNlIGJ1bmRsZQotCQlOTFMuaW5pdGlhbGl6ZU1lc3NhZ2VzKEJVTkRMRV9OQU1FLCBNZXNzYWdlcy5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSBNZXNzYWdlcygpIHsKLQkJLy8gUHJldmVudCBpbnN0YW5jZXMuCi0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvbWVzc2FnZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL21lc3NhZ2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2M2Q5NDIuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvbWVzc2FnZXMvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLU1QSUNIMkRlZmF1bHRzX0V4Y2VwdGlvbl9GYWlsZWRSZWFkRmlsZT1GYWlsZWQgdG8gcmVhZCBwcm9wZXJ0aWVzIGZpbGUgd2l0aCBkZWZhdWx0IHByZWZlcmVuY2VzLgotTVBJQ0gyRGVmYXVsdHNfRmFpbGVkUGFyc2VJbnRlZ2VyPUZhaWxlZCB0byBwYXJzZSBpbnRlZ2VyIGRlZmF1bHQgdmFsdWUgZm9yIHswfQotTVBJQ0gyRGVmYXVsdHNfTWlzc2luZ1ZhbHVlPU1pc3NpbmcgZGVmYXVsdCB2YWx1ZSBmb3IgezB9Ci1NUElDSDIxM0RlZmF1bHRzX0V4Y2VwdGlvbl9GYWlsZWRSZWFkRmlsZT1GYWlsZWQgdG8gcmVhZCBwcm9wZXJ0aWVzIGZpbGUgd2l0aCBkZWZhdWx0IHByZWZlcmVuY2VzLgotTVBJQ0gyMTNEZWZhdWx0c19GYWlsZWRQYXJzZUludGVnZXI9RmFpbGVkIHRvIHBhcnNlIGludGVnZXIgZGVmYXVsdCB2YWx1ZSBmb3IgezB9Ci1NUElDSDIxM0RlZmF1bHRzX01pc3NpbmdWYWx1ZT1NaXNzaW5nIGRlZmF1bHQgdmFsdWUgZm9yIHswfQotTVBJQ0gyQXBwbGljYXRpb25BdHRyaWJ1dGVzX2VmZmVjdGl2ZU1QSUNIMkVudkF0dHJEZWZfZGVzY3JpcHRpb249RWZmZWN0aXZlIGVudmlyb25tZW50IHN1cHBsaWVkIGJ5IE1QSUNIMiB0byBleGVjdXRhYmxlIG9uIGxhdW5jaAotTVBJQ0gyQXBwbGljYXRpb25BdHRyaWJ1dGVzX2VmZmVjdGl2ZU1QSUNIMkVudkF0dHJEZWZfdGl0bGU9RW52aXJvbm1lbnQgZm9yIE1QSUNIMiBwcm9jZXNzZXMKLU1QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlc19lZmZlY3RpdmVNUElDSDJQcm9nQXJnc0F0dHJEZWZfZGVzY3JpcHRpb249RWZmZWN0aXZlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYnkgTVBJQ0gyIHN1cHBsaWVkIHRvIGV4ZWN1dGFibGUKLU1QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlc19lZmZlY3RpdmVNUElDSDJQcm9nQXJnc0F0dHJEZWZfdGl0bGU9UHJvZ3JhbSBBcmd1bWVudHMgZm9yIE1QSUNIMiBwcm9jZXNzZXMKLU1QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlc19lZmZlY3RpdmVNUElDSDJXb3JraW5nRGlyQXR0ckRlZl9kZXNjcmlwdGlvbj1FZmZlY3RpdmUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgTVBJQ0gyIGxhdW5jaGVkIHRoZSBwcm9jZXNzZXMKLU1QSUNIMkFwcGxpY2F0aW9uQXR0cmlidXRlc19lZmZlY3RpdmVNUElDSDJXb3JraW5nRGlyQXR0ckRlZl90aXRsZT1Xb3JraW5nIERpcmVjdG9yeSBmb3IgTVBJQ0gyIHByb2Nlc3NlcwotTVBJQ0gySm9iQXR0cmlidXRlc19ob3N0bmFtZUF0dHJEZWZfZGVzY3JpcHRpb249TVBJQ0gyIGpvYiBob3N0bmFtZQotTVBJQ0gySm9iQXR0cmlidXRlc19ob3N0bmFtZUF0dHJEZWZfdGl0bGU9TVBJQ0gyIGhvc3RuYW1lCi1NUElDSDJKb2JBdHRyaWJ1dGVzX21hcHBpbmdNb2RlQXR0ckRlZl9kZXNjcmlwdGlvbj1NUElDSDIgbWFwcGluZyBtb2RlCi1NUElDSDJKb2JBdHRyaWJ1dGVzX21hcHBpbmdNb2RlQXR0ckRlZl90aXRsZT1NUElDSDIgbWFwcGluZyBtb2RlCi1NUElDSDJKb2JBdHRyaWJ1dGVzX21waUpvYklkQXR0ckRlZl9kZXNjcmlwdGlvbj1NUElDSDIgam9iIGlkCi1NUElDSDJKb2JBdHRyaWJ1dGVzX21waUpvYklkQXR0ckRlZl90aXRsZT1NUElDSDIgam9iIGlkCi1NUElDSDJKb2JBdHRyaWJ1dGVzX3ZwaWRSYW5nZUF0dHJEZWZfZGVzY3JpcHRpb249TVBJQ0gyIHZwaWQgcmFuZ2UKLU1QSUNIMkpvYkF0dHJpYnV0ZXNfdnBpZFJhbmdlQXR0ckRlZl90aXRsZT1NUElDSDIgdnBpZCByYW5nZQotTVBJQ0gySm9iQXR0cmlidXRlc192cGlkU3RhcnRBdHRyRGVmX2Rlc2NyaXB0aW9uPU1QSUNIMiB2cGlkIHN0YXJ0Ci1NUElDSDJKb2JBdHRyaWJ1dGVzX3ZwaWRTdGFydEF0dHJEZWZfdGl0bGU9TVBJQ0gyIHZwaWQgc3RhcnQKLU1QSUNIMkxhdW5jaEF0dHJpYnV0ZXNfZW52aXJvbm1lbnRBcmdzQXR0ckRlZl9kZXNjcmlwdGlvbj1Db21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGVhY2ggTVBJQ0gyIHByb2Nlc3NlcwotTVBJQ0gyTGF1bmNoQXR0cmlidXRlc19lbnZpcm9ubWVudEFyZ3NBdHRyRGVmX3RpdGxlPU1QSUNIMiBFbnZpcm9ubWVudCBhcmd1bWVudHMKLU1QSUNIMkxhdW5jaEF0dHJpYnV0ZXNfZW52aXJvbm1lbnRLZXlBdHRyRGVmX2Rlc2NyaXB0aW9uPU5hbWUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1cHBsaWVkIHRvIHRoZSBlYWNoIE1QSUNIMiBwcm9jZXNzZXMKLU1QSUNIMkxhdW5jaEF0dHJpYnV0ZXNfZW52aXJvbm1lbnRLZXlBdHRyRGVmX3RpdGxlPU1QSUNIMiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLU1QSUNIMkxhdW5jaEF0dHJpYnV0ZXNfbGF1bmNoQXJnc0F0dHJEZWZfZGVzY3JpcHRpb249Q29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgTVBJQ0gyCi1NUElDSDJMYXVuY2hBdHRyaWJ1dGVzX2xhdW5jaEFyZ3NBdHRyRGVmX3RpdGxlPU1QSUNIMiBhcmd1bWVudHMKLU1QSUNIMk1hY2hpbmVBdHRyaWJ1dGVzX3N0YXR1c01lc3NhZ2VBdHRyRGVmX2Rlc2NyaXB0aW9uPU1QSUNIMiBzdGF0dXMgbWVzc2FnZQotTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXNfc3RhdHVzTWVzc2FnZUF0dHJEZWZfdGl0bGU9TVBJQ0gyIHN0YXR1cyBtZXNzYWdlCi1NUElDSDJOb2RlQXR0cmlidXRlc19tYXhOdW1Ob2Rlc0F0dHJEZWZfZGVzY3JpcHRpb249TVBJQ0gyIG1heGltYWwgbnVtYmVyIG9mIG5vZGVzIG9uIHRoZSBob3N0Ci1NUElDSDJOb2RlQXR0cmlidXRlc19tYXhOdW1Ob2Rlc0F0dHJEZWZfdGl0bGU9TVBJQ0gyIG1heGltYWwgbnVtYmVyIG9mIG5vZGVzCi1NUElDSDJOb2RlQXR0cmlidXRlc19udW1Ob2Rlc0F0dHJEZWZfZGVzY3JpcHRpb249TVBJQ0gyIG51bWJlciBvZiBub2RlcyBvbiB0aGUgaG9zdAotTVBJQ0gyTm9kZUF0dHJpYnV0ZXNfbnVtTm9kZXNBdHRyRGVmX3RpdGxlPU1QSUNIMiBudW1iZXIgb2Ygbm9kZXMKLU1QSUNIMk5vZGVBdHRyaWJ1dGVzX292ZXJzdWJzY3JpYmVkQXR0ckRlZl9kZXNjcmlwdGlvbj1NUElDSDIgb3ZlcnN1YnNjcmliZWQgbm9kZSAobW9yZSBwcm9jZXNzZXMgdGhhbiBhdmFpbGFibGUpCi1NUElDSDJOb2RlQXR0cmlidXRlc19vdmVyc3Vic2NyaWJlZEF0dHJEZWZfdGl0bGU9TVBJQ0gyIG92ZXJzdWJzY3JpYmVkCi1NUElDSDJOb2RlQXR0cmlidXRlc19zdGF0dXNNZXNzYWdlQXR0ckRlZl9kZXNjcmlwdGlvbj1NUElDSDIgc3RhdHVzIG1lc3NhZ2UKLU1QSUNIMk5vZGVBdHRyaWJ1dGVzX3N0YXR1c01lc3NhZ2VBdHRyRGVmX3RpdGxlPU1QSUNIMiBzdGF0dXMgbWVzc2FnZQotTVBJQ0gyUGx1Z2luX0V4Y2VwdGlvbl9JbnRlcm5hbEVycm9yPUludGVybmFsIGVycm9yCi0KLU1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25fZGVmYXVsdERlc2NyaXB0aW9uPU1QSUNIMiBSZXNvdXJjZSBNYW5hZ2VyCi1NUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uX2RlZmF1bHROYW1lPU1QSUNIMgotCi1NUElDSDJEaXNjb3ZlckpvYl9kZWZhdWx0UXVldWVOYW1lPWRlZmF1bHQKLU1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9EaXNjb3ZlckNvbW1hbmRGYWlsZWQ9RXJyb3Igd2hpbGUgcnVubmluZyBkaXNjb3ZlciBjb21tYW5kOiB7MH0uCi1NUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fRGlzY292ZXJDb21tYW5kRmFpbGVkUGFyc2VIb3N0RmlsZT1GYWlsZWQgdG8gcGFyc2UgaG9zdGZpbGUgKHswfSkuCi1NUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fRGlzY292ZXJDb21tYW5kRmFpbGVkUmVhZEhvc3RGaWxlPUZhaWxlZCByZWFkIGhvc3RmaWxlICh7MH0pLgotTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0Rpc2NvdmVyQ29tbWFuZEhvc3RGaWxlRW1wdHk9RW1wdHkgaG9zdGZpbGUgaXMgbm90IGFsbG93ZWQgKHswfSkuCi1NUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fRGlzY292ZXJDb21tYW5kSG9zdEZpbGVOb3RGb3VuZD1GYWlsZWQgZmluZCBob3N0ZmlsZSAoezB9KS4KLU1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9EaXNjb3ZlckNvbW1hbmRIb3N0RmlsZVBhdGhOb3RBYnNvbHV0ZT1EaXNjb3ZlciBjb21tYW5kIGluZm9ybWVkIGEgcGF0aCB0byBob3N0ZmlsZSB0aGF0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoICh7MH0pLgotTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0Rpc2NvdmVyQ29tbWFuZEludGVybmFsRXJyb3I9SW50ZXJuYWwgZXJyb3Igd2hpbGUgcnVubmluZyBkaXNjb3ZlciBjb21tYW5kOiB7MH0KLU1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9EaXNjb3ZlckNvbW1hbmRNaXNzaW5nSG9zdEZpbGVQYXRoPURpc2NvdmVyIGNvbW1hbmQgZGlkIG5vdCBpbmZvcm0gcGF0aCB0byBkZWZhdWx0IGhvc3RmaWxlLiBJZiBuZWNlc3NhcnksIHNldCBNQ0EgcGFyYW1ldGVycyB0byBkZWZpbmUgZGVmYXVsdCBob3N0ZmlsZSBwYXRoLgotTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0hvc3RGaWxlRXJyb3JzPVRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIGhvc3RmaWxlLgotTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0hvc3RGaWxlUGFyc2VFcnJvcj1QYXJzZSBlcnJvcihzKSBpbiBob3N0ZmlsZS4KLU1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9Ib3N0bmFtZUNvbW1hbmRGYWlsZWQ9RmFpbGVkIHRvIHJ1biBjb21tYW5kIHRvIGdldCBob3N0bmFtZS4KLU1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9Ib3N0bmFtZUNvbW1hbmRGYWlsZWRQYXJzZT1GYWlsZWQgdG8gcGFyc2UgY29tbWFuZCBmb3IgaG9zdG5hbWUuCi1NUElDSDJEaXNjb3ZlckpvYl9FeGNlcHRpb25fSG9zdG5hbWVDb21tYW5kRmFpbGVkUGFyc2VPdXRwdXQ9RmFpbGVkIHRvIHBhcnNlIG91dHB1dCBvZiBkaXNjb3ZlciBjb21tYW5kLgotTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0hvc3RuYW1lQ29tbWFuZEZhaWxlZFdpdGhDb2RlPUNvbW1hbmQgdG8gZ2V0IGhvc3RuYW1lIGZhaWxlZCB3aXRoIGV4aXQgY29kZSB7MH0KLU1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9JZ25vcmVkSW52YWxpZFBhcmFtZXRlcj1JbnZhbGlkIHBhcmFtZXRlciB3YXMgaWdub3JlZCBmb3IgdGhpcyBob3N0LgotTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0ludmFsaWRNYXhTbG90c1BhcmFtZXRlcj1JbnZhbGlkICdtYXgtc2xvdHMnIHBhcmFtZXRlciB3YXMgaWdub3JlZCBmb3IgdGhpcyBob3N0LgotTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0ludmFsaWRTbG90c1BhcmFtZXRlcj1JbnZhbGlkICdzbG90cy9jcHVzL2NvdW50JyBwYXJhbWV0ZXIgd2FzIGlnbm9yZWQgZm9yIHRoaXMgaG9zdC4KLU1QSUNIMkRpc2NvdmVySm9iX2ludGVycnVwdGVkRXJyb3JNZXNzYWdlPUludGVycnVwdGVkIHdoaWxlIHJ1bm5pbmcgTVBJQ0gyIGRpc2NvdmVyIGNvbW1hbmQuCi1NUElDSDJEaXNjb3ZlckpvYl9uYW1lPURpc2NvdmVyIE1QSUNIMiBvbiB7MH0KLU1QSUNIMkRpc2NvdmVySm9iX3BhcnNpbmdFcnJvck1lc3NhZ2U9RmFpbGVkIHRvIHBhcnNlIG91dHB1dCBvZiBNUElDSDIgZGlzY292ZXIgY29tbWFuZC4KLU1QSUNIMkRpc2NvdmVySm9iX3Byb2Nlc3NFcnJvck1lc3NhZ2U9RmFpbGVkIHRvIGNyZWF0ZSByZW1vdGUgcHJvY2VzcyBmb3IgTVBJQ0gyIGRpc2NvdmVyIGNvbW1hbmQuCi0KLU1QSUNIMlByb2Nlc3NNYXBUZXh0MTJQYXJzZXJfRXhjZXB0aW9uX0ludmFsaWRMaW5lPUludmFsaWQgb3V0cHV0IGZyb20gTVBJQ0gyOiB7MH0KLU1QSUNIMlByb2Nlc3NNYXBUZXh0MTJQYXJzZXJfRXhjZXB0aW9uX01pc3NpbmdEaXNwbGF5TWFwSW5mb3JtYXRpb249T3V0cHV0IGZyb20gTVBJQ0gyIGhhcyBubyBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZXMgYW5kIG5vZGVzLgotTVBJQ0gyUHJvY2Vzc01hcFRleHQxMlBhcnNlcl9FeGNlcHRpb25fQnJva2VuRGlzcGxheU1hcEluZm9ybWF0aW9uPUluY29tcGxldGUgb3V0cHV0IGZyb20gTVBJQ0gyLgotCi1NUElDSDJQcm9jZXNzTWFwWG1sMTNQYXJzZXJfRXhjZXB0aW9uX0F0dHJpYnV0ZU5vdEludGVnZXI9QXR0cmlidXRlIHswfSBpcyBub3QgYW4gdmFsaWQgaW50ZWdlciAoezF9KQotTVBJQ0gyUHJvY2Vzc01hcFhtbDEzUGFyc2VyX0V4Y2VwdGlvbl9NaXNzaW5nQXR0cmlidXRlPU1pc3NpbmcgWE1MIGF0dHJpYnV0ZTogezB9Ci1NUElDSDJQcm9jZXNzTWFwWG1sMTNQYXJzZXJfRXhjZXB0aW9uX1Vua25vd25BdHRyaWJ1dGU9VW5rbm93biBYTUwgYXR0cmlidXRlOiB7MH0KLU1QSUNIMlByb2Nlc3NNYXBYbWwxM1BhcnNlcl9FeGNlcHRpb25fVW5rbm93bkVsZW1lbnQ9VW5rbm93biBYTUwgZWxlbWVudDogezB9Ci0KLU1QSUNIMlJ1bnRpbWVTeXN0ZW1fSm9iTmFtZT1NUElDSDIgSm9iCi1NUElDSDJSdW50aW1lU3lzdGVtSm9iX0V4Y2VwdGlvbl9GYWlsZWRQYXJzZT1GYWlsZWQgdG8gcGFyc2UgTVBJQ0gyIHJ1biBjb21tYW5kIG91dHB1dC4KLU1QSUNIMlJ1bnRpbWVTeXN0ZW1Kb2JfRXhjZXB0aW9uX0hvc3RuYW1lc0RvTm90TWF0Y2g9SG9zdG5hbWVzIGZyb20gTVBJQ0gyIG91dHB1dCBkbyBub3QgbWF0Y2ggZXhwZWN0ZWQgaG9zdG5hbWUuCi1NUElDSDJSdW50aW1lU3lzdGVtSm9iX1Byb2Nlc3NOYW1lPU1QSUNIMiBydW4KLQotTVBJQ0gyTW9uaXRvckpvYl9pbnRlcnJ1cHRlZEVycm9yTWVzc2FnZT1JbnRlcnJ1cHRlZCB3aGlsZSBydW5uaW5nIE1QSUNIMiBtb25pdG9yIGNvbW1hbmQuCi1NUElDSDJNb25pdG9ySm9iX25hbWU9TW9uaXRvciBNUElDSDIgb24gezB9Ci1NUElDSDJNb25pdG9ySm9iX3BhcnNpbmdFcnJvck1lc3NhZ2U9RmFpbGVkIHRvIHBhcnNlIG91dHB1dCBvZiBNUElDSDIgbW9uaXRvciBjb21tYW5kLgotTVBJQ0gyTW9uaXRvckpvYl9wcm9jZXNzRXJyb3JNZXNzYWdlPUZhaWxlZCB0byBjcmVhdGUgcmVtb3RlIHByb2Nlc3MgZm9yIE1QSUNIMiBtb25pdG9yIGNvbW1hbmQuCi1NUElDSDJNb25pdG9ySm9iX0V4Y2VwdGlvbl9Db21tYW5kRmFpbGVkPUVycm9yIHdoaWxlIHJ1bm5pbmcgY29tbWFuZDogezB9LgotTVBJQ0gyTW9uaXRvckpvYl9FeGNlcHRpb25fSW50ZXJuYWxFcnJvcj1JbnRlcm5hbCBlcnJvciB3aGlsZSBydW5uaW5nIGNvbW1hbmQ6IHswfQotTVBJQ0gyUnVudGltZVN5c3RlbUpvYl9FeGNlcHRpb25fRXhlY3V0aW9uRmFpbGVkV2l0aEV4aXRWYWx1ZT1Kb2IgdGVybWluYXRlZCBhYm5vcm1hbGx5IHdpdGggZXhpdCB2YWx1ZSB7MH0uIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBvbmUgb3IgbW9yZSBwcm9jZXNzZXMgZXhpdGluZyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlLCBvciBleGl0aW5nIGJlZm9yZSBjYWxsaW5nIE1QSV9GaW5hbGl6ZS4KLU1QSUNIMlJ1bnRpbWVTeXN0ZW1Kb2JfRXhjZXB0aW9uX0V4ZWN1dGlvbkZhaWxlZFdpdGhTaWduYWw9Sm9iIHRlcm1pbmF0ZWQgYWJub3JtYWxseSBkdWUgdG8gc2lnbmFsIHswfS4gVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IG9uZSBvcmUgbW9yZSBwcm9jZXNzZXMgZXhpdGluZyBkdWUgdG8gdGhpcyBzaWduYWwuCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ybXN5c3RlbS9FZmZlY3RpdmVNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ybXN5c3RlbS9FZmZlY3RpdmVNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMzc5NmUuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcm1zeXN0ZW0vRWZmZWN0aXZlTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLnJtc3lzdGVtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5jb3JlLnJtc3lzdGVtLkFic3RyYWN0RWZmZWN0aXZlVG9vbFJNQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS5ybXN5c3RlbS5BYnN0cmFjdFRvb2xSTUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5NUElDSDJQcmVmZXJlbmNlTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIEVmZmVjdGl2ZU1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcwotQWJzdHJhY3RFZmZlY3RpdmVUb29sUk1Db25maWd1cmF0aW9uIHsKLQotCXB1YmxpYyBFZmZlY3RpdmVNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKAotCQkJQWJzdHJhY3RUb29sUk1Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLQkJc3VwZXIoY29uZmlndXJhdGlvbik7Ci0JCU1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gTVBJQ0gyY29uZmlndXJhdGlvbiA9IChNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKWNvbmZpZ3VyYXRpb247Ci0JCVN0cmluZyBsYXVuY2hDbWQgPSBudWxsOwotCQlTdHJpbmcgZGVidWdDbWQgPSBudWxsOwotCQlTdHJpbmcgZGlzY292ZXJDbWQgPSBudWxsOwotCQlTdHJpbmcgcGVyaW9kaWNDbWQgPSBudWxsOwotCQlpbnQgcGVyaW9kaWNUaW1lID0gMDsKLQkJU3RyaW5nIHJlbW90ZUluc3RhbGxQYXRoID0gbnVsbDsKLQkJaWYgKE1QSUNIMmNvbmZpZ3VyYXRpb24uZ2V0VXNlVG9vbERlZmF1bHRzKCkpIHsKLQkJCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuZ2V0UHJlZmVyZW5jZXMoKTsKLQkJCWxhdW5jaENtZCA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGU19MQVVOQ0hfQ01EKTsKLQkJCWRlYnVnQ21kID0gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZJWCArIE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZTX0RFQlVHX0NNRCk7Ci0JCQlkaXNjb3ZlckNtZCA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGU19ESVNDT1ZFUl9DTUQpOwotCQkJcGVyaW9kaWNDbWQgPSBwcmVmZXJlbmNlcy5nZXRTdHJpbmcoTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuUFJFRklYICsgTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuUFJFRlNfUEVSSU9ESUNfTU9OSVRPUl9DTUQpOwotCQkJcGVyaW9kaWNUaW1lID0gcHJlZmVyZW5jZXMuZ2V0SW50KE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZJWCArIE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZTX1BFUklPRElDX01PTklUT1JfVElNRSk7Ci0JCX0gZWxzZSB7Ci0JCQlsYXVuY2hDbWQgPSBNUElDSDJjb25maWd1cmF0aW9uLmdldExhdW5jaENtZCgpOwotCQkJZGVidWdDbWQgPSBNUElDSDJjb25maWd1cmF0aW9uLmdldERlYnVnQ21kKCk7Ci0JCQlkaXNjb3ZlckNtZCA9IE1QSUNIMmNvbmZpZ3VyYXRpb24uZ2V0RGlzY292ZXJDbWQoKTsKLQkJCXBlcmlvZGljQ21kID0gTVBJQ0gyY29uZmlndXJhdGlvbi5nZXRQZXJpb2RpY01vbml0b3JDbWQoKTsKLQkJCXBlcmlvZGljVGltZSA9IE1QSUNIMmNvbmZpZ3VyYXRpb24uZ2V0UGVyaW9kaWNNb25pdG9yVGltZSgpOwotCQl9Ci0JCXJlbW90ZUluc3RhbGxQYXRoID0gTVBJQ0gyY29uZmlndXJhdGlvbi5nZXRSZW1vdGVJbnN0YWxsUGF0aCgpOwotCQlhcHBseVZhbHVlcyhsYXVuY2hDbWQsIGRlYnVnQ21kLCBkaXNjb3ZlckNtZCwgcGVyaW9kaWNDbWQsIHBlcmlvZGljVGltZSwgbnVsbCwgcmVtb3RlSW5zdGFsbFBhdGgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcm1zeXN0ZW0vTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ybXN5c3RlbS9NUElDSDJSZXNvdXJjZU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmQ0NTllOC4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ybXN5c3RlbS9NUElDSDJSZXNvdXJjZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5ybXN5c3RlbTsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5BdHRyaWJ1dGVEZWZpbml0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50Y29udHJvbHMuSVBVbml2ZXJzZUNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUuQWJzdHJhY3RUb29sc0F0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUucm1zeXN0ZW0uQWJzdHJhY3RUb29sUmVzb3VyY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucnRzeXN0ZW0uTVBJQ0gyUnVudGltZVN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJ0c3lzdGVtLklSdW50aW1lU3lzdGVtOwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyIGV4dGVuZHMgQWJzdHJhY3RUb29sUmVzb3VyY2VNYW5hZ2VyIHsKLQotCXByaXZhdGUgSW50ZWdlciBNUElDSDJfUk1JRDsKLQlwcml2YXRlIE1QSUNIMlJ1bnRpbWVTeXN0ZW0gcnRzID0gbnVsbDsKLQotCXB1YmxpYyBNUElDSDJSZXNvdXJjZU1hbmFnZXIoSW50ZWdlciBpZCwgSVBVbml2ZXJzZUNvbnRyb2wgdW5pdmVyc2UsIElSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGNvbmZpZykgewotCQlzdXBlcihpZC50b1N0cmluZygpLCB1bml2ZXJzZSwgY29uZmlnKTsKLQkJTVBJQ0gyX1JNSUQgPSBpZDsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFJ1bnRpbWVSZXNvdXJjZU1hbmFnZXIjZG9DcmVhdGVSdW50aW1lU3lzdGVtKCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSVJ1bnRpbWVTeXN0ZW0gZG9DcmVhdGVSdW50aW1lU3lzdGVtKCkgewotCQlNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGNvbmZpZyA9IChNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKSBnZXRDb25maWd1cmF0aW9uKCk7Ci0JCUF0dHJpYnV0ZURlZmluaXRpb25NYW5hZ2VyIGF0dHJEZWZNZ3IgPSBnZXRBdHRyaWJ1dGVEZWZpbml0aW9uTWFuYWdlcigpOwotCQlhdHRyRGVmTWdyLnNldEF0dHJpYnV0ZURlZmluaXRpb25zKEFic3RyYWN0VG9vbHNBdHRyaWJ1dGVzLmdldERlZmF1bHRBdHRyaWJ1dGVEZWZpbml0aW9ucygpKTsKLQkJcnRzID0gbmV3IE1QSUNIMlJ1bnRpbWVTeXN0ZW0oTVBJQ0gyX1JNSUQsIGNvbmZpZywgYXR0ckRlZk1ncik7Ci0JCXJldHVybiBydHM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcm1zeXN0ZW0vTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbi5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcm1zeXN0ZW0vTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkNWQzNjNjLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL3Jtc3lzdGVtL01QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgotICoKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLnJtc3lzdGVtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5jb3JlLnJtc3lzdGVtLkFic3RyYWN0VG9vbFJNQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLk1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUubWVzc2FnZXMuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLklSZXNvdXJjZU1hbmFnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzCi1BYnN0cmFjdFRvb2xSTUNvbmZpZ3VyYXRpb24gaW1wbGVtZW50cyBDbG9uZWFibGUgewotCi0JcHVibGljIHN0YXRpYyBpbnQgTVBJQ0gyX0NBUEFCSUxJVElFUyA9IENBUF9MQVVOQ0ggfCBDQVBfRElTQ09WRVIgfCBDQVBfUEVSSU9ESUNfTU9OSVRPUiB8IENBUF9SRU1PVEVfSU5TVEFMTF9QQVRIOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19WRVJTSU9OX0lEID0gInZlcnNpb25JZCI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgotCSAqIFN0YXRpYyBjbGFzcyB0byBob2xkIG9wZW5tcGkgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgotCSAqCi0JICogQGF1dGhvciBkZmZlcmJlcgotCSAqLwotCXN0YXRpYyBwdWJsaWMgY2xhc3MgTVBJQ0gyQ29uZmlnIHsKLQotCQlwcml2YXRlIFRvb2xzQ29uZmlnIHRvb2xzQ29uZmlnOwotCQlwcml2YXRlIFN0cmluZyB2ZXJzaW9uSWQ7Ci0KLQkJcHVibGljIE1QSUNIMkNvbmZpZygpIHsKLQkJCXRoaXMobmV3IFRvb2xzQ29uZmlnKCksIG51bGwpOwotCQl9Ci0KLQkJcHVibGljIE1QSUNIMkNvbmZpZyhUb29sc0NvbmZpZyB0b29sc0NvbmZpZywgU3RyaW5nIHZlcnNpb25JZCkgewotCQkJc3VwZXIoKTsKLQkJCXRoaXMudG9vbHNDb25maWcgPSB0b29sc0NvbmZpZzsKLQkJCXRoaXMudmVyc2lvbklkID0gdmVyc2lvbklkOwotCQl9Ci0KLQkJcHVibGljIFRvb2xzQ29uZmlnIGdldFRvb2xzQ29uZmlnKCkgewotCQkJcmV0dXJuIHRvb2xzQ29uZmlnOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0VG9vbHNDb25maWcoVG9vbHNDb25maWcgdG9vbHNDb25maWcpIHsKLQkJCXRoaXMudG9vbHNDb25maWcgPSB0b29sc0NvbmZpZzsKLQkJfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbklkKCkgewotCQkJcmV0dXJuIHZlcnNpb25JZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldFZlcnNpb25JZChTdHJpbmcgdmVyc2lvbklkKSB7Ci0JCQl0aGlzLnZlcnNpb25JZCA9IHZlcnNpb25JZDsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nIHZlcnNpb25JZDsKLQotCXB1YmxpYyBzdGF0aWMgTVBJQ0gyQ29uZmlnIGxvYWRPcGVuTXBpQ29uZmlnKElSZXNvdXJjZU1hbmFnZXJGYWN0b3J5IGZhY3RvcnksCi0JCQlJTWVtZW50byBtZW1lbnRvKSB7Ci0JCVRvb2xzQ29uZmlnIHRvb2xzQ29uZmlnID0gbG9hZFRvb2woZmFjdG9yeSwgbWVtZW50byk7Ci0KLQkJU3RyaW5nIHZlcnNpb25JZCA9IG1lbWVudG8uZ2V0U3RyaW5nKFRBR19WRVJTSU9OX0lEKTsKLQotCQlNUElDSDJDb25maWcgY29uZmlnID0gbmV3IE1QSUNIMkNvbmZpZyh0b29sc0NvbmZpZywgdmVyc2lvbklkKTsKLQkJcmV0dXJuIGNvbmZpZzsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIE1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gbG9hZCgKLQkJCU1QSUNIMlJlc291cmNlTWFuYWdlckZhY3RvcnkgZmFjdG9yeSwgSU1lbWVudG8gbWVtZW50bykgewotCQlNUElDSDJDb25maWcgbXBpY2gyQ29uZmlnID0gbG9hZE9wZW5NcGlDb25maWcoZmFjdG9yeSwgbWVtZW50byk7Ci0JCU1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IE1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24oZmFjdG9yeSwgbXBpY2gyQ29uZmlnKTsKLQkJcmV0dXJuIGNvbmZpZzsKLQl9Ci0KLQlwdWJsaWMgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbihNUElDSDJSZXNvdXJjZU1hbmFnZXJGYWN0b3J5IGZhY3RvcnkpIHsKLQkJc3VwZXIoTVBJQ0gyX0NBUEFCSUxJVElFUywgbmV3IFRvb2xzQ29uZmlnKCksIGZhY3RvcnkpOwotCi0JCVByZWZlcmVuY2VzIHByZWZzID0gTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuZ2V0UHJlZmVyZW5jZXMoKTsKLQkJc2V0TGF1bmNoQ21kKHByZWZzLmdldFN0cmluZyhNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGU19MQVVOQ0hfQ01EKSk7Ci0JCXNldERlYnVnQ21kKHByZWZzLmdldFN0cmluZyhNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGU19ERUJVR19DTUQpKTsKLQkJc2V0RGlzY292ZXJDbWQocHJlZnMuZ2V0U3RyaW5nKE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZJWCArIE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZTX0RJU0NPVkVSX0NNRCkpOwotCQlzZXRQZXJpb2RpY01vbml0b3JDbWQocHJlZnMuZ2V0U3RyaW5nKE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZJWCArIE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZTX1BFUklPRElDX01PTklUT1JfQ01EKSk7Ci0JCXNldFBlcmlvZGljTW9uaXRvclRpbWUocHJlZnMuZ2V0SW50KE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZJWCArIE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZTX1BFUklPRElDX01PTklUT1JfVElNRSkpOwotCQlzZXRSZW1vdGVJbnN0YWxsUGF0aChwcmVmcy5nZXRTdHJpbmcoTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuUFJFRklYICsgTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuUFJFRlNfUkVNT1RFX0lOU1RBTExfUEFUSCkpOwotCQkvLwkJc2V0VXNlVG9vbERlZmF1bHRzKHByZWZzLmdldEJvb2xlYW4oTVBJQ0gyMTNQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDIxM1ByZWZlcmVuY2VNYW5hZ2VyLlBSRUZTX1VTRV9ERUZBVUxUUykpOwotCX0KLQotCXB1YmxpYyBNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKE1QSUNIMlJlc291cmNlTWFuYWdlckZhY3RvcnkgZmFjdG9yeSwKLQkJCU1QSUNIMkNvbmZpZyBjb25maWcpIHsKLQkJc3VwZXIoTVBJQ0gyX0NBUEFCSUxJVElFUywgY29uZmlnLmdldFRvb2xzQ29uZmlnKCksIGZhY3RvcnkpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgY2xvbmUoKSB7Ci0JCUNvbW1vbkNvbmZpZyBjb21tb25Db25mID0gbmV3IENvbW1vbkNvbmZpZyhnZXROYW1lKCksCi0JCQkJZ2V0RGVzY3JpcHRpb24oKSwgZ2V0VW5pcXVlTmFtZSgpLAotCQkJCWdldFJlbW90ZVNlcnZpY2VzSWQoKSwgZ2V0Q29ubmVjdGlvbk5hbWUoKSk7Ci0JCVJlbW90ZUNvbmZpZyByZW1vdGVDb25mID0gbmV3IFJlbW90ZUNvbmZpZyhjb21tb25Db25mLAotCQkJCWdldFByb3h5U2VydmVyUGF0aCgpLCBnZXRMb2NhbEFkZHJlc3MoKSwKLQkJCQlnZXRJbnZvY2F0aW9uT3B0aW9uc1N0cigpLCBnZXRPcHRpb25zKCkpOwotCQlUb29sc0NvbmZpZyB0b29sc0NvbmZpZyA9IG5ldyBUb29sc0NvbmZpZygKLQkJCQlyZW1vdGVDb25mLAotCQkJCWdldExhdW5jaENtZCgpLAotCQkJCWdldERlYnVnQ21kKCksCi0JCQkJZ2V0RGlzY292ZXJDbWQoKSwKLQkJCQlnZXRQZXJpb2RpY01vbml0b3JDbWQoKSwKLQkJCQlnZXRQZXJpb2RpY01vbml0b3JUaW1lKCksCi0JCQkJZ2V0Q29udGludW91c01vbml0b3JDbWQoKSwKLQkJCQlnZXRSZW1vdGVJbnN0YWxsUGF0aCgpLAotCQkJCWdldFVzZVRvb2xEZWZhdWx0cygpLAotCQkJCWdldFVzZUluc3RhbGxEZWZhdWx0cygpLAotCQkJCWdldENvbW1hbmRzRW5hYmxlZCgpKTsKLQkJTVBJQ0gyQ29uZmlnIG9wZW5NcGlDb25maWcgPSBuZXcgTVBJQ0gyQ29uZmlnKHRvb2xzQ29uZmlnLCBnZXRWZXJzaW9uSWQoKSk7Ci0KLQkJcmV0dXJuIG5ldyBNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKAotCQkJCShNUElDSDJSZXNvdXJjZU1hbmFnZXJGYWN0b3J5KSBnZXRGYWN0b3J5KCksIG9wZW5NcGlDb25maWcpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHNhdmUoSU1lbWVudG8gbWVtZW50bykgewotCQlzdXBlci5zYXZlKG1lbWVudG8pOwotCQltZW1lbnRvLnB1dFN0cmluZyhUQUdfVkVSU0lPTl9JRCwgdmVyc2lvbklkKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXREZWZhdWx0TmFtZUFuZERlc2MoKSB7Ci0JCVN0cmluZyBuYW1lID0gTWVzc2FnZXMuTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbl9kZWZhdWx0TmFtZTsKLQkJU3RyaW5nIGNvbm4gPSBnZXRDb25uZWN0aW9uTmFtZSgpOwotCQlpZiAoY29ubiAhPSBudWxsICYmICFjb25uLmVxdWFscyhFTVBUWV9TVFJJTkcpKSB7Ci0JCQluYW1lICs9ICJAIiArIGNvbm47IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlzZXROYW1lKG5hbWUpOwotCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5NUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uX2RlZmF1bHREZXNjcmlwdGlvbik7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRWZXJzaW9uSWQoKSB7Ci0JCXJldHVybiB2ZXJzaW9uSWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VmVyc2lvbklkKFN0cmluZyB2ZXJzaW9uSWQpIHsKLQkJdGhpcy52ZXJzaW9uSWQgPSB2ZXJzaW9uSWQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcm1zeXN0ZW0vTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeS5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcm1zeXN0ZW0vTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzODMxNGJkLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL3Jtc3lzdGVtL01QSUNIMlJlc291cmNlTWFuYWdlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLnJtc3lzdGVtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuUFRQQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50Y29udHJvbHMuSVBVbml2ZXJzZUNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudGNvbnRyb2xzLklSZXNvdXJjZU1hbmFnZXJDb250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFJlc291cmNlTWFuYWdlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLklSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0UmVzb3VyY2VNYW5hZ2VyRmFjdG9yeSB7Ci0KLQlwdWJsaWMgSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29weUNvbmZpZ3VyYXRpb24oCi0JCQlJUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0JCXJldHVybiAoSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24pY29uZmlndXJhdGlvbi5jbG9uZSgpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBJUmVzb3VyY2VNYW5hZ2VyQ29udHJvbCBjcmVhdGUoSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZkluKSB7Ci0JCU1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IChNUElDSDJSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKSBjb25mSW47Ci0JCVBUUENvcmVQbHVnaW4gcGx1Z2luID0gUFRQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCUlQVW5pdmVyc2VDb250cm9sIHVuaXZlcnNlID0gKElQVW5pdmVyc2VDb250cm9sKSBwbHVnaW4uZ2V0VW5pdmVyc2UoKTsKLQkJcmV0dXJuIG5ldyBNUElDSDJSZXNvdXJjZU1hbmFnZXIodW5pdmVyc2UuZ2V0TmV4dFJlc291cmNlTWFuYWdlcklkKCksIHVuaXZlcnNlLCBjb25maWd1cmF0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHsKLQkJTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBjb25mID0gbmV3IE1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24odGhpcyk7Ci0KLQkJcmV0dXJuIGNvbmY7Ci0JfQotCi0JcHVibGljIElSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGxvYWRDb25maWd1cmF0aW9uKElNZW1lbnRvIG1lbWVudG8pIHsKLQkJcmV0dXJuIE1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24ubG9hZCh0aGlzLCBtZW1lbnRvKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL3J0c3lzdGVtL01QSUNIMkRpc2NvdmVySm9iLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJEaXNjb3ZlckpvYi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTdjNDA5Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL3J0c3lzdGVtL01QSUNIMkRpc2NvdmVySm9iLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucnRzeXN0ZW07Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLlBUUENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuSWxsZWdhbFZhbHVlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLklQTWFjaGluZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUmVzb3VyY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmF0dHJpYnV0ZXMuTWFjaGluZUF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUucnRzeXN0ZW0uQWJzdHJhY3RSZW1vdGVDb21tYW5kSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUuTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5NUElDSDJOb2RlQXR0cmlidXRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLk1QSUNIMlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLm1lc3NhZ2VzLk1lc3NhZ2VzOwotCi0vKioKLSAqIAotICogQGF1dGhvciBHcmVnIFdhdHNvbgotICoKLSAqLwotcHVibGljIGNsYXNzIE1QSUNIMkRpc2NvdmVySm9iIGV4dGVuZHMgQWJzdHJhY3RSZW1vdGVDb21tYW5kSm9iIHsKLQlNUElDSDJSdW50aW1lU3lzdGVtIHJ0czsKLQotCXB1YmxpYyBNUElDSDJEaXNjb3ZlckpvYihNUElDSDJSdW50aW1lU3lzdGVtIHJ0cykgewotCQlzdXBlcihydHMsCi0JCQkJTkxTLmJpbmQoTWVzc2FnZXMuTVBJQ0gyRGlzY292ZXJKb2JfbmFtZSwgcnRzLmdldFJtQ29uZmlndXJhdGlvbigpLmdldE5hbWUoKSksCi0JCQkJcnRzLnJldHJpZXZlRWZmZWN0aXZlVG9vbFJtQ29uZmlndXJhdGlvbigpLmdldERpc2NvdmVyQ21kKCksCi0JCQkJTWVzc2FnZXMuTVBJQ0gyRGlzY292ZXJKb2JfaW50ZXJydXB0ZWRFcnJvck1lc3NhZ2UsCi0JCQkJTWVzc2FnZXMuTVBJQ0gyRGlzY292ZXJKb2JfcHJvY2Vzc0Vycm9yTWVzc2FnZSwKLQkJCQlNZXNzYWdlcy5NUElDSDJEaXNjb3ZlckpvYl9wYXJzaW5nRXJyb3JNZXNzYWdlKTsKLQkJdGhpcy5ydHMgPSBydHM7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgcGFyc2UoQnVmZmVyZWRSZWFkZXIgb3V0cHV0KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8qCi0JCSAqIE1QSSByZXNvdXJjZSBtYW5hZ2VyIGhhdmUgb25seSBvbmUgbWFjaGluZSBhbmQgb25lIHF1ZXVlLgotCQkgKiBUaGVyZSB0aGV5IGFyZSBpbXBsaWNpdGx5ICJkaXNjb3ZlcmVkIi4KLQkJICovCi0JCUlSZXNvdXJjZU1hbmFnZXIgcm0gPSBQVFBDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRVbml2ZXJzZSgpLmdldFJlc291cmNlTWFuYWdlcihydHMuZ2V0Um1JRCgpKTsKLQkJU3RyaW5nIG1hY2hpbmVJRCA9IHJ0cy5jcmVhdGVNYWNoaW5lKHJtLmdldE5hbWUoKSk7Ci0JCXJ0cy5zZXRNYWNoaW5lSUQobWFjaGluZUlEKTsKLQkJU3RyaW5nIHF1ZXVlSUQgPSBydHMuY3JlYXRlUXVldWUoTWVzc2FnZXMuTVBJQ0gyRGlzY292ZXJKb2JfZGVmYXVsdFF1ZXVlTmFtZSk7Ci0JCXJ0cy5zZXRRdWV1ZUlEKHF1ZXVlSUQpOwotCi0JCUlQTWFjaGluZSBtYWNoaW5lID0gcm0uZ2V0TWFjaGluZUJ5SWQobWFjaGluZUlEKTsKLQkJYXNzZXJ0IG1hY2hpbmUgIT0gbnVsbDsKLQotCQkvKgotCQkgKiBBbnkgZXhjZXB0aW9uIGZyb20gbm93IG9uIGlzIGNhdWdodCBpbiBvcmRlciB0byBhZGQgdGhlIGVycm9yIG1lc3NhZ2UgYXMgYW4gYXR0cmlidXRlIHRvIHRoZSBtYWNoaW5lLgotCQkgKiBUaGVuLCB0aGUgZXhjZXB0aW9uIGlzIHJlLXRocm93bi4KLQkJICovCi0JCXRyeSB7Ci0JCQkvKgotCQkJICogUGFyc2Ugb3V0cHV0IG9mIHRyYWNlIGNvbW1hbmQgdGhhdCBkZXNjcmliZXMgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLgotCQkJICovCi0JCQlNUElDSDJUcmFjZVBhcnNlciBwYXJzZXIgPSBuZXcgTVBJQ0gyVHJhY2VQYXJzZXIoKTsKLQkJCU1QSUNIMkhvc3RNYXAgaG9zdE1hcCA9IHBhcnNlci5wYXJzZShvdXRwdXQpOwotCQkJaWYgKGhvc3RNYXAgPT0gbnVsbCkgewotCQkJCW1hY2hpbmUuYWRkQXR0cmlidXRlKE1hY2hpbmVBdHRyaWJ1dGVzLmdldFN0YXRlQXR0cmlidXRlRGVmaW5pdGlvbigpLmNyZWF0ZShNYWNoaW5lQXR0cmlidXRlcy5TdGF0ZS5FUlJPUikpOwotCQkJCW1hY2hpbmUuYWRkQXR0cmlidXRlKE1QSUNIMk1hY2hpbmVBdHRyaWJ1dGVzLmdldFN0YXR1c01lc3NhZ2VBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKE1lc3NhZ2VzLk1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9Ib3N0RmlsZVBhcnNlRXJyb3IpKTsKLQkJCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIE1QSUNIMlBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIHBhcnNlci5nZXRFcnJvck1lc3NhZ2UoKSkpOwotCQkJfQotCi0JCQkvKgotCQkJICogQ3JlYXRlIG1vZGVsIGFjY29yZGluZyB0byBkYXRhIGZyb20gZGlzY292ZXIuCi0JCQkgKi8KLQkJCWludCBub2RlQ291bnRlciA9IDA7Ci0KLQkJCWZvciAoTVBJQ0gySG9zdE1hcC5Ib3N0IGhvc3QgOiBob3N0TWFwLmdldEhvc3RzKCkpIHsKLQotCQkJCS8vIEFkZCBub2RlIHRvIG1vZGVsCi0JCQkJU3RyaW5nIG5vZGVJZCA9IHJ0cy5jcmVhdGVOb2RlKG1hY2hpbmVJRCwgaG9zdC5nZXROYW1lKCksIG5vZGVDb3VudGVyKyspOwotCi0JCQkJLy8gQWRkIHByb2Nlc3NvciBpbmZvcm1hdGlvbiB0byBub2RlLgotCQkJCUF0dHJpYnV0ZU1hbmFnZXIgYXR0ck1hbmFnZXIgPSBuZXcgQXR0cmlidXRlTWFuYWdlcigpOwotCQkJCWlmIChob3N0LmdldE51bVByb2Nlc3NvcnMoKSAhPSAwKSB7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlhdHRyTWFuYWdlci5hZGRBdHRyaWJ1dGUoTVBJQ0gyTm9kZUF0dHJpYnV0ZXMuZ2V0TnVtYmVyT2ZOb2Rlc0F0dHJpYnV0ZURlZmluaXRpb24oKS5jcmVhdGUoaG9zdC5nZXROdW1Qcm9jZXNzb3JzKCkpKTsKLQkJCQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIFRoaXMgc2l0dWF0aW9uIGlzIG5vdCBwb3NzaWJsZSBzaW5jZSBob3N0LmdldE51bVByb2Nlc3NvcnMoKSBpcyBhbHdheXMgdmFsaWQuCi0JCQkJCQlhc3NlcnQgZmFsc2U7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcnRzLmNoYW5nZU5vZGUobm9kZUlkLCBhdHRyTWFuYWdlcik7Ci0JCQkJcnRzLnNldE5vZGVJREZvck5hbWUoaG9zdC5nZXROYW1lKCksIG5vZGVJZCk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJLyoKLQkJCSAqIFNob3cgbWVzc2FnZSBvZiBjb3JlIGV4Y2VwdGlvbiBhbmQgY2hhbmdlIG1hY2hpbmUgc3RhdHVzIHRvIGVycm9yLgotCQkJICovCi0JCQlpZiAoZS5nZXRTdGF0dXMoKS5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuRVJST1IpIHsKLQkJCQlBdHRyaWJ1dGVNYW5hZ2VyIGF0dHJNYW5hZ2VyID0gbmV3IEF0dHJpYnV0ZU1hbmFnZXIoKTsKLQkJCQlhdHRyTWFuYWdlci5hZGRBdHRyaWJ1dGUoTWFjaGluZUF0dHJpYnV0ZXMuZ2V0U3RhdGVBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKE1hY2hpbmVBdHRyaWJ1dGVzLlN0YXRlLkVSUk9SKSk7Ci0JCQkJYXR0ck1hbmFnZXIuYWRkQXR0cmlidXRlKE1QSUNIMk1hY2hpbmVBdHRyaWJ1dGVzLmdldFN0YXR1c01lc3NhZ2VBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKE5MUy5iaW5kKE1lc3NhZ2VzLk1QSUNIMkRpc2NvdmVySm9iX0V4Y2VwdGlvbl9EaXNjb3ZlckNvbW1hbmRGYWlsZWQsIGUuZ2V0TWVzc2FnZSgpKSkpOwotCQkJCXJ0cy5jaGFuZ2VNYWNoaW5lKG1hY2hpbmVJRCwgYXR0ck1hbmFnZXIpOwotCQkJfQotCQkJdGhyb3cgZTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCS8qCi0JCQkgKiBTaG93IG1lc3NhZ2Ugb2YgYWxsIG90aGVyIGV4Y2VwdGlvbnMgYW5kIGNoYW5nZSBtYWNoaW5lIHN0YXR1cyB0byBlcnJvci4KLQkJCSAqLwotCQkJQXR0cmlidXRlTWFuYWdlciBhdHRyTWFuYWdlciA9IG5ldyBBdHRyaWJ1dGVNYW5hZ2VyKCk7Ci0JCQlhdHRyTWFuYWdlci5hZGRBdHRyaWJ1dGUoTWFjaGluZUF0dHJpYnV0ZXMuZ2V0U3RhdGVBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKE1hY2hpbmVBdHRyaWJ1dGVzLlN0YXRlLkVSUk9SKSk7Ci0JCQlhdHRyTWFuYWdlci5hZGRBdHRyaWJ1dGUoTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXMuZ2V0U3RhdHVzTWVzc2FnZUF0dHJpYnV0ZURlZmluaXRpb24oKS5jcmVhdGUoTkxTLmJpbmQoTWVzc2FnZXMuTVBJQ0gyRGlzY292ZXJKb2JfRXhjZXB0aW9uX0Rpc2NvdmVyQ29tbWFuZEludGVybmFsRXJyb3IsIGUuZ2V0TWVzc2FnZSgpKSkpOwotCQkJcnRzLmNoYW5nZU1hY2hpbmUobWFjaGluZUlELCBhdHRyTWFuYWdlcik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJIb3N0TWFwLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJIb3N0TWFwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NGQ2NGMuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gySG9zdE1hcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5ydHN5c3RlbTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNUElDSDJIb3N0TWFwIHsKLQlwdWJsaWMgc3RhdGljIGNsYXNzIEhvc3QgewotCQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBOT19FUlJPUlMgPSAwOwotCQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBFUlJfTlVNX1NMT1RTID0gMSA8PCAxOwotCQlwdWJsaWMgZmluYWwgc3RhdGljIGludCBFUlJfTUFYX05VTV9TTE9UUyA9IDEgPDwgMjsKLQkJcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRVJSX1VOS05PV05fQVRUUiA9IDEgPDwgMzsKLQotCQlwcml2YXRlIFN0cmluZyBuYW1lID0gbnVsbDsKLQkJcHJpdmF0ZSBTdHJpbmcgYWRkciA9IG51bGw7Ci0JCXByaXZhdGUgU3RyaW5nIHBvcnQgPSBudWxsOwotCQlwcml2YXRlIGludCBudW1Qcm9jZXNzb3JzID0gMDsKLQkJcHJpdmF0ZSBpbnQgbWF4TnVtUHJvY2Vzc29ycyA9IDA7Ci0JCXByaXZhdGUgaW50IGVycm9ycyA9IE5PX0VSUk9SUzsKLQotCQlwdWJsaWMgSG9zdChTdHJpbmcgaG9zdG5hbWUsIFN0cmluZyBhZGRyZXNzLCBTdHJpbmcgcG9ydCkgewotCQkJdGhpcy5uYW1lID0gaG9zdG5hbWU7Ci0JCQl0aGlzLmFkZHIgPSBhZGRyZXNzOwotCQkJdGhpcy5wb3J0ID0gcG9ydDsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0TnVtUHJvY2Vzc29ycygpIHsKLQkJCXJldHVybiBudW1Qcm9jZXNzb3JzOwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRNYXhOdW1Qcm9jZXNzb3JzKCkgewotCQkJcmV0dXJuIG1heE51bVByb2Nlc3NvcnM7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCQlyZXR1cm4gbmFtZTsKLQkJfQotCQkKLQkJcHVibGljIFN0cmluZyBnZXRBZGRyZXNzKCkgewotCQkJcmV0dXJuIGFkZHI7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldFBvcnQoKSB7Ci0JCQlyZXR1cm4gcG9ydDsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0RXJyb3JzKCkgewotCQkJcmV0dXJuIGVycm9yczsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldE51bVByb2Nlc3NvcnMoaW50IG51bVByb2Nlc3NvcnMpIHsKLQkJCXRoaXMubnVtUHJvY2Vzc29ycyA9IG51bVByb2Nlc3NvcnM7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRNYXhOdW1Qcm9jZXNzb3JzKGludCBtYXhOdW1Qcm9jZXNzb3JzKSB7Ci0JCQl0aGlzLm1heE51bVByb2Nlc3NvcnMgPSBtYXhOdW1Qcm9jZXNzb3JzOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYWRkRXJyb3JzKGludCBlcnJvcnMpIHsKLQkJCXRoaXMuZXJyb3JzIHw9IGVycm9yczsKLQkJfQotCX0KLQotCUxpc3Q8SG9zdD4gaG9zdHMgPSBuZXcgQXJyYXlMaXN0PEhvc3Q+KCk7Ci0JTWFwPFN0cmluZywgSG9zdD4gaG9zdE5hbWVUb0hvc3QgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEhvc3Q+KCk7Ci0JcHVibGljIGJvb2xlYW4gaGFzRXJyb3JzID0gZmFsc2U7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0KEhvc3QgaG9zdCkgewotCQlob3N0cy5hZGQoaG9zdCk7Ci0JCWhvc3ROYW1lVG9Ib3N0LnB1dChob3N0LmdldE5hbWUoKSwgaG9zdCk7Ci0JfQotCi0JcHVibGljIEhvc3RbXSBnZXRIb3N0cygpIHsKLQkJcmV0dXJuIGhvc3RzLnRvQXJyYXkobmV3IEhvc3RbaG9zdHMuc2l6ZSgpXSk7Ci0JfQotCi0JcHVibGljIEl0ZXJhdG9yPEhvc3Q+IGdldEhvc3RJdGVyYXRvcigpIHsKLQkJcmV0dXJuIGhvc3RzLmxpc3RJdGVyYXRvcigpOwotCX0KLQotCXB1YmxpYyBIb3N0IGdldEhvc3RCeU5hbWUoU3RyaW5nIG5hbWUpIHsKLQkJcmV0dXJuIGhvc3ROYW1lVG9Ib3N0LmdldChuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRIb3N0KFN0cmluZyBuYW1lLCBTdHJpbmcgYWRkcmVzcywgU3RyaW5nIHBvcnQpIHsKLQkJTVBJQ0gySG9zdE1hcC5Ib3N0IGhvc3QgPSBuZXcgTVBJQ0gySG9zdE1hcC5Ib3N0KG5hbWUsIGFkZHJlc3MsIHBvcnQpOwotCQlhZGRIb3N0KGhvc3QpOwotCX0KLQotCXB1YmxpYyBpbnQgY291bnQoKSB7Ci0JCXJldHVybiBob3N0cy5zaXplKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaGFzUGFyc2VFcnJvcnMoKSB7Ci0JCXJldHVybiBoYXNFcnJvcnM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gySm9iTWFwLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJKb2JNYXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQyZmQ3Ni4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJKb2JNYXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucnRzeXN0ZW07Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIEdyZWcgV2F0c29uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gySm9iTWFwIHsKLQotCS8qKgotCSAqIEFuIE1QSUNIMiBqb2IuCi0JICovCi0JcHVibGljIGNsYXNzIEpvYiB7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKT0JJRCA9IDEgPDwgMDsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEpPQkFMSUFTID0gMSA8PCAxOwotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUgPSAxIDw8IDI7Ci0JCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIT1NUID0gMSA8PCAzOwotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUElEID0gMSA8PCA0OwotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0lEID0gMSA8PCA1OwotCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkFOSyA9IDEgPDwgNjsKLQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBHTSA9IDEgPDwgNzsKLQkJCi0JCXByaXZhdGUgU3RyaW5nIGpvYklEID0gbnVsbDsKLQkJcHJpdmF0ZSBTdHJpbmcgam9iQWxpYXMgPSBudWxsOwotCQlwcml2YXRlIFN0cmluZyB1c2VybmFtZSA9IG51bGw7Ci0JCXByaXZhdGUgU3RyaW5nIGhvc3QgPSBudWxsOwotCQlwcml2YXRlIGludCBwaWQgPSAwOwotCQlwcml2YXRlIGludCBzaWQgPSAwOwotCQlwcml2YXRlIGludCByYW5rID0gMDsKLQkJcHJpdmF0ZSBTdHJpbmcgcGdtID0gbnVsbDsKLQkJcHJpdmF0ZSBpbnQgY29tcGxldGU7Ci0KLQkJcHVibGljIEpvYigpIHsKLQkJCXRoaXMuY29tcGxldGUgPSAwOwotCQl9Ci0JCQotCQkvKioKLQkJICogQHJldHVybiB0aGUgaG9zdAotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXRIb3N0KCkgewotCQkJcmV0dXJuIGhvc3Q7Ci0JCX0KLQkJCi0JCS8qKgotCQkgKiBAcmV0dXJuIHRoZSBqb2JJRAotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXRKb2JJRCgpIHsKLQkJCXJldHVybiBqb2JJRDsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIEByZXR1cm4gdGhlIGpvYkFsaWFzCi0JCSAqLwotCQlwdWJsaWMgU3RyaW5nIGdldEpvYkFsaWFzKCkgewotCQkJcmV0dXJuIGpvYkFsaWFzOwotCQl9Ci0JCQotCQkvKioKLQkJICogQHJldHVybiB0aGUgcGdtCi0JCSAqLwotCQlwdWJsaWMgU3RyaW5nIGdldFBnbSgpIHsKLQkJCXJldHVybiBwZ207Ci0JCX0KLQkJCi0JCS8qKgotCQkgKiBAcmV0dXJuIHRoZSBwaWQKLQkJICovCi0JCXB1YmxpYyBpbnQgZ2V0UGlkKCkgewotCQkJcmV0dXJuIHBpZDsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIEByZXR1cm4gdGhlIHJhbmsKLQkJICovCi0JCXB1YmxpYyBpbnQgZ2V0UmFuaygpIHsKLQkJCXJldHVybiByYW5rOwotCQl9Ci0JCQotCQkvKioKLQkJICogQHJldHVybiB0aGUgc2lkCi0JCSAqLwotCQlwdWJsaWMgaW50IGdldFNpZCgpIHsKLQkJCXJldHVybiBzaWQ7Ci0JCX0KLQotCQkvKioKLQkJICogQHJldHVybiB0aGUgdXNlcm5hbWUKLQkJICovCi0JCXB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKSB7Ci0JCQlyZXR1cm4gdXNlcm5hbWU7Ci0JCX0KLQkJCi0JCS8qKgotCQkgKiBAcmV0dXJuIHRoZSBjb21wbGV0ZQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpIHsKLQkJCXJldHVybiBjb21wbGV0ZSA9PSAoSk9CSUQgfCBKT0JBTElBUyB8IFVTRVJOQU1FIHwgSE9TVCB8IFBJRCB8IFNJRCB8IFJBTksgfCBQR00pOwotCQl9Ci0JCQotCQkvKioKLQkJICogQHBhcmFtIGhvc3QgdGhlIGhvc3QgdG8gc2V0Ci0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRIb3N0KFN0cmluZyBob3N0KSB7Ci0JCQl0aGlzLmhvc3QgPSBob3N0OwotCQkJdGhpcy5jb21wbGV0ZSB8PSBIT1NUOwotCQl9Ci0JCQotCQkvKioKLQkJICogQHBhcmFtIGpvYklEIHRoZSBqb2JJRCB0byBzZXQKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldEpvYklEKFN0cmluZyBqb2JJRCkgewotCQkJdGhpcy5qb2JJRCA9IGpvYklEOwotCQkJdGhpcy5jb21wbGV0ZSB8PSBKT0JJRDsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIEBwYXJhbSBqb2JBbGlhcyB0aGUgam9iQWxpYXMgdG8gc2V0Ci0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRKb2JBbGlhcyhTdHJpbmcgam9iQWxpYXMpIHsKLQkJCXRoaXMuam9iQWxpYXMgPSBqb2JBbGlhczsKLQkJCXRoaXMuY29tcGxldGUgfD0gSk9CQUxJQVM7Ci0JCX0KLQotCQkvKioKLQkJICogQHBhcmFtIHBnbSB0aGUgcGdtIHRvIHNldAotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0UGdtKFN0cmluZyBwZ20pIHsKLQkJCXRoaXMucGdtID0gcGdtOwotCQkJdGhpcy5jb21wbGV0ZSB8PSBQR007Ci0JCX0KLQkJCi0JCS8qKgotCQkgKiBAcGFyYW0gcGlkIHRoZSBwaWQgdG8gc2V0Ci0JCSAqLwotCQlwdWJsaWMgdm9pZCBzZXRQaWQoaW50IHBpZCkgewotCQkJdGhpcy5waWQgPSBwaWQ7Ci0JCQl0aGlzLmNvbXBsZXRlIHw9IFBJRDsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIEBwYXJhbSByYW5rIHRoZSByYW5rIHRvIHNldAotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0UmFuayhpbnQgcmFuaykgewotCQkJdGhpcy5yYW5rID0gcmFuazsKLQkJCXRoaXMuY29tcGxldGUgfD0gUkFOSzsKLQkJfQotCQkKLQkJLyoqCi0JCSAqIEBwYXJhbSBzaWQgdGhlIHNpZCB0byBzZXQKLQkJICovCi0JCXB1YmxpYyB2b2lkIHNldFNpZChpbnQgc2lkKSB7Ci0JCQl0aGlzLnNpZCA9IHNpZDsKLQkJCXRoaXMuY29tcGxldGUgfD0gU0lEOwotCQl9Ci0JCS8qKgotCQkgKiBAcGFyYW0gdXNlcm5hbWUgdGhlIHVzZXJuYW1lIHRvIHNldAotCQkgKi8KLQkJcHVibGljIHZvaWQgc2V0VXNlcm5hbWUoU3RyaW5nIHVzZXJuYW1lKSB7Ci0JCQl0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7Ci0JCQl0aGlzLmNvbXBsZXRlIHw9IFVTRVJOQU1FOwotCQl9Ci0KLQkJLyogKG5vbi1KYXZhZG9jKQotCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQotCQkgKi8KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCQlTdHJpbmcgc3RyID0gIkpvYiAiOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoIWlzQ29tcGxldGUoKSkgewotCQkJCXN0ciArPSAiKGluY29tcGxldGUpIFsiOyAvLyROT04tTkxTLTEkCi0JCQl9IGVsc2UgewotCQkJCXN0ciArPSAiXSI7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWlmICgoY29tcGxldGUgJiBKT0JJRCkgPT0gSk9CSUQpIHsKLQkJCQlzdHIgKz0gIiBpZDogIiArIGpvYklEOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlpZiAoKGNvbXBsZXRlICYgSk9CQUxJQVMpID09IEpPQkFMSUFTKSB7Ci0JCQkJc3RyICs9ICIgYWxpYXM6ICIgKyBqb2JBbGlhczsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKChjb21wbGV0ZSAmIFVTRVJOQU1FKSA9PSBVU0VSTkFNRSkgewotCQkJCXN0ciArPSAiIHVzZXJuYW1lOiIgKyB1c2VybmFtZTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKChjb21wbGV0ZSAmIEhPU1QpID09IEhPU1QpIHsKLQkJCQlzdHIgKz0gIiBob3N0OiIgKyBob3N0OyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlpZiAoKGNvbXBsZXRlICYgUElEKSA9PSBQSUQpIHsKLQkJCQlzdHIgKz0gIiBwaWQ6IiArIHBpZDsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKChjb21wbGV0ZSAmIFNJRCkgPT0gU0lEKSB7Ci0JCQkJc3RyICs9ICIgc2lkOiIgKyBzaWQ7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWlmICgoY29tcGxldGUgJiBSQU5LKSA9PSBSQU5LKSB7Ci0JCQkJc3RyICs9ICIgcmFuazoiICsgcmFuazsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKChjb21wbGV0ZSAmIFBHTSkgPT0gUEdNKSB7Ci0JCQkJc3RyICs9ICIgcGdtOiIgKyBwZ207IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCXJldHVybiBzdHIgKyAiXSI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PEpvYj4+IGpvYnNCeUlEID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PEpvYj4+KCk7Ci0JcHVibGljIGJvb2xlYW4gaGFzRXJyb3JzID0gZmFsc2U7Ci0KLQlwdWJsaWMgTVBJQ0gySm9iTWFwKCkgewotCQkvLyBOb3RoaW5nLgotCX0KLQotCXB1YmxpYyB2b2lkIGFkZEpvYihKb2Igam9iKSB7Ci0JCUxpc3Q8Sm9iPiBqb2JzID0gam9ic0J5SUQuZ2V0KGpvYi5nZXRKb2JJRCgpKTsKLQkJaWYgKGpvYnMgPT0gbnVsbCkgewotCQkJam9icyA9IG5ldyBBcnJheUxpc3Q8Sm9iPigpOwotCQkJam9ic0J5SUQucHV0KGpvYi5nZXRKb2JJRCgpLCBqb2JzKTsJCQkKLQkJfQotCQlqb2JzLmFkZChqb2IpOwotCX0KLQkKLQlwdWJsaWMgTGlzdDxKb2I+IGdldEpvYihTdHJpbmcgam9iSUQpIHsKLQkJcmV0dXJuIGpvYnNCeUlELmdldChqb2JJRCk7Ci0JfQotCi0JcHVibGljIENvbGxlY3Rpb248TGlzdDxKb2I+PiBnZXRKb2JzKCkgewotCQlyZXR1cm4gam9ic0J5SUQudmFsdWVzKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyTGlzdEpvYnNQYXJzZXIuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL3J0c3lzdGVtL01QSUNIMkxpc3RKb2JzUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMjVmOTIuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyTGlzdEpvYnNQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucnRzeXN0ZW07Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS51dGlscy5EZWJ1Z1V0aWw7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIEdyZWcgV2F0c29uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyTGlzdEpvYnNQYXJzZXIgewotCXB1YmxpYyBlbnVtIEpvYkxpc3RTdGF0ZSB7Sk9CTElTVF9JTklULCBKT0JMSVNUX1NUQVJULCBKT0JMSVNUX0VORCwgSk9CTElTVF9DT01QTEVURSwgSk9CTElTVF9FUlJPUn0KLQkKLQlwcml2YXRlIEpvYkxpc3RTdGF0ZSBzdGF0ZTsKLQlwcml2YXRlIE1QSUNIMkpvYk1hcCBtYXAgPSBuZXcgTVBJQ0gySm9iTWFwKCk7Ci0JcHJpdmF0ZSBTdHJpbmcgZXJyb3JNc2c7Ci0JCi0JLyoqCi0JICogQHBhcmFtIHBhcnNlcgotCSAqIEBwYXJhbSBsaW5lCi0JICogQHBhcmFtIGpvYgotCSAqLwotCXByaXZhdGUgdm9pZCBwcm9jZXNzSm9iSW5mbyhTdHJpbmcgbGluZSwgTVBJQ0gySm9iTWFwLkpvYiBqb2IpIHsKLQkJU3RyaW5nW10gcGFydHMgPSBsaW5lLnNwbGl0KCI9Iik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nIGtleTsKLQkJU3RyaW5nIHZhbHVlOwotCi0JCWlmIChwYXJ0cy5sZW5ndGggPT0gMSkgewotCQkJa2V5ID0gcGFydHNbMF0udHJpbSgpOwotCQkJdmFsdWUgPSAiIjsgLy8kTk9OLU5MUy0xJAotCQl9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKSB7Ci0JCQlrZXkgPSBwYXJ0c1swXS50cmltKCk7Ci0JCQl2YWx1ZSA9IHBhcnRzWzFdLnRyaW0oKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXRlID0gSm9iTGlzdFN0YXRlLkpPQkxJU1RfRVJST1I7Ci0JCQllcnJvck1zZyA9IGxpbmU7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJCi0JCWlmICgiam9iaWQiLmVxdWFscyhrZXkpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWpvYi5zZXRKb2JJRCh2YWx1ZSk7Ci0JCX0gZWxzZSBpZiAoImpvYmFsaWFzIi5lcXVhbHMoa2V5KSkgeyAvLyROT04tTkxTLTEkCi0JCQlqb2Iuc2V0Sm9iQWxpYXModmFsdWUpOwotCQl9IGVsc2UgaWYgKCJ1c2VybmFtZSIuZXF1YWxzKGtleSkpIHsgLy8kTk9OLU5MUy0xJAotCQkJam9iLnNldFVzZXJuYW1lKHZhbHVlKTsKLQkJfSBlbHNlIGlmICgiaG9zdCIuZXF1YWxzKGtleSkpIHsgLy8kTk9OLU5MUy0xJAotCQkJam9iLnNldEhvc3QodmFsdWUpOwotCQl9IGVsc2UgaWYgKCJwaWQiLmVxdWFscyhrZXkpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWpvYi5zZXRQaWQoSW50ZWdlci5wYXJzZUludCh2YWx1ZSkpOwotCQl9IGVsc2UgaWYgKCJzaWQiLmVxdWFscyhrZXkpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCWpvYi5zZXRTaWQoSW50ZWdlci5wYXJzZUludCh2YWx1ZSkpOwotCQl9IGVsc2UgaWYgKCJyYW5rIi5lcXVhbHMoa2V5KSkgeyAvLyROT04tTkxTLTEkCi0JCQlqb2Iuc2V0UmFuayhJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKSk7Ci0JCX0gZWxzZSBpZiAoInBnbSIuZXF1YWxzKGtleSkpIHsgLy8kTk9OLU5MUy0xJAotCQkJam9iLnNldFBnbSh2YWx1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0ZSA9IEpvYkxpc3RTdGF0ZS5KT0JMSVNUX0VSUk9SOwotCQkJZXJyb3JNc2cgPSBsaW5lOwotCQkJcmV0dXJuOwotCQl9Ci0JCQotCQlpZiAoam9iLmlzQ29tcGxldGUoKSkgewotCQkJc3RhdGUgPSBKb2JMaXN0U3RhdGUuSk9CTElTVF9FTkQ7Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQHBhcmFtIHJlYWRlcgotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIE1QSUNIMkpvYk1hcCBwYXJzZShCdWZmZXJlZFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBsaW5lID0gbnVsbDsKLQkJTVBJQ0gySm9iTWFwLkpvYiBqb2IgPSBudWxsOwotCi0JCXN0YXRlID0gSm9iTGlzdFN0YXRlLkpPQkxJU1RfSU5JVDsKLQkJCi0JCXdoaWxlIChzdGF0ZSAhPSBKb2JMaXN0U3RhdGUuSk9CTElTVF9DT01QTEVURSkgewotCQkJc3dpdGNoIChzdGF0ZSkgewotCQkJY2FzZSBKT0JMSVNUX0lOSVQ6Ci0JCQkJaWYgKChsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpID09IG51bGwpIHsKLQkJCQkJc3RhdGUgPSBKb2JMaXN0U3RhdGUuSk9CTElTVF9DT01QTEVURTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCQotCQkJCWxpbmUgPSBsaW5lLnRyaW0oKTsKLQotCQkJCWlmIChsaW5lLmxlbmd0aCgpID09IDApIHsKLQkJCQkJLy8gSWdub3JlIGVtcHR5IGxpbmUKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJc3RhdGUgPSBKb2JMaXN0U3RhdGUuSk9CTElTVF9TVEFSVDsKLQotCQkJCWpvYiA9IG1hcC5uZXcgSm9iKCk7Ci0JCQkJcHJvY2Vzc0pvYkluZm8obGluZSwgam9iKTsKLQkJCQlicmVhazsKLQkJCQotCQkJY2FzZSBKT0JMSVNUX1NUQVJUOgotCQkJCWlmICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSA9PSBudWxsKSB7Ci0JCQkJCXN0YXRlID0gSm9iTGlzdFN0YXRlLkpPQkxJU1RfRU5EOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJCi0JCQkJbGluZSA9IGxpbmUudHJpbSgpOwotCi0JCQkJaWYgKGxpbmUubGVuZ3RoKCkgPT0gMCkgewotCQkJCQlzdGF0ZSA9IEpvYkxpc3RTdGF0ZS5KT0JMSVNUX0VORDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCQotCQkJCXByb2Nlc3NKb2JJbmZvKGxpbmUsIGpvYik7Ci0JCQkJYnJlYWs7Ci0JCQkJCi0JCQljYXNlIEpPQkxJU1RfRU5EOgotCQkJCWlmIChqb2IgIT0gbnVsbCkgewotCQkJCQlpZiAoam9iLmlzQ29tcGxldGUoKSkgewotCQkJCQkJbWFwLmFkZEpvYihqb2IpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJRGVidWdVdGlsLnRyYWNlKERlYnVnVXRpbC5SVFNfRElTQ09WRVJfVFJBQ0lORywgImpvYiBpcyBpbmNvbXBsZXRlLCBza2lwcGluZyIgKyBqb2IudG9TdHJpbmcoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCX0KLQkJCQkKLQkJCQlpZiAobGluZSA9PSBudWxsKSB7Ci0JCQkJCXN0YXRlID0gSm9iTGlzdFN0YXRlLkpPQkxJU1RfQ09NUExFVEU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc3RhdGUgPSBKb2JMaXN0U3RhdGUuSk9CTElTVF9JTklUOwotCQkJCX0KLQkJCQlEZWJ1Z1V0aWwudHJhY2UoRGVidWdVdGlsLlJUU19ESVNDT1ZFUl9UUkFDSU5HLCAiZm91bmQgam9iICIgKyBqb2IudG9TdHJpbmcoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlicmVhazsKLQkJCQkKLQkJCWNhc2UgSk9CTElTVF9DT01QTEVURToKLQkJCQlicmVhazsKLQkJCQkKLQkJCWNhc2UgSk9CTElTVF9FUlJPUjoKLQkJCQl3aGlsZSAoKGxpbmUgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJCQllcnJvck1zZyArPSAiXG4iICsgbGluZTsgLy8kTk9OLU5MUy0xJAotCQkJCX0KLQkJCQlyZXR1cm4gbnVsbDsKLQkJCX0KLQkJfQotCQkKLQkJcmV0dXJuIG1hcDsKLQl9Ci0JCi0JLyoqCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgewotCQlyZXR1cm4gZXJyb3JNc2c7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJQZXJpb2RpY0pvYi5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyUGVyaW9kaWNKb2IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIzODg4MS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJQZXJpb2RpY0pvYi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLnJ0c3lzdGVtOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5QVFBDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50Y29udHJvbHMuSVBQcm9jZXNzQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUEpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUE1hY2hpbmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuSVBRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUmVzb3VyY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmF0dHJpYnV0ZXMuTWFjaGluZUF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuYXR0cmlidXRlcy5Qcm9jZXNzQXR0cmlidXRlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS5Ub29sc1JNUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5jb3JlLnJ0c3lzdGVtLkFic3RyYWN0UmVtb3RlQ29tbWFuZEpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLk1QSUNIMk1hY2hpbmVBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUuTVBJQ0gyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUubWVzc2FnZXMuTWVzc2FnZXM7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIEdyZWcgV2F0c29uCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyUGVyaW9kaWNKb2IgZXh0ZW5kcyBBYnN0cmFjdFJlbW90ZUNvbW1hbmRKb2IgewotCU1QSUNIMlJ1bnRpbWVTeXN0ZW0gcnRzOwotCi0JcHVibGljIE1QSUNIMlBlcmlvZGljSm9iKE1QSUNIMlJ1bnRpbWVTeXN0ZW0gcnRzKSB7Ci0JCXN1cGVyKHJ0cywKLQkJCQlOTFMuYmluZChNZXNzYWdlcy5NUElDSDJNb25pdG9ySm9iX25hbWUsIHJ0cy5nZXRSbUNvbmZpZ3VyYXRpb24oKS5nZXROYW1lKCkpLAotCQkJCXJ0cy5yZXRyaWV2ZUVmZmVjdGl2ZVRvb2xSbUNvbmZpZ3VyYXRpb24oKS5nZXRQZXJpb2RpY01vbml0b3JDbWQoKSwKLQkJCQlNZXNzYWdlcy5NUElDSDJNb25pdG9ySm9iX2ludGVycnVwdGVkRXJyb3JNZXNzYWdlLAotCQkJCU1lc3NhZ2VzLk1QSUNIMk1vbml0b3JKb2JfcHJvY2Vzc0Vycm9yTWVzc2FnZSwKLQkJCQlNZXNzYWdlcy5NUElDSDJNb25pdG9ySm9iX3BhcnNpbmdFcnJvck1lc3NhZ2UsCi0JCQkJcnRzLnJldHJpZXZlRWZmZWN0aXZlVG9vbFJtQ29uZmlndXJhdGlvbigpLmdldFBlcmlvZGljTW9uaXRvclRpbWUoKSk7Ci0JCXRoaXMucnRzID0gcnRzOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIHBhcnNlKEJ1ZmZlcmVkUmVhZGVyIG91dHB1dCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvKgotCQkgKiBNUEkgcmVzb3VyY2UgbWFuYWdlciBoYXZlIG9ubHkgb25lIG1hY2hpbmUgYW5kIG9uZSBxdWV1ZS4KLQkJICogVGhlcmUgdGhleSBhcmUgaW1wbGljaXRseSAiZGlzY292ZXJlZCIuCi0JCSAqLwotCQlJUmVzb3VyY2VNYW5hZ2VyIHJtID0gUFRQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0VW5pdmVyc2UoKS5nZXRSZXNvdXJjZU1hbmFnZXIocnRzLmdldFJtSUQoKSk7Ci0JCUlQTWFjaGluZSBtYWNoaW5lID0gcm0uZ2V0TWFjaGluZUJ5SWQocnRzLmdldE1hY2hpbmVJRCgpKTsKLQkJSVBRdWV1ZSBxdWV1ZSA9IHJtLmdldFF1ZXVlQnlJZChydHMuZ2V0UXVldWVJRCgpKTsKLQkJCi0JCS8qCi0JCSAqIFdlIG1heSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBtb2RlbCBoYXMgYmVlbiBzZXQgdXAgcHJvcGVybHkuIERvIG5vdGhpbmcKLQkJICogaWYgdGhpcyBpcyB0aGUgY2FzZS4KLQkJICovCi0JCWlmIChtYWNoaW5lID09IG51bGwgfHwgcXVldWUgPT0gbnVsbCkgewotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyoKLQkJICogQW55IGV4Y2VwdGlvbiBmcm9tIG5vdyBvbiBpcyBjYXVnaHQgaW4gb3JkZXIgdG8gYWRkIHRoZSBlcnJvciBtZXNzYWdlIGFzIGFuIGF0dHJpYnV0ZSB0byB0aGUgbWFjaGluZS4KLQkJICogVGhlbiwgdGhlIGV4Y2VwdGlvbiBpcyByZS10aHJvd24uCi0JCSAqLwotCQl0cnkgewotCQkJLyoKLQkJCSAqIFBhcnNlIG91dHB1dCBvZiBtcGRsaXN0am9icyBjb21tYW5kLgotCQkJICovCi0JCQlNUElDSDJMaXN0Sm9ic1BhcnNlciBwYXJzZXIgPSBuZXcgTVBJQ0gyTGlzdEpvYnNQYXJzZXIoKTsKLQkJCU1QSUNIMkpvYk1hcCBqb2JNYXAgPSBwYXJzZXIucGFyc2Uob3V0cHV0KTsKLQkJCWlmIChqb2JNYXAgPT0gbnVsbCkgewotCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgTVBJQ0gyUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgcGFyc2VyLmdldEVycm9yTWVzc2FnZSgpKSk7Ci0JCQl9Ci0JCQkKLQkJCS8qCi0JCQkgKiBVcGRhdGUgbW9kZWwgYWNjb3JkaW5nIHRvIGRhdGEuIEZpcnN0IGNyZWF0ZSBhbnkgbmV3IGpvYnMuCi0JCQkgKi8KLQkJCWZvciAoTGlzdDxNUElDSDJKb2JNYXAuSm9iPiBqb2JzIDogam9iTWFwLmdldEpvYnMoKSkgewotCQkJCWZvciAoTVBJQ0gySm9iTWFwLkpvYiBqb2IgOiBqb2JzKSB7Ci0JCQkJCUlQSm9iIHBKb2IgPSBxdWV1ZS5nZXRKb2JCeUlkKGpvYi5nZXRKb2JBbGlhcygpKTsKLQkJCQkJaWYgKHBKb2IgPT0gbnVsbCkgewotCQkJCQkJLy8gTm90IG9uZSBvZiBvdXIgam9icwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJSVBQcm9jZXNzQ29udHJvbCBwcm9jZXNzID0gKElQUHJvY2Vzc0NvbnRyb2wpcEpvYi5nZXRQcm9jZXNzQnlJbmRleChqb2IuZ2V0UmFuaygpKTsKLQkJCQkJaWYgKHByb2Nlc3MgIT0gbnVsbCkgewotCQkJCQkJLy8gcHJvY2VzcyBhbHJlYWR5IGV4aXN0cywgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJU3RyaW5nIG5vZGVJRCA9IHJ0cy5nZXROb2RlSURmb3JOYW1lKGpvYi5nZXRIb3N0KCkpOwotCQkJCQlpZiAobm9kZUlEID09IG51bGwpIHsKLQkJCQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgVG9vbHNSTVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIE1lc3NhZ2VzLk1QSUNIMlJ1bnRpbWVTeXN0ZW1Kb2JfRXhjZXB0aW9uX0hvc3RuYW1lc0RvTm90TWF0Y2gsIG51bGwpKTsKLQkJCQkJfQotCQotCQkJCQlTdHJpbmcgcHJvY2Vzc0lEID0gcnRzLmNyZWF0ZVByb2Nlc3Moam9iLmdldEpvYkFsaWFzKCksIGpvYi5nZXRSYW5rKCksIG5vZGVJRCk7Ci0JCQkJCQotCQkJCQlwcm9jZXNzID0gKElQUHJvY2Vzc0NvbnRyb2wpcEpvYi5nZXRQcm9jZXNzQnlJZChwcm9jZXNzSUQpOwotCQkJCQlwcm9jZXNzLnNldFN0YXRlKFByb2Nlc3NBdHRyaWJ1dGVzLlN0YXRlLlJVTk5JTkcpOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkvKgotCQkJICogU2hvdyBtZXNzYWdlIG9mIGNvcmUgZXhjZXB0aW9uIGFuZCBjaGFuZ2UgbWFjaGluZSBzdGF0dXMgdG8gZXJyb3IuCi0JCQkgKi8KLQkJCWlmIChlLmdldFN0YXR1cygpLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgewotCQkJCUF0dHJpYnV0ZU1hbmFnZXIgYXR0ck1hbmFnZXIgPSBuZXcgQXR0cmlidXRlTWFuYWdlcigpOwotCQkJCWF0dHJNYW5hZ2VyLmFkZEF0dHJpYnV0ZShNYWNoaW5lQXR0cmlidXRlcy5nZXRTdGF0ZUF0dHJpYnV0ZURlZmluaXRpb24oKS5jcmVhdGUoTWFjaGluZUF0dHJpYnV0ZXMuU3RhdGUuRVJST1IpKTsKLQkJCQlhdHRyTWFuYWdlci5hZGRBdHRyaWJ1dGUoTVBJQ0gyTWFjaGluZUF0dHJpYnV0ZXMuZ2V0U3RhdHVzTWVzc2FnZUF0dHJpYnV0ZURlZmluaXRpb24oKS5jcmVhdGUoTkxTLmJpbmQoTWVzc2FnZXMuTVBJQ0gyTW9uaXRvckpvYl9FeGNlcHRpb25fQ29tbWFuZEZhaWxlZCwgZS5nZXRNZXNzYWdlKCkpKSk7Ci0JCQkJcnRzLmNoYW5nZU1hY2hpbmUobWFjaGluZS5nZXRJRCgpLCBhdHRyTWFuYWdlcik7Ci0JCQl9Ci0JCQl0aHJvdyBlOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJLyoKLQkJCSAqIFNob3cgbWVzc2FnZSBvZiBhbGwgb3RoZXIgZXhjZXB0aW9ucyBhbmQgY2hhbmdlIG1hY2hpbmUgc3RhdHVzIHRvIGVycm9yLgotCQkJICovCi0JCQlBdHRyaWJ1dGVNYW5hZ2VyIGF0dHJNYW5hZ2VyID0gbmV3IEF0dHJpYnV0ZU1hbmFnZXIoKTsKLQkJCWF0dHJNYW5hZ2VyLmFkZEF0dHJpYnV0ZShNYWNoaW5lQXR0cmlidXRlcy5nZXRTdGF0ZUF0dHJpYnV0ZURlZmluaXRpb24oKS5jcmVhdGUoTWFjaGluZUF0dHJpYnV0ZXMuU3RhdGUuRVJST1IpKTsKLQkJCWF0dHJNYW5hZ2VyLmFkZEF0dHJpYnV0ZShNUElDSDJNYWNoaW5lQXR0cmlidXRlcy5nZXRTdGF0dXNNZXNzYWdlQXR0cmlidXRlRGVmaW5pdGlvbigpLmNyZWF0ZShOTFMuYmluZChNZXNzYWdlcy5NUElDSDJNb25pdG9ySm9iX0V4Y2VwdGlvbl9JbnRlcm5hbEVycm9yLCBlLmdldE1lc3NhZ2UoKSkpKTsKLQkJCXJ0cy5jaGFuZ2VNYWNoaW5lKG1hY2hpbmUuZ2V0SUQoKSwgYXR0ck1hbmFnZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyUnVudGltZVN5c3RlbS5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyUnVudGltZVN5c3RlbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTVlMTNmLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL3J0c3lzdGVtL01QSUNIMlJ1bnRpbWVTeXN0ZW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5ydHN5c3RlbTsKLQotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLkF0dHJpYnV0ZURlZmluaXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS5ybXN5c3RlbS5BYnN0cmFjdEVmZmVjdGl2ZVRvb2xSTUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUucnRzeXN0ZW0uQWJzdHJhY3RUb29sUnVudGltZVN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLm1lc3NhZ2VzLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucm1zeXN0ZW0uRWZmZWN0aXZlTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLnJtc3lzdGVtLk1QSUNIMlJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb247Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNUElDSDJSdW50aW1lU3lzdGVtIGV4dGVuZHMgQWJzdHJhY3RUb29sUnVudGltZVN5c3RlbSB7Ci0KLQkvKiogVGhlIG1hY2hpbmUgd2hlcmUgb3BlbiBtcGkgaXMgcnVubmluZyBvbi4gKi8KLQlwcml2YXRlIFN0cmluZyBtYWNoaW5lSUQ7Ci0JLyoqIFRoZSBxdWV1ZSB0aGF0IGRpc3BhdGNoZXMgam9icyB0byBtcGkuICovCi0JcHJpdmF0ZSBTdHJpbmcgcXVldWVJRDsKLQkvKiogTWFwcGluZyBvZiBkaXNjb3ZlcmVkIGhvc3RzIGFuZCB0aGVpciBJRCBmb3IgSVBOb2RlIGVsZW1lbnRzLiAqLwotCXByaXZhdGUgTWFwPFN0cmluZyxTdHJpbmc+IG5vZGVOYW1lVG9JRE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCi0JcHVibGljIE1QSUNIMlJ1bnRpbWVTeXN0ZW0oSW50ZWdlciBybWlkLAotCQkJTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBjb25maWcsCi0JCQlBdHRyaWJ1dGVEZWZpbml0aW9uTWFuYWdlciBhdHRyRGVmTWdyKSB7Ci0JCXN1cGVyKHJtaWQsIGNvbmZpZywgYXR0ckRlZk1ncik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0TWFjaGluZUlEKFN0cmluZyBtYWNoaW5lSUQpIHsKLQkJdGhpcy5tYWNoaW5lSUQgPSBtYWNoaW5lSUQ7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0UXVldWVJRChTdHJpbmcgcXVldWVJRCkgewotCQl0aGlzLnF1ZXVlSUQgPSBxdWV1ZUlEOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TWFjaGluZUlEKCkgewotCQlyZXR1cm4gbWFjaGluZUlEOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0UXVldWVJRCgpIHsKLQkJcmV0dXJuIHF1ZXVlSUQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXROb2RlSURmb3JOYW1lKFN0cmluZyBob3N0bmFtZSkgewotCQlyZXR1cm4gbm9kZU5hbWVUb0lETWFwLmdldChob3N0bmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Tm9kZUlERm9yTmFtZShTdHJpbmcgaG9zdG5hbWUsIFN0cmluZyBub2RlSUQpIHsKLQkJbm9kZU5hbWVUb0lETWFwLnB1dChob3N0bmFtZSwgbm9kZUlEKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybS5jb3JlLnJ0c3lzdGVtLkFic3RyYWN0VG9vbFJ1bnRpbWVTeXN0ZW0jZG9TaHV0ZG93bigpCi0JICovCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZG9TaHV0ZG93bigpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gTm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUucnRzeXN0ZW0uQWJzdHJhY3RUb29sUnVudGltZVN5c3RlbSNkb1N0YXJ0RXZlbnRzKCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBkb1N0YXJ0RXZlbnRzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyBOb3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS5ydHN5c3RlbS5BYnN0cmFjdFRvb2xSdW50aW1lU3lzdGVtI2RvU3RhcnR1cChvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBkb1N0YXJ0dXAoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIE5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybS5jb3JlLnJ0c3lzdGVtLkFic3RyYWN0VG9vbFJ1bnRpbWVTeXN0ZW0jZG9TdG9wRXZlbnRzKCkKLQkgKi8KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBkb1N0b3BFdmVudHMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIE5vdGhpbmcgdG8gZG8KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSm9iIGNyZWF0ZURpc2NvdmVySm9iKCkgewotCQlpZiAoIXJtQ29uZmlndXJhdGlvbi5oYXNEaXNjb3ZlckNtZCgpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlKb2Igam9iID0gbmV3IE1QSUNIMkRpc2NvdmVySm9iKHRoaXMpOwotCQlqb2Iuc2V0UHJpb3JpdHkoSm9iLklOVEVSQUNUSVZFKTsKLQkJam9iLnNldFN5c3RlbShmYWxzZSk7Ci0JCWpvYi5zZXRVc2VyKGZhbHNlKTsKLQkJcmV0dXJuIGpvYjsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSm9iIGNyZWF0ZVBlcmlvZGljTW9uaXRvckpvYigpIHsKLQkJaWYgKCFybUNvbmZpZ3VyYXRpb24uaGFzUGVyaW9kaWNNb25pdG9yQ21kKCkpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCUpvYiBqb2IgPSBuZXcgTVBJQ0gyUGVyaW9kaWNKb2IodGhpcyk7Ci0JCWpvYi5zZXRQcmlvcml0eShKb2IuSU5URVJBQ1RJVkUpOwotCQlqb2Iuc2V0U3lzdGVtKGZhbHNlKTsKLQkJam9iLnNldFVzZXIoZmFsc2UpOwotCQlyZXR1cm4gam9iOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBKb2IgY3JlYXRlQ29udGludW91c01vbml0b3JKb2IoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBKb2IgY3JlYXRlUnVudGltZVN5c3RlbUpvYihTdHJpbmcgam9iSUQsIFN0cmluZyBxdWV1ZUlELCBBdHRyaWJ1dGVNYW5hZ2VyIGF0dHJNZ3IpIHsKLQkJcmV0dXJuIG5ldyBNUElDSDJSdW50aW1lU3lzdGVtSm9iKGpvYklELCBxdWV1ZUlELCBNZXNzYWdlcy5NUElDSDJSdW50aW1lU3lzdGVtX0pvYk5hbWUsIHRoaXMsIGF0dHJNZ3IpOwotCX0KLQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEFic3RyYWN0RWZmZWN0aXZlVG9vbFJNQ29uZmlndXJhdGlvbiByZXRyaWV2ZUVmZmVjdGl2ZVRvb2xSbUNvbmZpZ3VyYXRpb24oKSB7Ci0JCXJldHVybiBuZXcgRWZmZWN0aXZlTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbihnZXRSbUNvbmZpZ3VyYXRpb24oKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyUnVudGltZVN5c3RlbUpvYi5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyUnVudGltZVN5c3RlbUpvYi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGE3YzJiLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi9jb3JlL3J0c3lzdGVtL01QSUNIMlJ1bnRpbWVTeXN0ZW1Kb2IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5ydHN5c3RlbTsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUGlwZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlBpcGVkT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Db25kaXRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jazsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuUFRQQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5JQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuSW50ZWdlckF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUEpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUFByb2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuYXR0cmlidXRlcy5Kb2JBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmF0dHJpYnV0ZXMuUHJvY2Vzc0F0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuYXR0cmlidXRlcy5Qcm9jZXNzQXR0cmlidXRlcy5TdGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5ldmVudHMuSUNoYW5nZWRQcm9jZXNzRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuZXZlbnRzLklOZXdQcm9jZXNzRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuZXZlbnRzLklQcm9jZXNzQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuZXZlbnRzLklSZW1vdmVQcm9jZXNzRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMubGlzdGVuZXJzLklKb2JDaGlsZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmxpc3RlbmVycy5JUHJvY2Vzc0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZS5JUmVtb3RlUHJvY2Vzc0J1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUucnRzeXN0ZW0uQWJzdHJhY3RUb29sUnVudGltZVN5c3RlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS5ydHN5c3RlbS5BYnN0cmFjdFRvb2xSdW50aW1lU3lzdGVtSm9iOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5jb3JlLnV0aWxzLkRlYnVnVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uY29yZS51dGlscy5JbnB1dFN0cmVhbUxpc3RlbmVyVG9PdXRwdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUudXRpbHMuSW5wdXRTdHJlYW1PYnNlcnZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLk1QSUNIMkpvYkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5NUElDSDJMYXVuY2hBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUuTVBJQ0gyUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUubWVzc2FnZXMuTWVzc2FnZXM7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqIEBhdXRob3IgR3JlZyBXYXRzb24KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNUElDSDJSdW50aW1lU3lzdGVtSm9iIGV4dGVuZHMgQWJzdHJhY3RUb29sUnVudGltZVN5c3RlbUpvYiB7Ci0JCi0JcHVibGljIE9iamVjdCBsb2NrMSA9IG5ldyBPYmplY3QoKTsKLQlwcml2YXRlIElucHV0U3RyZWFtT2JzZXJ2ZXIgc3RkZXJyT2JzZXJ2ZXI7Ci0JcHJpdmF0ZSBJbnB1dFN0cmVhbU9ic2VydmVyIHN0ZG91dE9ic2VydmVyOwotCi0JcHJvdGVjdGVkIGZpbmFsIFJlZW50cmFudExvY2sgcHJvY3NMb2NrID0gbmV3IFJlZW50cmFudExvY2soKTsKLQlwcm90ZWN0ZWQgZmluYWwgQ29uZGl0aW9uIHByb2NzQ29uZGl0aW9uID0gcHJvY3NMb2NrLm5ld0NvbmRpdGlvbigpOwotCXByb3RlY3RlZCBpbnQgbnVtUnVubmluZ1Byb2NzID0gMDsKLQotCXByb3RlY3RlZCBJUHJvY2Vzc0xpc3RlbmVyIHByb2Nlc3NMaXN0ZW5lciA9IG5ldyBJUHJvY2Vzc0xpc3RlbmVyKCkgewotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMubGlzdGVuZXJzLklQcm9jZXNzTGlzdGVuZXIjaGFuZGxlRXZlbnQob3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuZXZlbnRzLklQcm9jZXNzQ2hhbmdlRXZlbnQpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChJUHJvY2Vzc0NoYW5nZUV2ZW50IGUpIHsKLQkJCWlmIChlLmdldEF0dHJpYnV0ZXMoKS5nZXRBdHRyaWJ1dGUoUHJvY2Vzc0F0dHJpYnV0ZXMuZ2V0U3RhdGVBdHRyaWJ1dGVEZWZpbml0aW9uKCkpICE9IG51bGwKLQkJCQkJJiYgZS5nZXRTb3VyY2UoKS5nZXRTdGF0ZSgpID09IFByb2Nlc3NBdHRyaWJ1dGVzLlN0YXRlLlJVTk5JTkcpIHsKLQkJCQlwcm9jc0xvY2subG9jaygpOwotCQkJCXRyeSB7Ci0JCQkJCW51bVJ1bm5pbmdQcm9jcysrOwotCQkJCQlwcm9jc0NvbmRpdGlvbi5zaWduYWxBbGwoKTsKLQkJCQl9IGZpbmFsbHkgewotCQkJCQlwcm9jc0xvY2sudW5sb2NrKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfTsKLQkKLQlwcm90ZWN0ZWQgSUpvYkNoaWxkTGlzdGVuZXIgam9iQ2hpbGRMaXN0ZW5lciA9IG5ldyBJSm9iQ2hpbGRMaXN0ZW5lcigpIHsKLQkJLyogKG5vbi1KYXZhZG9jKQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmxpc3RlbmVycy5JSm9iQ2hpbGRMaXN0ZW5lciNoYW5kbGVFdmVudChvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5ldmVudHMuSUNoYW5nZWRQcm9jZXNzRXZlbnQpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChJQ2hhbmdlZFByb2Nlc3NFdmVudCBlKSB7Ci0JCQkvLyBpZ25vcmUKLQkJfQotCQkKLQkJLyogKG5vbi1KYXZhZG9jKQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmxpc3RlbmVycy5JSm9iQ2hpbGRMaXN0ZW5lciNoYW5kbGVFdmVudChvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5ldmVudHMuSU5ld1Byb2Nlc3NFdmVudCkKLQkJICovCi0JCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KElOZXdQcm9jZXNzRXZlbnQgZSkgewotCQkJZm9yIChJUFByb2Nlc3MgcHJvY2VzcyA6IGUuZ2V0UHJvY2Vzc2VzKCkpIHsKLQkJCQlwcm9jZXNzLmFkZEVsZW1lbnRMaXN0ZW5lcihwcm9jZXNzTGlzdGVuZXIpOwotCQkJfQotCQl9Ci0JCQotCQkvKiAobm9uLUphdmFkb2MpCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMubGlzdGVuZXJzLklKb2JDaGlsZExpc3RlbmVyI2hhbmRsZUV2ZW50KG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmV2ZW50cy5JUmVtb3ZlUHJvY2Vzc0V2ZW50KQotCQkgKi8KLQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoSVJlbW92ZVByb2Nlc3NFdmVudCBlKSB7Ci0JCQlmb3IgKElQUHJvY2VzcyBwcm9jZXNzIDogZS5nZXRQcm9jZXNzZXMoKSkgewotCQkJCXByb2Nlc3MucmVtb3ZlRWxlbWVudExpc3RlbmVyKHByb2Nlc3NMaXN0ZW5lcik7Ci0JCQl9Ci0JCX0KLQl9OwotCQotCXB1YmxpYyBNUElDSDJSdW50aW1lU3lzdGVtSm9iKFN0cmluZyBqb2JJRCwgU3RyaW5nIHF1ZXVlSUQsIFN0cmluZyBuYW1lLCBBYnN0cmFjdFRvb2xSdW50aW1lU3lzdGVtIHJ0U3lzdGVtLCBBdHRyaWJ1dGVNYW5hZ2VyIGF0dHJNZ3IpIHsKLQkJc3VwZXIoam9iSUQsIHF1ZXVlSUQsIG5hbWUsIHJ0U3lzdGVtLCBhdHRyTWdyKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hhbmdlQWxsUHJvY2Vzc2VzU3RhdHVzKFN0YXRlIG5ld1N0YXRlKSB7Ci0JCWZpbmFsIE1QSUNIMlJ1bnRpbWVTeXN0ZW0gcnRTeXN0ZW0gPSAoTVBJQ0gyUnVudGltZVN5c3RlbSkgZ2V0UnRTeXN0ZW0oKTsKLQkJZmluYWwgSVBKb2IgaXBKb2IgPSBQVFBDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRVbml2ZXJzZSgpLmdldFJlc291cmNlTWFuYWdlcihydFN5c3RlbS5nZXRSbUlEKCkpLmdldFF1ZXVlQnlJZChnZXRRdWV1ZUlEKCkpLmdldEpvYkJ5SWQoZ2V0Sm9iSUQoKSk7Ci0KLQkJLyoKLQkJICogTWFyayBhbGwgcnVubmluZyBhbmQgc3RhcnRpbmcgcHJvY2Vzc2VzIGFzIGZpbmlzaGVkLgotCQkgKi8KLQkJTGlzdDxTdHJpbmc+IGlkcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQlmb3IgKElQUHJvY2VzcyBpcFByb2Nlc3MgOiBpcEpvYi5nZXRQcm9jZXNzZXMoKSkgewotCQkJc3dpdGNoIChpcFByb2Nlc3MuZ2V0U3RhdGUoKSkgewotCQkJY2FzZSBFWElURUQ6Ci0JCQljYXNlIEVSUk9SOgotCQkJY2FzZSBFWElURURfU0lHTkFMTEVEOgotCQkJCWJyZWFrOwotCQkJY2FzZSBSVU5OSU5HOgotCQkJY2FzZSBTVEFSVElORzoKLQkJCWNhc2UgU1VTUEVOREVEOgotCQkJY2FzZSBVTktOT1dOOgotCQkJCWlkcy5hZGQoaXBQcm9jZXNzLmdldElEKCkpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJQXR0cmlidXRlTWFuYWdlciBhdHRyTXJnID0gbmV3IEF0dHJpYnV0ZU1hbmFnZXIoKTsKLQkJYXR0ck1yZy5hZGRBdHRyaWJ1dGUoUHJvY2Vzc0F0dHJpYnV0ZXMuZ2V0U3RhdGVBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKG5ld1N0YXRlKSk7Ci0JCWZvciAoU3RyaW5nIHByb2Nlc3NJZCA6IGlkcykgewotCQkJcnRTeXN0ZW0uY2hhbmdlUHJvY2Vzcyhwcm9jZXNzSWQsIGF0dHJNcmcpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZG9CZWZvcmVFeGVjdXRpb24oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJUmVtb3RlUHJvY2Vzc0J1aWxkZXIgYnVpbGRlcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlmaW5hbCBNUElDSDJSdW50aW1lU3lzdGVtIHJ0U3lzdGVtID0gKE1QSUNIMlJ1bnRpbWVTeXN0ZW0pIGdldFJ0U3lzdGVtKCk7Ci0JCWZpbmFsIElQSm9iIGlwSm9iID0gUFRQQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0VW5pdmVyc2UoKS5nZXRSZXNvdXJjZU1hbmFnZXIocnRTeXN0ZW0uZ2V0Um1JRCgpKS5nZXRRdWV1ZUJ5SWQoZ2V0UXVldWVJRCgpKS5nZXRKb2JCeUlkKGdldEpvYklEKCkpOwotCQlpcEpvYi5hZGRDaGlsZExpc3RlbmVyKGpvYkNoaWxkTGlzdGVuZXIpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCB2b2lkIGRvRXhlY3V0aW9uQ2xlYW5VcChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJaWYgKGdldFByb2Nlc3MoKSAhPSBudWxsKSB7Ci0JCQlnZXRQcm9jZXNzKCkuZGVzdHJveSgpOwotCQl9Ci0JCWlmIChzdGRlcnJPYnNlcnZlciAhPSBudWxsKSB7Ci0JCQlzdGRlcnJPYnNlcnZlci5raWxsKCk7Ci0JCQlzdGRlcnJPYnNlcnZlciA9IG51bGw7Ci0JCX0KLQkJaWYgKHN0ZG91dE9ic2VydmVyICE9IG51bGwpIHsKLQkJCXN0ZG91dE9ic2VydmVyLmtpbGwoKTsKLQkJCXN0ZG91dE9ic2VydmVyID0gbnVsbDsKLQkJfQotCQkvLyBUT0RPOiBtb3JlIGNsZWFudXA/Ci0JCWNoYW5nZUFsbFByb2Nlc3Nlc1N0YXR1cyhQcm9jZXNzQXR0cmlidXRlcy5TdGF0ZS5FWElURUQpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBKb2JBdHRyaWJ1dGVzLlN0YXRlIGRvRXhlY3V0aW9uRmluaXNoZWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWNoYW5nZUFsbFByb2Nlc3Nlc1N0YXR1cyhQcm9jZXNzQXR0cmlidXRlcy5TdGF0ZS5FWElURUQpOwotCQlpZiAoZ2V0UHJvY2VzcygpLmV4aXRWYWx1ZSgpICE9IDApIHsKLQkJCWlmICghdGVybWluYXRlSm9iRmxhZykgewotCQkJCWNoYW5nZUpvYlN0YXR1c01lc3NhZ2UoTkxTLmJpbmQoTWVzc2FnZXMuTVBJQ0gyUnVudGltZVN5c3RlbUpvYl9FeGNlcHRpb25fRXhlY3V0aW9uRmFpbGVkV2l0aEV4aXRWYWx1ZSwgbmV3IEludGVnZXIoZ2V0UHJvY2VzcygpLmV4aXRWYWx1ZSgpKSkpOwotCQkJCXJldHVybiBKb2JBdHRyaWJ1dGVzLlN0YXRlLkVSUk9SOwotCQkJfQotCQkJCi0JCQlEZWJ1Z1V0aWwudHJhY2UoRGVidWdVdGlsLlJUU19KT0JfVFJBQ0lORywgIlJUUyBqb2IgI3swfTogaWdub3JpbmcgZXhpdCB2YWx1ZSB7MX0gYmVjYXVzZSBqb2Igd2FzIGZvcmNlZCB0byB0ZXJtaW5hdGUgYnkgdXNlciIsIGdldEpvYklEKCksIG5ldyBJbnRlZ2VyKGdldFByb2Nlc3MoKS5leGl0VmFsdWUoKSkpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIEpvYkF0dHJpYnV0ZXMuU3RhdGUuVEVSTUlOQVRFRDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBkb0V4ZWN1dGlvblN0YXJ0ZWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZpbmFsIE1QSUNIMlJ1bnRpbWVTeXN0ZW0gcnRTeXN0ZW0gPSAoTVBJQ0gyUnVudGltZVN5c3RlbSkgZ2V0UnRTeXN0ZW0oKTsKLQkJZmluYWwgSVBKb2IgaXBKb2IgPSBQVFBDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRVbml2ZXJzZSgpLmdldFJlc291cmNlTWFuYWdlcihydFN5c3RlbS5nZXRSbUlEKCkpLmdldFF1ZXVlQnlJZChnZXRRdWV1ZUlEKCkpLmdldEpvYkJ5SWQoZ2V0Sm9iSUQoKSk7Ci0KLQkJLyoKLQkJICogTGlzdGVuZXIgdGhhdCBzYXZlcyBzdGRvdXQuCi0JCSAqLwotCQlmaW5hbCBQaXBlZE91dHB1dFN0cmVhbSBzdGRvdXRPdXRwdXRTdHJlYW0gPSBuZXcgUGlwZWRPdXRwdXRTdHJlYW0oKTsKLQkJZmluYWwgUGlwZWRJbnB1dFN0cmVhbSBzdGRvdXRJbnB1dFN0cmVhbSA9IG5ldyBQaXBlZElucHV0U3RyZWFtKCk7Ci0JCXRyeSB7Ci0JCQlzdGRvdXRJbnB1dFN0cmVhbS5jb25uZWN0KHN0ZG91dE91dHB1dFN0cmVhbSk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydCBmYWxzZTsgLy8gVGhpcyBleGNlcHRpb24gaXMgbm90IHBvc3NpYmxlCi0JCX0KLQkJZmluYWwgSW5wdXRTdHJlYW1MaXN0ZW5lclRvT3V0cHV0U3RyZWFtIHN0ZG91dFBpcGVkU3RyZWFtTGlzdGVuZXIgPSBuZXcgSW5wdXRTdHJlYW1MaXN0ZW5lclRvT3V0cHV0U3RyZWFtKHN0ZG91dE91dHB1dFN0cmVhbSk7Ci0KLQkJVGhyZWFkIHN0ZG91dFRocmVhZCA9IG5ldyBUaHJlYWQoKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlEZWJ1Z1V0aWwudHJhY2UoRGVidWdVdGlsLlJUU19KT0JfVFJBQ0lOR19NT1JFLCAiUlRTIGpvYiAjezB9OiBzdGRvdXQgdGhyZWFkOiBzdGFydGVkIiwgZ2V0Sm9iSUQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJCQlCdWZmZXJlZFJlYWRlciBzdGRvdXRCdWZmZXJlZFJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoc3Rkb3V0SW5wdXRTdHJlYW0pKTsKLQkJCQl0cnkgewotCQkJCQlTdHJpbmcgbGluZSA9IHN0ZG91dEJ1ZmZlcmVkUmVhZGVyLnJlYWRMaW5lKCk7Ci0JCQkJCXdoaWxlIChsaW5lICE9IG51bGwpIHsKLQkJCQkJCWludCBpbmRleCA9IDA7Ci0JCQkJCQlpbnQgcG9zID0gbGluZS5pbmRleE9mKCI6ICIpOyAvLyROT04tTkxTLTEkCi0JCQkJCQlpZiAocG9zID4gMCkgewotCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCWluZGV4ID0gSW50ZWdlci5wYXJzZUludChsaW5lLnN1YnN0cmluZygwLCBwb3MpKTsKLQkJCQkJCQkJbGluZSA9IGxpbmUuc3Vic3RyaW5nKHBvcysxKTsKLQkJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotCQkJCQkJCQkvLyBpZ25vcmUKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQlzeW5jaHJvbml6ZWQgKGxvY2sxKSB7Ci0JCQkJCQkJSVBQcm9jZXNzIGlwUHJvYyA9IGlwSm9iLmdldFByb2Nlc3NCeUluZGV4KGluZGV4KTsKLQkJCQkJCQlpZiAoaXBQcm9jICE9IG51bGwpIHsKLQkJCQkJCQkJaXBQcm9jLmFkZEF0dHJpYnV0ZShQcm9jZXNzQXR0cmlidXRlcy5nZXRTdGRvdXRBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKGxpbmUpKTsKLQkJCQkJCQl9Ci0JCQkJCQkJRGVidWdVdGlsLnRyYWNlKERlYnVnVXRpbC5SVFNfSk9CX09VVFBVVF9UUkFDSU5HLCAiUlRTIGpvYiAjezB9Oj4gezF9IiwgZ2V0Sm9iSUQoKSwgbGluZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJCX0KLQkJCQkJCWxpbmUgPSBzdGRvdXRCdWZmZXJlZFJlYWRlci5yZWFkTGluZSgpOwotCQkJCQl9Ci0JCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCQlEZWJ1Z1V0aWwudHJhY2UoRGVidWdVdGlsLlJUU19KT0JfVFJBQ0lOR19NT1JFLCAiUlRTIGpvYiAjezB9OiBzdGRvdXQgdGhyZWFkOiB7MH0iLCBlKTsgLy8kTk9OLU5MUy0xJAotCQkJCQlNUElDSDJQbHVnaW4ubG9nKGUpOwotCQkJCX0gZmluYWxseSB7Ci0JCQkJCXN0ZG91dFBpcGVkU3RyZWFtTGlzdGVuZXIuZGlzYWJsZSgpOwotCQkJCX0KLQkJCQlEZWJ1Z1V0aWwudHJhY2UoRGVidWdVdGlsLlJUU19KT0JfVFJBQ0lOR19NT1JFLCAiUlRTIGpvYiAjezB9OiBzdGRvdXQgdGhyZWFkOiBmaW5pc2hlZCIsIGdldEpvYklEKCkpOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCX07Ci0KLQkJLyoKLQkJICogTGlzdGVuZXIgdGhhdCBzYXZlcyBzdGRlcnIuCi0JCSAqLwotCQlmaW5hbCBQaXBlZE91dHB1dFN0cmVhbSBzdGRlcnJPdXRwdXRTdHJlYW0gPSBuZXcgUGlwZWRPdXRwdXRTdHJlYW0oKTsKLQkJZmluYWwgUGlwZWRJbnB1dFN0cmVhbSBzdGRlcnJJbnB1dFN0cmVhbSA9IG5ldyBQaXBlZElucHV0U3RyZWFtKCk7Ci0JCXRyeSB7Ci0JCQlzdGRlcnJJbnB1dFN0cmVhbS5jb25uZWN0KHN0ZGVyck91dHB1dFN0cmVhbSk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydCBmYWxzZTsgLy8gVGhpcyBleGNlcHRpb24gaXMgbm90IHBvc3NpYmxlCi0JCX0KLQkJZmluYWwgSW5wdXRTdHJlYW1MaXN0ZW5lclRvT3V0cHV0U3RyZWFtIHN0ZGVyclBpcGVkU3RyZWFtTGlzdGVuZXIgPSBuZXcgSW5wdXRTdHJlYW1MaXN0ZW5lclRvT3V0cHV0U3RyZWFtKHN0ZGVyck91dHB1dFN0cmVhbSk7Ci0JCVRocmVhZCBzdGRlcnJUaHJlYWQgPSBuZXcgVGhyZWFkKCkgewotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJRGVidWdVdGlsLnRyYWNlKERlYnVnVXRpbC5SVFNfSk9CX1RSQUNJTkdfTU9SRSwgIlJUUyBqb2IgI3swfTogc3RkZXJyIHRocmVhZDogc3RhcnRlZCIsIGdldEpvYklEKCkpOyAvLyROT04tTkxTLTEkCi0JCQkJZmluYWwgQnVmZmVyZWRSZWFkZXIgc3RkZXJyQnVmZmVyZWRSZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHN0ZGVycklucHV0U3RyZWFtKSk7Ci0JCQkJdHJ5IHsKLQkJCQkJU3RyaW5nIGxpbmUgPSBzdGRlcnJCdWZmZXJlZFJlYWRlci5yZWFkTGluZSgpOwotCQkJCQl3aGlsZSAobGluZSAhPSBudWxsKSB7Ci0JCQkJCQlpbnQgaW5kZXggPSAwOwotCQkJCQkJaW50IHBvcyA9IGxpbmUuaW5kZXhPZigiOiAiKTsgLy8kTk9OLU5MUy0xJAotCQkJCQkJaWYgKHBvcyA+IDApIHsKLQkJCQkJCQl0cnkgewotCQkJCQkJCQlpbmRleCA9IEludGVnZXIucGFyc2VJbnQobGluZS5zdWJzdHJpbmcoMCwgcG9zKSk7Ci0JCQkJCQkJCWxpbmUgPSBsaW5lLnN1YnN0cmluZyhwb3MrMSk7Ci0JCQkJCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkJLy8gaWdub3JlCi0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJc3luY2hyb25pemVkIChsb2NrMSkgewotCQkJCQkJCUlQUHJvY2VzcyBpcFByb2MgPSBpcEpvYi5nZXRQcm9jZXNzQnlJbmRleChpbmRleCk7Ci0JCQkJCQkJaWYgKGlwUHJvYyAhPSBudWxsKSB7Ci0JCQkJCQkJCWlwUHJvYy5hZGRBdHRyaWJ1dGUoUHJvY2Vzc0F0dHJpYnV0ZXMuZ2V0U3RkZXJyQXR0cmlidXRlRGVmaW5pdGlvbigpLmNyZWF0ZShsaW5lKSk7Ci0JCQkJCQkJfQotCQkJCQkJCURlYnVnVXRpbC5lcnJvcihEZWJ1Z1V0aWwuUlRTX0pPQl9PVVRQVVRfVFJBQ0lORywgIlJUUyBqb2IgI3swfTo+IHsxfSIsIGdldEpvYklEKCksIGxpbmUpOyAvLyROT04tTkxTLTEkCi0JCQkJCQl9Ci0JCQkJCQlsaW5lID0gc3RkZXJyQnVmZmVyZWRSZWFkZXIucmVhZExpbmUoKTsKLQkJCQkJfQotCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJRGVidWdVdGlsLnRyYWNlKERlYnVnVXRpbC5SVFNfSk9CX1RSQUNJTkdfTU9SRSwgIlJUUyBqb2IgI3swfTogc3RkZXJyIHRocmVhZDogezF9IiwgZ2V0Sm9iSUQoKSwgZSk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJTVBJQ0gyUGx1Z2luLmxvZyhlKTsKLQkJCQl9IGZpbmFsbHkgewotCQkJCQlzdGRlcnJQaXBlZFN0cmVhbUxpc3RlbmVyLmRpc2FibGUoKTsKLQkJCQl9Ci0JCQkJRGVidWdVdGlsLnRyYWNlKERlYnVnVXRpbC5SVFNfSk9CX1RSQUNJTkdfTU9SRSwgIlJUUyBqb2IgI3swfTogc3RkZXJyIHRocmVhZDogZmluaXNoZWQiLCBnZXRKb2JJRCgpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQl9OwotCi0JCURlYnVnVXRpbC50cmFjZShEZWJ1Z1V0aWwuUlRTX0pPQl9UUkFDSU5HX01PUkUsICJSVFMgam9iICN7MH06IHN0YXJ0aW5nIGFsbCB0aHJlYWRzIiwgZ2V0Sm9iSUQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJLyoKLQkJICogQ3JlYXRlIGFuZCBzdGFydCBsaXN0ZW5lcnMuCi0JCSAqLwotCQlzdGRvdXRUaHJlYWQuc3RhcnQoKTsKLQkJc3RkZXJyVGhyZWFkLnN0YXJ0KCk7Ci0KLQkJc3RkZXJyT2JzZXJ2ZXIgPSBuZXcgSW5wdXRTdHJlYW1PYnNlcnZlcihnZXRQcm9jZXNzKCkuZ2V0RXJyb3JTdHJlYW0oKSk7Ci0JCXN0ZG91dE9ic2VydmVyID0gbmV3IElucHV0U3RyZWFtT2JzZXJ2ZXIoZ2V0UHJvY2VzcygpLmdldElucHV0U3RyZWFtKCkpOwotCi0JCXN0ZG91dE9ic2VydmVyLmFkZExpc3RlbmVyKHN0ZG91dFBpcGVkU3RyZWFtTGlzdGVuZXIpOwotCQlzdGRlcnJPYnNlcnZlci5hZGRMaXN0ZW5lcihzdGRlcnJQaXBlZFN0cmVhbUxpc3RlbmVyKTsKLQotCQlzdGRlcnJPYnNlcnZlci5zdGFydCgpOwotCQlzdGRvdXRPYnNlcnZlci5zdGFydCgpOwotCQkKLQkJLyoKLQkJICogQXQgdGhpcyBwb2ludCB3ZSBuZWVkIHRvIHBhdXNlIHVudGlsIGFsbCBwcm9jZXNzZXMgaGF2ZSBzdGFydGVkLiBUaGlzIGlzIGJlY2F1c2UKLQkJICogdGhlIG1vZGVsIHNlbWFudGljcyBhcmUgc3VjaCB0aGF0IHRoZSBqb2Igc3RhdGUgbXVzdCBub3QgYmUgc2V0IHRvIFJVTk5JTkcgdW50aWwKLQkJICogYWxsIHRoZSBqb2IncyBwcm9jZXNzZXMgKGlmIHRoZXJlIGFyZSBhbnkpIGhhdmUgYmVlbiBjcmVhdGVkIGFuZCBhbHNvIHNldCB0byBSVU5OSU5HLgotCQkgKi8KLQkJCi0JCS8qCi0JCSAqIFdlIGtub3cgdGhhdCBhIE1QSUNIMiBqb2IgaGFzIGEgbnVtYmVyIG9mIHByb2Nlc3NlcyBhdHRyaWJ1dGUKLQkJICovCi0JCWludCBudW1Qcm9jcyA9IDE7Ci0JCUludGVnZXJBdHRyaWJ1dGUgbnVtUHJvY3NBdHRyID0gZ2V0QXR0ck1ncigpLmdldEF0dHJpYnV0ZShKb2JBdHRyaWJ1dGVzLmdldE51bWJlck9mUHJvY2Vzc2VzQXR0cmlidXRlRGVmaW5pdGlvbigpKTsKLQkJaWYgKG51bVByb2NzQXR0ciAhPSBudWxsKSB7Ci0JCQludW1Qcm9jcyA9IG51bVByb2NzQXR0ci5nZXRWYWx1ZSgpLmludFZhbHVlKCk7Ci0JCX0KLQkJCi0JCXByb2NzTG9jay5sb2NrKCk7Ci0JCXRyeSB7Ci0JCQl3aGlsZSAoIW1vbml0b3IuaXNDYW5jZWxlZCgpICYmIG51bVJ1bm5pbmdQcm9jcyA8IG51bVByb2NzKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJcHJvY3NDb25kaXRpb24uYXdhaXQoNTAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlCi0JCQkJfQotCQkJfQotCQl9IGZpbmFsbHkgewotCQkJcHJvY3NMb2NrLnVubG9jaygpOwotCQl9Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZG9QcmVwYXJlRXhlY3V0aW9uKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyBOb3RoaW5nIHRvIGRvCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElBdHRyaWJ1dGU8PywgPywgPz5bXSBkb1JldHJpZXZlVG9vbEJhc2VTdWJzdGl0dXRpb25BdHRyaWJ1dGVzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvLyBUT0RPIG1ha2UgbWFjcm9zIGF2YWlsYWJsZSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB3b3JrIGRpcmVjdG9yeS4KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIElBdHRyaWJ1dGU8PywgPywgPz5bXSBkb1JldHJpZXZlVG9vbENvbW1hbmRTdWJzdGl0dXRpb25BdHRyaWJ1dGVzKAotCQkJQXR0cmlidXRlTWFuYWdlciBiYXNlU3Vic3RpdHV0aW9uQXR0cmlidXRlTWFuYWdlciwKLQkJCVN0cmluZyBkaXJlY3RvcnksIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpIHsKLQotCQlMaXN0PElBdHRyaWJ1dGU8PywgPywgPz4+IG5ld0F0dHJpYnV0ZXMgPSBuZXcgQXJyYXlMaXN0PElBdHRyaWJ1dGU8Pyw/LD8+PigpOwotCi0JCS8qCi0JCSAqIEFuIE1QSUNIMiBzcGVjaWZpYyBhdHRyaWJ1dGUuCi0JCSAqIEF0dHJpYnV0ZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBuYW1lcyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0JCSAqLwotCQlpbnQgcCA9IDA7Ci0JCVN0cmluZyBrZXlzW10gPSBuZXcgU3RyaW5nW2Vudmlyb25tZW50LnNpemUoKV07Ci0JCWZvciAoU3RyaW5nIGtleSA6IGVudmlyb25tZW50LmtleVNldCgpKSB7Ci0JCQlrZXlzW3ArK10gPSBrZXk7Ci0JCX0KLQkJbmV3QXR0cmlidXRlcy5hZGQoTVBJQ0gyTGF1bmNoQXR0cmlidXRlcy5nZXRFbnZpcm9ubWVudEtleXNBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKGtleXMpKTsKLQotCQkvKgotCQkgKiBBbiBNUElDSDIgc3BlY2lmaWMgYXR0cmlidXRlLgotCQkgKiBBIHNob3J0Y3V0IHRoYXQgZ2VuZXJhdGVzIGFyZ3VtZW50cyBmb3IgdGhlIE1QSUNIMiBydW4gY29tbWFuZC4KLQkJICovCi0JCW5ld0F0dHJpYnV0ZXMuYWRkKE1QSUNIMkxhdW5jaEF0dHJpYnV0ZXMuZ2V0RW52aXJvbm1lbnRBcmdzQXR0cmlidXRlRGVmaW5pdGlvbigpLmNyZWF0ZSgpKTsKLQkJCi0JCS8qCi0JCSAqIFRoZSBqb2JpZCBpcyB1c2VkIHRvIGFsaWFzIHRoZSBNUElDSDIgam9iIHNvIHRoYXQgaXQgY2FuIGJlIG1hdGNoZWQgbGF0ZXIuCi0JCSAqLwotCQluZXdBdHRyaWJ1dGVzLmFkZChNUElDSDJKb2JBdHRyaWJ1dGVzLmdldEpvYklkQXR0cmlidXRlRGVmaW5pdGlvbigpLmNyZWF0ZShnZXRKb2JJRCgpKSk7Ci0JCQotCQlyZXR1cm4gbmV3QXR0cmlidXRlcy50b0FycmF5KG5ldyBJQXR0cmlidXRlPD8sID8sID8+W25ld0F0dHJpYnV0ZXMuc2l6ZSgpXSk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGRvUmV0cmlldmVUb29sRW52aXJvbm1lbnQoKQotCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gTm8gZXh0cmEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG5lZWRzIHRvIGJlIHNldCBmb3IgTVBJQ0gyLgotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlcm1pbmF0ZUpvYigpIHsKLQkJLy8gRW1wdHkgaW1wbGVtZW50YXRpb24uCi0JfQotCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIHZvaWQgZG9XYWl0RXhlY3V0aW9uKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkvKgotCQkgKiBXYWl0IHVudGlsIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIgc3RvcCBiZWNhdXNlIHN0cmVhbSBhcmUgY2xvc2VkLgotCQkgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIHByb2Nlc3MgaGFzIGZpbmlzaGVkLgotCQkgKi8KLQkJRGVidWdVdGlsLnRyYWNlKERlYnVnVXRpbC5SVFNfSk9CX1RSQUNJTkdfTU9SRSwgIlJUUyBqb2IgI3swfTogd2FpdGluZyBzdGRlcnIgdGhyZWFkIHRvIGZpbmlzaCIsIGdldEpvYklEKCkpOyAvLyROT04tTkxTLTEkCi0JCXRyeSB7Ci0JCQlzdGRlcnJPYnNlcnZlci5qb2luKCk7Ci0JCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUxKSB7Ci0JCQkvLyBJZ25vcmUKLQkJfQotCi0JCURlYnVnVXRpbC50cmFjZShEZWJ1Z1V0aWwuUlRTX0pPQl9UUkFDSU5HX01PUkUsICJSVFMgam9iICN7MH06IHdhaXRpbmcgc3Rkb3V0IHRocmVhZCB0byBmaW5pc2giLCBnZXRKb2JJRCgpKTsgLy8kTk9OLU5MUy0xJAotCQl0cnkgewotCQkJc3Rkb3V0T2JzZXJ2ZXIuam9pbigpOwotCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlMSkgewotCQkJLy8gSWdub3JlCi0JCX0KLQotCQkvKgotCQkgKiBTdGlsbCBleHBlcmllbmNlIGhhcyBzaG93biB0aGF0IHJlbW90ZSBwcm9jZXNzIG1pZ2h0IG5vdCBoYXZlIHlldCB0ZXJtaW5hdGVkLCBhbHRob3VnaCBzdGRvdXQgYW5kIHN0ZGVyciBpcyBjbG9zZWQuCi0JCSAqLwotCQlEZWJ1Z1V0aWwudHJhY2UoRGVidWdVdGlsLlJUU19KT0JfVFJBQ0lOR19NT1JFLCAiUlRTIGpvYiAjezB9OiB3YWl0aW5nIG1waSBwcm9jZXNzIHRvIGZpbmlzaCBjb21wbGV0ZWx5IiwgZ2V0Sm9iSUQoKSk7IC8vJE5PTi1OTFMtMSQKLQkJdHJ5IHsKLQkJCWdldFByb2Nlc3MoKS53YWl0Rm9yKCk7Ci0JCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCS8vIElnbm9yZQotCQl9Ci0KLQkJRGVidWdVdGlsLnRyYWNlKERlYnVnVXRpbC5SVFNfSk9CX1RSQUNJTkdfTU9SRSwgIlJUUyBqb2IgI3swfTogY29tcGxldGVseSBmaW5pc2hlZCIsIGdldEpvYklEKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJUcmFjZVBhcnNlci5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL2NvcmUvcnRzeXN0ZW0vTVBJQ0gyVHJhY2VQYXJzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0MzNjMC4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvY29yZS9ydHN5c3RlbS9NUElDSDJUcmFjZVBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLnJ0c3lzdGVtOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUudXRpbHMuRGVidWdVdGlsOwotCi0vKioKLSAqIAotICogQGF1dGhvciBHcmVnIFdhdHNvbgotICoKLSAqLwotcHVibGljIGNsYXNzIE1QSUNIMlRyYWNlUGFyc2VyIHsKLQlwcml2YXRlIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOwotCXByaXZhdGUgTVBJQ0gySG9zdE1hcCBtYXAgPSBuZXcgTVBJQ0gySG9zdE1hcCgpOwotCXByaXZhdGUgc3RhdGljIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiKFteX10rKV8oWzAtOV0pKyBcXCgoWzAtOS5dKylcXCkiKTsgLy8kTk9OLU5MUy0xJAotCi0JLyoqCi0JICogUGFyc2UgdGhlIG91dHB1dCBvZiB0aGUgbXBkdHJhY2UgY29tbWFuZC4KLQkgKiAKLQkgKiBAcGFyYW0gcmVhZGVyCi0JICogQHJldHVybiBhbiBNUElDSDJIb3N0TWFwIGNvbnRhaW5pbmcgdGhlIGtub3duIGhvc3RzLCBvciBudWxsIGlmIHRoZXJlIHdhcyBhbiBlcnJvcgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgTVBJQ0gySG9zdE1hcCBwYXJzZShCdWZmZXJlZFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCU1QSUNIMlRyYWNlUGFyc2VyIHBhcnNlciA9IG5ldyBNUElDSDJUcmFjZVBhcnNlcigpOwotCQlTdHJpbmcgbGluZTsKLQkJd2hpbGUgKChsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCWxpbmUgPSBsaW5lLnRyaW0oKTsKLQotCQkJaWYgKGxpbmUubGVuZ3RoKCk9PTApIHsKLQkJCQkvLyBJZ25vcmUgZW1wdHkgbGluZQotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlNYXRjaGVyIG1hdGNoZXIgPSBwYXR0ZXJuLm1hdGNoZXIobGluZSk7Ci0JCQlpZiAoIW1hdGNoZXIubWF0Y2hlcygpKSB7Ci0JCQkJLyoKLQkJCQkgKiBQcm9iYWJseSBhbiBlcnJvciBmcm9tIG1wZHRyYWNlLiBDb2xsZWN0IGxpbmVzIGFuZCBtYXJrIGVycm9yLgotCQkJCSAqLwotCQkJCWVycm9yTWVzc2FnZSA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQkJCi0JCQkJd2hpbGUgKChsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCQkJZXJyb3JNZXNzYWdlICs9IGxpbmUgKyAiXG4iOyAvLyROT04tTkxTLTEkCi0JCQkJfQotCQkJCQotCQkJCXJldHVybiBudWxsOwotCQkJfQotCi0JCQlpZiAobWF0Y2hlci5tYXRjaGVzKCkgJiYgbWF0Y2hlci5ncm91cENvdW50KCkgPT0gMykgewotCQkJCVN0cmluZyBob3N0ID0gbWF0Y2hlci5ncm91cCgxKTsKLQkJCQlTdHJpbmcgcG9ydCA9IG1hdGNoZXIuZ3JvdXAoMik7Ci0JCQkJU3RyaW5nIGFkZHIgPSBtYXRjaGVyLmdyb3VwKDMpOwotCQkJCXBhcnNlci5tYXAuYWRkSG9zdChob3N0LCBhZGRyLCBwb3J0KTsKLQkJCQlEZWJ1Z1V0aWwudHJhY2UoRGVidWdVdGlsLlJUU19ESVNDT1ZFUl9UUkFDSU5HLCAiZm91bmQgaG9zdCAiICsgaG9zdCArICIgYWRkciAiICsgYWRkciArICIgcG9ydCAiICsgcG9ydCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBwYXJzZXIubWFwOwotCX0KLQkKLQkvKioKLQkgKiBAcmV0dXJuIGVycm9yIG1lc3NhZ2UKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKLQkJcmV0dXJuIGVycm9yTWVzc2FnZTsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS8uY2xhc3NwYXRoIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYTNlNjguLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvLnByb2plY3QgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjIxMjYuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWk8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMWUzNTQuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNNb24gT2N0IDA2IDE0OjM2OjQ0IEdNVC0wMzowMCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZmQxMWYuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkuTVBJQ0gyVUlQbHVnaW4KLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5wdHAuY29yZSwKLSBvcmcuZWNsaXBzZS5wdHAudWksCi0gb3JnLmVjbGlwc2UucHRwLmxhdW5jaCwKLSBvcmcuZWNsaXBzZS5kZWJ1Zy51aSwKLSBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLAotIG9yZy5lY2xpcHNlLnB0cC5ybS51aSwKLSBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLAotIG9yZy5lY2xpcHNlLnB0cC51dGlscy51aSwKLSBvcmcuZWNsaXBzZS5wdHAucm0uY29yZSwKLSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLAotIG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLmxhdW5jaCwKLSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS53aXphcmRzCi1CdW5kbGUtVmVuZG9yOiAlcGx1Z2luUHJvdmlkZXIKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9hYm91dC5odG1sIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmODEwOTMuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotIAotPHA+TWF5IDIsIDIwMDY8L3A+CQotPGgzPkxpY2Vuc2U8L2gzPgotCi08cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gKCZxdW90O0NvbnRlbnQmcXVvdDspLiAgVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlCi1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgotCi08cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UKLWluZGljYXRlZCBiZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IGFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLjwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9idWlsZC5wcm9wZXJ0aWVzIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYTNiOTEuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZGF0YS8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9kYXRhL2xhdW5jaC1kZWZhdWx0cy5wcm9wZXJ0aWVzIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL2RhdGEvbGF1bmNoLWRlZmF1bHRzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNWEzMmMuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL2RhdGEvbGF1bmNoLWRlZmF1bHRzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1OVU1QUk9DUz0xCi1OT0xPQ0FMPWZhbHNlCi1QUkVGSVg9Ci1VU0VQUkVGSVg9ZmFsc2UKLUhPU1RGSUxFPQotVVNFSE9TVEZJTEU9ZmFsc2UKLUhPU1RMSVNUPQotVVNFSE9TVExJU1Q9ZmFsc2UKLUFSR1VNRU5UUz0KLVVTRURFRkFVTFRBUkdVTUVOVFM9dHJ1ZQotVVNFREVGQVVMVFBBUkFNRVRFUlM9dHJ1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9wbHVnaW4ucHJvcGVydGllcyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2YmYxZi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXBsdWdpbk5hbWU9UFRQIE1QSUNIMiAobmV3KSBVSQotcGx1Z2luUHJvdmlkZXI9RWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9wbHVnaW4ueG1sIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMmNjNzAuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5wdHAudWkucm1Db25maWd1cmF0aW9uV2l6YXJkcyI+Ci0gICAgICA8Y29uZmlndXJhdGlvbldpemFyZAotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLndpemFyZHMuTVBJQ0gyUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZUZhY3RvcnkiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLm1waWNoMi51aS5jb25maWd1cmF0aW9uV2l6YXJkIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5wdHAubGF1bmNoLnJtTGF1bmNoQ29uZmlndXJhdGlvbnMiPgotICAgICAgPGxhdW5jaENvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS5sYXVuY2guTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRmFjdG9yeSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucm0ubXBpY2gyLnVpLmxhdW5jaENvbmZpZ3VyYXRpb24iLz4KLSAgIDwvZXh0ZW5zaW9uPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL01QSUNIMlVJUGx1Z2luLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL01QSUNIMlVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYWEzZTEuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9NUElDSDJVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLmNvcmUuVG9vbHNSTVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS5sYXVuY2guTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLm1lc3NhZ2VzLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKi8KLXB1YmxpYyBjbGFzcyBNUElDSDJVSVBsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkiOyAvLyROT04tTkxTLTEkCi0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgTVBJQ0gyVUlQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIE1QSUNIMlVJUGx1Z2luKCkgewotCQkvLyBFbXB0eSBpbXBsZW1lbnRhdGlvbi4KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCQlNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMubG9hZERlZmF1bHRzKCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgTVBJQ0gyVUlQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSYWlzZSBjb3JlIGV4Y2VwdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIENvcmVFeGNlcHRpb24gY29yZUVycm9yRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7Ci0JCXJldHVybiBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFRvb2xzUk1QbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLCBtZXNzYWdlKSk7Ci0JfQotCi0JLyoqCi0JICogUmFpc2UgY29yZSBleGNlcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UKLQkgKiBAcGFyYW0gdAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIENvcmVFeGNlcHRpb24gY29yZUVycm9yRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgdCkgewotCQlyZXR1cm4gbmV3IENvcmVFeGNlcHRpb24obmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBUb29sc1JNUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgbWVzc2FnZSwgdCkpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZSBsb2cgZW50cnkgZnJvbSBhbiBJU3RhdHVzCi0JICoKLQkgKiBAcGFyYW0gc3RhdHVzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhJU3RhdHVzIHN0YXR1cykgewotCQlnZXREZWZhdWx0KCkuZ2V0TG9nKCkubG9nKHN0YXR1cyk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGxvZyBlbnRyeSBmcm9tIGEgc3RyaW5nCi0JICoKLQkgKiBAcGFyYW0gbXNnCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhTdHJpbmcgbXNnKSB7Ci0JCWxvZyhuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIGdldFVuaXF1ZUlkZW50aWZpZXIoKSwgSVN0YXR1cy5FUlJPUiwgbXNnLCBudWxsKSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGxvZyBlbnRyeSBmcm9tIGEgVGhyb3dhYmxlCi0JICoKLQkgKiBAcGFyYW0gZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coVGhyb3dhYmxlIGUpIHsKLQkJbG9nKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgZ2V0VW5pcXVlSWRlbnRpZmllcigpLCBJU3RhdHVzLkVSUk9SLCBNZXNzYWdlcy5NUElDSDJVSVBsdWdpbl9FeGNlcHRpb25fSW50ZXJuYWxFcnJvciwgZSkpOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYXRlIGEgdW5pcXVlIGlkZW50aWZpZXIKLQkgKgotCSAqIEByZXR1cm4gdW5pcXVlIGlkZW50aWZpZXIgc3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VW5pcXVlSWRlbnRpZmllcigpIHsKLQkJaWYgKGdldERlZmF1bHQoKSA9PSBudWxsKQotCQkJLy8gSWYgdGhlIGRlZmF1bHQgaW5zdGFuY2UgaXMgbm90IHlldCBpbml0aWFsaXplZCwKLQkJCS8vIHJldHVybiBhIHN0YXRpYyBpZGVudGlmaWVyLiBUaGlzIGlkZW50aWZpZXIgbXVzdAotCQkJLy8gbWF0Y2ggdGhlIHBsdWdpbiBpZCBkZWZpbmVkIGluIHBsdWdpbi54bWwKLQkJCXJldHVybiBQTFVHSU5fSUQ7Ci0JCXJldHVybiBnZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9sYXVuY2gvQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgwZDVkNy4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkubGF1bmNoOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5DaGVja1N0YXRlQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNoZWNrU3RhdGVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLklBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuSVBRdWV1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUmVzb3VyY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5STUxhdW5jaFZhbGlkYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkuTVBJQ0gyVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkubWVzc2FnZXMuTWVzc2FnZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnVpLmxhdW5jaC5BYnN0cmFjdFJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnVpLmxhdW5jaC5STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiRGF0YVNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0udWkubGF1bmNoLlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJXaWRnZXRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiIGV4dGVuZHMKLUFic3RyYWN0Uk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiB7Ci0KLQlDb21wb3NpdGUgY29udHJvbDsKLQlCdXR0b24gdXNlQXJnc0RlZmF1bHRzQnV0dG9uOwotCVRleHQgYXJnc1RleHQ7Ci0KLQljbGFzcyBXaWRnZXRMaXN0ZW5lciBleHRlbmRzIFJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJXaWRnZXRMaXN0ZW5lcgotCWltcGxlbWVudHMgSUNoZWNrU3RhdGVMaXN0ZW5lciB7Ci0JCXB1YmxpYyBXaWRnZXRMaXN0ZW5lcihBYnN0cmFjdFJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIgZHluYW1pY1RhYikgewotCQkJc3VwZXIoZHluYW1pY1RhYik7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIHZvaWQgZG9XaWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQlzdXBlci5kb1dpZGdldFNlbGVjdGVkKGUpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgY2hlY2tTdGF0ZUNoYW5nZWQoQ2hlY2tTdGF0ZUNoYW5nZWRFdmVudCBldmVudCkgewotCQkJLy8gZG8gbm90aGluZwotCQl9Ci0JfQotCi0JY2xhc3MgRGF0YVNvdXJjZSBleHRlbmRzIFJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJEYXRhU291cmNlIHsKLQkJcHJpdmF0ZSBib29sZWFuIHVzZURlZkFyZ3M7Ci0JCXByaXZhdGUgU3RyaW5nIGFyZ3M7Ci0KLQkJcHJvdGVjdGVkIERhdGFTb3VyY2UoQWJzdHJhY3RSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiIHBhZ2UpIHsKLQkJCXN1cGVyKHBhZ2UpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIGNvcHlGcm9tRmllbGRzKCkgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24gewotCQkJdXNlRGVmQXJncyA9IHVzZUFyZ3NEZWZhdWx0c0J1dHRvbi5nZXRTZWxlY3Rpb24oKTsKLQkJCWFyZ3MgPSBleHRyYWN0VGV4dChhcmdzVGV4dCk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIHZvaWQgY29weVRvRmllbGRzKCkgewotCQkJYXBwbHlUZXh0KGFyZ3NUZXh0LCBhcmdzKTsKLQkJCXVzZUFyZ3NEZWZhdWx0c0J1dHRvbi5zZXRTZWxlY3Rpb24odXNlRGVmQXJncyk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIHZvaWQgY29weVRvU3RvcmFnZSgpIHsKLQkJCWdldENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSgpLnNldEF0dHJpYnV0ZSgKLQkJCQkJTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1VTRURFRkFVTFRBUkdVTUVOVFMsCi0JCQkJCXVzZURlZkFyZ3MpOwotCQkJZ2V0Q29uZmlndXJhdGlvbldvcmtpbmdDb3B5KCkuc2V0QXR0cmlidXRlKAotCQkJCQlNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfQVJHVU1FTlRTLCBhcmdzKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBsb2FkRGVmYXVsdCgpIHsKLQkJCWFyZ3MgPSBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9BUkdVTUVOVFM7Ci0JCQl1c2VEZWZBcmdzID0gTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfVVNFREVGQVVMVEFSR1VNRU5UUzsKLQotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIGxvYWRGcm9tU3RvcmFnZSgpIHsKLQkJCXRyeSB7Ci0JCQkJYXJncyA9IGdldENvbmZpZ3VyYXRpb24oKS5nZXRBdHRyaWJ1dGUoCi0JCQkJCQlNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfQVJHVU1FTlRTLAotCQkJCQkJTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfQVJHVU1FTlRTKTsKLQkJCQl1c2VEZWZBcmdzID0gZ2V0Q29uZmlndXJhdGlvbigpCi0JCQkJLmdldEF0dHJpYnV0ZSgKLQkJCQkJCU1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb24uQVRUUl9VU0VERUZBVUxUQVJHVU1FTlRTLAotCQkJCQkJTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfVVNFREVGQVVMVEFSR1VNRU5UUyk7Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIGhhbmRsZSBleGNlcHRpb24/Ci0JCQkJTVBJQ0gyVUlQbHVnaW4ubG9nKGUpOwotCQkJfQotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIHZhbGlkYXRlTG9jYWwoKSB0aHJvd3MgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0JCQlpZiAoIXVzZURlZkFyZ3MgJiYgYXJncyA9PSBudWxsKSB7Ci0JCQkJdGhyb3cgbmV3IFZhbGlkYXRpb25FeGNlcHRpb24oCi0JCQkJCQlNZXNzYWdlcy5BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVmFsaWRhdGlvbl9FbXB0eUFyZ3VtZW50cyk7Ci0JCQl9Ci0JCX0KLQotCQkvKioKLQkJICogQ29udmVydCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IGludG8gb25lIGhvc3QgcGVyIGxpbmUKLQkJICogCi0JCSAqIEBwYXJhbSBsaXN0Ci0JCSAqIEByZXR1cm4KLQkJICovCi0JCXByaXZhdGUgU3RyaW5nIGhvc3RMaXN0VG9UZXh0KFN0cmluZyBsaXN0KSB7Ci0JCQlpZiAobGlzdCA9PSBudWxsKQotCQkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RyaW5nIHJlc3VsdCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmdbXSB2YWx1ZXMgPSBsaXN0LnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCF2YWx1ZXNbaV0uZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCWlmIChpID4gMCkgewotCQkJCQkJcmVzdWx0ICs9ICJcciI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCQlyZXN1bHQgKz0gdmFsdWVzW2ldOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiByZXN1bHQ7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYkRhdGFTb3VyY2UgY3JlYXRlRGF0YVNvdXJjZSgpIHsKLQkJcmV0dXJuIG5ldyBEYXRhU291cmNlKHRoaXMpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiV2lkZ2V0TGlzdGVuZXIgY3JlYXRlTGlzdGVuZXIoKSB7Ci0JCXJldHVybiBuZXcgV2lkZ2V0TGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiBNZXNzYWdlcy5BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVGl0bGU7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50LCBJUmVzb3VyY2VNYW5hZ2VyIHJtLAotCQkJSVBRdWV1ZSBxdWV1ZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQljb250cm9sID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJY29udHJvbC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7Ci0KLQkJZmluYWwgR3JvdXAgYXJndW1lbnRzR3JvdXAgPSBuZXcgR3JvdXAoY29udHJvbCwgU1dULk5PTkUpOwotCQlhcmd1bWVudHNHcm91cC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwKLQkJCQlmYWxzZSkpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMjsKLQkJYXJndW1lbnRzR3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0JCWFyZ3VtZW50c0dyb3VwCi0JCS5zZXRUZXh0KE1lc3NhZ2VzLkFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9MYXVuY2hBcmd1bWVudHMpOwotCi0JCXVzZUFyZ3NEZWZhdWx0c0J1dHRvbiA9IG5ldyBCdXR0b24oYXJndW1lbnRzR3JvdXAsIFNXVC5DSEVDSyk7Ci0JCXVzZUFyZ3NEZWZhdWx0c0J1dHRvbgotCQkuc2V0VGV4dChNZXNzYWdlcy5BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfRGVmYXVsdEFyZ3VtZW50cyk7Ci0JCS8vIHVzZUFyZ3NEZWZhdWx0c0J1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSk7Ci0JCXVzZUFyZ3NEZWZhdWx0c0J1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKLQkJdXNlQXJnc0RlZmF1bHRzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKGdldExpc3RlbmVyKCkpOwotCi0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGFyZ3VtZW50c0dyb3VwLCBTV1QuTk9ORSk7Ci0JCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOwotCQlsYWJlbAotCQkuc2V0VGV4dChNZXNzYWdlcy5BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfQXJndW1lbnRzKTsKLQotCQlhcmdzVGV4dCA9IG5ldyBUZXh0KGFyZ3VtZW50c0dyb3VwLCBTV1QuQk9SREVSKTsKLQkJYXJnc1RleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKSk7Ci0JfQotCi0JcHVibGljIElBdHRyaWJ1dGU8PywgPywgPz5bXSBnZXRBdHRyaWJ1dGVzKElSZXNvdXJjZU1hbmFnZXIgcm0sCi0JCQlJUFF1ZXVlIHF1ZXVlLCBJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLCBTdHJpbmcgbW9kZSkKLQkJCXRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpIHsKLQkJcmV0dXJuIGNvbnRyb2w7Ci0JfQotCi0JcHVibGljIFJNTGF1bmNoVmFsaWRhdGlvbiBzZXREZWZhdWx0cygKLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbiwgSVJlc291cmNlTWFuYWdlciBybSwKLQkJCUlQUXVldWUgcXVldWUpIHsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoCi0JCQkJTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1VTRURFRkFVTFRBUkdVTUVOVFMsCi0JCQkJTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfVVNFREVGQVVMVEFSR1VNRU5UUyk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb24uQVRUUl9BUkdVTUVOVFMsCi0JCQkJTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfQVJHVU1FTlRTKTsKLQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24odHJ1ZSwgbnVsbCk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgdXBkYXRlQ29udHJvbHMoKSB7Ci0JCWFyZ3NUZXh0LnNldEVuYWJsZWQoIXVzZUFyZ3NEZWZhdWx0c0J1dHRvbi5nZXRTZWxlY3Rpb24oKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9sYXVuY2gvQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE3MzljYi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkubGF1bmNoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuSUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLklsbGVnYWxWYWx1ZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUFF1ZXVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLklSZXNvdXJjZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuYXR0cmlidXRlcy5Kb2JBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5STUxhdW5jaFZhbGlkYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIuY29yZS5NUElDSDJMYXVuY2hBdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLk1QSUNIMlVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLm1lc3NhZ2VzLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS51aS5sYXVuY2guQWJzdHJhY3RSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS51aS5sYXVuY2guUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYkRhdGFTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnVpLmxhdW5jaC5STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiV2lkZ2V0TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnV0aWxzLnVpLlBpeGVsQ29udmVydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3Bpbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiIGV4dGVuZHMgQWJzdHJhY3RSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiIHsKLQotCUNvbXBvc2l0ZSBjb250cm9sOwotCVNwaW5uZXIgbnVtUHJvY3NTcGlubmVyOwotCUJ1dHRvbiBub0xvY2FsQnV0dG9uOwotCUJ1dHRvbiB1c2VQcmVmaXhCdXR0b247Ci0JVGV4dCBwcmVmaXhUZXh0OwotCVRleHQgaG9zdEZpbGVUZXh0OwotCUJ1dHRvbiBob3N0RmlsZUJ1dHRvbjsKLQlUZXh0IGhvc3RMaXN0VGV4dDsKLQlCdXR0b24gaG9zdExpc3RCdXR0b247Ci0JQnV0dG9uIGJyb3dzZUJ1dHRvbjsKLQotCWNsYXNzIFdpZGdldExpc3RlbmVyIGV4dGVuZHMgUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYldpZGdldExpc3RlbmVyIHsKLQkJcHVibGljIFdpZGdldExpc3RlbmVyKEFic3RyYWN0Uk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiBkeW5hbWljVGFiKSB7Ci0JCQlzdXBlcihkeW5hbWljVGFiKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBkb01vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJaWYgKGUuZ2V0U291cmNlKCkgPT0gbnVtUHJvY3NTcGlubmVyIHx8IGUuZ2V0U291cmNlKCkgPT0gcHJlZml4VGV4dCB8fCBlLmdldFNvdXJjZSgpID09IGhvc3RGaWxlVGV4dCB8fCBlLmdldFNvdXJjZSgpID09IGhvc3RMaXN0VGV4dCkgewotCQkJCS8vCQkJCWdldERhdGFTb3VyY2UoKS5qdXN0VmFsaWRhdGUoKTsKLQkJCX0gZWxzZXsKLQkJCQlzdXBlci5kb01vZGlmeVRleHQoZSk7Ci0JCQl9Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIHZvaWQgZG9XaWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7Ci0JCQlpZiAoZS5nZXRTb3VyY2UoKSA9PSBub0xvY2FsQnV0dG9uIHx8IGUuZ2V0U291cmNlKCkgPT0gdXNlUHJlZml4QnV0dG9uKSB7Ci0JCQkJLy8JCQkJZ2V0RGF0YVNvdXJjZSgpLmp1c3RWYWxpZGF0ZSgpOwotCQkJfSBlbHNlIGlmIChlLmdldFNvdXJjZSgpID09IHVzZVByZWZpeEJ1dHRvbiB8fCBlLmdldFNvdXJjZSgpID09IGhvc3RGaWxlQnV0dG9uIHx8IGUuZ2V0U291cmNlKCkgPT0gaG9zdExpc3RCdXR0b24pIHsKLQkJCQkvLwkJCQlnZXREYXRhU291cmNlKCkuanVzdFZhbGlkYXRlKCk7Ci0JCQkJdXBkYXRlQ29udHJvbHMoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3VwZXIuZG9XaWRnZXRTZWxlY3RlZChlKTsKLQkJCX0KLQkJfQotCX0KLQotCWNsYXNzIERhdGFTb3VyY2UgZXh0ZW5kcyBSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiRGF0YVNvdXJjZSB7Ci0KLQkJcHJpdmF0ZSBpbnQgbnVtUHJvY3M7Ci0JCXByaXZhdGUgYm9vbGVhbiBub0xvY2FsOwotCQlwcml2YXRlIGJvb2xlYW4gdXNlUHJlZml4OwotCQlwcml2YXRlIFN0cmluZyBwcmVmaXg7Ci0JCXByaXZhdGUgYm9vbGVhbiB1c2VIb3N0RmlsZTsKLQkJcHJpdmF0ZSBTdHJpbmcgaG9zdEZpbGU7Ci0JCXByaXZhdGUgYm9vbGVhbiB1c2VIb3N0TGlzdDsKLQkJcHJpdmF0ZSBTdHJpbmcgaG9zdExpc3Q7Ci0KLQkJcHJvdGVjdGVkIERhdGFTb3VyY2UoQWJzdHJhY3RSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiIHBhZ2UpIHsKLQkJCXN1cGVyKHBhZ2UpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIGNvcHlGcm9tRmllbGRzKCkgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24gewotCQkJbnVtUHJvY3MgPSBudW1Qcm9jc1NwaW5uZXIuZ2V0U2VsZWN0aW9uKCk7Ci0JCQlub0xvY2FsID0gbm9Mb2NhbEJ1dHRvbi5nZXRTZWxlY3Rpb24oKTsKLQkJCXVzZVByZWZpeCA9IHVzZVByZWZpeEJ1dHRvbi5nZXRTZWxlY3Rpb24oKTsKLQkJCXByZWZpeCA9IGV4dHJhY3RUZXh0KHByZWZpeFRleHQpOwotCQkJdXNlSG9zdEZpbGUgPSBob3N0RmlsZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKTsKLQkJCWhvc3RGaWxlID0gZXh0cmFjdFRleHQoaG9zdEZpbGVUZXh0KTsKLQkJCXVzZUhvc3RMaXN0ID0gaG9zdExpc3RCdXR0b24uZ2V0U2VsZWN0aW9uKCk7Ci0JCQlob3N0TGlzdCA9IGV4dHJhY3RUZXh0KGhvc3RMaXN0VGV4dCk7Ci0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHJvdGVjdGVkIHZvaWQgY29weVRvRmllbGRzKCkgewotCQkJbnVtUHJvY3NTcGlubmVyLnNldFNlbGVjdGlvbihudW1Qcm9jcyk7Ci0JCQlub0xvY2FsQnV0dG9uLnNldFNlbGVjdGlvbihub0xvY2FsKTsKLQkJCXVzZVByZWZpeEJ1dHRvbi5zZXRTZWxlY3Rpb24odXNlUHJlZml4KTsKLQkJCWFwcGx5VGV4dChwcmVmaXhUZXh0LCBwcmVmaXgpOwotCQkJYXBwbHlUZXh0KGhvc3RGaWxlVGV4dCwgaG9zdEZpbGUpOwotCQkJaG9zdEZpbGVCdXR0b24uc2V0U2VsZWN0aW9uKHVzZUhvc3RGaWxlKTsKLQkJCWFwcGx5VGV4dChob3N0TGlzdFRleHQsIGhvc3RMaXN0VG9UZXh0KGhvc3RMaXN0KSk7Ci0JCQlob3N0TGlzdEJ1dHRvbi5zZXRTZWxlY3Rpb24odXNlSG9zdExpc3QpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIGNvcHlUb1N0b3JhZ2UoKSB7Ci0JCQlnZXRDb25maWd1cmF0aW9uV29ya2luZ0NvcHkoKS5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX05VTVBST0NTLCBudW1Qcm9jcyk7Ci0JCQlnZXRDb25maWd1cmF0aW9uV29ya2luZ0NvcHkoKS5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX05PTE9DQUwsIG5vTG9jYWwpOwotCQkJZ2V0Q29uZmlndXJhdGlvbldvcmtpbmdDb3B5KCkuc2V0QXR0cmlidXRlKE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb24uQVRUUl9VU0VQUkVGSVgsIHVzZVByZWZpeCk7Ci0JCQlnZXRDb25maWd1cmF0aW9uV29ya2luZ0NvcHkoKS5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1BSRUZJWCwgcHJlZml4KTsKLQkJCWdldENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSgpLnNldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfVVNFSE9TVEZJTEUsIHVzZUhvc3RGaWxlKTsKLQkJCWdldENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSgpLnNldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfSE9TVEZJTEUsIGhvc3RGaWxlKTsKLQkJCWdldENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSgpLnNldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfVVNFSE9TVExJU1QsIHVzZUhvc3RMaXN0KTsKLQkJCWdldENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSgpLnNldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfSE9TVExJU1QsIGhvc3RMaXN0KTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBsb2FkRGVmYXVsdCgpIHsKLQkJCW51bVByb2NzID0gTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfTlVNUFJPQ1M7Ci0JCQlub0xvY2FsID0gTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfTk9MT0NBTDsKLQkJCXVzZVByZWZpeCA9IE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1VTRVBSRUZJWDsKLQkJCXByZWZpeCA9IE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1BSRUZJWDsKLQkJCWhvc3RGaWxlID0gTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfSE9TVEZJTEU7Ci0JCQl1c2VIb3N0RmlsZSA9IE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1VTRUhPU1RGSUxFOwotCQkJaG9zdExpc3QgPSBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9IT1NUTElTVDsKLQkJCXVzZUhvc3RMaXN0ID0gTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfVVNFSE9TVExJU1Q7Ci0KLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBsb2FkRnJvbVN0b3JhZ2UoKSB7Ci0JCQl0cnkgewotCQkJCW51bVByb2NzID0gZ2V0Q29uZmlndXJhdGlvbigpLmdldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfTlVNUFJPQ1MsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX05VTVBST0NTKTsKLQkJCQlub0xvY2FsID0gZ2V0Q29uZmlndXJhdGlvbigpLmdldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfTk9MT0NBTCwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfTk9MT0NBTCk7Ci0JCQkJdXNlUHJlZml4ID0gZ2V0Q29uZmlndXJhdGlvbigpLmdldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfVVNFUFJFRklYLCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9VU0VQUkVGSVgpOwotCQkJCXByZWZpeCA9IGdldENvbmZpZ3VyYXRpb24oKS5nZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1BSRUZJWCwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfUFJFRklYKTsKLQkJCQlob3N0RmlsZSA9IGdldENvbmZpZ3VyYXRpb24oKS5nZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX0hPU1RGSUxFLCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9IT1NURklMRSk7Ci0JCQkJdXNlSG9zdEZpbGUgPSBnZXRDb25maWd1cmF0aW9uKCkuZ2V0QXR0cmlidXRlKE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb24uQVRUUl9VU0VIT1NURklMRSwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfVVNFSE9TVEZJTEUpOwotCQkJCWhvc3RMaXN0ID0gZ2V0Q29uZmlndXJhdGlvbigpLmdldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfSE9TVExJU1QsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX0hPU1RMSVNUKTsKLQkJCQl1c2VIb3N0TGlzdCA9IGdldENvbmZpZ3VyYXRpb24oKS5nZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1VTRUhPU1RMSVNULCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9VU0VIT1NUTElTVCk7Ci0JCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIGhhbmRsZSBleGNlcHRpb24/Ci0JCQkJTVBJQ0gyVUlQbHVnaW4ubG9nKGUpOwotCQkJfQotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIHZhbGlkYXRlTG9jYWwoKSB0aHJvd3MgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0JCQlpZiAobnVtUHJvY3MgPCAxKSB7Ci0JCQkJdGhyb3cgbmV3IFZhbGlkYXRpb25FeGNlcHRpb24oTWVzc2FnZXMuQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1ZhbGlkYXRpb25fTm9Qcm9jZXNzKTsKLQkJCX0KLQkJCWlmICh1c2VQcmVmaXggJiYgcHJlZml4ID09IG51bGwpIHsKLQkJCQl0aHJvdyBuZXcgVmFsaWRhdGlvbkV4Y2VwdGlvbihNZXNzYWdlcy5CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVmFsaWRhdGlvbl9FbXB0eVByZWZpeCk7Ci0JCQl9Ci0JCQlpZiAodXNlSG9zdEZpbGUgJiYgaG9zdEZpbGUgPT0gbnVsbCkgewotCQkJCXRocm93IG5ldyBWYWxpZGF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VzLkJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9WYWxpZGF0aW9uX0VtcHR5SG9zdGZpbGUpOwotCQkJfQotCQkJaWYgKHVzZUhvc3RMaXN0ICYmIGhvc3RMaXN0ID09IG51bGwpIHsKLQkJCQl0aHJvdyBuZXcgVmFsaWRhdGlvbkV4Y2VwdGlvbihNZXNzYWdlcy5CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVmFsaWRhdGlvbl9FbXB0eUhvc3RMaXN0KTsKLQkJCX0KLQkJfQotCi0JCS8qKgotCQkgKiBDb252ZXJ0IGEgY29tbWEgc2VwYXJhdGVkIGxpc3QgaW50byBvbmUgaG9zdCBwZXIgbGluZQotCQkgKgotCQkgKiBAcGFyYW0gbGlzdAotCQkgKiBAcmV0dXJuCi0JCSAqLwotCQlwcml2YXRlIFN0cmluZyBob3N0TGlzdFRvVGV4dChTdHJpbmcgbGlzdCkgewotCQkJaWYgKGxpc3QgPT0gbnVsbCkgewotCQkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJU3RyaW5nIHJlc3VsdCA9ICIiOyAvLyROT04tTkxTLTEkCi0JCQlTdHJpbmdbXSB2YWx1ZXMgPSBsaXN0LnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCF2YWx1ZXNbaV0uZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJCWlmIChpID4gMCkgewotCQkJCQkJcmVzdWx0ICs9ICJcciI7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfQotCQkJCQlyZXN1bHQgKz0gdmFsdWVzW2ldOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiByZXN1bHQ7Ci0JCX0KLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYkRhdGFTb3VyY2UgY3JlYXRlRGF0YVNvdXJjZSgpIHsKLQkJcmV0dXJuIG5ldyBEYXRhU291cmNlKHRoaXMpOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiV2lkZ2V0TGlzdGVuZXIgY3JlYXRlTGlzdGVuZXIoKSB7Ci0JCXJldHVybiBuZXcgV2lkZ2V0TGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JQE92ZXJyaWRlCi0JcHVibGljIEltYWdlIGdldEltYWdlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCXJldHVybiBNZXNzYWdlcy5CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVGl0bGU7Ci0JfQotCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50LCBJUmVzb3VyY2VNYW5hZ2VyIHJtLCBJUFF1ZXVlIHF1ZXVlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWNvbnRyb2wgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMzsKLQkJY29udHJvbC5zZXRMYXlvdXQobGF5b3V0KTsKLQotCQlMYWJlbCBsYWJlbCAgPSBuZXcgTGFiZWwoY29udHJvbCwgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLkJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9OdW1iZXJQcm9jZXNzZXMpOwotCi0JCW51bVByb2NzU3Bpbm5lciA9IG5ldyBTcGlubmVyKGNvbnRyb2wsIFNXVC5CT1JERVIpOwotCQludW1Qcm9jc1NwaW5uZXIuYWRkTW9kaWZ5TGlzdGVuZXIoZ2V0TGlzdGVuZXIoKSk7Ci0JCW51bVByb2NzU3Bpbm5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuTEVGVCwgU1dULkNFTlRFUiwgZmFsc2UsIGZhbHNlLCAyLCAxKSk7Ci0KLQkJZmluYWwgR3JvdXAgb3B0aW9uc0dyb3VwID0gbmV3IEdyb3VwKGNvbnRyb2wsIFNXVC5OT05FKTsKLQkJb3B0aW9uc0dyb3VwLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMywgMSkpOwotCQlvcHRpb25zR3JvdXAuc2V0VGV4dChNZXNzYWdlcy5CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVGl0bGVfT3B0aW9uc0dyb3VwKTsKLQkJbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAzOwotCQlvcHRpb25zR3JvdXAuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJbm9Mb2NhbEJ1dHRvbiA9IG5ldyBCdXR0b24ob3B0aW9uc0dyb3VwLCBTV1QuQ0hFQ0spOwotCQlub0xvY2FsQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKGdldExpc3RlbmVyKCkpOwotCQlub0xvY2FsQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX05vTG9jYWwpOwotCi0JCXVzZVByZWZpeEJ1dHRvbiA9IG5ldyBCdXR0b24ob3B0aW9uc0dyb3VwLCBTV1QuQ0hFQ0spOwotCQl1c2VQcmVmaXhCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoZ2V0TGlzdGVuZXIoKSk7Ci0JCXVzZVByZWZpeEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLkJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9QcmVmaXgpOwotCi0JCXByZWZpeFRleHQgPSBuZXcgVGV4dChvcHRpb25zR3JvdXAsIFNXVC5CT1JERVIpOwotCQlwcmVmaXhUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSkpOwotCQlwcmVmaXhUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKGdldExpc3RlbmVyKCkpOwotCi0JCWZpbmFsIEdyb3VwIGhvc3RHcm91cCA9IG5ldyBHcm91cChjb250cm9sLCBTV1QuTk9ORSk7Ci0JCWhvc3RHcm91cC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUsIDIsIDEpKTsKLQkJaG9zdEdyb3VwLnNldFRleHQoTWVzc2FnZXMuQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1RpdGxlX0hvc3RHcm91cCk7Ci0JCWxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMzsKLQkJaG9zdEdyb3VwLnNldExheW91dChsYXlvdXQpOwotCi0JCWhvc3RGaWxlQnV0dG9uID0gbmV3IEJ1dHRvbihob3N0R3JvdXAsIFNXVC5DSEVDSyk7Ci0JCWhvc3RGaWxlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKGdldExpc3RlbmVyKCkpOwotCQlob3N0RmlsZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLkJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9Ib3N0RmlsZSk7Ci0KLQkJaG9zdEZpbGVUZXh0ID0gbmV3IFRleHQoaG9zdEdyb3VwLCBTV1QuQk9SREVSKTsKLQkJaG9zdEZpbGVUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSkpOwotCQlob3N0RmlsZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIoZ2V0TGlzdGVuZXIoKSk7Ci0KLQkJYnJvd3NlQnV0dG9uID0gbmV3IEJ1dHRvbihob3N0R3JvdXAsIFNXVC5OT05FKTsKLQkJYnJvd3NlQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5SSUdIVCwgU1dULkNFTlRFUiwgZmFsc2UsIGZhbHNlKSk7Ci0JCWJyb3dzZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihnZXRMaXN0ZW5lcigpKTsKLQkJUGl4ZWxDb252ZXJ0ZXIgcGl4ZWxjb252ZXJ0ZXIgPSBuZXcgUGl4ZWxDb252ZXJ0ZXIoY29udHJvbCk7Ci0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5SSUdIVCwgU1dULkNFTlRFUiwgZmFsc2UsIGZhbHNlKTsKLQkJZ2Qud2lkdGhIaW50ID0gcGl4ZWxjb252ZXJ0ZXIuY29udmVydEhvcml6b250YWxETFVzVG9QaXhlbHMoSURpYWxvZ0NvbnN0YW50cy5CVVRUT05fV0lEVEgpOwotCQlicm93c2VCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7Ci0JCWJyb3dzZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLkJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9Ccm93c2UpOwotCi0JCWhvc3RMaXN0QnV0dG9uID0gbmV3IEJ1dHRvbihob3N0R3JvdXAsIFNXVC5DSEVDSyk7Ci0JCWhvc3RMaXN0QnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5MRUZULCBTV1QuVE9QLCBmYWxzZSwgZmFsc2UpKTsKLQkJaG9zdExpc3RCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoZ2V0TGlzdGVuZXIoKSk7Ci0JCWhvc3RMaXN0QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1RpdGxlX0hvc3RMaXN0KTsKLQotCQlob3N0TGlzdFRleHQgPSBuZXcgVGV4dChob3N0R3JvdXAsIFNXVC5WX1NDUk9MTCB8IFNXVC5CT1JERVIpOwotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUsIDIsIDEpOwotCQlnZC5oZWlnaHRIaW50ID0gMjA7Ci0JCWhvc3RMaXN0VGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKLQkJaG9zdExpc3RUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKGdldExpc3RlbmVyKCkpOwotCX0KLQotCXB1YmxpYyBJQXR0cmlidXRlPD8sID8sID8+W10gZ2V0QXR0cmlidXRlcyhJUmVzb3VyY2VNYW5hZ2VyIHJtLAotCQkJSVBRdWV1ZSBxdWV1ZSwgSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgU3RyaW5nIG1vZGUpCi0JCQl0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0KLQkJTGlzdDxJQXR0cmlidXRlPD8sPyw/Pj4gYXR0cnMgPSBuZXcgQXJyYXlMaXN0PElBdHRyaWJ1dGU8Pyw/LD8+PigpOwotCi0JCWludCBudW1Qcm9jcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb24uQVRUUl9OVU1QUk9DUywgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfTlVNUFJPQ1MpOwotCQl0cnkgewotCQkJYXR0cnMuYWRkKEpvYkF0dHJpYnV0ZXMuZ2V0TnVtYmVyT2ZQcm9jZXNzZXNBdHRyaWJ1dGVEZWZpbml0aW9uKCkuY3JlYXRlKG51bVByb2NzKSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIE1QSUNIMlVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgTWVzc2FnZXMuQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0V4Y2VwdGlvbl9JbnZhbGlkQ29uZmlndXJhdGlvbiwgZSkpOwotCQl9Ci0KLQkJYXR0cnMuYWRkKE1QSUNIMkxhdW5jaEF0dHJpYnV0ZXMuZ2V0TGF1bmNoQXJndW1lbnRzQXR0cmlidXRlRGVmaW5pdGlvbigpLmNyZWF0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLmNhbGN1bGF0ZUFyZ3VtZW50cyhjb25maWd1cmF0aW9uKSkpOwotCi0JCXJldHVybiBhdHRycy50b0FycmF5KG5ldyBJQXR0cmlidXRlPD8sPyw/PlthdHRycy5zaXplKCldKTsKLQl9Ci0KLQlwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkgewotCQlyZXR1cm4gY29udHJvbDsKLQl9Ci0KLQlwdWJsaWMgUk1MYXVuY2hWYWxpZGF0aW9uIHNldERlZmF1bHRzKElMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHkgY29uZmlndXJhdGlvbiwKLQkJCUlSZXNvdXJjZU1hbmFnZXIgcm0sIElQUXVldWUgcXVldWUpIHsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX05VTVBST0NTLCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9OVU1QUk9DUyk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb24uQVRUUl9OT0xPQ0FMLCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9OT0xPQ0FMKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1VTRVBSRUZJWCwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfVVNFUFJFRklYKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1BSRUZJWCwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfUFJFRklYKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX1VTRUhPU1RGSUxFLCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9VU0VIT1NURklMRSk7Ci0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb24uQVRUUl9IT1NURklMRSwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfSE9TVEZJTEUpOwotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLkFUVFJfVVNFSE9TVExJU1QsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1VTRUhPU1RMSVNUKTsKLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5BVFRSX0hPU1RMSVNULCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9IT1NUTElTVCk7Ci0JCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKHRydWUsIG51bGwpOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHVwZGF0ZUNvbnRyb2xzKCkgewotCQlwcmVmaXhUZXh0LnNldEVuYWJsZWQodXNlUHJlZml4QnV0dG9uLmdldFNlbGVjdGlvbigpKTsKLQkJYnJvd3NlQnV0dG9uLnNldEVuYWJsZWQoaG9zdEZpbGVCdXR0b24uZ2V0U2VsZWN0aW9uKCkpOwotCQlob3N0RmlsZVRleHQuc2V0RW5hYmxlZChob3N0RmlsZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKSk7Ci0JCWhvc3RMaXN0VGV4dC5zZXRFbmFibGVkKGhvc3RMaXN0QnV0dG9uLmdldFNlbGVjdGlvbigpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9NUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9NUElDSDJMYXVuY2hDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYjMyNWQuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9sYXVuY2gvTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLmxhdW5jaDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkuTVBJQ0gyVUlQbHVnaW47Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uIHsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0JBU0UgPSBNUElDSDJVSVBsdWdpbi5QTFVHSU5fSUQgKyAiLmxhdW5jaEF0dHJpYnV0ZXMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9OVU1QUk9DUyA9IEFUVFJfQkFTRSArICIubnVtUHJvY3MiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9OT0xPQ0FMID0gQVRUUl9CQVNFICsgIi5ub0xvY2FsIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUFJFRklYID0gQVRUUl9CQVNFICsgIi5wcmVmaXgiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9VU0VQUkVGSVggPSBBVFRSX0JBU0UgKyAiLnVzZVByZWZpeCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0hPU1RGSUxFID0gQVRUUl9CQVNFICsgIi5ob3N0RmlsZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1VTRUhPU1RGSUxFID0gQVRUUl9CQVNFICsgIi51c2VIb3N0RmlsZSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0hPU1RMSVNUID0gQVRUUl9CQVNFICsgIi5ob3N0TGlzdCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1VTRUhPU1RMSVNUID0gQVRUUl9CQVNFICsgIi51c2VIb3N0TGlzdCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FSR1VNRU5UUyA9IEFUVFJfQkFTRSArICIuYXJndW1lbnRzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVVNFREVGQVVMVEFSR1VNRU5UUyA9IEFUVFJfQkFTRSArICIudXNlRGVmYXVsdEFyZ3VtZW50cyI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1BBUkFNRVRFUlMgPSBBVFRSX0JBU0UgKyAiLnBhcmFtZXRlcnMiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9VU0VERUZBVUxUUEFSQU1FVEVSUyA9IEFUVFJfQkFTRSArICIudXNlRGVmYXVsdFBhcmFtZXRlcnMiOyAvLyROT04tTkxTLTEkCi0KLQlzdGF0aWMgU3RyaW5nIGNhbGN1bGF0ZUFyZ3VtZW50cyhJTGF1bmNoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShBVFRSX1VTRURFRkFVTFRBUkdVTUVOVFMsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1VTRURFRkFVTFRBUkdVTUVOVFMpKSB7Ci0JCQlTdHJpbmcgbGF1bmNoQXJncyA9ICItbnAgIiArIEludGVnZXIudG9TdHJpbmcoY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9OVU1QUk9DUywgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfTlVNUFJPQ1MpKTsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfTk9MT0NBTCwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfTk9MT0NBTCkpIHsKLQkJCQlsYXVuY2hBcmdzICs9ICIgLW5vbG9jYWwiOyAvLyROT04tTkxTLTEkCi0JCQl9Ci0JCQlpZiAoY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9VU0VQUkVGSVgsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1VTRVBSRUZJWCkpIHsKLQkJCQlsYXVuY2hBcmdzICs9ICIgLS1wcmVmaXggIiArIGZpeFN0cmluZyhjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShBVFRSX1BSRUZJWCwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfUFJFRklYKSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWlmIChjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShBVFRSX1VTRUhPU1RGSUxFLCBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuQVRUUl9VU0VIT1NURklMRSkpIHsKLQkJCQlsYXVuY2hBcmdzICs9ICIgLWhvc3RmaWxlICIgKyBmaXhTdHJpbmcoY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9IT1NURklMRSwgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfSE9TVEZJTEUpKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJaWYgKGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfVVNFSE9TVExJU1QsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1VTRUhPU1RMSVNUKSkgewotCQkJCWxhdW5jaEFyZ3MgKz0gIiAtaG9zdCAiICsgZml4U3RyaW5nKGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfSE9TVExJU1QsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX0hPU1RMSVNUKSk7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQotCQkJaWYgKCEgY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9VU0VERUZBVUxUUEFSQU1FVEVSUywgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzLkFUVFJfVVNFREVGQVVMVFBBUkFNRVRFUlMpKSB7Ci0JCQkJTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMgPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShBVFRSX1BBUkFNRVRFUlMsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX1BBUkFNRVRFUlMpOwotCQkJCWZvciAoRW50cnk8U3RyaW5nLCBTdHJpbmc+IHBhcmFtIDogcGFyYW1zLmVudHJ5U2V0KCkpIHsKLQkJCQkJbGF1bmNoQXJncyArPSAiIC1tY2EgIiArIHBhcmFtLmdldEtleSgpICsgIiAiICsgZml4U3RyaW5nKHBhcmFtLmdldFZhbHVlKCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gbGF1bmNoQXJnczsKLQkJfSBlbHNlIHsKLQkJCVN0cmluZyBsYXVuY2hBcmdzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9BUkdVTUVOVFMsIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5BVFRSX0FSR1VNRU5UUyk7Ci0JCQlyZXR1cm4gbGF1bmNoQXJnczsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1ha2Ugc3RyaW5nIHN1aXRhYmxlIGZvciBwYXNzaW5nIGFzIGFuIGFyZ3VtZW50Ci0JICoKLQkgKiBAcGFyYW0gcwotCSAqIEByZXR1cm4KLQkgKi8KLQlzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgZml4U3RyaW5nKFN0cmluZyBzKSB7Ci0JCS8vIFRPRE8gaXMgdGhhdCByaWdodCBhbmQgZXNjYXBlZCBjb3JyZWN0bHk/Ci0JCWlmIChzID09IG51bGwpIHsKLQkJCXJldHVybiAiXCJcIiI7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gIlwiIiArIHMgKyAiXCIiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9NUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHMuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvdWkvbGF1bmNoL01QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWMxMmJlLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvdWkvbGF1bmNoL01QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS5sYXVuY2g7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLk1QSUNIMlVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLm1lc3NhZ2VzLk1lc3NhZ2VzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLQotLyoqCi0gKiAKLSAqIEBhdXRob3IgRGFuaWVsIEZlbGl4IEZlcmJlcgotICoKLSAqLwotcHVibGljIGNsYXNzIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0cyB7Ci0JcHVibGljIHN0YXRpYyBpbnQgQVRUUl9OVU1QUk9DUzsKLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gQVRUUl9OT0xPQ0FMOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFUVFJfUFJFRklYOwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBBVFRSX1VTRVBSRUZJWDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBBVFRSX0hPU1RGSUxFOwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBBVFRSX1VTRUhPU1RGSUxFOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFUVFJfSE9TVExJU1Q7Ci0JcHVibGljIHN0YXRpYyBib29sZWFuIEFUVFJfVVNFSE9TVExJU1Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQVRUUl9BUkdVTUVOVFM7Ci0JcHVibGljIHN0YXRpYyBib29sZWFuIEFUVFJfVVNFREVGQVVMVEFSR1VNRU5UUzsKLQlwdWJsaWMgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IEFUVFJfUEFSQU1FVEVSUyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBBVFRSX1VTRURFRkFVTFRQQVJBTUVURVJTOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRzUmVzb3VyY2VQYXRoID0gIi9kYXRhL2xhdW5jaC1kZWZhdWx0cy5wcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvYWREZWZhdWx0cygpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJUGF0aCBkZWZhdWx0c1Byb3BlcnRpZXNQYXRoID0gbmV3IFBhdGgoZGVmYXVsdHNSZXNvdXJjZVBhdGgpOwotCQlCdW5kbGUgYnVuZGxlID0gTVBJQ0gyVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpOwotCQlQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSByZWFkKGRlZmF1bHRzUHJvcGVydGllc1BhdGgsIGJ1bmRsZSk7Ci0KLQkJQVRUUl9OVU1QUk9DUyA9IGdldEludGVnZXIoYnVuZGxlLCBwcm9wZXJ0aWVzLCAiTlVNUFJPQ1MiKTsgLy8kTk9OLU5MUy0xJAotCQlBVFRSX05PTE9DQUwgPSBnZXRCb29sZWFuKGJ1bmRsZSwgcHJvcGVydGllcywgIk5PTE9DQUwiKTsgLy8kTk9OLU5MUy0xJAotCQlBVFRSX1BSRUZJWCA9IGdldFN0cmluZyhidW5kbGUsIHByb3BlcnRpZXMsICJQUkVGSVgiKTsgLy8kTk9OLU5MUy0xJAotCQlBVFRSX1VTRVBSRUZJWCA9IGdldEJvb2xlYW4oYnVuZGxlLCBwcm9wZXJ0aWVzLCAiVVNFUFJFRklYIik7IC8vJE5PTi1OTFMtMSQKLQkJQVRUUl9IT1NURklMRSA9IGdldFN0cmluZyhidW5kbGUsIHByb3BlcnRpZXMsICJIT1NURklMRSIpOyAvLyROT04tTkxTLTEkCi0JCUFUVFJfVVNFSE9TVEZJTEUgPSBnZXRCb29sZWFuKGJ1bmRsZSwgcHJvcGVydGllcywgIlVTRUhPU1RGSUxFIik7IC8vJE5PTi1OTFMtMSQKLQkJQVRUUl9BUkdVTUVOVFMgPSBnZXRTdHJpbmcoYnVuZGxlLCBwcm9wZXJ0aWVzLCAiQVJHVU1FTlRTIik7IC8vJE5PTi1OTFMtMSQKLQkJQVRUUl9VU0VERUZBVUxUQVJHVU1FTlRTID0gZ2V0Qm9vbGVhbihidW5kbGUsIHByb3BlcnRpZXMsICJVU0VERUZBVUxUQVJHVU1FTlRTIik7IC8vJE5PTi1OTFMtMSQKLQkJQVRUUl9VU0VERUZBVUxUUEFSQU1FVEVSUyA9IGdldEJvb2xlYW4oYnVuZGxlLCBwcm9wZXJ0aWVzLCAiVVNFREVGQVVMVFBBUkFNRVRFUlMiKTsgLy8kTk9OLU5MUy0xJAotCi0JCWFzc2VydCBBVFRSX1BSRUZJWCAhPSBudWxsOwotCQlhc3NlcnQgQVRUUl9IT1NURklMRSAhPSBudWxsOwotCQlhc3NlcnQgQVRUUl9BUkdVTUVOVFMgIT0gbnVsbDsKLQkJLy8gVE9ETzogcmVhZCBBVFRSX1BBUkFNRVRFUlMKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFByb3BlcnRpZXMgcmVhZChQYXRoIGRlZmF1bHRzUHJvcGVydGllc1BhdGgsIEJ1bmRsZSBidW5kbGUpCi0JdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJbnB1dFN0cmVhbSBpblN0cmVhbTsKLQkJUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkJdHJ5IHsKLQkJCWluU3RyZWFtID0gRmlsZUxvY2F0b3Iub3BlblN0cmVhbShidW5kbGUsIGRlZmF1bHRzUHJvcGVydGllc1BhdGgsIGZhbHNlKTsKLQkJCXByb3BlcnRpZXMubG9hZChpblN0cmVhbSk7Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IE1QSUNIMlVJUGx1Z2luLmNvcmVFcnJvckV4Y2VwdGlvbihNZXNzYWdlcy5NUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHNfRXhjZXB0aW9uX0ZhaWxlZFJlYWRGaWxlLCBlKTsKLQkJfQotCQlyZXR1cm4gcHJvcGVydGllczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoQnVuZGxlIGJ1bmRsZSwgUHJvcGVydGllcyBwcm9wZXJ0aWVzLCBTdHJpbmcga2V5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyB2YWx1ZSA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkoa2V5KTsKLQkJaWYgKHZhbHVlID09IG51bGwpIHsKLQkJCXRocm93IG5ldyBDb3JlRXhjZXB0aW9uKG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgYnVuZGxlLmdldFN5bWJvbGljTmFtZSgpLCBOTFMuYmluZChNZXNzYWdlcy5NUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHNfTWlzc2luZ1ZhbHVlLCBrZXkpKSk7Ci0JCX0KLQkJcmV0dXJuIHZhbHVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgaW50IGdldEludGVnZXIoQnVuZGxlIGJ1bmRsZSwgUHJvcGVydGllcyBwcm9wZXJ0aWVzLCBTdHJpbmcga2V5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyB2YWx1ZSA9IGdldFN0cmluZyhidW5kbGUsIHByb3BlcnRpZXMsIGtleSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7Ci0JCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgQ29yZUV4Y2VwdGlvbihuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIGJ1bmRsZS5nZXRTeW1ib2xpY05hbWUoKSwgTkxTLmJpbmQoTWVzc2FnZXMuTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzX0ZhaWxlZFBhcnNlSW50ZWdlciwga2V5KSkpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGdldEJvb2xlYW4oQnVuZGxlIGJ1bmRsZSwgUHJvcGVydGllcyBwcm9wZXJ0aWVzLCBTdHJpbmcga2V5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyB2YWx1ZSA9IGdldFN0cmluZyhidW5kbGUsIHByb3BlcnRpZXMsIGtleSk7Ci0JCXJldHVybiBCb29sZWFuLnBhcnNlQm9vbGVhbih2YWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9sYXVuY2gvTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRmFjdG9yeS5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9sYXVuY2gvTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2JhYjZhLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvdWkvbGF1bmNoL01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS5sYXVuY2g7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUmVzb3VyY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5BYnN0cmFjdFJNTGF1bmNoQ29uZmlndXJhdGlvbkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmxhdW5jaC51aS5leHRlbnNpb25zLklSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucm1zeXN0ZW0uTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyOwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0Uk1MYXVuY2hDb25maWd1cmF0aW9uRmFjdG9yeSB7Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgSVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIgZG9DcmVhdGUoSVJlc291cmNlTWFuYWdlciBybSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IE5ld01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIocm0pOwotCX0KLQotCUBPdmVycmlkZQotCXB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSVJlc291cmNlTWFuYWdlcj4gZ2V0UmVzb3VyY2VNYW5hZ2VyQ2xhc3MoKSB7Ci0JCXJldHVybiBNUElDSDJSZXNvdXJjZU1hbmFnZXIuY2xhc3M7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9OZXdNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL2xhdW5jaC9OZXdNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYTRiZGUuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9sYXVuY2gvTmV3TVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLmxhdW5jaDsKLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuSVJlc291cmNlTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0udWkubGF1bmNoLkV4dGVuZGFibGVSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiOwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTmV3TVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiBleHRlbmRzIEV4dGVuZGFibGVSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiIHsKLQotCXB1YmxpYyBOZXdNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiKElSZXNvdXJjZU1hbmFnZXIgcm0pIHsKLQkJc3VwZXIoKTsKLQkJYWRkRHluYW1pY1RhYihuZXcgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiKCkpOwotCQlhZGREeW5hbWljVGFiKG5ldyBBZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9tZXNzYWdlcy9NZXNzYWdlcy5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9tZXNzYWdlcy9NZXNzYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWM4YTU1Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvdWkvbWVzc2FnZXMvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS5tZXNzYWdlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBNZXNzYWdlcyBleHRlbmRzIE5MUyB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLm1lc3NhZ2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMlVJUGx1Z2luX0V4Y2VwdGlvbl9JbnRlcm5hbEVycm9yOwotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9Bcmd1bWVudHM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX0RlZmF1bHRBcmd1bWVudHM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX0RlZmF1bHRNQ0FQYXJhbWV0ZXJzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9MYXVuY2hBcmd1bWVudHM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX01DQVBhcmFtZXRlcnM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1BBcmFtZXRlclRhYmxlX0NvbHVtbl9OYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9QYXJhbWV0ZXJUYWJsZV9Db2x1bW5fVmFsdWU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9WYWxpZGF0aW9uX0VtcHR5QXJndW1lbnRzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9WYWxpZGF0aW9uX0VtcHR5UGFyYW1ldGVyOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9FeGNlcHRpb25fSW52YWxpZENvbmZpZ3VyYXRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX0Jyb3dzZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfQnlTbG90OwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9Ib3N0RmlsZTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfTm9Mb2NhbDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfTm9PdmVyc3Vic2NyaWJlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9OdW1iZXJQcm9jZXNzZXM7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX1ByZWZpeDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVGl0bGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1RpdGxlX0hvc3RHcm91cDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVGl0bGVfSG9zdExpc3Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1RpdGxlX09wdGlvbnNHcm91cDsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBCYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVmFsaWRhdGlvbl9FbXB0eUhvc3RmaWxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9WYWxpZGF0aW9uX0VtcHR5SG9zdExpc3Q7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1ZhbGlkYXRpb25fRW1wdHlQcmVmaXg7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1ZhbGlkYXRpb25fTm9Qcm9jZXNzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkxhdW5jaENvbmZpZ3VyYXRpb25EZWZhdWx0c19FeGNlcHRpb25fRmFpbGVkUmVhZEZpbGU7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzX0ZhaWxlZFBhcnNlSW50ZWdlcjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHNfTWlzc2luZ1ZhbHVlOwotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMlByZWZlcmVuY2VQYWdlX1RpdGxlOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfRGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfTGFiZWxfVmVyc2lvbjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9OYW1lOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX1RpdGxlOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMkNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX1ZhbGlkYXRpb25fTm9WZXJzaW9uU2VsZWN0ZWQ7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfVmVyc2lvbkNvbWJvX1ZlcnNpb24xMjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBNUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9WZXJzaW9uQ29tYm9fVmVyc2lvbjEzOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE1QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfRGVzY3JpcHRpb247Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgTVBJQ0gyUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9UaXRsZTsKLQotCXN0YXRpYyB7Ci0JCS8vIGluaXRpYWxpemUgcmVzb3VyY2UgYnVuZGxlCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgewotCQkvLyBQcmV2ZW50IGluc3RhbmNlcy4KLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL21lc3NhZ2VzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL21lc3NhZ2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NjdmZmEuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS9tZXNzYWdlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotTVBJQ0gyVUlQbHVnaW5fRXhjZXB0aW9uX0ludGVybmFsRXJyb3I9SW50ZXJuYWwgZXJyb3IKLQotQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX0FyZ3VtZW50cz1Bcmd1bWVudHM6Ci1BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfRGVmYXVsdEFyZ3VtZW50cz1Vc2UgZGVmYXVsdCBhcmd1bWVudHMKLUFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9EZWZhdWx0TUNBUGFyYW1ldGVycz1Vc2UgZGVmYXVsdCBwYXJhbWV0ZXJzCi1BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfTGF1bmNoQXJndW1lbnRzPUxhdW5jaCBhcmd1bWVudHMKLUFkdmFuY2VkTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9NQ0FQYXJhbWV0ZXJzPU1DQSBQYXJhbWV0ZXJzCi1BZHZhbmNlZE1QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfUEFyYW1ldGVyVGFibGVfQ29sdW1uX05hbWU9TmFtZQotQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1BhcmFtZXRlclRhYmxlX0NvbHVtbl9WYWx1ZT1WYWx1ZQotQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1RpdGxlPUFkdmFuY2VkIE1QSUNIMgotQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1ZhbGlkYXRpb25fRW1wdHlBcmd1bWVudHM9QXJndW1lbnRzIGNhbm5vdCBiZSBlbXB0eQotQWR2YW5jZWRNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX1ZhbGlkYXRpb25fRW1wdHlQYXJhbWV0ZXI9UGFyYW1ldGVyIHZhbHVlIGNhbm5vdCBiZSBlbXB0eQotQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0V4Y2VwdGlvbl9JbnZhbGlkQ29uZmlndXJhdGlvbj1JbnZhbGlkIGNvbmZpZ3VyYXRpb24KLUJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9Ccm93c2U9QnJvd3NlCi1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfQnlTbG90PUJ5IHNsb3QKLUJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9MYWJlbF9Ib3N0RmlsZT1Ib3N0IGZpbGU6Ci1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfTm9Mb2NhbD1ObyBsb2NhbAotQmFzaWNNUElDSDJSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiX0xhYmVsX05vT3ZlcnN1YnNjcmliZT1ObyBvdmVyc3Vic2NyaWJlCi1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfTnVtYmVyUHJvY2Vzc2VzPU51bWJlciBvZiBwcm9jZXNzZXM6Ci1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfTGFiZWxfUHJlZml4PVByZWZpeDoKLUJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9UaXRsZT1CYXNpYyBNUElDSDIKLUJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9UaXRsZV9Ib3N0R3JvdXA9SG9zdHMKLUJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9UaXRsZV9Ib3N0TGlzdD1Ib3N0IGxpc3Q6Ci1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVGl0bGVfT3B0aW9uc0dyb3VwPU9wdGlvbnMKLUJhc2ljTVBJQ0gyUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl9WYWxpZGF0aW9uX0VtcHR5SG9zdGZpbGU9TXVzdCBwcm92aWRlIGEgaG9zdCBmaWxlCi1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVmFsaWRhdGlvbl9FbXB0eUhvc3RMaXN0PU11c3QgcHJvdmlkZSBhdCBsZWFzdCBvbmUgaG9zdCBuYW1lCi1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVmFsaWRhdGlvbl9FbXB0eVByZWZpeD1QcmVmaXggY2Fubm90IGJlIGVtcHR5Ci1CYXNpY01QSUNIMlJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfVmFsaWRhdGlvbl9Ob1Byb2Nlc3M9TXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBwcm9jZXNzCi1NUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHNfRXhjZXB0aW9uX0ZhaWxlZFJlYWRGaWxlPUZhaWxlZCB0byByZWFkIHByb3BlcnRpZXMgZmlsZSB3aXRoIGRlZmF1bHQgcHJlZmVyZW5jZXMuCi1NUElDSDJMYXVuY2hDb25maWd1cmF0aW9uRGVmYXVsdHNfRmFpbGVkUGFyc2VJbnRlZ2VyPUZhaWxlZCB0byBwYXJzZSBpbnRlZ2VyIGRlZmF1bHQgdmFsdWUgZm9yIHswfQotTVBJQ0gyTGF1bmNoQ29uZmlndXJhdGlvbkRlZmF1bHRzX01pc3NpbmdWYWx1ZT1NaXNzaW5nIGRlZmF1bHQgdmFsdWUgZm9yIHswfQotCi1NUElDSDJQcmVmZXJlbmNlUGFnZV9UaXRsZT1NUElDSDIgcHJlZmVyZW5jZXMKLQotTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfRGVzY3JpcHRpb249RW50ZXIgaW5mb3JtYXRpb24gdG8gY29uZmlndXJlIHRoZSBNUElDSDIgdG9vbAotTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfTGFiZWxfVmVyc2lvbj1NUElDSDIgdmVyc2lvbjoKLU1QSUNIMkNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX05hbWU9TVBJQ0gyCi1NUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9UaXRsZT1NUElDSDIgdG9vbCBjb25maWd1cmF0aW9uCi1NUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9WYWxpZGF0aW9uX05vVmVyc2lvblNlbGVjdGVkPU5vIE1QSUNIMiB2ZXJzaW9uIHNlbGVjdGVkCi1NUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9WZXJzaW9uQ29tYm9fVmVyc2lvbjEyPU1QSUNIMgotTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfVmVyc2lvbkNvbWJvX1ZlcnNpb24xMz1NUElDSDIKLU1QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfRGVzY3JpcHRpb249RW50ZXIgTVBJQ0gyIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24KLU1QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfVGl0bGU9TVBJQ0gyIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS93aXphcmRzL01QSUNIMkNvbmZpZ3VyYXRpb25XaXphcmRQYWdlLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL3dpemFyZHMvTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkNTYwMi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL3dpemFyZHMvTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkud2l6YXJkczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi5jb3JlLk1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucm1zeXN0ZW0uTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS5tZXNzYWdlcy5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0udWkud2l6YXJkcy5BYnN0cmFjdENvbmZpZ3VyYXRpb25XaXphcmRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS51aS53aXphcmRzLkFic3RyYWN0VG9vbFJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnVpLndpemFyZHMuV2l6YXJkUGFnZURhdGFTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnVpLndpemFyZHMuV2l6YXJkUGFnZVdpZGdldExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5JUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAudWkud2l6YXJkcy5STUNvbmZpZ3VyYXRpb25XaXphcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotCi0vKioKLSAqIAotICogQGF1dGhvciBEYW5pZWwgRmVsaXggRmVyYmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2UgZXh0ZW5kcyBBYnN0cmFjdFRvb2xSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlIHsKLQotCVN0cmluZyB2ZXJzaW9uSWRzW10gPSBuZXcgU3RyaW5nW10geyB9OwotCVN0cmluZyB2ZXJzaW9uc05hbWVzW10gPSBuZXcgU3RyaW5nW10geyBNZXNzYWdlcy5NUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9WZXJzaW9uQ29tYm9fVmVyc2lvbjEyLCBNZXNzYWdlcy5NUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9WZXJzaW9uQ29tYm9fVmVyc2lvbjEzfTsKLQotCXByb3RlY3RlZCBDb21ibyB2ZXJzaW9uQ29tYm87Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgV2lkZ2V0TGlzdGVuZXIgZXh0ZW5kcyBBYnN0cmFjdFRvb2xSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlLldpZGdldExpc3RlbmVyIHsKLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIGRvTW9kaWZ5VGV4dChNb2RpZnlFdmVudCBldnQpIHsKLQkJCXN1cGVyLmRvTW9kaWZ5VGV4dChldnQpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXB1YmxpYyB2b2lkIGRvV2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgewotCQkJT2JqZWN0IHNvdXJjZSA9IGUuZ2V0U291cmNlKCk7Ci0JCQlpZiAoc291cmNlID09IHZlcnNpb25Db21ibykgewotCQkJCWhhbmRsZVZlcnNpb25TZWxlY3RlZCgpOwotCQkJCXVwZGF0ZUNvbnRyb2xzKCk7Ci0JCQkJZ2V0RGF0YVNvdXJjZSgpLnN0b3JlQW5kVmFsaWRhdGUoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3VwZXIuZG9XaWRnZXRTZWxlY3RlZChlKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBjbGFzcyBEYXRhU291cmNlIGV4dGVuZHMgQWJzdHJhY3RUb29sUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZS5EYXRhU291cmNlIHsKLQkJcHJvdGVjdGVkIERhdGFTb3VyY2UoQWJzdHJhY3RDb25maWd1cmF0aW9uV2l6YXJkUGFnZSBwYWdlKSB7Ci0JCQlzdXBlcihwYWdlKTsKLQkJfQotCi0JCXByaXZhdGUgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBjb25maWc7Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIGNvcHlGcm9tRmllbGRzKCkgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24gewotCQkJc3VwZXIuY29weUZyb21GaWVsZHMoKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBjb3B5VG9GaWVsZHMoKSB7Ci0JCQlzdXBlci5jb3B5VG9GaWVsZHMoKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBsb2FkRnJvbVN0b3JhZ2UoKSB7Ci0JCQlzdXBlci5sb2FkRnJvbVN0b3JhZ2UoKTsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgdm9pZCBjb3B5VG9TdG9yYWdlKCkgewotCQkJc3VwZXIuY29weVRvU3RvcmFnZSgpOwotCQl9Ci0KLQkJQE92ZXJyaWRlCi0JCXByb3RlY3RlZCB2b2lkIHZhbGlkYXRlTG9jYWwoKSB0aHJvd3MgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0JCQlzdXBlci52YWxpZGF0ZUxvY2FsKCk7Ci0JCX0KLQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCBzZXRDb25maWcoSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotCQkJdGhpcy5jb25maWcgPSAoTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbikgY29uZmlndXJhdGlvbjsKLQkJCXN1cGVyLnNldENvbmZpZyhjb25maWd1cmF0aW9uKTsKLQkJfQotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBXaXphcmRQYWdlV2lkZ2V0TGlzdGVuZXIgY3JlYXRlTGlzdGVuZXIoKSB7Ci0JCXJldHVybiBuZXcgV2lkZ2V0TGlzdGVuZXIoKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgV2l6YXJkUGFnZURhdGFTb3VyY2UgY3JlYXRlRGF0YVNvdXJjZSgpIHsKLQkJcmV0dXJuIG5ldyBEYXRhU291cmNlKHRoaXMpOwotCX0KLQotCXB1YmxpYyBNUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZShSTUNvbmZpZ3VyYXRpb25XaXphcmQgd2l6YXJkKSB7Ci0JCXN1cGVyKHdpemFyZCwgTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbi5NUElDSDJfQ0FQQUJJTElUSUVTLCAKLQkJCQlNZXNzYWdlcy5NUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9OYW1lLCAKLQkJCQlNZXNzYWdlcy5NUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9UaXRsZSwgCi0JCQkJTWVzc2FnZXMuTVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfRGVzY3JpcHRpb24pOwotCX0KLQotCUBPdmVycmlkZQotCXByb3RlY3RlZCBDb21wb3NpdGUgZG9DcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUNvbXBvc2l0ZSBjb250ZW50cyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOwotCQlsYXlvdXQubWFyZ2luQm90dG9tID0gMDsKLQkJbGF5b3V0Lm1hcmdpblRvcCA9IDA7Ci0JCWxheW91dC5tYXJnaW5SaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5MZWZ0ID0gMDsKLQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7Ci0JCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7Ci0JCWNvbnRlbnRzLnNldExheW91dChsYXlvdXQpOwotCi0JCWNyZWF0ZUNvbnRlbnRzKGNvbnRlbnRzKTsKLQotCQlyZXR1cm4gY29udGVudHM7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY3JlYXRlVmVyc2lvbkNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJQ29tcG9zaXRlIGNvbnRlbnRzID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKLQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7Ci0JCWNvbnRlbnRzLnNldExheW91dChsYXlvdXQpOwotCi0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7Ci0JCWNvbnRlbnRzLnNldExheW91dERhdGEoZ2QpOwotCi0JCS8qCi0JCSAqIFNlbGVjdGlvbiBmb3Igb3Blbm1waSB2ZXJzaW9uLgotCQkgKi8KLQotCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb250ZW50cywgU1dULk5PTkUpOwotCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLk1QSUNIMkNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX0xhYmVsX1ZlcnNpb24pOwotCi0JCXZlcnNpb25Db21ibyA9IG5ldyBDb21ibyhjb250ZW50cywgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHZlcnNpb25zTmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCXZlcnNpb25Db21iby5hZGQodmVyc2lvbnNOYW1lc1tpXSk7Ci0JCX0KLQkJdmVyc2lvbkNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKGdldFdpZGdldExpc3RlbmVyKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIGhhbmRsZVZlcnNpb25TZWxlY3RlZCgpIHsKLQkJZ2V0V2lkZ2V0TGlzdGVuZXIoKS5kaXNhYmxlKCk7Ci0JCURhdGFTb3VyY2UgZGF0YVNvdXJjZSA9IChEYXRhU291cmNlKSB0aGlzLmdldERhdGFTb3VyY2UoKTsKLQkJZGF0YVNvdXJjZS5qdXN0VmFsaWRhdGUoKTsKLQkJU3RyaW5nIGxhdW5jaENtZCA9IG51bGw7Ci0JCVN0cmluZyBkZWJ1Z0NtZCA9IG51bGw7Ci0JCVN0cmluZyBkaXNjb3ZlckNtZCA9IG51bGw7Ci0JCVN0cmluZyByZW1vdGVJbnN0YWxsUGF0aCA9IG51bGw7Ci0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gTVBJQ0gyUHJlZmVyZW5jZU1hbmFnZXIuZ2V0UHJlZmVyZW5jZXMoKTsKLQkJbGF1bmNoQ21kID0gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZJWCArIE1QSUNIMlByZWZlcmVuY2VNYW5hZ2VyLlBSRUZTX0xBVU5DSF9DTUQpOwotCQlkZWJ1Z0NtZCA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGU19ERUJVR19DTUQpOwotCQlkaXNjb3ZlckNtZCA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGU19ESVNDT1ZFUl9DTUQpOwotCQlyZW1vdGVJbnN0YWxsUGF0aCA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGSVggKyBNUElDSDJQcmVmZXJlbmNlTWFuYWdlci5QUkVGU19SRU1PVEVfSU5TVEFMTF9QQVRIKTsKLQkJcmVzZXRFcnJvck1lc3NhZ2VzKCk7Ci0JCWRhdGFTb3VyY2Uuc2V0Q29tbWFuZEZpZWxkcyhsYXVuY2hDbWQsIGRlYnVnQ21kLCBkaXNjb3ZlckNtZCwgbnVsbCwgMCwgbnVsbCwgZGF0YVNvdXJjZS5nZXRSZW1vdGVJbnN0YWxsUGF0aCgpKTsKLQkJZGF0YVNvdXJjZS5zZXRVc2VEZWZhdWx0cyh0cnVlKTsKLQkJZGF0YVNvdXJjZS5jb3B5VG9GaWVsZHMoKTsKLQkJZ2V0V2lkZ2V0TGlzdGVuZXIoKS5lbmFibGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL3dpemFyZHMvTVBJQ0gyUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZS5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS93aXphcmRzL01QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2YjMwYi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9tcGkvbXBpY2gyL3VpL3dpemFyZHMvTVBJQ0gyUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpLndpemFyZHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS5tZXNzYWdlcy5NZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLnVpLndpemFyZHMuQWJzdHJhY3RSZW1vdGVSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAudWkud2l6YXJkcy5STUNvbmZpZ3VyYXRpb25XaXphcmQ7Ci0KLS8qKgotICogCi0gKiBAYXV0aG9yIERhbmllbCBGZWxpeCBGZXJiZXIKLSAqCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBNUElDSDJSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlIGV4dGVuZHMgQWJzdHJhY3RSZW1vdGVSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZSB7Ci0KLQlwdWJsaWMgTVBJQ0gyUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZShSTUNvbmZpZ3VyYXRpb25XaXphcmQgd2l6YXJkKSB7Ci0JCXN1cGVyKHdpemFyZCwgTWVzc2FnZXMuTVBJQ0gyUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9UaXRsZSk7Ci0JCXNldFRpdGxlKE1lc3NhZ2VzLk1QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfVGl0bGUpOwotCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5NUElDSDJSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX0Rlc2NyaXB0aW9uKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0ubXBpLm1waWNoMi51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL21waS9tcGljaDIvdWkvd2l6YXJkcy9NUElDSDJSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlRmFjdG9yeS5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS93aXphcmRzL01QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZTNhOTcuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vbXBpL21waWNoMi91aS93aXphcmRzL01QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLm1waS5tcGljaDIudWkud2l6YXJkczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5tcGkubXBpY2gyLmNvcmUucm1zeXN0ZW0uTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnVpLndpemFyZHMuUk1Db25maWd1cmF0aW9uV2l6YXJkOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC51aS53aXphcmRzLlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnVpLndpemFyZHMuUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZUZhY3Rvcnk7Ci0KLQotLyoqCi0gKiAKLSAqIEBhdXRob3IgRGFuaWVsIEZlbGl4IEZlcmJlcgotICoKLSAqLwotcHVibGljIGNsYXNzIE1QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5IGV4dGVuZHMgUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZUZhY3RvcnkgewotCi0JcHVibGljIE1QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5KCkgewotCQkvLyBuby1vcAotCX0KLQotCXByb3RlY3RlZCBSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlW10gZ2V0TVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VzKFJNQ29uZmlndXJhdGlvbldpemFyZCB3aXphcmQpIHsKLQkJcmV0dXJuIG5ldyBSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlW10gewotCQkJCW5ldyBNUElDSDJDb25maWd1cmF0aW9uV2l6YXJkUGFnZSh3aXphcmQpCi0JCX07Ci0JfQotCi0JLy8JQE92ZXJyaWRlCi0JQE92ZXJyaWRlCi0JcHVibGljIFJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VbXSBnZXRQYWdlcyhSTUNvbmZpZ3VyYXRpb25XaXphcmQgd2l6YXJkKSB7Ci0JCUxpc3Q8Uk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZT4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8Uk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZT4oKTsKLQkJbGlzdC5hZGQobmV3IE1QSUNIMlJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2Uod2l6YXJkKSk7Ci0JCWxpc3QuYWRkQWxsKEFycmF5cy5hc0xpc3QoZ2V0TVBJQ0gyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VzKHdpemFyZCkpKTsKLQkJcmV0dXJuIGxpc3QudG9BcnJheShuZXcgUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZVtsaXN0LnNpemUoKV0pOwotCX0KLQotCS8vCUBPdmVycmlkZQotCUBPdmVycmlkZQotCXB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSVJlc291cmNlTWFuYWdlckZhY3Rvcnk+IGdldFJNRmFjdG9yeUNsYXNzKCkgewotCQlyZXR1cm4gTVBJQ0gyUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeS5jbGFzczsKLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvLmNsYXNzcGF0aCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE1OTY3Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxjbGFzc3BhdGg+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4NCi0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KLTwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS8ucHJvamVjdCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2MWNjNS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0RGVzY3JpcHRpb24+DQotCTxuYW1lPm9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlPC9uYW1lPg0KLQk8Y29tbWVudD48L2NvbW1lbnQ+DQotCTxwcm9qZWN0cz4NCi0JPC9wcm9qZWN0cz4NCi0JPGJ1aWxkU3BlYz4NCi0JCTxidWlsZENvbW1hbmQ+DQotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQotCQkJPGFyZ3VtZW50cz4NCi0JCQk8L2FyZ3VtZW50cz4NCi0JCTwvYnVpbGRDb21tYW5kPg0KLQkJPGJ1aWxkQ29tbWFuZD4NCi0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KLQkJCTxhcmd1bWVudHM+DQotCQkJPC9hcmd1bWVudHM+DQotCQk8L2J1aWxkQ29tbWFuZD4NCi0JCTxidWlsZENvbW1hbmQ+DQotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQotCQkJPGFyZ3VtZW50cz4NCi0JCQk8L2FyZ3VtZW50cz4NCi0JCTwvYnVpbGRDb21tYW5kPg0KLQk8L2J1aWxkU3BlYz4NCi0JPG5hdHVyZXM+DQotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCi0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KLQk8L25hdHVyZXM+DQotPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWQyNjIwLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCi1CdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUNCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZTtzaW5nbGV0b246PXRydWUNCi1CdW5kbGUtVmVyc2lvbjogMi4xLjAucXVhbGlmaWVyDQotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUuQWN0aXZhdG9yDQotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyDQotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luDQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCi0gb3JnLmVjbGlwc2Uuc2VhcmNoLA0KLSBvcmcuZWNsaXBzZS51aSwNCi0gb3JnLmVjbGlwc2UuZGVidWcuY29yZSwNCi0gb3JnLmVjbGlwc2UucHRwLnByb3h5LnByb3RvY29sLA0KLSBvcmcuZWNsaXBzZS5wdHAuY29yZSwNCi0gb3JnLmVjbGlwc2UucHRwLnJtLnJlbW90ZSwNCi0gb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlO2J1bmRsZS12ZXJzaW9uPSIyLjEuMCINCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQ0KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZSwNCi0gb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucm1zeXN0ZW0NCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlDQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL2Fib3V0Lmh0bWwgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEwNmYzYS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4NCi08aHRtbD4NCi08aGVhZD4NCi08dGl0bGU+QWJvdXQ8L3RpdGxlPg0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08L2hlYWQ+DQotPGJvZHkgbGFuZz0iRU4tVVMiPg0KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPg0KLSANCi08cD5BcHJpIDE0LCAyMDA5PC9wPgkNCi08aDM+TGljZW5zZTwvaDM+DQotDQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4NCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPg0KLQ0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQ0KLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UNCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCBhbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy48L3A+DQotDQotPC9ib2R5Pg0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMjAzNzUuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLw0KLW91dHB1dC4uID0gYmluLw0KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcDQotICAgICAgICAgICAgICAgLixcDQotICAgICAgICAgICAgICAgcGx1Z2luLnhtbA0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9wbHVnaW4ucHJvcGVydGllcyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2ZDdkMC4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXBsdWdpbk5hbWU9UFRQIFNMVVJNIENvcmUKLXBsdWdpblByb3ZpZGVyPUVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvcGx1Z2luLnhtbCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGQ3OWUzLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+DQotPHBsdWdpbj4NCi0gICA8ZXh0ZW5zaW9uDQotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnB0cC5jb3JlLnJlc291cmNlTWFuYWdlcnMiPg0KLSAgICAgIDxyZXNvdXJjZU1hbmFnZXINCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucm1zeXN0ZW0uU0xVUk1SZXNvdXJjZU1hbmFnZXJGYWN0b3J5Ig0KLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAuc2x1cm0uY29yZS5yZXNvdXJjZW1hbmFnZXIiDQotICAgICAgICAgICAgbmFtZT0iU0xVUk0iLz4NCi0gICA8L2V4dGVuc2lvbj4NCi0NCi08L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL0FjdGl2YXRvci5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmZmYyMy4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL0FjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsNCi1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7DQotDQotLyoqDQotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlDQotICovDQotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7DQotDQotCS8vIFRoZSBwbHVnLWluIElEDQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZSI7DQotDQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UNCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsNCi0JDQotCS8qKg0KLQkgKiBUaGUgY29uc3RydWN0b3INCi0JICovDQotCXB1YmxpYyBBY3RpdmF0b3IoKSB7DQotCQlwbHVnaW4gPSB0aGlzOw0KLQl9DQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkNCi0JICovDQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlzdXBlci5zdGFydChjb250ZXh0KTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQ0KLQkgKi8NCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KLQkJcGx1Z2luID0gbnVsbDsNCi0JCXN1cGVyLnN0b3AoY29udGV4dCk7DQotCX0NCi0NCi0JLyoqDQotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQ0KLQkgKg0KLQkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UNCi0JICovDQotCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7DQotCQlyZXR1cm4gcGx1Z2luOw0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvU0xVUk1BdHRyaWJ1dGVzLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL1NMVVJNQXR0cmlidXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzFjOTAyLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvU0xVUk1BdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmU7DQotDQotcHVibGljIGNsYXNzIFNMVVJNQXR0cmlidXRlcyB7DQotDQotfQ0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvU0xVUk1Kb2JBdHRyaWJ1dGVzLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL1NMVVJNSm9iQXR0cmlidXRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjUzMDZlLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvU0xVUk1Kb2JBdHRyaWJ1dGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiBJQk0gQ29ycG9yYXRpb24gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuSUF0dHJpYnV0ZURlZmluaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5JbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS5tZXNzYWdlcy5NZXNzYWdlczsKLQotCi0vKioKLSAqIEpvYiBhdHRyaWJ1dGVzCi0gKi8KLXB1YmxpYyBjbGFzcyBTTFVSTUpvYkF0dHJpYnV0ZXMgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOVU1fTk9ERVNfQVRUUl9JRCA9ICJudW1iZXJPZk5vZGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FX0xJTUlUX0FUVFJfSUQgPSAidGltZUxpbWl0IjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gbnVtTm9kZXNBdHRyRGVmID0gCi0JCW5ldyBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbihOVU1fTk9ERVNfQVRUUl9JRCwgIk5vZGVzIiwgIC8vJE5PTi1OTFMtMSQKLQkJCQlNZXNzYWdlcy5TTFVSTUpvYkF0dHJpYnV0ZXNfMCwgdHJ1ZSwgMSk7Ci0KLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiB0aW1lTGltaXRBdHRyRGVmID0gCi0JCW5ldyBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbihUSU1FX0xJTUlUX0FUVFJfSUQsICJUaW1lTGltaXQiLCAgLy8kTk9OLU5MUy0xJAotCQkJCU1lc3NhZ2VzLlNMVVJNSm9iQXR0cmlidXRlc18xLCB0cnVlLCAxKTsKLQotCXB1YmxpYyBzdGF0aWMgSUF0dHJpYnV0ZURlZmluaXRpb248Pyw/LD8+W10gZ2V0RGVmYXVsdEF0dHJpYnV0ZURlZmluaXRpb25zKCkgewotCQlyZXR1cm4gbmV3IElBdHRyaWJ1dGVEZWZpbml0aW9uW117Ci0JCQkJbnVtTm9kZXNBdHRyRGVmLAotCQkJCXRpbWVMaW1pdEF0dHJEZWYsCi0JCQl9OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gZ2V0TnVtYmVyT2ZOb2Rlc0F0dHJpYnV0ZURlZmluaXRpb24oKSB7Ci0JCXJldHVybiBudW1Ob2Rlc0F0dHJEZWY7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBnZXRUaW1lTGltaXRBdHRyaWJ1dGVEZWZpbml0aW9uKCkgewotCQlyZXR1cm4gdGltZUxpbWl0QXR0ckRlZjsKLQl9Ci19CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL1NMVVJNUHJlZmVyZW5jZU1hbmFnZXIuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvU0xVUk1QcmVmZXJlbmNlTWFuYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWUxYzQwLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvU0xVUk1QcmVmZXJlbmNlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsMjAwOSANCi0gKiBTY2hvb2wgb2YgQ29tcHV0ZXIsIE5hdGlvbmFsIFVuaXZlcnNpdHkgb2YgRGVmZW5zZSBUZWNobm9sb2d5LCBQLlIuQ2hpbmENCi0gKg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogCQkJUGVpY2hhbmcgU2hpIDxwY211dGF0ZXNAMTYzLmNvbT4vPHBjc2hpQG51ZHQuZWR1LmNuPg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmU7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLlBUUENvcmVQbHVnaW47DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZS5JUmVtb3RlUHJveHlPcHRpb25zOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7DQotDQotcHVibGljIGNsYXNzIFNMVVJNUHJlZmVyZW5jZU1hbmFnZXIgew0KLQkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9YWV9FWEVDVVRBQkxFX05BTUUgPSAicHRwX3NsdXJtX3Byb3h5LnB5IjsNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST1hZX0VYRUNVVEFCTEVfUEFUSCA9IG51bGw7IC8vIHVzZSBsb2NhbCBmcmFnbWVudCBkaXJlY3RvcnkNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE9QVElPTlMgPSBJUmVtb3RlUHJveHlPcHRpb25zLlBPUlRfRk9SV0FSRElORzsNCi0JDQotCXB1YmxpYyBzdGF0aWMgaW50IGdldERlZmF1bHRPcHRpb25zKCkgew0KLQkJcmV0dXJuIE9QVElPTlM7DQotCX0NCi0NCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdFByb3h5RXhlY3V0YWJsZVBhdGgoKSB7DQotCQlyZXR1cm4gUFJPWFlfRVhFQ1VUQUJMRV9QQVRIOw0KLQl9DQotDQotCXB1YmxpYyBzdGF0aWMgUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMoKSB7DQotCQlyZXR1cm4gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOw0KLQl9DQotCQ0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2F2ZVByZWZlcmVuY2VzKCkgew0KLQkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsNCi0JfQ0KLQkNCi0JcHVibGljIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQcmVmZXJlbmNlcygpIHsNCi0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOw0KLQkJDQotCQlTdHJpbmcgc2VydmVyID0gIiI7DQotCQkJDQotCQlpZiAoUFJPWFlfRVhFQ1VUQUJMRV9QQVRIICE9IG51bGwpIHsNCi0JCQkvL3NlcnZlciA9IG5ldyBQYXRoKFBST1hZX0VYRUNVVEFCTEVfUEFUSCkuYXBwZW5kKFBST1hZX0VYRUNVVEFCTEVfTkFNRSkudG9PU1N0cmluZygpOw0KLQkJfSBlbHNlIHsNCi0JCQkvL3NlcnZlciA9IFBUUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmxvY2F0ZUZyYWdtZW50RmlsZSgib3JnLmVjbGlwc2UucHRwIiwgUFJPWFlfRVhFQ1VUQUJMRV9OQU1FKTsNCi0JCQlpZiAoc2VydmVyID09IG51bGwpIHsNCi0JCQkJc2VydmVyID0gIiI7DQotCQkJfQ0KLSAgICAgICB9DQotCQkNCi0JCXByZWZlcmVuY2VzLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9YWV9QQVRILCBzZXJ2ZXIpOw0KLQkJcHJlZmVyZW5jZXMuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLk9QVElPTlMsIE9QVElPTlMpOw0KLQl9DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvbWVzc2FnZXMvTWVzc2FnZXMuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvbWVzc2FnZXMvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2ODliNS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL21lc3NhZ2VzL01lc3NhZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOCwyMDA5IA0KLSAqIFNjaG9vbCBvZiBDb21wdXRlciwgTmF0aW9uYWwgVW5pdmVyc2l0eSBvZiBEZWZlbnNlIFRlY2hub2xvZ3ksIFAuUi5DaGluYQ0KLSAqDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAJCQlQZWljaGFuZyBTaGkgPHBjbXV0YXRlc0AxNjMuY29tPi88cGNzaGlAbnVkdC5lZHUuY24+DQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS5tZXNzYWdlczsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsNCi0NCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgew0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUubWVzc2FnZXMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkDQotDQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNSm9iQXR0cmlidXRlc18wOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTUpvYkF0dHJpYnV0ZXNfMTsNCi0JDQotCXN0YXRpYyB7DQotCQkvLyBpbml0aWFsaXplIHJlc291cmNlIGJ1bmRsZQ0KLQkJTkxTLmluaXRpYWxpemVNZXNzYWdlcyhCVU5ETEVfTkFNRSwgTWVzc2FnZXMuY2xhc3MpOw0KLQl9DQotDQotCXByaXZhdGUgTWVzc2FnZXMoKSB7DQotCQkvLyBQcmV2ZW50IGluc3RhbmNlcy4NCi0JfQ0KLX0NCi0NCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL21lc3NhZ2VzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL21lc3NhZ2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZTg2OTAuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9tZXNzYWdlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1TTFVSTUpvYkF0dHJpYnV0ZXNfMD1OdW1iZXIgb2YgTm9kZXMNCi1TTFVSTUpvYkF0dHJpYnV0ZXNfMT1Kb2IgVGltZSBMaW1pdA0KLQ0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvcm1zeXN0ZW0vU0xVUk1SZXNvdXJjZU1hbmFnZXIuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvcm1zeXN0ZW0vU0xVUk1SZXNvdXJjZU1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc1OGFmNi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL3Jtc3lzdGVtL1NMVVJNUmVzb3VyY2VNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsMjAwOSANCi0gKiBTY2hvb2wgb2YgQ29tcHV0ZXIsIE5hdGlvbmFsIFVuaXZlcnNpdHkgb2YgRGVmZW5zZSBUZWNobm9sb2d5LCBQLlIuQ2hpbmENCi0gKg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogCQkJUGVpY2hhbmcgU2hpIDxwY211dGF0ZXNAMTYzLmNvbT4vPHBjc2hpQG51ZHQuZWR1LmNuPg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucm1zeXN0ZW07DQotDQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hbmFnZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRjb250cm9scy5JUEpvYkNvbnRyb2w7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRjb250cm9scy5JUE1hY2hpbmVDb250cm9sOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50Y29udHJvbHMuSVBOb2RlQ29udHJvbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudGNvbnRyb2xzLklQUHJvY2Vzc0NvbnRyb2w7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRjb250cm9scy5JUFF1ZXVlQ29udHJvbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudGNvbnRyb2xzLklQVW5pdmVyc2VDb250cm9sOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS5ydHN5c3RlbS5TTFVSTVByb3h5UnVudGltZUNsaWVudDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucnRzeXN0ZW0uU0xVUk1SdW50aW1lU3lzdGVtOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uQWJzdHJhY3RSdW50aW1lUmVzb3VyY2VNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ydHN5c3RlbS5JUnVudGltZVN5c3RlbTsNCi0NCi1wdWJsaWMgY2xhc3MgU0xVUk1SZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBBYnN0cmFjdFJ1bnRpbWVSZXNvdXJjZU1hbmFnZXIgew0KLQ0KLQlwcml2YXRlIEludGVnZXIgU0xVUk1STUlEOw0KLQkNCi0JcHVibGljIFNMVVJNUmVzb3VyY2VNYW5hZ2VyKEludGVnZXIgaWQsIElQVW5pdmVyc2VDb250cm9sIHVuaXZlcnNlLCBJUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBjb25maWcpIHsNCi0JCXN1cGVyKGlkLnRvU3RyaW5nKCksIHVuaXZlcnNlLCBjb25maWcpOw0KLQkJU0xVUk1STUlEID0gaWQ7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFByb3h5UmVzb3VyY2VNYW5hZ2VyI2RvQWZ0ZXJDbG9zZUNvbm5lY3Rpb24oKQ0KLQkgKi8NCi0JcHJvdGVjdGVkIHZvaWQgZG9BZnRlckNsb3NlQ29ubmVjdGlvbigpIHsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UHJveHlSZXNvdXJjZU1hbmFnZXIjZG9BZnRlck9wZW5Db25uZWN0aW9uKCkNCi0JICovDQotCXByb3RlY3RlZCB2b2lkIGRvQWZ0ZXJPcGVuQ29ubmVjdGlvbigpIHsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UHJveHlSZXNvdXJjZU1hbmFnZXIjZG9CZWZvcmVDbG9zZUNvbm5lY3Rpb24oKQ0KLQkgKi8NCi0JcHJvdGVjdGVkIHZvaWQgZG9CZWZvcmVDbG9zZUNvbm5lY3Rpb24oKSB7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFByb3h5UmVzb3VyY2VNYW5hZ2VyI2RvQmVmb3JlT3BlbkNvbm5lY3Rpb24oKQ0KLQkgKi8NCi0JcHJvdGVjdGVkIHZvaWQgZG9CZWZvcmVPcGVuQ29ubmVjdGlvbigpIHsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UnVudGltZVJlc291cmNlTWFuYWdlciNkb0NyZWF0ZUpvYihvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50Y29udHJvbHMuSVBRdWV1ZUNvbnRyb2wsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFuYWdlcikNCi0JICovDQotCUBPdmVycmlkZQ0KLQlwcm90ZWN0ZWQgSVBKb2JDb250cm9sIGRvQ3JlYXRlSm9iKElQUXVldWVDb250cm9sIHF1ZXVlLCBTdHJpbmcgam9iSWQsIEF0dHJpYnV0ZU1hbmFnZXIgYXR0cnMpIHsNCi0JCXJldHVybiBuZXdKb2IocXVldWUsIGpvYklkLCBhdHRycyk7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFJ1bnRpbWVSZXNvdXJjZU1hbmFnZXIjZG9DcmVhdGVNYWNoaW5lKGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFuYWdlcikNCi0JICovDQotCUBPdmVycmlkZQ0KLQlwcm90ZWN0ZWQgSVBNYWNoaW5lQ29udHJvbCBkb0NyZWF0ZU1hY2hpbmUoU3RyaW5nIG1hY2hpbmVJZCwgQXR0cmlidXRlTWFuYWdlciBhdHRycykgew0KLQkJcmV0dXJuIG5ld01hY2hpbmUobWFjaGluZUlkLCBhdHRycyk7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFJ1bnRpbWVSZXNvdXJjZU1hbmFnZXIjZG9DcmVhdGVOb2RlKG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRjb250cm9scy5JUE1hY2hpbmVDb250cm9sLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLkF0dHJpYnV0ZU1hbmFnZXIpDQotCSAqLw0KLQlAT3ZlcnJpZGUNCi0JcHJvdGVjdGVkIElQTm9kZUNvbnRyb2wgZG9DcmVhdGVOb2RlKElQTWFjaGluZUNvbnRyb2wgbWFjaGluZSwgU3RyaW5nIG5vZGVJZCwgQXR0cmlidXRlTWFuYWdlciBhdHRycykgew0KLQkJcmV0dXJuIG5ld05vZGUobWFjaGluZSwgbm9kZUlkLCBhdHRycyk7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFJ1bnRpbWVSZXNvdXJjZU1hbmFnZXIjZG9DcmVhdGVQcm9jZXNzKG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRjb250cm9scy5JUEpvYkNvbnRyb2wsIGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFuYWdlcikNCi0JICovDQotCUBPdmVycmlkZQ0KLQlwcm90ZWN0ZWQgSVBQcm9jZXNzQ29udHJvbCBkb0NyZWF0ZVByb2Nlc3MoSVBKb2JDb250cm9sIGpvYiwgU3RyaW5nIHByb2Nlc3NJZCwgQXR0cmlidXRlTWFuYWdlciBhdHRycykgew0KLQkJcmV0dXJuIG5ld1Byb2Nlc3Moam9iLCBwcm9jZXNzSWQsIGF0dHJzKTsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UnVudGltZVJlc291cmNlTWFuYWdlciNkb0NyZWF0ZVF1ZXVlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFuYWdlcikNCi0JICovDQotCUBPdmVycmlkZQ0KLQlwcm90ZWN0ZWQgSVBRdWV1ZUNvbnRyb2wgZG9DcmVhdGVRdWV1ZShTdHJpbmcgcXVldWVJZCwgQXR0cmlidXRlTWFuYWdlciBhdHRycykgew0KLQkJcmV0dXJuIG5ld1F1ZXVlKHF1ZXVlSWQsIGF0dHJzKTsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UnVudGltZVJlc291cmNlTWFuYWdlciNkb0NyZWF0ZVJ1bnRpbWVTeXN0ZW0oKQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXByb3RlY3RlZCBJUnVudGltZVN5c3RlbSBkb0NyZWF0ZVJ1bnRpbWVTeXN0ZW0oKSB7DQotCQlTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZmlnID0gKFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbikgZ2V0Q29uZmlndXJhdGlvbigpOw0KLQkJLyogbG9hZCB1cCB0aGUgY29udHJvbCBhbmQgbW9uaXRvcmluZyBzeXN0ZW1zIGZvciBPTVBJICovDQotCQlTTFVSTVByb3h5UnVudGltZUNsaWVudCBydW50aW1lUHJveHkgPSBuZXcgU0xVUk1Qcm94eVJ1bnRpbWVDbGllbnQoY29uZmlnLCBTTFVSTVJNSUQpOw0KLQkJcmV0dXJuIG5ldyBTTFVSTVJ1bnRpbWVTeXN0ZW0ocnVudGltZVByb3h5LCBnZXRBdHRyaWJ1dGVEZWZpbml0aW9uTWFuYWdlcigpKTsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UnVudGltZVJlc291cmNlTWFuYWdlciNkb1VwZGF0ZUpvYnMob3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMuSVBRdWV1ZSwgamF2YS51dGlsLkNvbGxlY3Rpb24sIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmF0dHJpYnV0ZXMuQXR0cmlidXRlTWFuYWdlcikNCi0JICovDQotCUBPdmVycmlkZQ0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBkb1VwZGF0ZUpvYnMoSVBRdWV1ZUNvbnRyb2wgcXVldWUsIENvbGxlY3Rpb248SVBKb2JDb250cm9sPiBqb2JzLA0KLQkJCUF0dHJpYnV0ZU1hbmFnZXIgYXR0cnMpIHsNCi0JCXJldHVybiB1cGRhdGVKb2JzKHF1ZXVlLCBqb2JzLCBhdHRycyk7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFJ1bnRpbWVSZXNvdXJjZU1hbmFnZXIjZG9VcGRhdGVNYWNoaW5lcyhqYXZhLnV0aWwuQ29sbGVjdGlvbiwgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYW5hZ2VyKQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXByb3RlY3RlZCBib29sZWFuIGRvVXBkYXRlTWFjaGluZXMoQ29sbGVjdGlvbjxJUE1hY2hpbmVDb250cm9sPiBtYWNoaW5lcywNCi0JCQlBdHRyaWJ1dGVNYW5hZ2VyIGF0dHJzKSB7DQotCQlyZXR1cm4gdXBkYXRlTWFjaGluZXMobWFjaGluZXMsIGF0dHJzKTsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UnVudGltZVJlc291cmNlTWFuYWdlciNkb1VwZGF0ZU5vZGVzKG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRjb250cm9scy5JUE1hY2hpbmVDb250cm9sLCBqYXZhLnV0aWwuQ29sbGVjdGlvbiwgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYW5hZ2VyKQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXByb3RlY3RlZCBib29sZWFuIGRvVXBkYXRlTm9kZXMoSVBNYWNoaW5lQ29udHJvbCBtYWNoaW5lLCANCi0JCQlDb2xsZWN0aW9uPElQTm9kZUNvbnRyb2w+IG5vZGVzLCBBdHRyaWJ1dGVNYW5hZ2VyIGF0dHJzKSB7DQotCQlyZXR1cm4gdXBkYXRlTm9kZXMobWFjaGluZSwgbm9kZXMsIGF0dHJzKTsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UnVudGltZVJlc291cmNlTWFuYWdlciNkb1VwZGF0ZVByb2Nlc3NlcyhvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50Y29udHJvbHMuSVBKb2JDb250cm9sLCBqYXZhLnV0aWwuQ29sbGVjdGlvbiwgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYW5hZ2VyKQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXByb3RlY3RlZCBib29sZWFuIGRvVXBkYXRlUHJvY2Vzc2VzKElQSm9iQ29udHJvbCBqb2IsDQotCQkJQ29sbGVjdGlvbjxJUFByb2Nlc3NDb250cm9sPiBwcm9jZXNzZXMsIEF0dHJpYnV0ZU1hbmFnZXIgYXR0cnMpIHsNCi0JCXJldHVybiB1cGRhdGVQcm9jZXNzZXMoam9iLCBwcm9jZXNzZXMsIGF0dHJzKTsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLkFic3RyYWN0UnVudGltZVJlc291cmNlTWFuYWdlciNkb1VwZGF0ZVF1ZXVlcyhqYXZhLnV0aWwuQ29sbGVjdGlvbiwgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5BdHRyaWJ1dGVNYW5hZ2VyKQ0KLQkgKi8NCi0JQE92ZXJyaWRlDQotCXByb3RlY3RlZCBib29sZWFuIGRvVXBkYXRlUXVldWVzKENvbGxlY3Rpb248SVBRdWV1ZUNvbnRyb2w+IHF1ZXVlcywNCi0JCQlBdHRyaWJ1dGVNYW5hZ2VyIGF0dHJzKSB7DQotCQlyZXR1cm4gdXBkYXRlUXVldWVzKHF1ZXVlcywgYXR0cnMpOw0KLQl9DQotDQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvcm1zeXN0ZW0vU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL3Jtc3lzdGVtL1NMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2IzYjMxLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvcm1zeXN0ZW0vU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsMjAwOSANCi0gKiBTY2hvb2wgb2YgQ29tcHV0ZXIsIE5hdGlvbmFsIFVuaXZlcnNpdHkgb2YgRGVmZW5zZSBUZWNobm9sb2d5LCBQLlIuQ2hpbmENCi0gKg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogCQkJUGVpY2hhbmcgU2hpIDxwY211dGF0ZXNAMTYzLmNvbT4vPHBjc2hpQG51ZHQuZWR1LmNuPg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qKg0KLSAqIA0KLSAqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucm1zeXN0ZW07DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5yZW1vdGUuY29yZS5BYnN0cmFjdFJlbW90ZVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5JUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87DQotDQotZmluYWwgcHVibGljIGNsYXNzIFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzDQotCQlBYnN0cmFjdFJlbW90ZVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gaW1wbGVtZW50cyBDbG9uZWFibGUgew0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsgLy8kTk9OLU5MUy0xJA0KLQ0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1NMVVJNRF9QQVRIID0gInNsdXJtZFBhdGgiOyAvLyROT04tTkxTLTEkDQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU0xVUk1EX0FSR1MgPSAic2x1cm1kQXJncyI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19TTFVSTURfREVGQVVMVFMgPSAic2x1cm1kRGVmYXVsdHMiOyAvLyROT04tTkxTLTEkDQotDQotCS8qKg0KLQkgKiBAcGFyYW0gZmFjdG9yeQ0KLQkgKiBAcGFyYW0gbWVtZW50bw0KLQkgKiBAcmV0dXJuDQotCSAqLw0KLQlwdWJsaWMgc3RhdGljIElSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGxvYWQoDQotCQkJU0xVUk1SZXNvdXJjZU1hbmFnZXJGYWN0b3J5IGZhY3RvcnksIElNZW1lbnRvIG1lbWVudG8pIHsNCi0NCi0JCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBsb2FkUmVtb3RlKGZhY3RvcnksIG1lbWVudG8pOw0KLQ0KLQkJU3RyaW5nIHNsdXJtZFBhdGggPSBtZW1lbnRvLmdldFN0cmluZyhUQUdfU0xVUk1EX1BBVEgpOw0KLQkJU3RyaW5nIHNsdXJtZEFyZ3MgPSBtZW1lbnRvLmdldFN0cmluZyhUQUdfU0xVUk1EX0FSR1MpOw0KLQkJYm9vbGVhbiB1c2VEZWZhdWx0cyA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKG1lbWVudG8NCi0JCQkJLmdldFN0cmluZyhUQUdfU0xVUk1EX0RFRkFVTFRTKSk7DQotDQotCQlTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbigNCi0JCQkJZmFjdG9yeSwgcmVtb3RlQ29uZmlnLCBzbHVybWRQYXRoLCBzbHVybWRBcmdzLCB1c2VEZWZhdWx0cyk7DQotDQotCQlyZXR1cm4gY29uZmlnOw0KLQl9DQotDQotCXByaXZhdGUgU3RyaW5nIHNsdXJtZFBhdGg7DQotCXByaXZhdGUgU3RyaW5nIHNsdXJtZEFyZ3M7DQotCXByaXZhdGUgYm9vbGVhbiB1c2VEZWZhdWx0czsNCi0NCi0JcHVibGljIFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbihTTFVSTVJlc291cmNlTWFuYWdlckZhY3RvcnkgZmFjdG9yeSkgew0KLQkJdGhpcyhmYWN0b3J5LCBuZXcgUmVtb3RlQ29uZmlnKCksIEVNUFRZX1NUUklORywgRU1QVFlfU1RSSU5HLCB0cnVlKTsNCi0JfQ0KLQ0KLQlwdWJsaWMgU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKFNMVVJNUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeSBmYWN0b3J5LA0KLQkJCVJlbW90ZUNvbmZpZyBjb25maWcsIFN0cmluZyBzbHVybWRQYXRoLCBTdHJpbmcgc2x1cm1kQXJncywNCi0JCQlib29sZWFuIHVzZURlZmF1bHRzKSB7DQotCQlzdXBlcihjb25maWcsIGZhY3RvcnkpOw0KLQkJc2V0U2x1cm1kUGF0aChzbHVybWRQYXRoKTsNCi0JCXNldFNsdXJtZEFyZ3Moc2x1cm1kQXJncyk7DQotCQlzZXRVc2VEZWZhdWx0cyh1c2VEZWZhdWx0cyk7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiANCi0JICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2Nsb25lKCkNCi0JICovDQotCUBPdmVycmlkZQ0KLQlwdWJsaWMgT2JqZWN0IGNsb25lKCkgew0KLQkJQ29tbW9uQ29uZmlnIGNvbW1vbkNvbmYgPSBuZXcgQ29tbW9uQ29uZmlnKGdldE5hbWUoKSwNCi0JCQkJZ2V0RGVzY3JpcHRpb24oKSwgZ2V0VW5pcXVlTmFtZSgpLA0KLQkJCQlnZXRSZW1vdGVTZXJ2aWNlc0lkKCksIGdldENvbm5lY3Rpb25OYW1lKCkpOw0KLQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmYgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbW1vbkNvbmYsDQotCQkJCWdldFByb3h5U2VydmVyUGF0aCgpLCBnZXRMb2NhbEFkZHJlc3MoKSwNCi0JCQkJZ2V0SW52b2NhdGlvbk9wdGlvbnNTdHIoKSwgZ2V0T3B0aW9ucygpKTsNCi0JCXJldHVybiBuZXcgU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKA0KLQkJCQkoU0xVUk1SZXNvdXJjZU1hbmFnZXJGYWN0b3J5KSBnZXRGYWN0b3J5KCksIHJlbW90ZUNvbmYsDQotCQkJCWdldFNsdXJtZFBhdGgoKSwgZ2V0U2x1cm1kQXJncygpLCB1c2VEZWZhdWx0cygpKTsNCi0JfQ0KLQ0KLQkvKioNCi0JICogQHJldHVybiB0aGUgc2x1cm1kQXJncw0KLQkgKi8NCi0JcHVibGljIFN0cmluZyBnZXRTbHVybWRBcmdzKCkgew0KLQkJcmV0dXJuIHNsdXJtZEFyZ3M7DQotCX0NCi0NCi0JLyoqDQotCSAqIEByZXR1cm4gdGhlIHNsdXJtZFBhdGgNCi0JICovDQotCXB1YmxpYyBTdHJpbmcgZ2V0U2x1cm1kUGF0aCgpIHsNCi0JCXJldHVybiBzbHVybWRQYXRoOw0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLmNvcmUuQWJzdHJhY3RSZW1vdGVSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uI3NhdmUob3JnLmVjbGlwc2UudWkuSU1lbWVudG8pDQotCSAqLw0KLQlwdWJsaWMgdm9pZCBzYXZlKElNZW1lbnRvIG1lbWVudG8pIHsNCi0JCXN1cGVyLnNhdmUobWVtZW50byk7DQotCQltZW1lbnRvLnB1dFN0cmluZyhUQUdfU0xVUk1EX1BBVEgsIHNsdXJtZFBhdGgpOw0KLQkJbWVtZW50by5wdXRTdHJpbmcoVEFHX1NMVVJNRF9BUkdTLCBzbHVybWRBcmdzKTsNCi0JCW1lbWVudG8ucHV0U3RyaW5nKFRBR19TTFVSTURfREVGQVVMVFMsIEJvb2xlYW4udG9TdHJpbmcodXNlRGVmYXVsdHMpKTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5JUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiNzZXREZWZhdWx0TmFtZUFuZERlc2MoKQ0KLQkgKi8NCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdE5hbWVBbmREZXNjKCkgew0KLQkJU3RyaW5nIG5hbWUgPSAiU0xVUk0iOyAvLyROT04tTkxTLTEkDQotCQlTdHJpbmcgY29ubiA9IGdldENvbm5lY3Rpb25OYW1lKCk7DQotCQlpZiAoY29ubiAhPSBudWxsICYmICFjb25uLmVxdWFscyhFTVBUWV9TVFJJTkcpKSB7DQotCQkJbmFtZSArPSAiQCIgKyBjb25uOyAvLyROT04tTkxTLTEkDQotCQl9DQotCQlzZXROYW1lKG5hbWUpOw0KLQkJc2V0RGVzY3JpcHRpb24oIlNMVVJNIFJlc291cmNlIE1hbmFnZXIiKTsgLy8kTk9OLU5MUy0xJA0KLQl9DQotDQotCS8qKg0KLQkgKiBAcGFyYW0gc2x1cm1kQXJndW1lbnRzDQotCSAqICAgICAgICAgICAgdGhlIHNsdXJtZEFyZ3MgdG8gc2V0DQotCSAqLw0KLQlwdWJsaWMgdm9pZCBzZXRTbHVybWRBcmdzKFN0cmluZyBzbHVybWRBcmdzKSB7DQotCQl0aGlzLnNsdXJtZEFyZ3MgPSBzbHVybWRBcmdzOw0KLQl9DQotDQotCS8qKg0KLQkgKiBAcGFyYW0gc2x1cm1kUGF0aA0KLQkgKiAgICAgICAgICAgIHRoZSBzbHVybWRQYXRoIHRvIHNldA0KLQkgKi8NCi0JcHVibGljIHZvaWQgc2V0U2x1cm1kUGF0aChTdHJpbmcgc2x1cm1kUGF0aCkgew0KLQkJdGhpcy5zbHVybWRQYXRoID0gc2x1cm1kUGF0aDsNCi0JfQ0KLQ0KLQkvKioNCi0JICogQHBhcmFtIHVzZURlZmF1bHRzDQotCSAqICAgICAgICAgICAgdGhlIHVzZURlZmF1bHRzIHRvIHNldA0KLQkgKi8NCi0JcHVibGljIHZvaWQgc2V0VXNlRGVmYXVsdHMoYm9vbGVhbiB1c2VEZWZhdWx0cykgew0KLQkJdGhpcy51c2VEZWZhdWx0cyA9IHVzZURlZmF1bHRzOw0KLQl9DQotDQotCS8qKg0KLQkgKiBAcmV0dXJuIHRoZSB1c2VEZWZhdWx0cw0KLQkgKi8NCi0JcHVibGljIGJvb2xlYW4gdXNlRGVmYXVsdHMoKSB7DQotCQlyZXR1cm4gdXNlRGVmYXVsdHM7DQotCX0NCi0NCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9ybXN5c3RlbS9TTFVSTVJlc291cmNlTWFuYWdlckZhY3RvcnkuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvcm1zeXN0ZW0vU0xVUk1SZXNvdXJjZU1hbmFnZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ODljOTcuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9ybXN5c3RlbS9TTFVSTVJlc291cmNlTWFuYWdlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgDQotICogU2Nob29sIG9mIENvbXB1dGVyLCBOYXRpb25hbCBVbml2ZXJzaXR5IG9mIERlZmVuc2UgVGVjaG5vbG9neSwgUC5SLkNoaW5hDQotICoNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqIAkJCVBlaWNoYW5nIFNoaSA8cGNtdXRhdGVzQDE2My5jb20+LzxwY3NoaUBudWR0LmVkdS5jbj4NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlLnJtc3lzdGVtOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLlBUUENvcmVQbHVnaW47DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRjb250cm9scy5JUFVuaXZlcnNlQ29udHJvbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudGNvbnRyb2xzLklSZXNvdXJjZU1hbmFnZXJDb250cm9sOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlLlNMVVJNUHJlZmVyZW5jZU1hbmFnZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5BYnN0cmFjdFJlc291cmNlTWFuYWdlckZhY3Rvcnk7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5JUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87DQotDQotcHVibGljIGNsYXNzIFNMVVJNUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0UmVzb3VyY2VNYW5hZ2VyRmFjdG9yeSB7DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlckZhY3RvcnkjY29weUNvbmZpZ3VyYXRpb24ob3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLklSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKQ0KLQkgKi8NCi0JcHVibGljIElSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGNvcHlDb25maWd1cmF0aW9uKA0KLQkJCUlSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsNCi0JCXJldHVybiAoSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24pY29uZmlndXJhdGlvbi5jbG9uZSgpOw0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uQWJzdHJhY3RSZXNvdXJjZU1hbmFnZXJGYWN0b3J5I2NyZWF0ZShvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24pDQotCSAqLw0KLQlwdWJsaWMgSVJlc291cmNlTWFuYWdlckNvbnRyb2wgY3JlYXRlKElSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGNvbmZJbikgew0KLQkJU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSAoU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uKSBjb25mSW47DQotCQlmaW5hbCBQVFBDb3JlUGx1Z2luIHBsdWdpbiA9IFBUUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpOw0KLQkJZmluYWwgSVBVbml2ZXJzZUNvbnRyb2wgdW5pdmVyc2UgPSAoSVBVbml2ZXJzZUNvbnRyb2wpIHBsdWdpbi5nZXRVbml2ZXJzZSgpOw0KLQkJcmV0dXJuIG5ldyBTTFVSTVJlc291cmNlTWFuYWdlcih1bml2ZXJzZS5nZXROZXh0UmVzb3VyY2VNYW5hZ2VySWQoKSwgdW5pdmVyc2UsIGNvbmZpZ3VyYXRpb24pOw0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlckZhY3RvcnkjY3JlYXRlQ29uZmlndXJhdGlvbigpDQotCSAqLw0KLQlwdWJsaWMgSVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHsNCi0JCVNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBjb25mID0gbmV3IFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbih0aGlzKTsNCi0JCQ0KLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBTTFVSTVByZWZlcmVuY2VNYW5hZ2VyLmdldFByZWZlcmVuY2VzKCk7DQotCQkNCi0JCWNvbmYuc2V0UHJveHlTZXJ2ZXJQYXRoKHByZWZlcmVuY2VzLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlBST1hZX1BBVEgpKTsNCi0JCWNvbmYuc2V0T3B0aW9ucyhwcmVmZXJlbmNlcy5nZXRJbnQoUHJlZmVyZW5jZUNvbnN0YW50cy5PUFRJT05TKSk7DQotDQotCQlyZXR1cm4gY29uZjsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLklSZXNvdXJjZU1hbmFnZXJGYWN0b3J5I2xvYWRDb25maWd1cmF0aW9uKG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvKQ0KLQkgKi8NCi0JcHVibGljIElSZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGxvYWRDb25maWd1cmF0aW9uKElNZW1lbnRvIG1lbWVudG8pIHsNCi0JCXJldHVybiBTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24ubG9hZCh0aGlzLCBtZW1lbnRvKTsNCi0JfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL3J0c3lzdGVtL1NMVVJNUHJveHlDb21tYW5kRmFjdG9yeS5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9ydHN5c3RlbS9TTFVSTVByb3h5Q29tbWFuZEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcyODMzNS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL3J0c3lzdGVtL1NMVVJNUHJveHlDb21tYW5kRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgDQotICogU2Nob29sIG9mIENvbXB1dGVyLCBOYXRpb25hbCBVbml2ZXJzaXR5IG9mIERlZmVuc2UgVGVjaG5vbG9neSwgUC5SLkNoaW5hDQotICoNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqIAkJCVBlaWNoYW5nIFNoaSA8cGNtdXRhdGVzQDE2My5jb20+LzxwY3NoaUBudWR0LmVkdS5jbj4NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlLnJ0c3lzdGVtOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucHJveHkuY29tbWFuZC5JUHJveHlDb21tYW5kOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucHJveHkucGFja2V0LlByb3h5UGFja2V0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucHJveHkucnVudGltZS5jb21tYW5kLklQcm94eVJ1bnRpbWVDb21tYW5kRmFjdG9yeTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnByb3h5LnJ1bnRpbWUuY29tbWFuZC5JUHJveHlSdW50aW1lSW5pdENvbW1hbmQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wcm94eS5ydW50aW1lLmNvbW1hbmQuSVByb3h5UnVudGltZU1vZGVsRGVmQ29tbWFuZDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnByb3h5LnJ1bnRpbWUuY29tbWFuZC5JUHJveHlSdW50aW1lU3RhcnRFdmVudHNDb21tYW5kOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucHJveHkucnVudGltZS5jb21tYW5kLklQcm94eVJ1bnRpbWVTdG9wRXZlbnRzQ29tbWFuZDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnByb3h5LnJ1bnRpbWUuY29tbWFuZC5JUHJveHlSdW50aW1lU3VibWl0Sm9iQ29tbWFuZDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnByb3h5LnJ1bnRpbWUuY29tbWFuZC5JUHJveHlSdW50aW1lVGVybWluYXRlSm9iQ29tbWFuZDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnByb3h5LnJ1bnRpbWUuY29tbWFuZC5Qcm94eVJ1bnRpbWVDb21tYW5kRmFjdG9yeTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucm1zeXN0ZW0uU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uOw0KLQ0KLXB1YmxpYyBjbGFzcyBTTFVSTVByb3h5Q29tbWFuZEZhY3RvcnkgaW1wbGVtZW50cyBJUHJveHlSdW50aW1lQ29tbWFuZEZhY3Rvcnkgew0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTTFVSTURfUEFUSF9BVFRSID0gInNsdXJtZFBhdGgiOw0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBTTFVSTURfQVJHU19BVFRSID0gInNsdXJtZEFyZ3MiOw0KLQkNCi0JcHJpdmF0ZSBJUHJveHlSdW50aW1lQ29tbWFuZEZhY3RvcnkgZmFjdG9yeTsNCi0JcHJpdmF0ZSBTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZmlnOw0KLQkNCi0JcHVibGljIFNMVVJNUHJveHlDb21tYW5kRmFjdG9yeShTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24gY29uZmlnKSB7DQotCQl0aGlzLmZhY3RvcnkgPSBuZXcgUHJveHlSdW50aW1lQ29tbWFuZEZhY3RvcnkoKTsNCi0JCXRoaXMuY29uZmlnID0gY29uZmlnOw0KLQl9DQotCQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnByb3h5LnJ1bnRpbWUuY29tbWFuZC5JUHJveHlSdW50aW1lQ29tbWFuZEZhY3RvcnkjbmV3UHJveHlSdW50aW1lSW5pdENvbW1hbmQoaW50KQ0KLQkgKi8NCi0JcHVibGljIElQcm94eVJ1bnRpbWVJbml0Q29tbWFuZCBuZXdQcm94eVJ1bnRpbWVJbml0Q29tbWFuZChpbnQgYmFzZUlkKSB7DQotCQlJUHJveHlSdW50aW1lSW5pdENvbW1hbmQgY21kID0gZmFjdG9yeS5uZXdQcm94eVJ1bnRpbWVJbml0Q29tbWFuZChiYXNlSWQpOw0KLQkJaWYgKCFjb25maWcudXNlRGVmYXVsdHMoKSkgew0KLQkJCWlmICghY29uZmlnLmdldFNsdXJtZFBhdGgoKS5lcXVhbHMoIiIpKSB7DQotCQkJCWNtZC5hZGRBcmd1bWVudChTTFVSTURfUEFUSF9BVFRSICsgIj0iICsgY29uZmlnLmdldFNsdXJtZFBhdGgoKSk7DQotCQkJfQ0KLQkJCWlmICghY29uZmlnLmdldFNsdXJtZEFyZ3MoKS5lcXVhbHMoIiIpKSB7DQotCQkJCWZvciAoU3RyaW5nIGFyZyA6IGNvbmZpZy5nZXRTbHVybWRBcmdzKCkuc3BsaXQoIiAiKSkgew0KLQkJCQkJY21kLmFkZEFyZ3VtZW50KFNMVVJNRF9BUkdTX0FUVFIgKyAiPSIgKyBhcmcpOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuIGNtZDsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnByb3h5LnJ1bnRpbWUuY29tbWFuZC5JUHJveHlSdW50aW1lQ29tbWFuZEZhY3RvcnkjbmV3UHJveHlSdW50aW1lTW9kZWxEZWZDb21tYW5kKCkNCi0JICovDQotCXB1YmxpYyBJUHJveHlSdW50aW1lTW9kZWxEZWZDb21tYW5kIG5ld1Byb3h5UnVudGltZU1vZGVsRGVmQ29tbWFuZCgpIHsNCi0JCXJldHVybiBmYWN0b3J5Lm5ld1Byb3h5UnVudGltZU1vZGVsRGVmQ29tbWFuZCgpOw0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucHJveHkucnVudGltZS5jb21tYW5kLklQcm94eVJ1bnRpbWVDb21tYW5kRmFjdG9yeSNuZXdQcm94eVJ1bnRpbWVTdGFydEV2ZW50c0NvbW1hbmQoKQ0KLQkgKi8NCi0JcHVibGljIElQcm94eVJ1bnRpbWVTdGFydEV2ZW50c0NvbW1hbmQgbmV3UHJveHlSdW50aW1lU3RhcnRFdmVudHNDb21tYW5kKCkgew0KLQkJcmV0dXJuIGZhY3RvcnkubmV3UHJveHlSdW50aW1lU3RhcnRFdmVudHNDb21tYW5kKCk7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5wcm94eS5ydW50aW1lLmNvbW1hbmQuSVByb3h5UnVudGltZUNvbW1hbmRGYWN0b3J5I25ld1Byb3h5UnVudGltZVN0b3BFdmVudHNDb21tYW5kKCkNCi0JICovDQotCXB1YmxpYyBJUHJveHlSdW50aW1lU3RvcEV2ZW50c0NvbW1hbmQgbmV3UHJveHlSdW50aW1lU3RvcEV2ZW50c0NvbW1hbmQoKSB7DQotCQlyZXR1cm4gZmFjdG9yeS5uZXdQcm94eVJ1bnRpbWVTdG9wRXZlbnRzQ29tbWFuZCgpOw0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucHJveHkucnVudGltZS5jb21tYW5kLklQcm94eVJ1bnRpbWVDb21tYW5kRmFjdG9yeSNuZXdQcm94eVJ1bnRpbWVTdWJtaXRKb2JDb21tYW5kKGphdmEubGFuZy5TdHJpbmdbXSkNCi0JICovDQotCXB1YmxpYyBJUHJveHlSdW50aW1lU3VibWl0Sm9iQ29tbWFuZCBuZXdQcm94eVJ1bnRpbWVTdWJtaXRKb2JDb21tYW5kKA0KLQkJCVN0cmluZ1tdIGFyZ3MpIHsNCi0JCXJldHVybiBmYWN0b3J5Lm5ld1Byb3h5UnVudGltZVN1Ym1pdEpvYkNvbW1hbmQoYXJncyk7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5wcm94eS5ydW50aW1lLmNvbW1hbmQuSVByb3h5UnVudGltZUNvbW1hbmRGYWN0b3J5I25ld1Byb3h5UnVudGltZVRlcm1pbmF0ZUpvYkNvbW1hbmQoamF2YS5sYW5nLlN0cmluZykNCi0JICovDQotCXB1YmxpYyBJUHJveHlSdW50aW1lVGVybWluYXRlSm9iQ29tbWFuZCBuZXdQcm94eVJ1bnRpbWVUZXJtaW5hdGVKb2JDb21tYW5kKA0KLQkJCVN0cmluZyBqb2JJZCkgew0KLQkJcmV0dXJuIGZhY3RvcnkubmV3UHJveHlSdW50aW1lVGVybWluYXRlSm9iQ29tbWFuZChqb2JJZCk7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5wcm94eS5jb21tYW5kLlByb3h5Q29tbWFuZEZhY3RvcnkjdG9Db21tYW5kKG9yZy5lY2xpcHNlLnB0cC5wcm94eS5wYWNrZXQuUHJveHlQYWNrZXQpDQotCSAqLw0KLQlwdWJsaWMgSVByb3h5Q29tbWFuZCB0b0NvbW1hbmQoUHJveHlQYWNrZXQgcGFja2V0KSB7DQotCQlyZXR1cm4gZmFjdG9yeS50b0NvbW1hbmQocGFja2V0KTsNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL3J0c3lzdGVtL1NMVVJNUHJveHlSdW50aW1lQ2xpZW50LmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS9jb3JlL3J0c3lzdGVtL1NMVVJNUHJveHlSdW50aW1lQ2xpZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOTgzOTMuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9ydHN5c3RlbS9TTFVSTVByb3h5UnVudGltZUNsaWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsMjAwOSANCi0gKiBTY2hvb2wgb2YgQ29tcHV0ZXIsIE5hdGlvbmFsIFVuaXZlcnNpdHkgb2YgRGVmZW5zZSBUZWNobm9sb2d5LCBQLlIuQ2hpbmENCi0gKg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogCQkJUGVpY2hhbmcgU2hpIDxwY211dGF0ZXNAMTYzLmNvbT4vPHBjc2hpQG51ZHQuZWR1LmNuPg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucnRzeXN0ZW07DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wcm94eS5ydW50aW1lLmV2ZW50LlByb3h5UnVudGltZUV2ZW50RmFjdG9yeTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucm1zeXN0ZW0uU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLmNvcmUuQWJzdHJhY3RSZW1vdGVQcm94eVJ1bnRpbWVDbGllbnQ7DQotDQotcHVibGljIGNsYXNzIFNMVVJNUHJveHlSdW50aW1lQ2xpZW50IGV4dGVuZHMgQWJzdHJhY3RSZW1vdGVQcm94eVJ1bnRpbWVDbGllbnQgew0KLQlwdWJsaWMgU0xVUk1Qcm94eVJ1bnRpbWVDbGllbnQoU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uIGNvbmZpZywgDQotCQkJaW50IGJhc2VNb2RlbElkKSB7DQotCQlzdXBlcihjb25maWcsIGJhc2VNb2RlbElkLCBuZXcgU0xVUk1Qcm94eUNvbW1hbmRGYWN0b3J5KGNvbmZpZyksIG5ldyBQcm94eVJ1bnRpbWVFdmVudEZhY3RvcnkoKSk7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9ydHN5c3RlbS9TTFVSTVJ1bnRpbWVTeXN0ZW0uamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL2NvcmUvcnRzeXN0ZW0vU0xVUk1SdW50aW1lU3lzdGVtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZDU1MmIuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vY29yZS9ydHN5c3RlbS9TTFVSTVJ1bnRpbWVTeXN0ZW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgDQotICogU2Nob29sIG9mIENvbXB1dGVyLCBOYXRpb25hbCBVbml2ZXJzaXR5IG9mIERlZmVuc2UgVGVjaG5vbG9neSwgUC5SLkNoaW5hDQotICoNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqIAkJCVBlaWNoYW5nIFNoaSA8cGNtdXRhdGVzQDE2My5jb20+LzxwY3NoaUBudWR0LmVkdS5jbj4NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlLnJ0c3lzdGVtOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLkF0dHJpYnV0ZURlZmluaXRpb25NYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLmNvcmUuQWJzdHJhY3RSZW1vdGVQcm94eVJ1bnRpbWVTeXN0ZW07DQotDQotcHVibGljIGNsYXNzIFNMVVJNUnVudGltZVN5c3RlbSBleHRlbmRzIEFic3RyYWN0UmVtb3RlUHJveHlSdW50aW1lU3lzdGVtIHsNCi0JcHVibGljIFNMVVJNUnVudGltZVN5c3RlbShTTFVSTVByb3h5UnVudGltZUNsaWVudCBwcm94eSwgQXR0cmlidXRlRGVmaW5pdGlvbk1hbmFnZXIgbWFuYWdlcikgew0KLQkJc3VwZXIocHJveHksIG1hbmFnZXIpOw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvLmNwcm9qZWN0IGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS8uY3Byb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MWI2NTguLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS8uY3Byb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZmlsZVZlcnNpb24gNC4wLjA/PgotCi08Y3Byb2plY3Qgc3RvcmFnZV90eXBlX2lkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5YbWxQcm9qZWN0RGVzY3JpcHRpb25TdG9yYWdlIj4KLTxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+Ci08Y2NvbmZpZ3VyYXRpb24gaWQ9IjAuMTQ1MTA5Nzk5OSI+Ci08c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5jb25maWd1cmF0aW9uRGF0YVByb3ZpZGVyIiBpZD0iMC4xNDUxMDk3OTk5IiBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiIG5hbWU9IkRlZmF1bHQiPgotPGV4dGVybmFsU2V0dGluZ3MvPgotPGV4dGVuc2lvbnM+Ci08ZXh0ZW5zaW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5WQ0Vycm9yUGFyc2VyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuRXJyb3JQYXJzZXIiLz4KLTxleHRlbnNpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkdBU0Vycm9yUGFyc2VyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuRXJyb3JQYXJzZXIiLz4KLTxleHRlbnNpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkdMREVycm9yUGFyc2VyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuRXJyb3JQYXJzZXIiLz4KLTxleHRlbnNpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkdDQ0Vycm9yUGFyc2VyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuRXJyb3JQYXJzZXIiLz4KLTxleHRlbnNpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLk1ha2VFcnJvclBhcnNlciIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkVycm9yUGFyc2VyIi8+Ci08L2V4dGVuc2lvbnM+Ci08L3N0b3JhZ2VNb2R1bGU+Ci08c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0iY2R0QnVpbGRTeXN0ZW0iIHZlcnNpb249IjQuMC4wIj4KLTxjb25maWd1cmF0aW9uIGFydGlmYWN0TmFtZT0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5IiBidWlsZFByb3BlcnRpZXM9IiIgZGVzY3JpcHRpb249IiIgaWQ9IjAuMTQ1MTA5Nzk5OSIgbmFtZT0iRGVmYXVsdCIgcGFyZW50PSJvcmcuZWNsaXBzZS5jZHQuYnVpbGQuY29yZS5wcmVmYmFzZS5jZmciPgotPGZvbGRlckluZm8gaWQ9IjAuMTQ1MTA5Nzk5OS4iIG5hbWU9Ii8iIHJlc291cmNlUGF0aD0iIj4KLTx0b29sQ2hhaW4gaWQ9Im9yZy5lY2xpcHNlLmNkdC5idWlsZC5jb3JlLnByZWZiYXNlLnRvb2xjaGFpbi4xOTM5NjY1NTU1IiBuYW1lPSJObyBUb29sQ2hhaW4iIHJlc291cmNlVHlwZUJhc2VkRGlzY292ZXJ5PSJmYWxzZSIgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UuY2R0LmJ1aWxkLmNvcmUucHJlZmJhc2UudG9vbGNoYWluIj4KLTx0YXJnZXRQbGF0Zm9ybSBpZD0ib3JnLmVjbGlwc2UuY2R0LmJ1aWxkLmNvcmUucHJlZmJhc2UudG9vbGNoYWluLjE5Mzk2NjU1NTUuMTQxNTIxMzMxNCIgbmFtZT0iIi8+Ci08YnVpbGRlciBpZD0ib3JnLmVjbGlwc2UuY2R0LmJ1aWxkLmNvcmUuc2V0dGluZ3MuZGVmYXVsdC5idWlsZGVyLjM3OTUwMzk2NyIga2VlcEVudmlyb25tZW50SW5CdWlsZGZpbGU9ImZhbHNlIiBtYW5hZ2VkQnVpbGRPbj0iZmFsc2UiIG5hbWU9IkdudSBNYWtlIEJ1aWxkZXIiIHN1cGVyQ2xhc3M9Im9yZy5lY2xpcHNlLmNkdC5idWlsZC5jb3JlLnNldHRpbmdzLmRlZmF1bHQuYnVpbGRlciIvPgotPHRvb2wgaWQ9Im9yZy5lY2xpcHNlLmNkdC5idWlsZC5jb3JlLnNldHRpbmdzLmhvbGRlci5saWJzLjE4MzUzMTM0ODAiIG5hbWU9ImhvbGRlciBmb3IgbGlicmFyeSBzZXR0aW5ncyIgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UuY2R0LmJ1aWxkLmNvcmUuc2V0dGluZ3MuaG9sZGVyLmxpYnMiLz4KLTx0b29sIGlkPSJvcmcuZWNsaXBzZS5jZHQuYnVpbGQuY29yZS5zZXR0aW5ncy5ob2xkZXIuMzU0MjI2NTYxIiBuYW1lPSJHTlUgQysrIiBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5jZHQuYnVpbGQuY29yZS5zZXR0aW5ncy5ob2xkZXIiPgotPGlucHV0VHlwZSBpZD0ib3JnLmVjbGlwc2UuY2R0LmJ1aWxkLmNvcmUuc2V0dGluZ3MuaG9sZGVyLmluVHlwZS45MDkxNzY3ODAiIGxhbmd1YWdlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmcrKyIgbGFuZ3VhZ2VOYW1lPSJHTlUgQysrIiBzb3VyY2VDb250ZW50VHlwZT0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuY3h4U291cmNlLG9yZy5lY2xpcHNlLmNkdC5jb3JlLmN4eEhlYWRlciIgc3VwZXJDbGFzcz0ib3JnLmVjbGlwc2UuY2R0LmJ1aWxkLmNvcmUuc2V0dGluZ3MuaG9sZGVyLmluVHlwZSIvPgotPC90b29sPgotPHRvb2wgaWQ9Im9yZy5lY2xpcHNlLmNkdC5idWlsZC5jb3JlLnNldHRpbmdzLmhvbGRlci40MTk0MTMwMjkiIG5hbWU9IkdOVSBDIiBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5jZHQuYnVpbGQuY29yZS5zZXR0aW5ncy5ob2xkZXIiPgotPGlucHV0VHlwZSBpZD0ib3JnLmVjbGlwc2UuY2R0LmJ1aWxkLmNvcmUuc2V0dGluZ3MuaG9sZGVyLmluVHlwZS4xMzAxNzM5MTM0IiBsYW5ndWFnZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5nY2MiIGxhbmd1YWdlTmFtZT0iR05VIEMiIHNvdXJjZUNvbnRlbnRUeXBlPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5jU291cmNlLG9yZy5lY2xpcHNlLmNkdC5jb3JlLmNIZWFkZXIiIHN1cGVyQ2xhc3M9Im9yZy5lY2xpcHNlLmNkdC5idWlsZC5jb3JlLnNldHRpbmdzLmhvbGRlci5pblR5cGUiLz4KLTwvdG9vbD4KLTx0b29sIGlkPSJvcmcuZWNsaXBzZS5jZHQuYnVpbGQuY29yZS5zZXR0aW5ncy5ob2xkZXIuMTI0NjQ3MTQ0OSIgbmFtZT0iQXNzZW1ibHkiIHN1cGVyQ2xhc3M9Im9yZy5lY2xpcHNlLmNkdC5idWlsZC5jb3JlLnNldHRpbmdzLmhvbGRlciI+Ci08aW5wdXRUeXBlIGlkPSJvcmcuZWNsaXBzZS5jZHQuYnVpbGQuY29yZS5zZXR0aW5ncy5ob2xkZXIuaW5UeXBlLjIxMzUyMjkzMjciIGxhbmd1YWdlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmFzc2VtYmx5IiBsYW5ndWFnZU5hbWU9IkFzc2VtYmx5IiBzb3VyY2VDb250ZW50VHlwZT0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuYXNtU291cmNlIiBzdXBlckNsYXNzPSJvcmcuZWNsaXBzZS5jZHQuYnVpbGQuY29yZS5zZXR0aW5ncy5ob2xkZXIuaW5UeXBlIi8+Ci08L3Rvb2w+Ci08L3Rvb2xDaGFpbj4KLTwvZm9sZGVySW5mbz4KLTwvY29uZmlndXJhdGlvbj4KLTwvc3RvcmFnZU1vZHVsZT4KLTxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJzY2FubmVyQ29uZmlndXJhdGlvbiI+Ci08YXV0b2Rpc2NvdmVyeSBlbmFibGVkPSJ0cnVlIiBwcm9ibGVtUmVwb3J0aW5nRW5hYmxlZD0idHJ1ZSIgc2VsZWN0ZWRQcm9maWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5tYWtlLmNvcmUuR0NDU3RhbmRhcmRNYWtlUGVyUHJvamVjdFByb2ZpbGUiLz4KLTxwcm9maWxlIGlkPSJvcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLkdDQ1N0YW5kYXJkTWFrZVBlclByb2plY3RQcm9maWxlIj4KLTxidWlsZE91dHB1dFByb3ZpZGVyPgotPG9wZW5BY3Rpb24gZW5hYmxlZD0idHJ1ZSIgZmlsZVBhdGg9IiIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L2J1aWxkT3V0cHV0UHJvdmlkZXI+Ci08c2Nhbm5lckluZm9Qcm92aWRlciBpZD0ic3BlY3NGaWxlIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItRSAtUCAtdiAtZEQgJHtwbHVnaW5fc3RhdGVfbG9jYXRpb259LyR7c3BlY3NfZmlsZX0iIGNvbW1hbmQ9ImdjYyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1ha2UuY29yZS5HQ0NTdGFuZGFyZE1ha2VQZXJGaWxlUHJvZmlsZSI+Ci08YnVpbGRPdXRwdXRQcm92aWRlcj4KLTxvcGVuQWN0aW9uIGVuYWJsZWQ9InRydWUiIGZpbGVQYXRoPSIiLz4KLTxwYXJzZXIgZW5hYmxlZD0idHJ1ZSIvPgotPC9idWlsZE91dHB1dFByb3ZpZGVyPgotPHNjYW5uZXJJbmZvUHJvdmlkZXIgaWQ9Im1ha2VmaWxlR2VuZXJhdG9yIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItZiAke3Byb2plY3RfbmFtZX1fc2NkLm1rIiBjb21tYW5kPSJtYWtlIiB1c2VEZWZhdWx0PSJ0cnVlIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvc2Nhbm5lckluZm9Qcm92aWRlcj4KLTwvcHJvZmlsZT4KLTxwcm9maWxlIGlkPSJvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5HQ0NNYW5hZ2VkTWFrZVBlclByb2plY3RQcm9maWxlIj4KLTxidWlsZE91dHB1dFByb3ZpZGVyPgotPG9wZW5BY3Rpb24gZW5hYmxlZD0idHJ1ZSIgZmlsZVBhdGg9IiIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L2J1aWxkT3V0cHV0UHJvdmlkZXI+Ci08c2Nhbm5lckluZm9Qcm92aWRlciBpZD0ic3BlY3NGaWxlIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItRSAtUCAtdiAtZEQgJHtwbHVnaW5fc3RhdGVfbG9jYXRpb259LyR7c3BlY3NfZmlsZX0iIGNvbW1hbmQ9ImdjYyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUNQUCI+Ci08YnVpbGRPdXRwdXRQcm92aWRlcj4KLTxvcGVuQWN0aW9uIGVuYWJsZWQ9InRydWUiIGZpbGVQYXRoPSIiLz4KLTxwYXJzZXIgZW5hYmxlZD0idHJ1ZSIvPgotPC9idWlsZE91dHB1dFByb3ZpZGVyPgotPHNjYW5uZXJJbmZvUHJvdmlkZXIgaWQ9InNwZWNzRmlsZSI+Ci08cnVuQWN0aW9uIGFyZ3VtZW50cz0iLUUgLVAgLXYgLWREICR7cGx1Z2luX3N0YXRlX2xvY2F0aW9ufS9zcGVjcy5jcHAiIGNvbW1hbmQ9ImcrKyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUMiPgotPGJ1aWxkT3V0cHV0UHJvdmlkZXI+Ci08b3BlbkFjdGlvbiBlbmFibGVkPSJ0cnVlIiBmaWxlUGF0aD0iIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvYnVpbGRPdXRwdXRQcm92aWRlcj4KLTxzY2FubmVySW5mb1Byb3ZpZGVyIGlkPSJzcGVjc0ZpbGUiPgotPHJ1bkFjdGlvbiBhcmd1bWVudHM9Ii1FIC1QIC12IC1kRCAke3BsdWdpbl9zdGF0ZV9sb2NhdGlvbn0vc3BlY3MuYyIgY29tbWFuZD0iZ2NjIiB1c2VEZWZhdWx0PSJ0cnVlIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvc2Nhbm5lckluZm9Qcm92aWRlcj4KLTwvcHJvZmlsZT4KLTxwcm9maWxlIGlkPSJvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5HQ0NXaW5NYW5hZ2VkTWFrZVBlclByb2plY3RQcm9maWxlIj4KLTxidWlsZE91dHB1dFByb3ZpZGVyPgotPG9wZW5BY3Rpb24gZW5hYmxlZD0idHJ1ZSIgZmlsZVBhdGg9IiIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L2J1aWxkT3V0cHV0UHJvdmlkZXI+Ci08c2Nhbm5lckluZm9Qcm92aWRlciBpZD0ic3BlY3NGaWxlIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItRSAtUCAtdiAtZEQgJHtwbHVnaW5fc3RhdGVfbG9jYXRpb259LyR7c3BlY3NfZmlsZX0iIGNvbW1hbmQ9ImdjYyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDV2luTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUNQUCI+Ci08YnVpbGRPdXRwdXRQcm92aWRlcj4KLTxvcGVuQWN0aW9uIGVuYWJsZWQ9InRydWUiIGZpbGVQYXRoPSIiLz4KLTxwYXJzZXIgZW5hYmxlZD0idHJ1ZSIvPgotPC9idWlsZE91dHB1dFByb3ZpZGVyPgotPHNjYW5uZXJJbmZvUHJvdmlkZXIgaWQ9InNwZWNzRmlsZSI+Ci08cnVuQWN0aW9uIGFyZ3VtZW50cz0iLUUgLVAgLXYgLWREICR7cGx1Z2luX3N0YXRlX2xvY2F0aW9ufS9zcGVjcy5jcHAiIGNvbW1hbmQ9ImcrKyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDV2luTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUMiPgotPGJ1aWxkT3V0cHV0UHJvdmlkZXI+Ci08b3BlbkFjdGlvbiBlbmFibGVkPSJ0cnVlIiBmaWxlUGF0aD0iIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvYnVpbGRPdXRwdXRQcm92aWRlcj4KLTxzY2FubmVySW5mb1Byb3ZpZGVyIGlkPSJzcGVjc0ZpbGUiPgotPHJ1bkFjdGlvbiBhcmd1bWVudHM9Ii1FIC1QIC12IC1kRCAke3BsdWdpbl9zdGF0ZV9sb2NhdGlvbn0vc3BlY3MuYyIgY29tbWFuZD0iZ2NjIiB1c2VEZWZhdWx0PSJ0cnVlIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvc2Nhbm5lckluZm9Qcm92aWRlcj4KLTwvcHJvZmlsZT4KLTxzY2FubmVyQ29uZmlnQnVpbGRJbmZvIGluc3RhbmNlSWQ9IjAuMTQ1MTA5Nzk5OSI+Ci08YXV0b2Rpc2NvdmVyeSBlbmFibGVkPSJ0cnVlIiBwcm9ibGVtUmVwb3J0aW5nRW5hYmxlZD0idHJ1ZSIgc2VsZWN0ZWRQcm9maWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5tYWtlLmNvcmUuR0NDU3RhbmRhcmRNYWtlUGVyUHJvamVjdFByb2ZpbGUiLz4KLTxwcm9maWxlIGlkPSJvcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLkdDQ1N0YW5kYXJkTWFrZVBlclByb2plY3RQcm9maWxlIj4KLTxidWlsZE91dHB1dFByb3ZpZGVyPgotPG9wZW5BY3Rpb24gZW5hYmxlZD0idHJ1ZSIgZmlsZVBhdGg9IiIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L2J1aWxkT3V0cHV0UHJvdmlkZXI+Ci08c2Nhbm5lckluZm9Qcm92aWRlciBpZD0ic3BlY3NGaWxlIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItRSAtUCAtdiAtZEQgJHtwbHVnaW5fc3RhdGVfbG9jYXRpb259LyR7c3BlY3NfZmlsZX0iIGNvbW1hbmQ9ImdjYyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1ha2UuY29yZS5HQ0NTdGFuZGFyZE1ha2VQZXJGaWxlUHJvZmlsZSI+Ci08YnVpbGRPdXRwdXRQcm92aWRlcj4KLTxvcGVuQWN0aW9uIGVuYWJsZWQ9InRydWUiIGZpbGVQYXRoPSIiLz4KLTxwYXJzZXIgZW5hYmxlZD0idHJ1ZSIvPgotPC9idWlsZE91dHB1dFByb3ZpZGVyPgotPHNjYW5uZXJJbmZvUHJvdmlkZXIgaWQ9Im1ha2VmaWxlR2VuZXJhdG9yIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItZiAke3Byb2plY3RfbmFtZX1fc2NkLm1rIiBjb21tYW5kPSJtYWtlIiB1c2VEZWZhdWx0PSJ0cnVlIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvc2Nhbm5lckluZm9Qcm92aWRlcj4KLTwvcHJvZmlsZT4KLTxwcm9maWxlIGlkPSJvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5HQ0NNYW5hZ2VkTWFrZVBlclByb2plY3RQcm9maWxlIj4KLTxidWlsZE91dHB1dFByb3ZpZGVyPgotPG9wZW5BY3Rpb24gZW5hYmxlZD0idHJ1ZSIgZmlsZVBhdGg9IiIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L2J1aWxkT3V0cHV0UHJvdmlkZXI+Ci08c2Nhbm5lckluZm9Qcm92aWRlciBpZD0ic3BlY3NGaWxlIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItRSAtUCAtdiAtZEQgJHtwbHVnaW5fc3RhdGVfbG9jYXRpb259LyR7c3BlY3NfZmlsZX0iIGNvbW1hbmQ9ImdjYyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUNQUCI+Ci08YnVpbGRPdXRwdXRQcm92aWRlcj4KLTxvcGVuQWN0aW9uIGVuYWJsZWQ9InRydWUiIGZpbGVQYXRoPSIiLz4KLTxwYXJzZXIgZW5hYmxlZD0idHJ1ZSIvPgotPC9idWlsZE91dHB1dFByb3ZpZGVyPgotPHNjYW5uZXJJbmZvUHJvdmlkZXIgaWQ9InNwZWNzRmlsZSI+Ci08cnVuQWN0aW9uIGFyZ3VtZW50cz0iLUUgLVAgLXYgLWREICR7cGx1Z2luX3N0YXRlX2xvY2F0aW9ufS9zcGVjcy5jcHAiIGNvbW1hbmQ9ImcrKyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUMiPgotPGJ1aWxkT3V0cHV0UHJvdmlkZXI+Ci08b3BlbkFjdGlvbiBlbmFibGVkPSJ0cnVlIiBmaWxlUGF0aD0iIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvYnVpbGRPdXRwdXRQcm92aWRlcj4KLTxzY2FubmVySW5mb1Byb3ZpZGVyIGlkPSJzcGVjc0ZpbGUiPgotPHJ1bkFjdGlvbiBhcmd1bWVudHM9Ii1FIC1QIC12IC1kRCAke3BsdWdpbl9zdGF0ZV9sb2NhdGlvbn0vc3BlY3MuYyIgY29tbWFuZD0iZ2NjIiB1c2VEZWZhdWx0PSJ0cnVlIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvc2Nhbm5lckluZm9Qcm92aWRlcj4KLTwvcHJvZmlsZT4KLTxwcm9maWxlIGlkPSJvcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5HQ0NXaW5NYW5hZ2VkTWFrZVBlclByb2plY3RQcm9maWxlIj4KLTxidWlsZE91dHB1dFByb3ZpZGVyPgotPG9wZW5BY3Rpb24gZW5hYmxlZD0idHJ1ZSIgZmlsZVBhdGg9IiIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L2J1aWxkT3V0cHV0UHJvdmlkZXI+Ci08c2Nhbm5lckluZm9Qcm92aWRlciBpZD0ic3BlY3NGaWxlIj4KLTxydW5BY3Rpb24gYXJndW1lbnRzPSItRSAtUCAtdiAtZEQgJHtwbHVnaW5fc3RhdGVfbG9jYXRpb259LyR7c3BlY3NfZmlsZX0iIGNvbW1hbmQ9ImdjYyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDV2luTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUNQUCI+Ci08YnVpbGRPdXRwdXRQcm92aWRlcj4KLTxvcGVuQWN0aW9uIGVuYWJsZWQ9InRydWUiIGZpbGVQYXRoPSIiLz4KLTxwYXJzZXIgZW5hYmxlZD0idHJ1ZSIvPgotPC9idWlsZE91dHB1dFByb3ZpZGVyPgotPHNjYW5uZXJJbmZvUHJvdmlkZXIgaWQ9InNwZWNzRmlsZSI+Ci08cnVuQWN0aW9uIGFyZ3VtZW50cz0iLUUgLVAgLXYgLWREICR7cGx1Z2luX3N0YXRlX2xvY2F0aW9ufS9zcGVjcy5jcHAiIGNvbW1hbmQ9ImcrKyIgdXNlRGVmYXVsdD0idHJ1ZSIvPgotPHBhcnNlciBlbmFibGVkPSJ0cnVlIi8+Ci08L3NjYW5uZXJJbmZvUHJvdmlkZXI+Ci08L3Byb2ZpbGU+Ci08cHJvZmlsZSBpZD0ib3JnLmVjbGlwc2UuY2R0Lm1hbmFnZWRidWlsZGVyLmNvcmUuR0NDV2luTWFuYWdlZE1ha2VQZXJQcm9qZWN0UHJvZmlsZUMiPgotPGJ1aWxkT3V0cHV0UHJvdmlkZXI+Ci08b3BlbkFjdGlvbiBlbmFibGVkPSJ0cnVlIiBmaWxlUGF0aD0iIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvYnVpbGRPdXRwdXRQcm92aWRlcj4KLTxzY2FubmVySW5mb1Byb3ZpZGVyIGlkPSJzcGVjc0ZpbGUiPgotPHJ1bkFjdGlvbiBhcmd1bWVudHM9Ii1FIC1QIC12IC1kRCAke3BsdWdpbl9zdGF0ZV9sb2NhdGlvbn0vc3BlY3MuYyIgY29tbWFuZD0iZ2NjIiB1c2VEZWZhdWx0PSJ0cnVlIi8+Ci08cGFyc2VyIGVuYWJsZWQ9InRydWUiLz4KLTwvc2Nhbm5lckluZm9Qcm92aWRlcj4KLTwvcHJvZmlsZT4KLTwvc2Nhbm5lckNvbmZpZ0J1aWxkSW5mbz4KLTwvc3RvcmFnZU1vZHVsZT4KLTxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5leHRlcm5hbFNldHRpbmdzIi8+Ci08L2Njb25maWd1cmF0aW9uPgotPC9zdG9yYWdlTW9kdWxlPgotPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9ImNkdEJ1aWxkU3lzdGVtIiB2ZXJzaW9uPSI0LjAuMCI+Ci08cHJvamVjdCBpZD0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5Lm51bGwuMTY0Nzc0Nzg4NSIgbmFtZT0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5Ii8+Ci08L3N0b3JhZ2VNb2R1bGU+Ci08L2Nwcm9qZWN0PgpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS8ucHJvamVjdCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhOGQ4NDMuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5jb3JlLmdlbm1ha2VidWlsZGVyPC9uYW1lPgotCQkJPHRyaWdnZXJzPmNsZWFuLGZ1bGwsaW5jcmVtZW50YWwsPC90cmlnZ2Vycz4KLQkJCTxhcmd1bWVudHM+Ci0JCQkJPGRpY3Rpb25hcnk+Ci0JCQkJCTxrZXk+P25hbWU/PC9rZXk+Ci0JCQkJCTx2YWx1ZT48L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCQk8ZGljdGlvbmFyeT4KLQkJCQkJPGtleT5vcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLmFwcGVuZF9lbnZpcm9ubWVudDwva2V5PgotCQkJCQk8dmFsdWU+dHJ1ZTwvdmFsdWU+Ci0JCQkJPC9kaWN0aW9uYXJ5PgotCQkJCTxkaWN0aW9uYXJ5PgotCQkJCQk8a2V5Pm9yZy5lY2xpcHNlLmNkdC5tYWtlLmNvcmUuYXV0b0J1aWxkVGFyZ2V0PC9rZXk+Ci0JCQkJCTx2YWx1ZT5hbGw8L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCQk8ZGljdGlvbmFyeT4KLQkJCQkJPGtleT5vcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLmJ1aWxkQXJndW1lbnRzPC9rZXk+Ci0JCQkJCTx2YWx1ZT48L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCQk8ZGljdGlvbmFyeT4KLQkJCQkJPGtleT5vcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLmJ1aWxkQ29tbWFuZDwva2V5PgotCQkJCQk8dmFsdWU+bWFrZTwvdmFsdWU+Ci0JCQkJPC9kaWN0aW9uYXJ5PgotCQkJCTxkaWN0aW9uYXJ5PgotCQkJCQk8a2V5Pm9yZy5lY2xpcHNlLmNkdC5tYWtlLmNvcmUuY2xlYW5CdWlsZFRhcmdldDwva2V5PgotCQkJCQk8dmFsdWU+Y2xlYW48L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCQk8ZGljdGlvbmFyeT4KLQkJCQkJPGtleT5vcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLmNvbnRlbnRzPC9rZXk+Ci0JCQkJCTx2YWx1ZT5vcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLmFjdGl2ZUNvbmZpZ1NldHRpbmdzPC92YWx1ZT4KLQkJCQk8L2RpY3Rpb25hcnk+Ci0JCQkJPGRpY3Rpb25hcnk+Ci0JCQkJCTxrZXk+b3JnLmVjbGlwc2UuY2R0Lm1ha2UuY29yZS5lbmFibGVBdXRvQnVpbGQ8L2tleT4KLQkJCQkJPHZhbHVlPmZhbHNlPC92YWx1ZT4KLQkJCQk8L2RpY3Rpb25hcnk+Ci0JCQkJPGRpY3Rpb25hcnk+Ci0JCQkJCTxrZXk+b3JnLmVjbGlwc2UuY2R0Lm1ha2UuY29yZS5lbmFibGVDbGVhbkJ1aWxkPC9rZXk+Ci0JCQkJCTx2YWx1ZT50cnVlPC92YWx1ZT4KLQkJCQk8L2RpY3Rpb25hcnk+Ci0JCQkJPGRpY3Rpb25hcnk+Ci0JCQkJCTxrZXk+b3JnLmVjbGlwc2UuY2R0Lm1ha2UuY29yZS5lbmFibGVGdWxsQnVpbGQ8L2tleT4KLQkJCQkJPHZhbHVlPnRydWU8L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCQk8ZGljdGlvbmFyeT4KLQkJCQkJPGtleT5vcmcuZWNsaXBzZS5jZHQubWFrZS5jb3JlLmZ1bGxCdWlsZFRhcmdldDwva2V5PgotCQkJCQk8dmFsdWU+YWxsPC92YWx1ZT4KLQkJCQk8L2RpY3Rpb25hcnk+Ci0JCQkJPGRpY3Rpb25hcnk+Ci0JCQkJCTxrZXk+b3JnLmVjbGlwc2UuY2R0Lm1ha2UuY29yZS5zdG9wT25FcnJvcjwva2V5PgotCQkJCQk8dmFsdWU+dHJ1ZTwvdmFsdWU+Ci0JCQkJPC9kaWN0aW9uYXJ5PgotCQkJCTxkaWN0aW9uYXJ5PgotCQkJCQk8a2V5Pm9yZy5lY2xpcHNlLmNkdC5tYWtlLmNvcmUudXNlRGVmYXVsdEJ1aWxkQ21kPC9rZXk+Ci0JCQkJCTx2YWx1ZT50cnVlPC92YWx1ZT4KLQkJCQk8L2RpY3Rpb25hcnk+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5jZHQubWFuYWdlZGJ1aWxkZXIuY29yZS5TY2FubmVyQ29uZmlnQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuY2R0LmNvcmUuY25hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5jb3JlLm1hbmFnZWRCdWlsZE5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5tYW5hZ2VkYnVpbGRlci5jb3JlLlNjYW5uZXJDb25maWdOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvQVVUSE9SUyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvQVVUSE9SUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBlZGZhMi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L0FVVEhPUlMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1KaWUgSmlhbmcgPGppYW5namllQG51ZHQuZWR1LmNuPgpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9DT1BZSU5HIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9DT1BZSU5HCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzUwNThmLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvQ09QWUlORworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotQ29weXJpZ2h0IChjKSAyMDA5IFNjaG9vbCBvZiBDb21wdXRlciwgTmF0aW9uYWwgVW5pdmVyc2l0eSBvZiBEZWZlbnNlIFRlY2hub2xvZ3ksIFAuUi5DaGluYSAKLQotVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L0NoYW5nZUxvZyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvQ2hhbmdlTG9nCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvSU5TVEFMTCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvSU5TVEFMTApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMwYzQyZi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L0lOU1RBTEwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1TZWUgUkVBRE1FIGZvciBidWlsZC9pbnN0YWxsIGluc3RydWN0aW9ucy4KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmI1Y2E3Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5wdHAucm0ub3J0ZS5wcm94eQ0KLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCi1DcmVhdGVkLUJ5OiAxLjUuMF8xMy0xMTkgKEFwcGxlIEluYy4pDQotQnVuZGxlLU5hbWU6IFBUUCBQcm94eSBTZXJ2ZXIgZm9yIE9wZW5SVEUNCi1CdW5kbGUtVmVyc2lvbjogMi4wLjEuMjAwODA2MDYxNTE1DQotQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcNCi1BbnQtVmVyc2lvbjogQXBhY2hlIEFudCAxLjcuMA0KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5wdHAudXRpbHMsb3JnLmVjbGlwc2UucHRwLnByb3h5DQotDQotTmFtZTogY29uZmlndXJlLmluDQotU0hBMS1EaWdlc3Q6IDZ6RWI3Z2xrQys4cmR3d3J4QTVLREZVT2d5ST0NCi0NCi1OYW1lOiBNYWtlZmlsZS5hbQ0KLVNIQTEtRGlnZXN0OiBST0hZdWJnSHdCWVRWUElYVE5odTRSMTEybDg9DQotDQotTmFtZTogY29uZmlndXJlDQotU0hBMS1EaWdlc3Q6IGF4Q2VQMVRsSU5LKzd3UzVsSFgyMDBSSVdLZz0NCi0NCi1OYW1lOiBDaGFuZ2VMb2cNCi1TSEExLURpZ2VzdDogMmptajdsNXJTdzB5VmIvdmxXQVlrSy9ZQndrPQ0KLQ0KLU5hbWU6IElOU1RBTEwNCi1TSEExLURpZ2VzdDogdXMwZTA3MFR1NGdYbitucXdpZmlMT0dwYklRPQ0KLQ0KLU5hbWU6IGFib3V0Lmh0bWwNCi1TSEExLURpZ2VzdDogNjd0Ujd6RGc1elpUU3FreTFIYXZTcmMrSVkwPQ0KLQ0KLU5hbWU6IGNvbXBpbGUNCi1TSEExLURpZ2VzdDogOXladHJ0cmNHa3ZoYmtieVZKdUV0d3p3SjljPQ0KLQ0KLU5hbWU6IE1ha2VmaWxlLmluDQotU0hBMS1EaWdlc3Q6IHhPdjJaKzZlTjJlUVRtbFdLb2d1ZmRrTG9paz0NCi0NCi1OYW1lOiBDT1BZSU5HDQotU0hBMS1EaWdlc3Q6IHFQZytWc2xpVFRCdTlQajVsUXpHT3lOTjYxST0NCi0NCi1OYW1lOiBzcmMvcHRwX29ydGVfcHJveHkuYw0KLVNIQTEtRGlnZXN0OiBjMjZZWENLbXlta2l1ZGlGOGc2NzdKcG00bUk9DQotDQotTmFtZTogbHRtYWluLnNoDQotU0hBMS1EaWdlc3Q6IEZSYlZJV3N5N1gzV1c2Ym1TYzFZWlg3a2lyaz0NCi0NCi1OYW1lOiBkZXBjb21wDQotU0hBMS1EaWdlc3Q6IFhYUWxxY0NLWnNNWGZ4NHhLRytrQ1liL3laWT0NCi0NCi1OYW1lOiBBVVRIT1JTDQotU0hBMS1EaWdlc3Q6IDVVUkh2Z09GTUZ0TGVxUGd3cUZvcUFFaWppMD0NCi0NCi1OYW1lOiBORVdTDQotU0hBMS1EaWdlc3Q6IDJqbWo3bDVyU3cweVZiL3ZsV0FZa0svWUJ3az0NCi0NCi1OYW1lOiBtaXNzaW5nDQotU0hBMS1EaWdlc3Q6IGhPRkpXdXZoQkxwbzhTUzhOZ2JMU2h0ZmJIbz0NCi0NCi1OYW1lOiBzcmMvb3J0ZV9maXh1cC5oDQotU0hBMS1EaWdlc3Q6IHpqZjJ0T1BaRVBPYUhObjVGV1ArM3BZTlZsbz0NCi0NCi1OYW1lOiBhY2xvY2FsLm00DQotU0hBMS1EaWdlc3Q6IC8zNmo0ZXUyUS8raU15Q2xoajhRRWtXSHFIMD0NCi0NCi1OYW1lOiBpbnN0YWxsLXNoDQotU0hBMS1EaWdlc3Q6IEt4Z2w0VVJEOHhtQXFLT29CeDJ6MWdqaVRFMD0NCi0NCi1OYW1lOiBSRUFETUUNCi1TSEExLURpZ2VzdDogM0hOQ3ppSUZERzg4NTdXY1NNOVkwWW04bkFFPQ0KLQ0KLU5hbWU6IGNvbmZpZy5oLmluDQotU0hBMS1EaWdlc3Q6IFpnOU1GaXA2REQ5bmtOK1NtdTNlR2txZXd0TT0NCi0NCi1OYW1lOiBNRVRBLUlORi9lY2xpcHNlLmluZg0KLVNIQTEtRGlnZXN0OiAwOWdOMDV0b2JnUy9NZHRxeVROUWhPaEI3M009DQotDQotTmFtZTogY29uZmlnLnN1Yg0KLVNIQTEtRGlnZXN0OiBiaXh2T2dKclNoamNWVGpnakxwanJYTUpMTzA9DQotDQotTmFtZTogY29uZmlnLnN0YXR1cw0KLVNIQTEtRGlnZXN0OiBuWVVKZ2R4YXdaYkFVVDhQbm41M2xBcUZYMlU9DQotDQotTmFtZTogY29uZmlnLmd1ZXNzDQotU0hBMS1EaWdlc3Q6IHNXQ08xREdJSFpzQWNBVjIybSszNXFLT2RnVT0NCi0NCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L01FVEEtSU5GL2VjbGlwc2UuaW5mIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9NRVRBLUlORi9lY2xpcHNlLmluZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmZmVkMi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L01FVEEtSU5GL2VjbGlwc2UuaW5mCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jUHJvY2Vzc2VkIHVzaW5nIEphcnByb2Nlc3NvcgotcGFjazIwMC5jb25kaXRpb25lZCA9IHRydWUKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvTWFrZWZpbGUuYW0gYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGU0N2E1Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLQotYmluX1BST0dSQU1TID0JcHRwX3NsdXJtX3Byb3h5Ci0KLXB0cF9zbHVybV9wcm94eV9TT1VSQ0VTID0Jc3JjL3B0cF9zbHVybV9wcm94eS5jIHNyYy9zcnVuX29wdC5oIAotcHRwX3NsdXJtX3Byb3h5X0NGTEFHUyA9CSQoQU1fQ0ZMQUdTKQotcHRwX3NsdXJtX3Byb3h5X0NQUEZMQVMgPSAgLUkkKFNMVVJNRElSKS9pbmNsdWRlCi1wdHBfc2x1cm1fcHJveHlfTERGTEFHUyA9IC1MJChTTFVSTURJUikvbGliCi1wdHBfc2x1cm1fcHJveHlfTERBREQgPSAJLWxzbHVybSAtbHB0aHJlYWQKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvTkVXUyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvTkVXUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L05FV1MKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9SRUFETUUgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlOWMzMC4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnByb3h5L1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLVRoaXMgcHJvamVjdCBjb250YWlucyB0aGUgc291cmNlIGNvZGUgb2YgdGhlIFNMVVJNIHByb3h5IHNlcnZlci4gVGhlIGZvbGxvd2luZwotc3RlcHMgYXJlIHVzZWQgdG8gc2V0IHVwIHlvdXIgYnVpbGQgZW52aXJvbm1lbnQgc28gdGhhdCB0aGUgZXhlY3V0YWJsZSB3aWxsIGJlCi1jb3JyZWN0bHkgYnVpbHQgYW5kIGluc3RhbGxlZC4gSW4gb3JkZXIgdG8gdXNlIHRoZSBzZXJ2ZXIgYmluYXJ5LCBpdCBuZWVkcyB0byAKLWJlIGluc3RhbGxlZCBpbiBhIGZyYWdtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgbWFjaGluZSAKLWl0IHdpbGwgYmUgcnVuIG9uLiAKLQotMS4gTWFrZSBzdXJlIHRoZSBTTFVSTSBybXMgaXMgaW5zdGFsbGVkIGFuZCBlbnN1cmUgaXQgd29yayB3ZWxsLiAKLSAgIFRoYXQgaXMsIFNMVVJNIGNtZCB1dGlsaXRpZXMsIHN1Y2ggYXMgInNpbmZvL3NydW4vc3F1ZXVlIiB3b3JrIGFzIGV4cGVjdGVkLgotICAgRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGJ1aWxkIGFuZCBpbnN0YWxsIFNMVVJNLCBzZWUKLSAgIGh0dHA6Ly93d3cubGxubC5nb3YvbGludXgvc2x1cm0vc2x1cm0uaHRtbAotCi0KLTIuIERvd25sb2FkIFBUUCAyLjEgZm9yIHlvdXIgcGxhdGZvcm0uIEFuZCBtb2RpZnkgcHJveHlfYXR0ci5oIHVzaW5nIGxpYnByb3h5LnBhdGNoOgotICAgKDEpIGNvcHkgbGlicHJveHkucGF0Y2ggdG8gJFBUUERJUi9jb3JlL29yZy5lY2xpcHNlLnB0cC5wcm94eQotICAgKDIpIGNkICRQVFBESVIvY29yZS9vcmcuZWNsaXBzZS5wdHAucHJveHkKLSAgICgzKSBwYXRjaCAtcDEgPCBsaWJwcm94eS5wYXRjaAotCi0KLTMuIEJ1aWxkIHRoZSBjb3JyZXNwb25kaW5nICJwcm94eSIgYW5kICJ1dGlscyIgbGlicmFyaWVzIGluICRQVFBESVIvY29yZS9vcmcuZWNsaXBzZS5wdHAucHJveHkgCi0gICBhbmQgJFBUUERJUi9jb3JlL29yZy5lY2xpcHNlLnB0cC51dGlscyBkaXJlY3RvcnkgdXNpbmcgJ2NvbmZpZ3VyZScsICdtYWtlJyBhbmQgJ21ha2UgaW5zdGFsbCcgY29tbWFuZHMuCi0KLQotNC4gVXNlICdjb25maWd1cmUnLCAnbWFrZScgYW5kICdtYWtlIGluc3RhbGwnIHdpdGhpbiB0aGlzIGRpcmVjdG9yeSBmcm9tCi0gICB0aGUgY29tbWFuZCBsaW5lIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBleGVjdXRhYmxlLgotICAgTk9URTogVGhlICdjb25maWd1cmUnIGNvbW1hbmQgTVVTVCByZXF1aXJlICctLXdpdGgtc2x1cm0nIG9wdGlvbiB0byBzcGVjaWZ5IHRoZQotICAgdG9wIGluc3RhbGwgZGlyZWN0b3J5IG9mIFNMVVJNLiBJZiBzdWNoIG9wdGlvbiBpcyBtaXNzZWQsIHRoZSBjb25maWd1cmUgcHJvY2VzcyB3aWxsIGZhaWwuCi0KLQotNS4gSWYgYW55IG9mIHRoZSBhdXRvbWFrZS9hdXRvY29uZiBmaWxlcyBjaGFuZ2VzLCB5b3Ugc2hvdWxkIGp1c3QgbmVlZCB0bwotICAgcnVuICdhdXRvcmVjb25mJyBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIGZpbGVzLgotCi0KLQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9hYm91dC5odG1sIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjgxMDkzLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotPGgyPkFib3V0IFRoaXMgQ29udGVudDwvaDI+Ci0gCi08cD5NYXkgMiwgMjAwNjwvcD4JCi08aDM+TGljZW5zZTwvaDM+Ci0KLTxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+Ci0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuICBJZiBubyBzdWNoIGxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiAgVW5sZXNzIG90aGVyd2lzZQotaW5kaWNhdGVkIGJlbG93LCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmciPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcuPC9wPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9jb25maWcuaC5pbiBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvY29uZmlnLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzEzNGQuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9jb25maWcuaC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByb3h5c3ZyJyBsaWJyYXJ5ICgtbHByb3h5c3ZyKS4gKi8KLSN1bmRlZiBIQVZFX0xJQlBST1hZU1ZSCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2x1cm0nIGxpYnJhcnkgKC1sc2x1cm0pLiAqLwotI3VuZGVmIEhBVkVfTElCU0xVUk0KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGlscycgbGlicmFyeSAoLWx1dGlscykuICovCi0jdW5kZWYgSEFWRV9MSUJVVElMUwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX01FTU9SWV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2x1cm0vc2x1cm1fZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TTFVSTV9TTFVSTV9FUlJOT19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2x1cm0vc2x1cm0uaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TTFVSTV9TTFVSTV9ICi0KLS8qIEVuYWJsZSBTTFVSTSBybXMgc3VwcG9ydC4gKi8KLSN1bmRlZiBIQVZFX1NSVU4KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVERJTlRfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NURExJQl9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NUUklOR1NfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NUUklOR19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfU1RBVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9VTklTVERfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLwotI3VuZGVmIE5PX01JTlVTX0NfTUlOVVNfTwotCi0vKiBOYW1lIG9mIHBhY2thZ2UgKi8KLSN1bmRlZiBQQUNLQUdFCi0KLS8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX05BTUUKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKLQotLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KLQotLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCi0jdW5kZWYgUkVUU0lHVFlQRQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBTVERDX0hFQURFUlMKLQotLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLwotI3VuZGVmIFZFUlNJT04KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvY29uZmlndXJlLmluIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9jb25maWd1cmUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYTU1MDYuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9jb25maWd1cmUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi1kbmwKLWRubAotCi1BQ19QUkVSRVEoWzIuNTBdKQotCi1BQ19JTklUKFtvcmcuZWNsaXBzZS5wdHAuc2x1cm1dLCBbMi4xXSkKLUFDX0NPTkZJR19TUkNESVIoW3NyYy9wdHBfc2x1cm1fcHJveHkuY10pCi0KLUFNX0lOSVRfQVVUT01BS0UoWy1XYWxsIC1XZXJyb3IgZm9yZWlnbl0pCi0KLUFDX0NBTk9OSUNBTF9CVUlMRAotCi1kbmwKLWRubCBFY2xpcHNlIGFkZHMgdmVyc2lvbiBudW1iZXIgdG8gZW5kIG9mIHBhY2thZ2Ugd2hlbiBkZXBsb3lpbmcgdmlhIHVwZGF0ZSBzaXRlCi1kbmwKLQotVVRJTFM9Ii4uLy4uL2NvcmUvb3JnLmVjbGlwc2UucHRwLnV0aWxzIgotaWYgdGVzdCAhIC1kICRVVElMUzsgdGhlbgotCVVUSUxTPSJgZWNobyAke1VUSUxTfV8ke1BBQ0tBR0VfVkVSU0lPTn0uKmAiCi0JaWYgdGVzdCAhIC1kICRVVElMUzsgdGhlbgotCQlBQ19NU0dfRVJST1IoW3V0aWxzIGRpcmVjdG9yeSBub3QgZm91bmRdKQotCWZpCi1maQotCi1QUk9YWT0iLi4vLi4vY29yZS9vcmcuZWNsaXBzZS5wdHAucHJveHkiCi1pZiB0ZXN0ICEgLWQgJFBST1hZOyB0aGVuCi0JUFJPWFk9ImBlY2hvICR7UFJPWFl9XyR7UEFDS0FHRV9WRVJTSU9OfS4qYCIKLQlpZiB0ZXN0ICEgLWQgJFBST1hZOyB0aGVuCi0JCUFDX01TR19FUlJPUihbcHJveHkgZGlyZWN0b3J5IG5vdCBmb3VuZF0pCi0JZmkKLWZpCi0KLWRubCBTTFVSTQotCi1BQ19BUkdfV0lUSChbc2x1cm1dLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXNsdXJtXSwKLQlbU3BlY2lmeSB0aGUgdG9wIGRpciBvZiBpbnN0YWxsZWQgU0xVUk0gcm1zLkA8OkBSRVFVSVJFREA6PkBdKSxbXSxbd2l0aF9zbHVybT1ub10pCi0KLVNMVVJNRElSPQotQVNfSUYoW3Rlc3QgIngkd2l0aF9zbHVybSIgIT0geG5vXSxbQUNfU1VCU1QoW1NMVVJNRElSXSxbJHdpdGhfc2x1cm1dKV0sCi0gICAgICAgQUNfTVNHX0VSUk9SKFtUaGUgdG9wIGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb2YgU0xVUk0gcm1zIG11c3QgYmUgc3BlY2lmaWVkIHZpYSAiLS13aXRoLXNsdXJtPURJUiIuXSkpCi0KLQotZG5sCi1kbmwgQ2hlY2sgZm9yIHByb2dyYW1zLgotZG5sCi0KLUFDX1BST0dfQ0MKLUFNX1BST0dfQ0NfQ19PCi1BQ19QUk9HX0lOU1RBTEwKLUFDX1BST0dfTUFLRV9TRVQKLUFDX1BST0dfUkFOTElCCi0KLUNGTEFHUz0iJENGTEFHUyAtV2FsbCAtSSRVVElMUy9pbmNsdWRlIC1JJFBST1hZL2luY2x1ZGUgLUkkU0xVUk1ESVIvaW5jbHVkZSIKLUxJQlM9IiRMSUJTIC1MJFVUSUxTIC1MJFBST1hZIC1MJFNMVVJNRElSL2xpYiIKLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkkU0xVUk1ESVIvaW5jbHVkZSIKLQotZG5sCi1kbmwgQ2hlY2sgZm9yIGxpYnJhcmllcy4KLWRubAotCi1BQ19DSEVDS19MSUIoW3V0aWxzXSwgW2JpdHNldF9uZXddKQotQUNfQ0hFQ0tfTElCKFtwcm94eXN2cl0sIFtwcm94eV9zdnJfaW5pdF0pCi1BQ19DSEVDS19MSUIoW3NsdXJtXSxbc2x1cm1fcGluZ10sW10sCi0JCQlbQUNfTVNHX0VSUk9SKFtsaWJzbHVybS5zby8uYSBub3QgZm91bmQuIE1ha2Ugc3VyZSAtLXdpdGgtc2x1cm0gc3BlY2lmeSBjb3JyZWN0IGRpci5dKV0pCi0KLWRubAotZG5sIENoZWNrIGZvciBoZWFkZXIgZmlsZXMuCi1kbmwKLQotQUNfSEVBREVSX1NUREMKLUFDX0NIRUNLX0hFQURFUlMoW3NsdXJtL3NsdXJtLmggc2x1cm0vc2x1cm1fZXJybm8uaF0sW10sCi0JCQkJW0FDX01TR19FUlJPUihbc2x1cm0uaCBvciBzbHVybV9lcnJuby5oIG5vdCBmb3VuZF0pXSkKLQotZG5sCi1kbmwgQ2hlY2sgZm9yIHR5cGVzCi1kbmwKLUFDX1RZUEVfU0lHTkFMCi0KLUFDX1BBVEhfUFJPRyhTUlVOLCBbc3J1bl0sIG5vKQotaWYgdGVzdCAiJGFjX2N2X3BhdGhfU1JVTiIgIT0gbm87IHRoZW4KLQlBQ19ERUZJTkUoW0hBVkVfU1JVTl0sWzFdLFtFbmFibGUgU0xVUk0gcm1zIHN1cHBvcnQuXSkKLWVsc2UKLQlBQ19NU0dfRVJST1IoW3NydW4gY29tbWFuZCBub3QgZm91bmQuIE1ha2Ugc3VyZSBTTFVSTSBybXMgaW5zdGFsbGVkLl0pCi1maQotCi0KLUFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCi1BQ19DT05GSUdfRklMRVMoW01ha2VmaWxlXSkKLUFDX09VVFBVVApkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9saWJwcm94eS5wYXRjaCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvbGlicHJveHkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NjBhNDUuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9saWJwcm94eS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLWRpZmYgLXVOciBvcmcuZWNsaXBzZS5wdHAucHJveHkvaW5jbHVkZS9wcm94eV9hdHRyLmggb3JnLmVjbGlwc2UucHRwLnByb3h5X3NsdXJtL2luY2x1ZGUvcHJveHlfYXR0ci5oCi0tLS0gb3JnLmVjbGlwc2UucHRwLnByb3h5L2luY2x1ZGUvcHJveHlfYXR0ci5oCTIwMDktMDQtMTQgMTU6MDg6MjkuMDAwMDAwMDAwICswODAwCi0rKysgb3JnLmVjbGlwc2UucHRwLnByb3h5X3NsdXJtL2luY2x1ZGUvcHJveHlfYXR0ci5oCTIwMDktMDQtMTQgMTU6MTI6NDAuMDAwMDAwMDAwICswODAwCi1AQCAtNTYsMTAgKzU2LDEyIEBACi0gICogTm9kZSBhdHRyaWJ1dGVzCi0gICovCi0gI2RlZmluZSBOT0RFX1NUQVRFX0FUVFIJCQkJIm5vZGVTdGF0ZSIKLSsjaWZuZGVmIEhBVkVfU0xVUk1fU0xVUk1fSAotICNkZWZpbmUgCU5PREVfU1RBVEVfVVAJCQkJIlVQIgotICNkZWZpbmUgCU5PREVfU1RBVEVfRE9XTgkJCQkiRE9XTiIKLSAjZGVmaW5lIAlOT0RFX1NUQVRFX0VSUk9SCQkJIkVSUk9SIgotICNkZWZpbmUgCU5PREVfU1RBVEVfVU5LTk9XTgkJCSJVTktOT1dOIgotKyNlbmRpZgotICNkZWZpbmUgTk9ERV9OVU1CRVJfQVRUUgkJCSJub2RlTnVtYmVyIgotICNpZmRlZiBIQVZFX1NZU19CUFJPQ19ICi0gI2RlZmluZSBOT0RFX0dST1VQX0FUVFIJCQkJIm5vZGVHcm91cCIKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0ucHJveHkvc3JjL3B0cF9zbHVybV9wcm94eS5jIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9zcmMvcHRwX3NsdXJtX3Byb3h5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ODI4ODguLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5wcm94eS9zcmMvcHRwX3NsdXJtX3Byb3h5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgCi0gKiBTY2hvb2wgb2YgQ29tcHV0ZXIsIE5hdGlvbmFsIFVuaXZlcnNpdHkgb2YgRGVmZW5zZSBUZWNobm9sb2d5LCBQLlIuQ2hpbmEKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIAkJSmllIEppYW5nIDxqaWFuZ2ppZUBudWR0LmVkdS5jbj4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpZm5kZWYgU0xVUk1fUFJPWFkKLSNkZWZpbmUgU0xVUk1fUFJPWFkgCi0jZW5kaWYgCi0KLQotI2lmZGVmIF9fZ251X2xpbnV4X18KLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSNlbmRpZiAvKiBfX2dudV9saW51eF9fICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGdldG9wdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdycC5oPgotI2luY2x1ZGUgPHB3ZC5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+ICAgICAgIAotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaWJnZW4uaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9pcGMuaD4KLSNpbmNsdWRlIDxzeXMvc2htLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotCi0jaW5jbHVkZSAicHJveHkuaCIKLSNpbmNsdWRlICJwcm94eV90Y3AuaCIKLSNpbmNsdWRlICJoYW5kbGVyLmgiCi0jaW5jbHVkZSAibGlzdC5oIgotI2luY2x1ZGUgImFyZ3MuaCIKLSNpbmNsdWRlICJyYW5nZXNldC5oIgotI2luY2x1ZGUgInNsdXJtL3NsdXJtLmgiCi0jaW5jbHVkZSAic3J1bl9vcHQuaCIKLQotCi0jZGVmaW5lIFBUUF9KT0JJRCAJCQkwCi0jZGVmaW5lIFNMVVJNX0pPQklEIAkJMQotI2RlZmluZSBERUJVR19KT0JJRCAJCTIKLSNkZWZpbmUgSk9CSURfSU5JVCAJCQkwCi0jZGVmaW5lIEpPQklEX0ZBSUwgCQkJLTEKLSNkZWZpbmUgTUFYX1RIUkVBRFMgCQk2MAotI2RlZmluZSBDT1JFX0lOVkFMSUQgICAJCS0xCi0jZGVmaW5lIENPUkVfREVGQVVMVCAJCTAKLSNkZWZpbmUgTUFYX0JVRl9TSVpFIAkJODE5MiAKLSNkZWZpbmUgTUFYX1NSVU5fQVJHX05VTSAJMjU2Ci0jZGVmaW5lIEFMTF9KT0JTVEFURQkJLTEKLS8qCi0gKiBOZWVkIHRvIHVuZGVmIHRoZXNlIGlmIHdlIGluY2x1ZGUKLSAqIHR3byBjb25maWcuaCBmaWxlcwotICovCi0jdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKLSN1bmRlZiBQQUNLQUdFX05BTUUKLSN1bmRlZiBQQUNLQUdFX1NUUklORwotI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQotI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgotCi0jZGVmaW5lIFdJUkVfUFJPVE9DT0xfVkVSU0lPTgkiMi4wIgotI2RlZmluZSBERUZBVUxUX0hPU1QJCQkibG9jYWxob3N0IgotI2RlZmluZSBERUZBVUxUX1BST1hZCQkJInRjcCIKLQotLyoKLSAqIFByb3h5IHNlcnZlciBzdGF0ZXMuIFRoZSBTSFVUVElOR19ET1dOIHN0YXRlIGlzIHVzZWQgdG8KLSAqIGdpdmUgdGhlIHByb3h5IGEgY2hhbmNlIHRvIHNlbmQgYW55IHBlbmRpbmcgZXZlbnRzIG9uY2UKLSAqIGEgUVVJVCBjb21tYW5kIGhhcyBiZWVuIHJlY2VpdmVkLgotICovCi0jZGVmaW5lIFNUQVRFX0lOSVQJCQkwCi0jZGVmaW5lIFNUQVRFX1JVTk5JTkcJCTEKLSNkZWZpbmUgU1RBVEVfU0hVVFRJTkdfRE9XTgkyCi0jZGVmaW5lIFNUQVRFX1NIVVRET1dOCQkzCi0KLQotLyoKLSAqIFJURVYgY29kZXMgbXVzdCBFWEFDVExZIG1hdGNoIG9yZy5lY2xpcHNlLnB0cC5ydHN5c3RlbS5wcm94eS5ldmVudC5JUHJveHlSdW50aW1lRXZlbnQKLSAqLwotI2RlZmluZSBSVEVWX09GRlNFVAkJCQkJCTIwMAotI2RlZmluZSBSVEVWX0VSUk9SX1NMVVJNX0lOSVQJCQlSVEVWX09GRlNFVCArIDEwMDAKLSNkZWZpbmUgUlRFVl9FUlJPUl9TTFVSTV9GSU5BTElaRQkJUlRFVl9PRkZTRVQgKyAxMDAxCi0jZGVmaW5lIFJURVZfRVJST1JfU0xVUk1fU1VCTUlUCQkJUlRFVl9PRkZTRVQgKyAxMDAyCi0jZGVmaW5lIFJURVZfRVJST1JfSk9CCQkJCQlSVEVWX09GRlNFVCArIDEwMDMKLSNkZWZpbmUgUlRFVl9FUlJPUl9OQVRUUgkJCQlSVEVWX09GRlNFVCArIDEwMDcKLS8vI2RlZmluZSBSVEVWX0VSUk9SX09SVEVfQlBST0NfU1VCU0NSSUJFCVJURVZfT0ZGU0VUICsgMTAwOAotI2RlZmluZSBSVEVWX0VSUk9SX1NJR05BTAkJCQlSVEVWX09GRlNFVCArIDEwMDkKLQotLyoKLSAqIFF1ZXVlIGF0dHJpYnV0ZXMKLSAqLwotI2RlZmluZSBERUZBVUxUX1FVRVVFX05BTUUJCQkiZGVmYXVsdCIKLSNkZWZpbmUgU0xVUk1fSk9CX05BTUVfRk1UCQkJImpvYiUwMmQiCi0KLSNkZWZpbmUgTUFYX1JFVFJJRVMgCQkJCTEwMAotI2RlZmluZSBKT0JfVVBEQVRFX1RJTUVSIAkJCTEKLSNkZWZpbmUgTk9ERV9VUERBVEVfVElNRVIgCQkJMgotI2RlZmluZSBKT0JfVVBEQVRFX1RJTUVPVVQJCQk1MDAwMDAgCS8qdXNlYyovCi0jZGVmaW5lIE5PREVfVVBEQVRFX1RJTUVPVVQJCQk1MDAwMDAwIC8qdXNlYyovCi0KLS8qIFNMVVJNIGpvYiBzdGF0ZSBhbmQgYXR0cmlidXRlcyAqLwotI2RlZmluZQlTTFVSTV9KT0JfU1RBVEVfUEVORElORwkJCSJQRU5ESU5HIgotI2RlZmluZQlTTFVSTV9KT0JfU1RBVEVfUlVOTklORwkJCSJSVU5OSU5HIgotI2RlZmluZQlTTFVSTV9KT0JfU1RBVEVfU1VTUEVOREVECQkiU1VTUEVOREVEIgotI2RlZmluZSBTTFVSTV9KT0JfU1RBVEVfVEVSTUlOQVRFRAkJIlRFUk1JTkFURUQiCi0jZGVmaW5lCVNMVVJNX0pPQl9TVEFURV9DT01QTEVURQkJU0xVUk1fSk9CX1NUQVRFX1RFUk1JTkFURUQKLSNkZWZpbmUgU0xVUk1fSk9CX1NUQVRFX0NBTkNFTExFRAkJIkNBTkNFTExFRCIKLSNkZWZpbmUJU0xVUk1fSk9CX1NUQVRFX0ZBSUxFRAkJICAJIkZBSUxFRCIKLSNkZWZpbmUJU0xVUk1fSk9CX1NUQVRFX1RJTUVPVVQJCSAgCSJUSU1FT1VUIgotI2RlZmluZQlTTFVSTV9KT0JfU1RBVEVfTk9ERUZBSUwJCSJOT0RFRkFJTCIKLQotI2RlZmluZSBTTFVSTV9KT0JfU1VCX0lEX0FUVFIJCQkJImpvYlN1YklkIgotI2RlZmluZSBTTFVSTV9KT0JfTlVNX1BST0NTX0FUVFIJCQkiam9iTnVtUHJvY3MiIAkvLy1uCi0jZGVmaW5lIFNMVVJNX0pPQl9OVU1fTk9ERVNfQVRUUgkJCSJqb2JOdW1Ob2RlcyIgCS8vLU4KLSNkZWZpbmUgU0xVUk1fSk9CX1RJTUVfTElNSVRfQVRUUgkJCSJqb2JUaW1lTGltaXQiCS8vLXQKLSNkZWZpbmUgU0xVUk1fSk9CX1BBUlRJVElPTl9BVFRSCQkJImpvYlBhcnRpdGlvbiIgCS8vLXAKLSNkZWZpbmUgU0xVUk1fSk9CX0lEX0FUVFIJCQkJCSJqb2JJZCIgICAgICAgIAkvLy0tam9iaWQKLSNkZWZpbmUgU0xVUk1fSk9CX05PREVMSVNUX0FUVFIJCQkJImpvYk5vZGVMaXN0IiAgCS8vLXcKLSNkZWZpbmUgU0xVUk1fSk9CX1RZUEVfQVRUUgkJCQkJImpvYlR5cGUiICAgICAgCS8vLS1qb2J0eXBlCi0jZGVmaW5lIFNMVVJNX0pPQl9JT0xBQkVMX0FUVFIJCQkJImpvYklvTGFiZWwiICAgCS8vLWwKLSNkZWZpbmUgU0xVUk1fSk9CX1ZFUkJPU0VfQVRUUgkJCQkiam9iVmVyYm9zZSIgICAJLy8tdgotI2RlZmluZSBTTFVSTV9KT0JfRVhFQ19OQU1FX0FUVFIJCQkiZXhlY05hbWUiCi0jZGVmaW5lIFNMVVJNX0pPQl9FWEVDX1BBVEhfQVRUUgkJCSJleGVjUGF0aCIKLSNkZWZpbmUgU0xVUk1fSk9CX1dPUktJTkdfRElSX0FUVFIJCQkid29ya2luZ0RpciIKLSNkZWZpbmUgU0xVUk1fSk9CX1BST0dfQVJHU19BVFRSCQkJInByb2dBcmdzIgotI2RlZmluZSBTTFVSTV9KT0JfRU5WX0FUVFIJCQkJCSJlbnYiCi0jZGVmaW5lIFNMVVJNX0pPQl9ERUJVR19FWEVDX05BTUVfQVRUUgkJImRlYnVnRXhlY05hbWUiCi0jZGVmaW5lIFNMVVJNX0pPQl9ERUJVR19FWEVDX1BBVEhfQVRUUgkJImRlYnVnRXhlY1BhdGgiCi0jZGVmaW5lIFNMVVJNX0pPQl9ERUJVR19BUkdTX0FUVFIJCQkiZGVidWdBcmdzIgotI2RlZmluZSBTTFVSTV9KT0JfREVCVUdfRkxBR19BVFRSCQkJImRlYnVnIgotCi0vKiBTTFVSTSBub2RlIHN0YXRlIGFuZCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIFNMVVJNX05PREVfU1RBVEVfVU5LTk9XTgkJIlVOS05PV04iCi0jZGVmaW5lIFNMVVJNX05PREVfU1RBVEVfRE9XTgkJCSJET1dOIgotI2RlZmluZSBTTFVSTV9OT0RFX1NUQVRFX0lETEUJCQkiVVAiCi0jZGVmaW5lCVNMVVJNX05PREVfU1RBVEVfQUxMT0NBVEVECQkiQUxMT0NBVEVEIgotI2RlZmluZSBTTFVSTV9OT0RFX0VYVFJBX1NUQVRFX0FUVFIJCSJub2RlRXh0cmFTdGF0ZSIKLSNkZWZpbmUgU0xVUk1fTk9ERV9OVU1CRVJfQVRUUgkJCSJub2RlTnVtYmVyIgotI2RlZmluZSBTTFVSTV9OT0RFX1NPQ0tFVFNfQVRUUgkJCSJzb2NrTnVtYmVyIgotI2RlZmluZSBTTFVSTV9OT0RFX0NPUkVTX0FUVFIJCQkiY29yZU51bWJlciIKLSNkZWZpbmUgU0xVUk1fTk9ERV9USFJFQURTX0FUVFIJCQkidGhyZWFkTnVtYmVyIgotI2RlZmluZSBTTFVSTV9OT0RFX0FSQ0hfQVRUUgkJCSJjcHVBcmNoIgotI2RlZmluZSBTTFVSTV9OT0RFX09TX0FUVFIJCQkJIk9TIgotCi0jZGVmaW5lIEVYSVRfSk9CX0FMTE9DX0ZBSUwJCS0xCi0jZGVmaW5lIEVYSVRfSk9CX0lPVEhSRUFEX0ZBSUwJLTIKLSNkZWZpbmUgRVhJVF9FWEVDX0ZBSUwJCQktMwotCi0KLXN0cnVjdCBzeW5jX21zZyB7Ci0JaW50CQlzbHVybV9qb2JpZDsKLQlib29sIAlqb2JpZF9zZXQ7Ci0JYm9vbAlpb19yZWFkeTsKLX07Ci10eXBlZGVmIHN0cnVjdCBzeW5jX21zZyBzeW5jX21zZzsKLQotc3RydWN0IHB0cF9tYWNoaW5lIHsKLQlpbnQJCWlkOwotCUxpc3QgKglub2RlczsKLX07Ci10eXBlZGVmIHN0cnVjdCBwdHBfbWFjaGluZQlwdHBfbWFjaGluZTsKLQotc3RydWN0IHB0cF9zbHVybV9ub2RlIHsKLQlpbnQgCQlpZDsgIAkvKiBtb2RlbCBlbGVtZW50IGlkLCBnZW5lcmF0ZWQgYnkgcHJveHkgYWdlbnQgKi8KLQlpbnQJCQludW1iZXI7CS8qIG5vZGUgbnVtYmVyLCBhc3NpZ25lZCBieSBTTFVSTSAqLwotCWNoYXIgKgkJbmFtZTsKLQl1aW50MTZfdAlzdGF0ZTsgCS8qICh1aW50MTZfdClub2RlX2luZm9fdC5zdGF0ZSwgY29udmVydGVkIHRvIChjaGFyICopICAqLwotCXVpbnQxNl90IAlzb2NrZXRzOwotCXVpbnQxNl90IAljb3JlczsKLQl1aW50MTZfdCAJdGhyZWFkczsKLQljaGFyICoJCWFyY2g7Ci0JY2hhciAqCQlvczsKLX07Ci10eXBlZGVmIHN0cnVjdCBwdHBfc2x1cm1fbm9kZQlwdHBfbm9kZTsKLQotc3RydWN0IHB0cF9zbHVybV9wcm9jZXNzIHsKLQlpbnQJCWlkOwotCWludAkJbm9kZV9pZDsKLQlpbnQJCXRhc2tfaWQ7IC8qIE1QSSByYW5rICovCi0JaW50CQlwaWQ7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgcHRwX3NsdXJtX3Byb2Nlc3MJcHRwX3Byb2Nlc3M7Ci0KLXN0cnVjdCBwdHBfc2x1cm1fam9iIHsKLQlpbnQgCQkJCXB0cF9qb2JpZDsJCS8qIGpvYiBJRCBhcyBrbm93biBieSBQVFAgKi8KLQlpbnQgCQkJCXNsdXJtX2pvYmlkOwkvKiBqb2IgSUQgdGhhdCB3aWxsIGJlIHVzZWQgYnkgcHJvZ3JhbSB3aGVuIGl0IHN0YXJ0cyAqLwotCWJvb2wJCQkJbmVlZF9hbGxvYzsJCS8qIG5lZWQgdG8gYWxsb2NhdGUgbmV3IHJlc291cmNlICovCi0JaW50CQkJCQlkZWJ1Z19qb2JpZDsKLQlpbnQJCQkJCW51bV9wcm9jczsJCS8qIG51bWJlciBvZiBwcm9jcyByZXF1ZXN0ZWQgZm9yIHByb2dyYW0gKGRlYnVnZ2VyOiBudW1fcHJvY3MrMSkgKi8KLQlpbnQJCQkJCXN0YXRlOwkJCS8qIGpvYiBzdGF0ZShzbHVybSBkZWZpbml0aW9uKSAqLwotCXBpZF90CQkJCXNydW5fcGlkOwkJLyogcGlkIG9mIHRoZSBzcnVuIHByb2Nlc3MgKi8KLQlib29sCQkJCWRlYnVnOwkJCS8qIGpvYiBpcyBkZWJ1ZyBqb2IgKi8KLQlib29sIAkJCQlhdHRhY2g7CQkJLyogYXR0YWNoIGRlYnVnICovCi0JaW50CQkJCQlmZF9lcnI7CQkJLyogZmQgb2YgcGlwZSBmb3Igc3J1bidzIHN0ZGVyciAqLwotCWludAkJCQkJZmRfb3V0OwkJCS8qIGZkIG9mIHBpcGUgZm9yIHNydW4ncyBzdGRvdXQgKi8KLQlpbnQJCQkJCWlvdGhyZWFkX2lkOwkvKiBpZCBvZiB0aHJlYWQgZm9yd2FyZGluZyBzcnVuJ3Mgc3RkaW8gKi8KLQlib29sCQkJCWlvdGhyZWFkX2V4aXRfcmVxOyAvKiByZXF1ZXN0IGlvdGhyZWFkIHRvIGV4aXQgKi8KLQlib29sCQkJCWlvdGhyZWFkX2V4aXQ7ICAvKiBmbGFnIGluaWRpY2F0aW9uIGlvdGhyZWFkIGhhcyBleGl0ZWQgICovCi0JYm9vbAkJCQlyZW1vdmFibGU7Ci0JcHRwX3Byb2Nlc3MgKiogIAlwcm9jczsJCQkvKiBwcm9jcyBvZiB0aGlzIGpvYiAqLwotCXJhbmdlc2V0ICogCQkJc2V0OwkJCS8qIHJhbmdlIHNldCBvZiBwcm9jIElEICovCi19OwotdHlwZWRlZiBzdHJ1Y3QgcHRwX3NsdXJtX2pvYiBwdHBfam9iOwotCi10eXBlZGVmIHN0cnVjdCBzbHVybWN0bGRfY29tbV9hZGRyIHsKLQljaGFyICogaG9zdG5hbWU7Ci0JdWludDE2X3QgcG9ydDsKLX1zbHVybWN0bGRfY29tbV9hZGRyX3Q7Ci0KLXR5cGVkZWYgdm9pZCBTaWdGdW5jKGludCk7Ci10eXBlZGVmIGludDMyX3Qgc2x1cm1fZmQ7Ci0KLQotc3RhdGljIGludCBTTFVSTV9Jbml0aWFsaXplKGludCwgaW50LCBjaGFyICoqKTsKLXN0YXRpYyBpbnQgU0xVUk1fTW9kZWxEZWYoaW50LCBpbnQsIGNoYXIgKiopOwotc3RhdGljIGludCBTTFVSTV9TdGFydEV2ZW50cyhpbnQsIGludCwgY2hhciAqKik7Ci1zdGF0aWMgaW50IFNMVVJNX1N0b3BFdmVudHMoaW50LCBpbnQsIGNoYXIgKiopOwotc3RhdGljIGludCBTTFVSTV9TdWJtaXRKb2IoaW50LCBpbnQsIGNoYXIgKiopOwotc3RhdGljIGludCBTTFVSTV9UZXJtaW5hdGVKb2IoaW50LCBpbnQsIGNoYXIgKiopOwotc3RhdGljIGludCBTTFVSTV9RdWl0KGludCwgaW50LCBjaGFyICoqKTsKLQotc3RhdGljIEZJTEUgKiBpbml0X2xvZ2ZwKCk7Ci1zdGF0aWMgdm9pZCBkZWJ1Z19sb2coRklMRSAqIGZwLCBjaGFyICogZm10LC4uLik7Ci1zdGF0aWMgdm9pZCAqIHNydW5fb3V0cHV0X2ZvcndhcmRpbmcodm9pZCAqIGFyZyk7Ci1zdGF0aWMgYm9vbCBqb2JfdXBkYXRlX3RpbWVvdXQoKTsKLXN0YXRpYyB2b2lkIHVwZGF0ZV9qb2Jfc3RhdGUoaW50IHNsdXJtX2pvYmlkKTsKLXN0YXRpYyBib29sIG5vZGVfdXBkYXRlX3RpbWVvdXQoKTsKLXN0YXRpYyB2b2lkIHVwZGF0ZV9ub2RlX3N0YXRlKCk7Ci1zdGF0aWMgaW50IGNyZWF0ZV9ub2RlX2xpc3QocHRwX21hY2hpbmUgKm1hY2gpOwotc3RhdGljIHZvaWQgaW5pdF9qb2JfdGltZXIoKTsKLXN0YXRpYyB2b2lkIGluaXRfbm9kZV90aW1lcigpOwotCi1zdGF0aWMgc3RydWN0IHRpbWV2YWwgCQlqb2JfdXBkYXRlX3RpbWVyOwotc3RhdGljIHN0cnVjdCB0aW1ldmFsCQlub2RlX3VwZGF0ZV90aW1lcjsKLXN0YXRpYyBzeW5jX21zZyAqCQkJc3luY19tc2dfYWRkcjsKLXN0YXRpYyBGSUxFICogCQkJCWxvZ2ZwOwotc3RhdGljIGludCAJCQkJCWRlc3Ryb3lfam9iID0gMDsgLyogam9iIGFsbG9jYXRpb24gY2FuY2VsbGVkIGJ5IHNpZ25hbCAqLwotc3RhdGljIGJvb2wgCQkJCWVuYWJsZV9zdGF0ZV91cGRhdGUgPSBmYWxzZTsKLXN0YXRpYyAJc3J1bl9vcHRfdAkJCW9wdDsKLXN0YXRpYyBhbGxvY2F0aW9uX21zZ190aHJlYWRfdCogbXNnX3RociA9IE5VTEw7Ci1zdGF0aWMgc2x1cm1jdGxkX2NvbW1fYWRkcl90IHNsdXJtY3RsZF9jb21tX2FkZHI7Ci1zdGF0aWMgaW50CQkJZ1RyYW5zSUQgPSAwOyAvKiB0cmFuc2FjdGlvbiBpZCBmb3Igc3RhcnQgb2YgZXZlbnQgc3RyZWFtLCBpcyAwIHdoZW4gZXZlbnRzIGFyZSBvZmYgKi8KLXN0YXRpYyBpbnQJCQlnQmFzZUlEID0gLTE7IC8qIGJhc2UgSUQgZm9yIGV2ZW50IGdlbmVyYXRpb24gKi8KLXN0YXRpYyBpbnQJCQlnTGFzdElEID0gMTsgIC8qIElEIGdlbmVyYXRvciAqLwotc3RhdGljIGludAkJCWdRdWV1ZUlEOyAgICAgLyogSUQgb2YgZGVmYXVsdCBxdWV1ZSAqLwotc3RhdGljIGludCAJCQlwcm94eV9zdGF0ZSA9IFNUQVRFX0lOSVQ7Ci1zdGF0aWMgcHJveHlfc3ZyICoJc2x1cm1fcHJveHk7Ci1zdGF0aWMgTGlzdCAqCQlnSm9iTGlzdDsKLXN0YXRpYyBMaXN0ICoJCWdNYWNoaW5lTGlzdDsKLXN0YXRpYyBpbnQJCQlwdHBfc2lnbmFsX2V4aXQgPSAwOzsKLQotCi1zdGF0aWMgcHJveHlfc3ZyX2hlbHBlcl9mdW5jcyBoZWxwZXJfZnVuY3MgPSB7Ci0JTlVMTCwJCQkJCS8vIG5ld2Nvbm4oKSAtIGNhbiBiZSB1c2VkIHRvIHJlamVjdCBjb25uZWN0aW9ucwotCU5VTEwJCQkJCS8vIG51bXNlcnZlcnMoKSAtIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzZXJ2ZXJzLCByZXR1cm4gdGhlIG51bWJlcgotfTsKLQotI2RlZmluZSBDTURfQkFTRQkwCi1zdGF0aWMgcHJveHlfY21kCWNtZHNbXSA9IHsKLQlTTFVSTV9RdWl0LAotCVNMVVJNX0luaXRpYWxpemUsCi0JU0xVUk1fTW9kZWxEZWYsCi0JU0xVUk1fU3RhcnRFdmVudHMsCi0JU0xVUk1fU3RvcEV2ZW50cywKLQlTTFVSTV9TdWJtaXRKb2IsCi0JU0xVUk1fVGVybWluYXRlSm9iCi19OwotCi1zdGF0aWMgcHJveHlfY29tbWFuZHMgY29tbWFuZF90YWIgPSB7Ci0JQ01EX0JBU0UsCi0Jc2l6ZW9mKGNtZHMpL3NpemVvZihwcm94eV9jbWQpLAotCWNtZHMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7Ci0JeyJwcm94eSIsCQkJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsIAknUCd9LCAKLQl7InBvcnQiLAkJCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLCAJJ3AnfSwgCi0JeyJob3N0IiwJCQlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwgCSdoJ30sIAotCXtOVUxMLAkJCQkwLAkJCQkJTlVMTCwJMH0KLX07Ci0KLQotLyogCi0gKiBJZiB0aGUgbG9nIGZpbGUgaXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIEZJTEUgcG9pbnRlci4KLSAqIE90aGVyd2lzZSwgZGVmYXVsdCB0byBzdGRlcnIuCi0gKi8KLXN0YXRpYyBGSUxFICogCi1pbml0X2xvZ2ZwKCkKLXsKLQlGSUxFICogZnAgPSBzdGRlcnI7Ci0JY2hhciAqIGxvZ2RpcjsKLQljaGFyICogbG9nZmlsZTsKLQlpbnQgICAgcmM7Ci0JCi0JaWYgKChsb2dkaXIgPSBnZXRlbnYoIlBUUF9TTFVSTV9QUk9YWV9MT0dESVIiKSkgPT0gTlVMTCkKLQkJcmV0dXJuIGZwOwotCQotCXJjID0gYWNjZXNzKGxvZ2RpciwgUl9PS3xXX09LKTsKLQlpZiAocmMgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiUGxlYXNlIGVuc3VyZSB0aGUgRElSICVzIGV4aXN0cyBhbmQgeW91IGNhbiBSRUFEL1dSSVRFIGl0IVxuIiwgbG9nZGlyKTsKLQkJcmV0dXJuIGZwOwotCX0KLQlhc3ByaW50ZigmbG9nZmlsZSwiJXMvcHRwX3Byb3h5LmxvZyIsbG9nZGlyKTsKLQlmcCA9IGZvcGVuKGxvZ2ZpbGUsIncrIik7Ci0JaWYoZnAgPT0gTlVMTCkgCi0JCWZwID0gc3RkZXJyOwotCWZyZWUobG9nZmlsZSk7Ci0KLQlyZXR1cm4gZnA7Ci19Ci0KLS8qCi0gKiBXcml0ZSBkZWJ1ZyBpbmZvIGludG8gbG9nZmlsZS4KLSAqLwotc3RhdGljIHZvaWQKLWRlYnVnX2xvZyhGSUxFICogZnAsIGNoYXIgKiBmbXQsLi4uKQotewotCXZhX2xpc3QgdmE7Ci0KLQlpZiAoZnAgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JdmFfc3RhcnQodmEsIGZtdCk7Ci0JdmZwcmludGYoZnAsIGZtdCwgdmEpOwotCWZmbHVzaChmcCk7Ci0JdmFfZW5kKHZhKTsKLQotCXJldHVybjsKLX0KLQotLyoKLSAqIEdlbmVyYXRlIGEgbW9kZWwgZWxlbWVudCBJRC4KLSAqLwotc3RhdGljIGludAotZ2VuZXJhdGVfaWQodm9pZCkKLXsKLQlyZXR1cm4gZ0Jhc2VJRCArIGdMYXN0SUQrKzsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBtYWNoaW5lLgotICovCi1zdGF0aWMgcHRwX21hY2hpbmUgKgotbmV3X21hY2hpbmUoKQotewotCXB0cF9tYWNoaW5lICoJbSA9IChwdHBfbWFjaGluZSAqKW1hbGxvYyhzaXplb2YocHRwX21hY2hpbmUpKTsKLQltLT5pZCA9IGdlbmVyYXRlX2lkKCk7Ci0JbS0+bm9kZXMgPSBOZXdMaXN0KCk7Ci0gICAgQWRkVG9MaXN0KGdNYWNoaW5lTGlzdCwgKHZvaWQgKiltKTsKLQotICAgIHJldHVybiBtOwotfQotCi0vKgotICogQ29udmVydCBTTFVSTSBub2RlIHN0YXRlIGNvZGUgKHVpbnQxNl90KSB0byBTVFJJTkcuCi0gKi8KLXN0YXRpYyBjaGFyICogCi1ub2Rlc3RhdGVfdG9fc3RyaW5nKHVpbnQxNl90IHNsdXJtX25vZGVfc3RhdGUpCi17Ci0JY2hhciAqIHN0ciA9IE5VTEw7Ci0KLQlzd2l0Y2ggKHNsdXJtX25vZGVfc3RhdGUgJiBOT0RFX1NUQVRFX0JBU0UpIHsKLQkJY2FzZSBOT0RFX1NUQVRFX1VOS05PV046Ci0JCQlzdHIgPSAgU0xVUk1fTk9ERV9TVEFURV9VTktOT1dOOwotCQkJYnJlYWs7Ci0JCWNhc2UgIE5PREVfU1RBVEVfRE9XTjoKLQkJCXN0ciA9ICBTTFVSTV9OT0RFX1NUQVRFX0RPV047Ci0JCQlicmVhazsKLQkJY2FzZSAgTk9ERV9TVEFURV9JRExFOgotCQkJc3RyID0gIFNMVVJNX05PREVfU1RBVEVfSURMRTsKLQkJCWJyZWFrOwotCQljYXNlIE5PREVfU1RBVEVfQUxMT0NBVEVEOgotCQkJc3RyID0gIFNMVVJNX05PREVfU1RBVEVfQUxMT0NBVEVEOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzdHIgPSBTTFVSTV9OT0RFX1NUQVRFX1VOS05PV047Ci0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gc3RyOwotfQotCi0vKgotICogQ29udmVydCBTTFVSTSBqb2Igc3RhdGUgY29kZSh1aW50MTZfdCkgdG8gU1RSSU5HLgotICovCi1zdGF0aWMgY2hhciAqCi1qb2JzdGF0ZV90b19zdHJpbmcodWludDE2X3Qgc2x1cm1fam9iX3N0YXRlKQotewotCWNoYXIgKiBzdHIgPSBOVUxMOwotCi0Jc3dpdGNoIChzbHVybV9qb2Jfc3RhdGUgJiAofkpPQl9DT01QTEVUSU5HKSkgewotCQljYXNlIEpPQl9QRU5ESU5HOgotCQkJc3RyID0gU0xVUk1fSk9CX1NUQVRFX1BFTkRJTkc7IAotCQkJYnJlYWs7Ci0JCWNhc2UgSk9CX1JVTk5JTkc6Ci0JCQlzdHIgPSBTTFVSTV9KT0JfU1RBVEVfUlVOTklORzsKLQkJCWJyZWFrOwotCQljYXNlIEpPQl9TVVNQRU5ERUQ6Ci0JCQlzdHIgPSBTTFVSTV9KT0JfU1RBVEVfU1VTUEVOREVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgSk9CX0NPTVBMRVRFOgotCQkJc3RyID0gU0xVUk1fSk9CX1NUQVRFX0NPTVBMRVRFOyAKLQkJCWJyZWFrOwotCQljYXNlIEpPQl9DQU5DRUxMRUQ6Ci0JCQlzdHIgPSBTTFVSTV9KT0JfU1RBVEVfQ0FOQ0VMTEVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgSk9CX0ZBSUxFRDoKLQkJCXN0ciA9IFNMVVJNX0pPQl9TVEFURV9GQUlMRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBKT0JfVElNRU9VVDoKLQkJCXN0ciA9IFNMVVJNX0pPQl9TVEFURV9USU1FT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgSk9CX05PREVfRkFJTDoKLQkJCXN0ciA9IFNMVVJNX0pPQl9TVEFURV9OT0RFRkFJTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJc3RyID0gIlVua25vd24gam9iIHN0YXRlIjsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBzdHI7Ci19Ci0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBub2RlIGFuZCBpbnNlcnQgaXQgaW50byBtYWNoaW5lIG5vZGUgbGlzdC4KLSAqLwotc3RhdGljIHB0cF9ub2RlICoKLW5ld19ub2RlKHB0cF9tYWNoaW5lICptYWNoLCBub2RlX2luZm9fdCAqbmkpCi17Ci0Jc3RhdGljIGludCBub2RlX251bWJlciA9IDA7Ci0JcHRwX25vZGUgKiBuID0gKHB0cF9ub2RlICopbWFsbG9jKHNpemVvZihwdHBfbm9kZSkpOwotCQotCW1lbXNldCgoY2hhciAqKW4sIDAsIHNpemVvZihwdHBfbm9kZSkpOwotCW4tPmlkID0gZ2VuZXJhdGVfaWQoKTsKLQluLT5udW1iZXIgPSBub2RlX251bWJlcisrOwotCi0Jbi0+c29ja2V0cyA9IG5pLT5zb2NrZXRzOwotCW4tPmNvcmVzID0gbmktPmNvcmVzOwotCW4tPnRocmVhZHMgPSBuaS0+dGhyZWFkczsKLQotCWlmIChuaS0+bmFtZSAhPSBOVUxMKQotCQluLT5uYW1lID0gc3RyZHVwKG5pLT5uYW1lKTsKLQkKLQluLT5zdGF0ZSA9IG5pLT5ub2RlX3N0YXRlOwotCQkKLQlpZiAobmktPmFyY2ggIT0gTlVMTCkKLQkJbi0+YXJjaCA9IHN0cmR1cChuaS0+YXJjaCk7Ci0JaWYgKG5pLT5vcyAhPSBOVUxMKQotCQluLT5vcyA9IHN0cmR1cChuaS0+b3MpOwotCQotICAgIEFkZFRvTGlzdChtYWNoLT5ub2RlcywgKHZvaWQgKiluKTsKLQotICAgIHJldHVybiBuOwotfQotCi0vKgotICogR2V0IG5vZGUgcG9pbnRlciBmcm9tIG5vZGUgbmFtZS4gCi0gKi8KLXN0YXRpYyBwdHBfbm9kZSAqCi1maW5kX25vZGVfYnlfbmFtZShjaGFyICpuYW1lKQotewotCXB0cF9tYWNoaW5lICoJbTsKLQlwdHBfbm9kZSAqCQluOwotCQotCWZvciAoU2V0TGlzdChnTWFjaGluZUxpc3QpOyAobSA9IChwdHBfbWFjaGluZSAqKUdldExpc3RFbGVtZW50KGdNYWNoaW5lTGlzdCkpICE9IE5VTEw7ICkgewotCQlmb3IgKFNldExpc3QobS0+bm9kZXMpOyAobiA9IChwdHBfbm9kZSAqKUdldExpc3RFbGVtZW50KG0tPm5vZGVzKSkgIT0gTlVMTDsgKSB7Ci0JCQlpZiAoc3RyY21wKG5hbWUsIG4tPm5hbWUpID09IDApCi0JCQkJcmV0dXJuIG47Ci0JCX0KLQl9Ci0JCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBuZXcgcHJvY2VzcyBhbmQgaW5zZXJ0IGl0IGludG8gam9iIHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHB0cF9wcm9jZXNzICoKLW5ld19wcm9jZXNzKHB0cF9qb2IgKmpvYiwgaW50IG5vZGVfaWQsIGludCB0YXNrX2lkLCBpbnQgcGlkKQotewotCXB0cF9wcm9jZXNzICoJcCA9IChwdHBfcHJvY2VzcyAqKW1hbGxvYyhzaXplb2YocHRwX3Byb2Nlc3MpKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXAtPmlkID0gZ2VuZXJhdGVfaWQoKTsKLQlwLT50YXNrX2lkID0gdGFza19pZDsKLQlwLT5waWQgPSBwaWQ7Ci0JcC0+bm9kZV9pZCA9IG5vZGVfaWQ7Ci0KLSAgICBqb2ItPnByb2NzW3Rhc2tfaWRdID0gcDsKLSAgICBpbnNlcnRfaW5fcmFuZ2VzZXQoam9iLT5zZXQsIHAtPmlkKTsKLQotICAgIHJldHVybiBwOwotfQotCi0KLS8qCi0gKiBGcmVlIHRoZSBzcGFjZSBhbGxvY2F0ZWQgdG8gcHRwX3Byb2Nlc3MuCi0gKi8KLXN0YXRpYyB2b2lkCi1mcmVlX3Byb2Nlc3MocHRwX3Byb2Nlc3MgKnApCi17Ci0JaWYgKHApCi0JCWZyZWUocCk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogR2V0IHByb2Nlc3MgcG9pbnRlciBnaXZlbiBqb2IgYW5kIHRhc2tfaWQuCi0gKi8KLXN0YXRpYyBwdHBfcHJvY2VzcyAqCi1maW5kX3Byb2Nlc3MocHRwX2pvYiAqam9iLCBpbnQgdGFza19pZCkKLXsKLQlpZiAodGFza19pZCA8IDAgfHwgdGFza19pZCA+PSBqb2ItPm51bV9wcm9jcykKLQkJcmV0dXJuIE5VTEw7Ci0JCQotCXJldHVybiBqb2ItPnByb2NzW3Rhc2tfaWRdOwotfQotCQotLyoKLSAqICBHZXQgam9iaWQgb2YgJ3doaWNoJyB0eXBlCi0gKi8KLXN0YXRpYyBpbnQKLWdldF9qb2JpZChwdHBfam9iICpqLCBpbnQgd2hpY2gpCi17Ci0JaW50IGlkID0gLTE7Ci0KLQlpZiAoaiAhPSBOVUxMKSB7Ci0JCXN3aXRjaCAod2hpY2gpIHsKLQkJY2FzZSBQVFBfSk9CSUQ6Ci0JCQlpZCA9IGotPnB0cF9qb2JpZDsKLQkJCWJyZWFrOwotCQljYXNlIFNMVVJNX0pPQklEOgotCQkJaWQgPSBqLT5zbHVybV9qb2JpZDsKLQkJCWJyZWFrOwotCQljYXNlIERFQlVHX0pPQklEOgotCQkJaWQgPSBqLT5kZWJ1Z19qb2JpZDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWQgPSAtMTsKLQkJCWJyZWFrOwotCQl9CQotCX0KLQotCXJldHVybiBpZDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyBqb2Isc2V0IGpvYiBhdHRyaWJ1dGVzIGFuZCBhZGQgdG8gZ0pvYkxpc3QuICAKLSAqLwotc3RhdGljIHB0cF9qb2IgKgotbmV3X2pvYihpbnQgbnVtX3Byb2NzLCBib29sIGRlYnVnLCBpbnQgcHRwX2pvYmlkLCBpbnQgc2x1cm1fam9iaWQsIGludCBkZWJ1Z19qb2JpZCwgYm9vbCBuZWVkX2FsbG9jKQotewotCXB0cF9qb2IgKglqID0gKHB0cF9qb2IgKiltYWxsb2Moc2l6ZW9mKHB0cF9qb2IpKTsKLQlpZiAoaiA9PSBOVUxMKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwgIkFsbGNvYXRlIHNwYWNlIGZvciBqb2Igc3RydWN0IGZhaWwuIFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0JCi0KLQlqLT5wdHBfam9iaWQgPSBwdHBfam9iaWQ7Ci0gICAgai0+c2x1cm1fam9iaWQgPSBzbHVybV9qb2JpZDsKLQlqLT5uZWVkX2FsbG9jID0gbmVlZF9hbGxvYzsgCi0gICAgai0+bnVtX3Byb2NzID0gbnVtX3Byb2NzOwotICAgIGotPmRlYnVnID0gZGVidWc7Ci0Jai0+ZGVidWdfam9iaWQgPSBkZWJ1Z19qb2JpZDsKLQlqLT5hdHRhY2ggPSBmYWxzZTsKLQlqLT5zcnVuX3BpZCA9IC0xOwotCWotPnN0YXRlID0gLTE7Ci0Jai0+cmVtb3ZhYmxlID0gZmFsc2U7Ci0Jai0+ZmRfZXJyID0gLTE7Ci0Jai0+ZmRfb3V0ID0gLTE7Ci0Jai0+aW90aHJlYWRfaWQgPSAtMTsKLQlqLT5pb3RocmVhZF9leGl0X3JlcSA9IGZhbHNlOwotCWotPmlvdGhyZWFkX2V4aXQgPSBmYWxzZTsKLQlqLT5zZXQgPSBuZXdfcmFuZ2VzZXQoKTsKLQlqLT5wcm9jcyA9IChwdHBfcHJvY2VzcyAqKiltYWxsb2Moc2l6ZW9mKHB0cF9wcm9jZXNzICopICogbnVtX3Byb2NzKTsKLQltZW1zZXQoai0+cHJvY3MsIDAsIHNpemVvZihwdHBfcHJvY2VzcyAqKSAqIG51bV9wcm9jcyk7Ci0KLSAgICBBZGRUb0xpc3QoZ0pvYkxpc3QsICh2b2lkICopaik7Ci0KLSAgICByZXR1cm4gajsKLX0KLQotLyoKLSAqIEZyZWUgam9iIHNwYWNlIGFsbG9jYXRlZCBieSBuZXdfam9iKCkuCi0gKi8KLXN0YXRpYyB2b2lkCi1mcmVlX2pvYihwdHBfam9iICpqKQotewotCWludCBpOwotCi0JaWYgKGopIHsKLQkJaWYgKGotPnByb2NzKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgai0+bnVtX3Byb2NzOyBpKyspIHsKLQkJCQlpZiAoai0+cHJvY3NbaV0gIT0gTlVMTCkgCi0JCQkJCWZyZWVfcHJvY2VzcyhqLT5wcm9jc1tpXSk7Ci0JCQl9Ci0JCQlmcmVlKGotPnByb2NzKTsKLQkJfQotCQlpZiAoai0+c2V0KSAKLQkJCWZyZWVfcmFuZ2VzZXQoai0+c2V0KTsKLQotCQlmcmVlKGopOwotCX0JCi19Ci0KLQotLyoKLSAqIEdldCBqb2IgcG9pbnRlciBnaXZlbiB0aGUgam9iaWQgb2YgJ3doaWNoJyB0eXBlLgotICogSWYgZGVidWcgaXMgdHJ1ZSwgZmluZCB0aGUgam9iIHVzaW5nIHRoZSBkZWJ1ZyBqb2JpZC4KLSAqLwotc3RhdGljIHB0cF9qb2IgKgotZmluZF9qb2IoaW50IGpvYmlkLCBpbnQgd2hpY2gpCi17Ci0JcHRwX2pvYiAqCWogPSBOVUxMOwotCQotCWZvciAoU2V0TGlzdChnSm9iTGlzdCk7IChqID0gKHB0cF9qb2IgKilHZXRMaXN0RWxlbWVudChnSm9iTGlzdCkpICE9IE5VTEw7ICkgewotCQlpZiAoZ2V0X2pvYmlkKGosIHdoaWNoKSA9PSBqb2JpZCkgCi0JCQlyZXR1cm4gajsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBEZXRlcm1pbiBpZiB0aGUgZ2l2ZW4gam9iIGlzIEFDVElWRS4KLSAqLwotc3RhdGljIGJvb2wgCi1zbHVybV9qb2JfYWN0aXZlKHB0cF9qb2IgKiBqb2IpCi17Ci0JdWludDE2X3Qgc3RhdGU7Ci0JYm9vbCAJYWN0aXZlOwotCQotCXN0YXRlID0gam9iLT5zdGF0ZTsKLQlpZiAoc3RhdGUgPT0gSk9CX0NPTVBMRVRFIHx8IHN0YXRlID09IEpPQl9DQU5DRUxMRUQgCi0JCXx8IHN0YXRlID09IEpPQl9GQUlMRUQgfHwgc3RhdGUgPT0gSk9CX1RJTUVPVVQgfHwgc3RhdGUgPT0gSk9CX05PREVfRkFJTCkgewotCQlhY3RpdmUgPSBmYWxzZTsKLQl9IGVsc2UKLQkJYWN0aXZlID0gdHJ1ZTsgIC8qIEpPQl9DT01QTEVUSU5HIGlzIEFDVElWRSAqLwotCi0JcmV0dXJuIGFjdGl2ZTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRPS0V2ZW50KGludCB0cmFuc19pZCkKLXsKLQlwcm94eV9zdnJfcXVldWVfbXNnKHNsdXJtX3Byb3h5LCBwcm94eV9va19ldmVudCh0cmFuc19pZCkpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZFNodXRkb3duRXZlbnQoaW50IHRyYW5zX2lkKQotewotCXByb3h5X3N2cl9xdWV1ZV9tc2coc2x1cm1fcHJveHksIHByb3h5X3NodXRkb3duX2V2ZW50KHRyYW5zX2lkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kTWVzc2FnZUV2ZW50KGludCB0cmFuc19pZCwgY2hhciAqbGV2ZWwsIGludCBjb2RlLCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0CQlhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXByb3h5X3N2cl9xdWV1ZV9tc2coc2x1cm1fcHJveHksIHByb3h5X21lc3NhZ2VfZXZlbnQodHJhbnNfaWQsIGxldmVsLCBjb2RlLCBmbXQsIGFwKSk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRFcnJvckV2ZW50KGludCB0cmFuc19pZCwgaW50IGNvZGUsIGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QJCWFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JZGVidWdfbG9nKGxvZ2ZwLCAic2VuZEVycm9yRXZlbnQoJWQsJWQpLCIsIHRyYW5zX2lkLCBjb2RlKTsKLQlkZWJ1Z19sb2cobG9nZnAsIGZtdCxhcCk7Ci0JcHJveHlfc3ZyX3F1ZXVlX21zZyhzbHVybV9wcm94eSwgcHJveHlfZXJyb3JfZXZlbnQodHJhbnNfaWQsIGNvZGUsIGZtdCwgYXApKTsKLQl2YV9lbmQoYXApOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZEpvYlN1YkVycm9yRXZlbnQoaW50IHRyYW5zX2lkLCBjaGFyICpqb2JTdWJJZCwgY2hhciAqbXNnKQotewotCXByb3h5X3N2cl9xdWV1ZV9tc2coc2x1cm1fcHJveHksIHByb3h5X3N1Ym1pdGpvYl9lcnJvcl9ldmVudCh0cmFuc19pZCwgam9iU3ViSWQsIFJURVZfRVJST1JfU0xVUk1fU1VCTUlULCBtc2cpKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotc2VuZEpvYlRlcm1pbmF0ZUVycm9yRXZlbnQoaW50IHRyYW5zX2lkLCBpbnQgaWQsIGNoYXIgKm1zZykKLXsKLQljaGFyICoJam9iX2lkOwotCQotCWFzcHJpbnRmKCZqb2JfaWQsICIlZCIsIGlkKTsKLQlwcm94eV9zdnJfcXVldWVfbXNnKHNsdXJtX3Byb3h5LCBwcm94eV90ZXJtaW5hdGVqb2JfZXJyb3JfZXZlbnQodHJhbnNfaWQsIGpvYl9pZCwgUlRFVl9FUlJPUl9KT0IsIG1zZykpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZE5ld01hY2hpbmVFdmVudChpbnQgdHJhbnNfaWQsIGludCBpZCwgY2hhciAqbmFtZSkKLXsKLQljaGFyICoJcm1faWQ7Ci0JY2hhciAqCW1hY2hpbmVfaWQ7Ci0JCi0JYXNwcmludGYoJnJtX2lkLCAiJWQiLCBnQmFzZUlEKTsJCi0JYXNwcmludGYoJm1hY2hpbmVfaWQsICIlZCIsIGlkKTsJCi0JcHJveHlfc3ZyX3F1ZXVlX21zZyhzbHVybV9wcm94eSwgcHJveHlfbmV3X21hY2hpbmVfZXZlbnQodHJhbnNfaWQsIHJtX2lkLCBtYWNoaW5lX2lkLCBuYW1lLCBNQUNISU5FX1NUQVRFX1VQKSk7Ci0JZnJlZShtYWNoaW5lX2lkKTsKLQlmcmVlKHJtX2lkKTsKLX0KLQotCi0vKgotICogR2V0IHRoZSBudW1iZXIgb2Ygbm9kZSBhdHRyaWJ1dGVzIHNldHVwIGluIHB0cF9ub2RlLgotICovCi1zdGF0aWMgaW50Ci1udW1fbm9kZV9hdHRycyhwdHBfbm9kZSAqbm9kZSkKLXsKLQlpbnQJY250ID0gMDsKLQotCWlmIChub2RlLT5udW1iZXIgPj0gMCkKLQkJY250Kys7Ci0JaWYgKG5vZGUtPnNvY2tldHMgPiAwKQotCQljbnQrKzsKLQlpZiAobm9kZS0+Y29yZXMgPiAwKQotCQljbnQrKzsKLQlpZiAobm9kZS0+dGhyZWFkcyA+IDApCi0JCWNudCsrOwotCWlmIChub2RlLT5hcmNoICE9IE5VTEwpCi0JCWNudCsrOwotCWlmIChub2RlLT5vcyAhPSBOVUxMKQotCQljbnQrKzsKLQotCXJldHVybiBjbnQ7CQotfQotCi0vKgotICogQWRkIG5vZGUgYXR0cmlidXRlcyB0byBwcm94eV9tc2cuIAotICovCi1zdGF0aWMgdm9pZAotYWRkX25vZGVfYXR0cnMocHJveHlfbXNnICptLCBwdHBfbm9kZSAqbm9kZSkKLXsKLQkKLSAgICAvKiBOT0RFX05VTUJFUl9BVFRSIGVuYWJsZXMgdGhlIG5vZGUgbnVtYmVyIHJ1bGVyIGluIE1hY2hpbmUgVmlldyAqLwotCWlmIChub2RlLT5udW1iZXIgPj0gMCkKLQkJcHJveHlfYWRkX2ludF9hdHRyaWJ1dGUobSwgU0xVUk1fTk9ERV9OVU1CRVJfQVRUUiwgbm9kZS0+bnVtYmVyKTsKLQotCXByb3h5X2FkZF9pbnRfYXR0cmlidXRlKG0sIFNMVVJNX05PREVfU09DS0VUU19BVFRSLCAoaW50KW5vZGUtPnNvY2tldHMpOwotCXByb3h5X2FkZF9pbnRfYXR0cmlidXRlKG0sIFNMVVJNX05PREVfQ09SRVNfQVRUUiwgKGludClub2RlLT5jb3Jlcyk7Ci0JcHJveHlfYWRkX2ludF9hdHRyaWJ1dGUobSwgU0xVUk1fTk9ERV9USFJFQURTX0FUVFIsIChpbnQpbm9kZS0+dGhyZWFkcyk7Ci0KLQlpZiAobm9kZS0+YXJjaCAhPSBOVUxMKQotCQlwcm94eV9hZGRfc3RyaW5nX2F0dHJpYnV0ZShtLCBTTFVSTV9OT0RFX0FSQ0hfQVRUUiwgbm9kZS0+YXJjaCk7Ci0JaWYgKG5vZGUtPm9zICE9IE5VTEwpCi0JCXByb3h5X2FkZF9zdHJpbmdfYXR0cmlidXRlKG0sIFNMVVJNX05PREVfT1NfQVRUUiwgbm9kZS0+b3MpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZE5ld0pvYkV2ZW50KGludCB0cmFuc19pZCwgaW50IGpvYmlkLCBjaGFyICpuYW1lLCBjaGFyICpqb2JTdWJJZCwgY2hhciAqc3RhdGUpCi17Ci0JY2hhciAqCXF1ZXVlX2lkOwotCWNoYXIgKglqb2JfaWQ7Ci0JCi0JYXNwcmludGYoJnF1ZXVlX2lkLCAiJWQiLCBnUXVldWVJRCk7CQotCWFzcHJpbnRmKCZqb2JfaWQsICIlZCIsIGpvYmlkKTsKLQlwcm94eV9zdnJfcXVldWVfbXNnKHNsdXJtX3Byb3h5LCBwcm94eV9uZXdfam9iX2V2ZW50KHRyYW5zX2lkLCBxdWV1ZV9pZCwgam9iX2lkLCBuYW1lLCBzdGF0ZSwgam9iU3ViSWQpKTsKLQlmcmVlKHF1ZXVlX2lkKTsKLQlmcmVlKGpvYl9pZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kTmV3Tm9kZUV2ZW50KGludCB0cmFuc19pZCwgaW50IG1hY2hpZCwgcHRwX21hY2hpbmUgKm1hY2gpCi17Ci0JcHRwX25vZGUgKgluOwotCXByb3h5X21zZyAqCW07Ci0JY2hhciAqCQltYWNoaW5lX2lkOwotCWNoYXIgKgkJbm9kZV9pZDsKLQkKLQlhc3ByaW50ZigmbWFjaGluZV9pZCwgIiVkIiwgbWFjaGlkKTsKLQltID0gcHJveHlfbmV3X25vZGVfZXZlbnQodHJhbnNfaWQsIG1hY2hpbmVfaWQsIFNpemVPZkxpc3QobWFjaC0+bm9kZXMpKTsKLQlmb3IgKFNldExpc3QobWFjaC0+bm9kZXMpOyAobiA9IChwdHBfbm9kZSAqKUdldExpc3RFbGVtZW50KG1hY2gtPm5vZGVzKSkgIT0gTlVMTDsgKSB7Ci0JCWFzcHJpbnRmKCZub2RlX2lkLCAiJWQiLCBuLT5pZCk7Ci0JCXByb3h5X2FkZF9ub2RlKG0sIG5vZGVfaWQsIG4tPm5hbWUsIG5vZGVzdGF0ZV90b19zdHJpbmcobi0+c3RhdGUpLCBudW1fbm9kZV9hdHRycyhuKSk7Ci0JCWFkZF9ub2RlX2F0dHJzKG0sIG4pOwotCQlmcmVlKG5vZGVfaWQpOwotCX0KLQlwcm94eV9zdnJfcXVldWVfbXNnKHNsdXJtX3Byb3h5LCBtKTsKLQlmcmVlKG1hY2hpbmVfaWQpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZE5vZGVDaGFuZ2VFdmVudChpbnQgdHJhbnNfaWQsIGNoYXIgKiBpZF9yYW5nZSwgY2hhciAqIHN0YXRlKQotewotCXByb3h5X21zZyAqIG07Ci0KLQltID0gcHJveHlfbm9kZV9jaGFuZ2VfZXZlbnQodHJhbnNfaWQsIGlkX3JhbmdlLCAxKTsKLQlwcm94eV9hZGRfc3RyaW5nX2F0dHJpYnV0ZShtLCBOT0RFX1NUQVRFX0FUVFIsIHN0YXRlKTsKLQlwcm94eV9zdnJfcXVldWVfbXNnKHNsdXJtX3Byb3h5LCBtKTsKLX0KLQotLyoKLSAqIEZJWE1FOiAKLSAqCUFkZCBleHRyYSBhdHRyaWJ1dGVzIHdoZW4gdGFzayB0b3BvbG9neSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCi0gKiAgVGhpcyBjYW4gYmUgZG9uZSB2aWEgc2x1cm1fam9iX3N0ZXBfbGF5b3V0X2dldCgpIEFQSSB3aGVuIHVwZGF0aW5nIGpvYiBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQKLXNlbmROZXdQcm9jZXNzRXZlbnQoaW50IHRyYW5zX2lkLCBpbnQgam9iaWQsIHB0cF9wcm9jZXNzICpwLCBjaGFyICpzdGF0ZSkKLXsKLQlwcm94eV9tc2cgKgltOwotCWNoYXIgKgkJam9iX2lkOwotCWNoYXIgKgkJcHJvY19pZDsKLQljaGFyICoJCW5hbWU7Ci0JCi0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuOwotCQotCWFzcHJpbnRmKCZqb2JfaWQsICIlZCIsIGpvYmlkKTsKLQlhc3ByaW50ZigmcHJvY19pZCwgIiVkIiwgcC0+aWQpOwotCWFzcHJpbnRmKCZuYW1lLCAiJWQiLCAgcC0+dGFza19pZCk7Ci0JCi0JbSA9IHByb3h5X25ld19wcm9jZXNzX2V2ZW50KHRyYW5zX2lkLCBqb2JfaWQsIDEpOwotCS8qCi0JICogQnkgbm93LCBwLT5ub2RlX2lkLCBwLT50YXNrX2lkLCBwLT5waWQgY2FuJ3QgYmUgb2J0YWluZWQuCi0JICogU28gc2V0IHRoZSBleHRyYV9hdHRycz0wCi0JICovCi0JcHJveHlfYWRkX3Byb2Nlc3MobSwgcHJvY19pZCwgbmFtZSwgc3RhdGUsIDApOwotCS8qCQotCXByb3h5X2FkZF9wcm9jZXNzKG0sIHByb2NfaWQsIG5hbWUsIHN0YXRlLCAzKTsKLQlwcm94eV9hZGRfaW50X2F0dHJpYnV0ZShtLCBQUk9DX05PREVJRF9BVFRSLCBwLT5ub2RlX2lkKTsJCi0JcHJveHlfYWRkX2ludF9hdHRyaWJ1dGUobSwgUFJPQ19JTkRFWF9BVFRSLCBwLT50YXNrX2lkKTsJCi0JcHJveHlfYWRkX2ludF9hdHRyaWJ1dGUobSwgUFJPQ19QSURfQVRUUiwgcC0+cGlkKTsKLQkqLwotCXByb3h5X3N2cl9xdWV1ZV9tc2coc2x1cm1fcHJveHksIG0pOwotCQotCWZyZWUoam9iX2lkKTsKLQlmcmVlKHByb2NfaWQpOwotCWZyZWUobmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kTmV3UXVldWVFdmVudChpbnQgdHJhbnNfaWQpCi17Ci0JY2hhciAqCQlybV9pZDsKLQljaGFyICoJCXF1ZXVlX2lkOwotCQotCWdRdWV1ZUlEID0gZ2VuZXJhdGVfaWQoKTsKLQkKLQlhc3ByaW50Zigmcm1faWQsICIlZCIsIGdCYXNlSUQpOwotCWFzcHJpbnRmKCZxdWV1ZV9pZCwgIiVkIiwgZ1F1ZXVlSUQpOwotCXByb3h5X3N2cl9xdWV1ZV9tc2coc2x1cm1fcHJveHksIHByb3h5X25ld19xdWV1ZV9ldmVudCh0cmFuc19pZCwgcm1faWQsIHF1ZXVlX2lkLCBERUZBVUxUX1FVRVVFX05BTUUsIFFVRVVFX1NUQVRFX05PUk1BTCkpOwotCQotCWZyZWUocm1faWQpOwotCWZyZWUocXVldWVfaWQpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZFByb2Nlc3NTdGF0ZUNoYW5nZUV2ZW50KGludCB0cmFuc19pZCwgcHRwX2pvYiAqaiwgY2hhciAqc3RhdGUpCi17Ci0JcHJveHlfbXNnICoJbTsKLQkKLQlpZiAoaiA9PSBOVUxMIHx8IGotPm51bV9wcm9jcyA9PSAwKQotCQlyZXR1cm47Ci0JCQotCW0gPSBwcm94eV9wcm9jZXNzX2NoYW5nZV9ldmVudCh0cmFuc19pZCwgcmFuZ2VzZXRfdG9fc3RyaW5nKGotPnNldCksIDEpOwotCXByb3h5X2FkZF9zdHJpbmdfYXR0cmlidXRlKG0sIFBST0NfU1RBVEVfQVRUUiwgc3RhdGUpOwotCXByb3h5X3N2cl9xdWV1ZV9tc2coc2x1cm1fcHJveHksIG0pOwotfQotCQotCQotc3RhdGljIHZvaWQKLXNlbmRKb2JTdGF0ZUNoYW5nZUV2ZW50KGludCB0cmFuc19pZCwgaW50IGpvYmlkLCBjaGFyICpzdGF0ZSkKLXsKLQljaGFyICoJCWpvYl9pZDsKLQlwcm94eV9tc2cgKgltOwotCQotCWFzcHJpbnRmKCZqb2JfaWQsICIlZCIsIGpvYmlkKTsKLQotCW0gPSBwcm94eV9qb2JfY2hhbmdlX2V2ZW50KHRyYW5zX2lkLCBqb2JfaWQsIDEpOwotCXByb3h5X2FkZF9zdHJpbmdfYXR0cmlidXRlKG0sIEpPQl9TVEFURV9BVFRSLCBzdGF0ZSk7Ci0JcHJveHlfc3ZyX3F1ZXVlX21zZyhzbHVybV9wcm94eSwgbSk7Ci0JCi0JZnJlZShqb2JfaWQpOwotfQotCi0vKgotICogU0xVUk0gcHJvdmlkZXMgbm8gcHJvY2VzcyBzdGF0ZSwgb25seSBqb2Igc3RhdGUuCi0gKiBMZXQgcHJvY2VzcyBzdGF0ZSBlcXVhbCB0byBqb2Igc3RhdGUuCi0gKi8KLXN0YXRpYyB2b2lkCi1zZW5kUHJvY2Vzc0NoYW5nZUV2ZW50KGludCB0cmFuc19pZCwgcHRwX3Byb2Nlc3MgKnAsIGludCBub2RlX2lkLCBpbnQgdGFza19pZCwgaW50IHBpZCkKLXsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kUHJvY2Vzc091dHB1dEV2ZW50KGludCB0cmFuc19pZCwgaW50IHByb2NpZCwgY2hhciAqb3V0cHV0KQotewotCWNoYXIgKgkJcHJvY19pZDsKLQlwcm94eV9tc2cgKgltOwotCQotCWFzcHJpbnRmKCZwcm9jX2lkLCAiJWQiLCBwcm9jaWQpOwotCQotCW0gPSBwcm94eV9wcm9jZXNzX2NoYW5nZV9ldmVudCh0cmFuc19pZCwgcHJvY19pZCwgMSk7Ci0JcHJveHlfYWRkX3N0cmluZ19hdHRyaWJ1dGUobSwgUFJPQ19TVERPVVRfQVRUUiwgb3V0cHV0KTsKLQlwcm94eV9zdnJfcXVldWVfbXNnKHNsdXJtX3Byb3h5LCBtKTsKLQkKLQlmcmVlKHByb2NfaWQpOwkKLX0KLQotLyoKLSAqIEdldCB0aGUgbnVtYmVyIG9mIGNvbXB1dGUgbm9kZXMgbWFuYWdlZCBieSBTTFVSTS4KLSAqLwotc3RhdGljIGludAotZ2V0X251bV9ub2RlcyhpbnQgbWFjaGlkKQotewotCXVpbnQzMl90IGNudCA9IDA7Ci0Jbm9kZV9pbmZvX21zZ190ICogbmluZm87Ci0KLQlzbHVybV9sb2FkX25vZGUoKHRpbWVfdClOVUxMLCAmbmluZm8sIFNIT1dfQUxMKTsKLQljbnQgPSBuaW5mby0+cmVjb3JkX2NvdW50OwotCXNsdXJtX2ZyZWVfbm9kZV9pbmZvX21zZyhuaW5mbyk7Ci0JCi0JcmV0dXJuIGNudDsKLX0KLQotLyogCi0gKiBDdXJyZW50bHkgb25seSBPTkUgbWFjaGluZSBzdXBwb3J0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgCi1nZXRfbnVtX21hY2hpbmVzKCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIEdldCBob3N0bmFtZSBvZiB0aGUgc2VydmVyIG5vZGUgd2hlcmUgc2x1cm1jdGxkIHJ1bnMuCi0gKi8KLXN0YXRpYyBjaGFyICoKLWdldF9tYWNoaW5lX25hbWUoaW50IG51bSkKLXsKLQlzdGF0aWMgY2hhcglob3N0bmFtZVs1MTJdOwotCQotCWdldGhvc3RuYW1lKGhvc3RuYW1lLCA1MTIpOwotCXJldHVybiBob3N0bmFtZTsKLX0KLQotLyoKLSAqIEN0ZWF0ZSB0aGUgbm9kZSBsaXN0IGZvciBhIG1hY2hpbmUuCi0gKi8KLXN0YXRpYyBpbnQKLWNyZWF0ZV9ub2RlX2xpc3QocHRwX21hY2hpbmUgKm1hY2gpCi17Ci0JdWludDMyX3QgY250OwotCW5vZGVfaW5mb19tc2dfdCAqbm1zZzsKLQlwdHBfbm9kZSAqCQlub2RlOwotCWludCBpOwotCi0JaWYgKHNsdXJtX2xvYWRfbm9kZSgodGltZV90KU5VTEwsJm5tc2csIFNIT1dfQUxMKSkKLQkJcmV0dXJuIC0xOwotCi0JY250ID0gbm1zZy0+cmVjb3JkX2NvdW50OwotCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgCi0JCW5vZGUgPSBuZXdfbm9kZShtYWNoLCBubXNnLT5ub2RlX2FycmF5ICsgaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIElmIHdlJ3JlIHVuZGVyIGRlYnVnIGNvbnRyb2wsIGxldCB0aGUgZGVidWdnZXIgaGFuZGxlIHByb2Nlc3Mgc3RhdGUgdXBkYXRlLiAKLSAqIAotICogTm90ZTogdGhpcyB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBkZWJ1Z2dlciBhbGxvd3MgdGhlIHByb2dyYW0gdG8KLSAqIHJlYWNoIE1QSV9Jbml0KCksIHdoaWNoIG1heSBuZXZlciBoYXBwZW4gKGUuZy4gaWYgaXQncyBub3QgYW4gTVBJIHByb2dyYW0pLiAKLSAqIERvbid0IHJlbHkgdGhpcyB0byBkbyBhbnl0aGluZyBmb3IgYXJiaXRyYXJ5IGpvYnMuCi0gKiAKLSAqIE5vdGUgYWxzbzogdGhlIGRlYnVnZ2VyIG1hbmFnZXMgcHJvY2VzcyBzdGF0ZSB1cGRhdGVzIHNvIHdlIGRvbid0IG5lZWQKLSAqIHRvIHNlbmQgZXZlbnRzIGJhY2sgdG8gdGhlIHJ1bnRpbWUuCi0gKi8KLQotIAotLy9zdGF0aWMgdm9pZAotLy9kZWJ1Z19hcHBfam9iX3N0YXRlX2NhbGxiYWNrKG9ydGVfam9iaWRfdCBqb2JpZCwgb3J0ZV9wcm9jX3N0YXRlX3Qgc3RhdGUpCi0vL3sKLQkvKiB0aGlzIGlzIHdoYXQgaXQgaGFzIGJlZm9yZSwgdW50b3VjaGVkICovCi0vLwlzd2l0Y2goc3RhdGUpIHsKLS8vCQljYXNlIE9SVEVfUFJPQ19TVEFURV9URVJNSU5BVEVEOgotLy8JCWNhc2UgT1JURV9QUk9DX1NUQVRFX0FCT1JURUQ6Ci0vLwkJCWJyZWFrOwotLy8JfQotLy99Ci0KLS8qCi0gKiBqb2Jfc3RhdGVfY2FsbGJhY2sgZm9yIHRoZSBkZWJ1Z2dlci4gRGV0ZWN0cyBkZWJ1Z2dlciBzdGFydCBhbmQgZXhpdCBhbmQgbm90aWZpZXMgdGhlCi0gKiBVSS4gQ2xlYW5zIHVwIGpvYiBpZCBtYXAuCi0gKi8KLS8qIAotc3RhdGljIHZvaWQKLWRlYnVnX2pvYl9zdGF0ZV9jYWxsYmFjayhvcnRlX2pvYmlkX3Qgam9iaWQsIG9ydGVfcHJvY19zdGF0ZV90IHN0YXRlKQotewotCXB0cF9qb2IJKgkJajsKLQkKLQlpZiAoKGogPSBmaW5kX2pvYihqb2JpZCwgSk9CSURfREVCVUcpKSA9PSBOVUxMKQotCQlyZXR1cm47Ci0JCi0JZG9fc3RhdGVfY2FsbGJhY2soaiwgc3RhdGUpOwotfQotKi8KLQotLyogCi0gKiBUZWxsIHRoZSBkYWVtb24gdG8gZXhpdC4gCi0gKiBOb29wcyBmb3IgU0xVUk0uCi0gKi8KLXN0YXRpYyBpbnQKLWRvX3NsdXJtX3NodXRkb3duKHZvaWQpCi17Ci0JZGVidWdfbG9nKGxvZ2ZwLCAiZG9fc2x1cm1fc2h1dGRvd24oKSBjYWxsZWQuXG4iKTsgCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIAotICogZ2V0aG9zdG5hbWVfc2hvcnQgLSBlcXVpdmFsZW50IHRvIGdldGhvc3RuYW1lLCBidXQgcmV0dXJuIG9ubHkgdGhlIGZpcnN0Ci0gKiBjb21wb25lbnQgb2YgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIAotICogKGUuZy4gImxpbnV4MTIzLmZvby5iYXIiIGJlY29tZXMgImxpbnV4MTIzIikgCi0gKi8KLXN0YXRpYyBpbnQKLWdldGhvc3RuYW1lX3Nob3J0IChjaGFyICpuYW1lLCBzaXplX3QgbGVuKQotewotCWludCBlcnJvcl9jb2RlLCBuYW1lX2xlbjsKLQljaGFyICpkb3RfcHRyLCBwYXRoX25hbWVbMTAyNF07Ci0KLQllcnJvcl9jb2RlID0gZ2V0aG9zdG5hbWUgKHBhdGhfbmFtZSwgc2l6ZW9mKHBhdGhfbmFtZSkpOwotCWlmIChlcnJvcl9jb2RlKQotCQlyZXR1cm4gZXJyb3JfY29kZTsKLQotCWRvdF9wdHIgPSBzdHJjaHIgKHBhdGhfbmFtZSwgJy4nKTsKLQlpZiAoZG90X3B0ciA9PSBOVUxMKQotCQlkb3RfcHRyID0gcGF0aF9uYW1lICsgc3RybGVuKHBhdGhfbmFtZSk7Ci0JZWxzZQotCQlkb3RfcHRyWzBdID0gJ1wwJzsKLQotCW5hbWVfbGVuID0gZG90X3B0ciAtIHBhdGhfbmFtZTsKLQlpZiAobmFtZV9sZW4gPiBsZW4pCi0JCXJldHVybiBFTkFNRVRPT0xPTkc7Ci0KLQlzdHJjcHkgKG5hbWUsIHBhdGhfbmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIFNldCBkZWZhdWx0IHNydW4gb3B0aW9ucy4KLSAqLwotc3RhdGljIGludCAKLW9wdF9kZWZhdWx0KHNydW5fb3B0X3QgKiBvcHQpCi17Ci0JY2hhciBidWZbTUFYUEFUSExFTiArIDFdOwotCXN0cnVjdCBwYXNzd2QgKnB3OwotCWludCBpOwotCWNoYXIgaG9zdG5hbWVbNjRdOwotCQotCWlmIChvcHQgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKChwdyA9IGdldHB3dWlkKGdldHVpZCgpKSkgIT0gTlVMTCkgewotCQlzdHJuY3B5KG9wdC0+cHNfdXNlciwgcHctPnB3X25hbWUsIE1BWF9VU0VSTkFNRSk7Ci0JCW9wdC0+cHNfdWlkID0gcHctPnB3X3VpZDsKLQl9IGVsc2UgewotCQlkZWJ1Z19sb2cobG9nZnAsICJvcHRfZGVmYXVsdDp3aG8gYXJlIHlvdT8iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW9wdC0+cHNfZ2lkID0gZ2V0Z2lkKCk7Ci0KLQlpZiAoKGdldGN3ZChidWYsIE1BWFBBVEhMRU4pKSA9PSBOVUxMKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwiZ2V0Y3dkIGZhaWxlZCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCW9wdC0+cHNfY3dkID0gc3RyZHVwKGJ1Zik7IAotCW9wdC0+cHNfY3dkX3NldCA9IGZhbHNlOwotCW9wdC0+cHNfcHJvZ25hbWUgPSBOVUxMOwotCW9wdC0+cHNfbnByb2NzID0gMTsKLQlvcHQtPnBzX25wcm9jc19zZXQgPSBmYWxzZTsKLQlvcHQtPnBzX2NwdXNfcGVyX3Rhc2sgPSAxOyAKLQlvcHQtPnBzX2NwdXNfc2V0ID0gZmFsc2U7Ci0Jb3B0LT5wc19taW5fbm9kZXMgPSAxOwotCW9wdC0+cHNfbWF4X25vZGVzID0gMDsKLQlvcHQtPnBzX21pbl9zb2NrZXRzX3Blcl9ub2RlID0gTk9fVkFMOyAvKiByZXF1ZXN0ZWQgbWluL21heHNvY2tldHMgKi8KLQlvcHQtPnBzX21heF9zb2NrZXRzX3Blcl9ub2RlID0gTk9fVkFMOwotCW9wdC0+cHNfbWluX2NvcmVzX3Blcl9zb2NrZXQgPSBOT19WQUw7IC8qIHJlcXVlc3RlZCBtaW4vbWF4Y29yZXMgKi8KLQlvcHQtPnBzX21heF9jb3Jlc19wZXJfc29ja2V0ID0gTk9fVkFMOwotCW9wdC0+cHNfbWluX3RocmVhZHNfcGVyX2NvcmUgPSBOT19WQUw7IC8qIHJlcXVlc3RlZCBtaW4vbWF4dGhyZWFkcyAqLwotCW9wdC0+cHNfbWF4X3RocmVhZHNfcGVyX2NvcmUgPSBOT19WQUw7IAotCW9wdC0+cHNfbnRhc2tzX3Blcl9ub2RlICAgICAgPSBOT19WQUw7IC8qIG50YXNrIG1heCBsaW1pdHMgKi8KLQlvcHQtPnBzX250YXNrc19wZXJfc29ja2V0ICAgID0gTk9fVkFMOyAKLQlvcHQtPnBzX250YXNrc19wZXJfY29yZSAgICAgID0gTk9fVkFMOyAKLQlvcHQtPnBzX25vZGVzX3NldCA9IGZhbHNlOwotCW9wdC0+cHNfY3B1X2JpbmRfdHlwZSA9IDA7Ci0Jb3B0LT5wc19jcHVfYmluZCA9IE5VTEw7Ci0Jb3B0LT5wc19tZW1fYmluZF90eXBlID0gMDsKLQlvcHQtPnBzX21lbV9iaW5kID0gTlVMTDsKLQlvcHQtPnBzX3RpbWVfbGltaXQgPSBOT19WQUw7Ci0Jb3B0LT5wc190aW1lX2xpbWl0X3N0ciA9IE5VTEw7Ci0Jb3B0LT5wc19ja3B0X2ludGVydmFsID0gMDsKLQlvcHQtPnBzX2NrcHRfaW50ZXJ2YWxfc3RyID0gTlVMTDsKLQlvcHQtPnBzX2NrcHRfcGF0aCA9IE5VTEw7Ci0Jb3B0LT5wc19wYXJ0aXRpb24gPSBOVUxMOwotCQotCS8vdXNlIGRlZmF1bHQgdmFsdWU6MzIKLQkvKiAKLQlvcHQtPnBzX21heF90aHJlYWRzID0gTUFYX1RIUkVBRFM7Ci0JcG1pX3NlcnZlcl9tYXhfdGhyZWFkcyhvcHQtPnBzX21heF90aHJlYWRzKTsKLQkqLwotCi0Jb3B0LT5wc19yZWxhdGl2ZSA9IE5PX1ZBTDsKLQlvcHQtPnBzX3JlbGF0aXZlX3NldCA9IGZhbHNlOwotCW9wdC0+cHNfam9iX25hbWUgPSBOVUxMOwotCW9wdC0+cHNfam9iX25hbWVfc2V0ID0gZmFsc2U7Ci0Jb3B0LT5wc19qb2JpZCA9IE5PX1ZBTDsKLQlvcHQtPnBzX2pvYmlkX3NldCA9IGZhbHNlOwotCW9wdC0+cHNfZGVwZW5kZW5jeSA9IE5VTEw7Ci0Jb3B0LT5wc19hY2NvdW50ICA9IE5VTEw7Ci0Jb3B0LT5wc19jb21tZW50ICA9IE5VTEw7Ci0KLQlvcHQtPnBzX2Rpc3RyaWJ1dGlvbiA9IFNMVVJNX0RJU1RfVU5LTk9XTjsKLQlvcHQtPnBzX3BsYW5lX3NpemUgICA9IE5PX1ZBTDsKLQotCW9wdC0+cHNfb2ZuYW1lID0gTlVMTDsKLQlvcHQtPnBzX2lmbmFtZSA9IE5VTEw7Ci0Jb3B0LT5wc19lZm5hbWUgPSBOVUxMOwotCi0Jb3B0LT5wc19jb3JlX3R5cGUgPSBDT1JFX0RFRkFVTFQ7Ci0KLQlvcHQtPnBzX2xhYmVsaW8gPSBmYWxzZTsKLQlvcHQtPnBzX3VuYnVmZmVyZWQgPSBmYWxzZTsKLQlvcHQtPnBzX292ZXJjb21taXQgPSBmYWxzZTsKLQlvcHQtPnBzX3NoYXJlZCA9ICh1aW50MTZfdClOT19WQUw7Ci0Jb3B0LT5wc19leGNsdXNpdmUgPSBmYWxzZTsKLQlvcHQtPnBzX25vX2tpbGwgPSBmYWxzZTsKLQlvcHQtPnBzX2tpbGxfYmFkX2V4aXQgPSBmYWxzZTsKLQotCW9wdC0+cHNfaW1tZWRpYXRlID0gZmFsc2U7Ci0KLQlvcHQtPnBzX2pvaW4gPSBmYWxzZTsKLQlzbHVybV9jdGxfY29uZl90ICogc2x1cm1fY3RsX2NvbmZfcHRyOwotCXNsdXJtX2xvYWRfY3RsX2NvbmYoKHRpbWVfdClOVUxMLCAmc2x1cm1fY3RsX2NvbmZfcHRyKTsKLQlvcHQtPnBzX21heF93YWl0ID0gc2x1cm1fY3RsX2NvbmZfcHRyLT53YWl0X3RpbWU7Ci0KLQlvcHQtPnBzX3F1aXRfb25faW50ciA9IGZhbHNlOwotCW9wdC0+cHNfZGlzYWJsZV9zdGF0dXMgPSBmYWxzZTsKLQlvcHQtPnBzX3Rlc3Rfb25seSAgID0gZmFsc2U7Ci0JCi0Jb3B0LT5wc19xdWlldCA9IDA7Ci0KLQlvcHQtPnBzX2pvYl9taW5fY3B1cyAgICA9IE5PX1ZBTDsKLQlvcHQtPnBzX2pvYl9taW5fc29ja2V0cyA9IE5PX1ZBTDsKLQlvcHQtPnBzX2pvYl9taW5fY29yZXMgICA9IE5PX1ZBTDsKLQlvcHQtPnBzX2pvYl9taW5fdGhyZWFkcyA9IE5PX1ZBTDsKLQlvcHQtPnBzX2pvYl9taW5fbWVtb3J5ICA9IE5PX1ZBTDsKLQlvcHQtPnBzX3Rhc2tfbWVtICAgICAgICA9IE5PX1ZBTDsKLQlvcHQtPnBzX2pvYl9taW5fdG1wX2Rpc2s9IE5PX1ZBTDsKLQotCW9wdC0+cHNfaG9sZCA9IGZhbHNlOwotCW9wdC0+cHNfY29uc3RyYWludHMgPSBOVUxMOwotCW9wdC0+cHNfY29udGlndW91cyA9IGZhbHNlOwotCW9wdC0+cHNfbm9kZWxpc3QgPSBOVUxMOwotCW9wdC0+cHNfZXhjX25vZGVzID0gTlVMTDsKLQlvcHQtPnBzX21heF9sYXVuY2hfdGltZSA9IDEyMDsvKiAxMjAgc2Vjb25kcyB0byBsYXVuY2ggam9iICovCi0Jb3B0LT5wc19tYXhfZXhpdF90aW1lb3V0PSA2MDsgLyogV2FybiB1c2VyIDYwIHNlY29uZHMgYWZ0ZXIgdGFzayBleGl0ICovCi0JLyogRGVmYXVsdCBsYXVuY2ggbXNnIHRpbWVvdXQgKi8KLQlvcHQtPnBzX21zZ190aW1lb3V0ID0gc2x1cm1fY3RsX2NvbmZfcHRyLT5tc2dfdGltZW91dDsgIAotCi0JZm9yIChpPTA7IGk8U1lTVEVNX0RJTUVOU0lPTlM7IGkrKykKLQkJb3B0LT5wc19nZW9tZXRyeVtpXSA9ICh1aW50MTZfdCkgTk9fVkFMOwotCW9wdC0+cHNfcmVib290ID0gZmFsc2U7Ci0Jb3B0LT5wc19ub19yb3RhdGUgPSBmYWxzZTsKLQlvcHQtPnBzX2Nvbm5fdHlwZSA9ICh1aW50MTZfdCkgTk9fVkFMOwotCW9wdC0+cHNfYmxydHNpbWFnZSA9IE5VTEw7Ci0Jb3B0LT5wc19saW51eGltYWdlID0gTlVMTDsKLQlvcHQtPnBzX21sb2FkZXJpbWFnZSA9IE5VTEw7Ci0Jb3B0LT5wc19yYW1kaXNraW1hZ2UgPSBOVUxMOwotCW9wdC0+cHNfZXVpZCA9ICh1aWRfdCkgLTE7Ci0Jb3B0LT5wc19lZ2lkID0gKGdpZF90KSAtMTsKLQlvcHQtPnBzX3Byb3BhZ2F0ZSA9IE5VTEw7ICAvKiBwcm9wYWdhdGUgc3BlY2lmaWMgcmxpbWl0cyAqLwotCW9wdC0+cHNfcHJvbG9nID0gc2x1cm1fY3RsX2NvbmZfcHRyLT5zcnVuX3Byb2xvZzsKLQlvcHQtPnBzX2VwaWxvZyA9IHNsdXJtX2N0bF9jb25mX3B0ci0+c3J1bl9lcGlsb2c7Ci0Jb3B0LT5wc190YXNrX3Byb2xvZyA9IE5VTEw7Ci0Jb3B0LT5wc190YXNrX2VwaWxvZyA9IE5VTEw7Ci0JZ2V0aG9zdG5hbWVfc2hvcnQoaG9zdG5hbWUsIHNpemVvZihob3N0bmFtZSkpOwotCW9wdC0+cHNfY3RybF9jb21tX2lmaG4gPSBzdHJkdXAoaG9zdG5hbWUpOwotCW9wdC0+cHNfcHR5ID0gZmFsc2U7Ci0Jb3B0LT5wc19vcGVuX21vZGUgPSAwOwotCW9wdC0+cHNfYWNjdGdfZnJlcSA9IC0xOwotCQotCWlmIChzbHVybV9jdGxfY29uZl9wdHIpCi0JCXNsdXJtX2ZyZWVfY3RsX2NvbmYoc2x1cm1fY3RsX2NvbmZfcHRyKTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotLyogCi0gKiBJbml0aWFsaXplIG9wdGlvbiBkZWZhdWx0cy4gCi0gKi8KLXN0YXRpYyBpbnQKLXNldF9zcnVuX29wdGlvbnNfZGVmYXVsdHMoc3J1bl9vcHRfdCAqIG9wdCkKLXsKLQlyZXR1cm4gb3B0X2RlZmF1bHQob3B0KTsKLX0KLQotLyoKLSAqIEZyZWUgc3BhY2UgYWxsb2NhdGVkIGZvciBqb2IgIm9wdCIuIAotICovCi1zdGF0aWMgdm9pZCAKLWZyZWVfb3B0KHNydW5fb3B0X3QgKiBvcHQpCi17Ci0JaWYgKG9wdCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAob3B0LT5wc19jd2Rfc2V0ID09IHRydWUgJiYgb3B0LT5wc19jd2QgIT0gTlVMTCkKLQkJZnJlZShvcHQtPnBzX2N3ZCk7Ci0JaWYgKG9wdC0+cHNfbm9kZXNfc2V0ID09IHRydWUgJiYgb3B0LT5wc19ub2RlbGlzdCAhPSBOVUxMKQotCQlmcmVlKG9wdC0+cHNfbm9kZWxpc3QpOwotCWlmIChvcHQtPnBzX2N0cmxfY29tbV9pZmhuKSAvKiBhbGxvY2F0ZWQgaW4gb3B0X2RlZmF1bHQoKSAqLwotCQlmcmVlKG9wdC0+cHNfY3RybF9jb21tX2lmaG4pOwotfQotCi0vKgotICogRnJlZSBzcGFjZSBhbGxvY2F0ZWQgdG8gc2F2ZSBzcnVuIGFyZ3MgaW4gU0xVUk1fU3VibWl0Sm9iKCkuCi0gKi8KLXN0YXRpYyB2b2lkIAotZnJlZV9zcnVuX2FyZ3YoaW50IHNydW5fYXJnYyxjaGFyICoqIHNydW5fYXJndikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGk8IHNydW5fYXJnYzsgaSsrKSB7Ci0JCWlmIChzcnVuX2FyZ3ZbaV0gIT0gTlVMTCkKLQkJCWZyZWUoc3J1bl9hcmd2W2ldKTsKLQl9Ci0KLQlmcmVlKHNydW5fYXJndik7Ci19Ci0KLQotLyoKLSAqIENyZWF0ZSBqb2IgZGVzYy4gbXNnIGZyb20gb3B0cyBmb3Igam9iIGFsbG9jYXRpb24uCi0gKiBCeSBub3csIC13Ly14IG9wdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuCi0gKi8KLXN0YXRpYyBqb2JfZGVzY19tc2dfdCAqIAotY3JlYXRlX2pvYl9kZXNjX21zZ19mcm9tX29wdHMoc3J1bl9vcHRfdCAqb3B0KQotewotCi0Jam9iX2Rlc2NfbXNnX3QgKiBqID0gTlVMTDsKLQkKLQlhc3NlcnQob3B0ICE9IE5VTEwpOwotCWlmICgoaiA9IChqb2JfZGVzY19tc2dfdCAqKW1hbGxvYyhzaXplb2Yoam9iX2Rlc2NfbXNnX3QpKSkgPT0gTlVMTCkgewotCQlkZWJ1Z19sb2cobG9nZnAsICJBbGxvY2F0ZSBqb2JfZGVzZ19tc2cgZmFpbCIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzbHVybV9pbml0X2pvYl9kZXNjX21zZyhqKTsKLQkKLQlpZiAob3B0LT5wc19hY2NvdW50KQotCQlqLT5hY2NvdW50ID0gc3RyZHVwKG9wdC0+cHNfYWNjb3VudCk7Ci0KLQlqLT5jb250aWd1b3VzICAgICA9IG9wdC0+cHNfY29udGlndW91czsKLQlqLT5mZWF0dXJlcyAgICAgICA9IG9wdC0+cHNfY29uc3RyYWludHM7Ci0Jai0+aW1tZWRpYXRlICAgICAgPSAodWludDE2X3Qpb3B0LT5wc19pbW1lZGlhdGU7Ci0Jai0+bmFtZSAgICAgICAgICAgPSBvcHQtPnBzX2pvYl9uYW1lOwotCi0JaWYgKG9wdC0+cHNfbm9kZWxpc3QpIAotCQlqLT5yZXFfbm9kZXMgPSBzdHJkdXAob3B0LT5wc19ub2RlbGlzdCk7Ci0JLyoKLQkgKiBGSVhNRTogaGFuZGxlIC13IG5vZGVsaXN0IHJlcXVlc3QKLQkgKi8KLQkvKgotCWlmKGotPnJlcV9ub2RlcykgewotCQlobCA9IGhvc3RsaXN0X2NyZWF0ZShqLT5yZXFfbm9kZXMpOwotCQlob3N0bGlzdF9yYW5nZWRfc3RyaW5nKGhsLCBzaXplb2YoYnVmKSwgYnVmKTsKLQkJeGZyZWUob3B0Lm5vZGVsaXN0KTsKLQkJb3B0Lm5vZGVsaXN0ID0geHN0cmR1cChidWYpOwotCQlob3N0bGlzdF91bmlxKGhsKTsKLQkJaG9zdGxpc3RfcmFuZ2VkX3N0cmluZyhobCwgc2l6ZW9mKGJ1ZiksIGJ1Zik7Ci0JCWhvc3RsaXN0X2Rlc3Ryb3koaGwpOwotCQl4ZnJlZShqLT5yZXFfbm9kZXMpOwotCQlqLT5yZXFfbm9kZXMgPSB4c3RyZHVwKGJ1Zik7Ci0JfQotCSovCi0JaWYob3B0LT5wc19kaXN0cmlidXRpb24gPT0gU0xVUk1fRElTVF9BUkJJVFJBUlkKLQkgICAmJiAhai0+cmVxX25vZGVzKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwiV2l0aCBBcmJpdHJhcnkgZGlzdHJpYnV0aW9uIHlvdSBuZWVkIHRvIFwKLQkJCQlzcGVjaWZ5IGEgbm9kZWxpc3Qgb3IgaG9zdGZpbGUgd2l0aCB0aGUgLXcgb3B0aW9uIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlqLT5leGNfbm9kZXMgPSBvcHQtPnBzX2V4Y19ub2RlczsKLQlqLT5wYXJ0aXRpb24gPSBvcHQtPnBzX3BhcnRpdGlvbjsKLQlqLT5taW5fbm9kZXMgPSBvcHQtPnBzX21pbl9ub2RlczsKLQlpZiAob3B0LT5wc19taW5fc29ja2V0c19wZXJfbm9kZSAhPSBOT19WQUwpCi0JCWotPm1pbl9zb2NrZXRzID0gKHVpbnQxNl90KW9wdC0+cHNfbWluX3NvY2tldHNfcGVyX25vZGU7Ci0JaWYgKG9wdC0+cHNfbWluX2NvcmVzX3Blcl9zb2NrZXQgIT0gTk9fVkFMKQotCQlqLT5taW5fY29yZXMgPSAodWludDE2X3Qpb3B0LT5wc19taW5fY29yZXNfcGVyX3NvY2tldDsKLQlpZiAob3B0LT5wc19taW5fdGhyZWFkc19wZXJfY29yZSAhPSBOT19WQUwpCi0JCWotPm1pbl90aHJlYWRzID0gKHVpbnQxNl90KW9wdC0+cHNfbWluX3RocmVhZHNfcGVyX2NvcmU7Ci0Jai0+dXNlcl9pZCA9IG9wdC0+cHNfdWlkOwotCWotPmRlcGVuZGVuY3kgPSBvcHQtPnBzX2RlcGVuZGVuY3k7Ci0JaWYgKG9wdC0+cHNfbmljZSkKLQkJai0+bmljZSA9ICh1aW50MTZfdCkoTklDRV9PRkZTRVQgKyBvcHQtPnBzX25pY2UpOwotCWotPnRhc2tfZGlzdCA9ICh1aW50MTZfdClvcHQtPnBzX2Rpc3RyaWJ1dGlvbjsKLQlpZiAob3B0LT5wc19wbGFuZV9zaXplICE9IE5PX1ZBTCkKLQkJai0+cGxhbmVfc2l6ZSA9ICh1aW50MTZfdClvcHQtPnBzX3BsYW5lX3NpemU7Ci0Jai0+Z3JvdXBfaWQgPSBvcHQtPnBzX2dpZDsKLQlqLT5tYWlsX3R5cGUgPSBvcHQtPnBzX21haWxfdHlwZTsKLQotCWlmIChvcHQtPnBzX250YXNrc19wZXJfbm9kZSAhPSBOT19WQUwpCi0JCWotPm50YXNrc19wZXJfbm9kZSA9ICh1aW50MTZfdClvcHQtPnBzX250YXNrc19wZXJfbm9kZTsKLQlpZiAob3B0LT5wc19udGFza3NfcGVyX3NvY2tldCAhPSBOT19WQUwpCi0JCWotPm50YXNrc19wZXJfc29ja2V0ID0gKHVpbnQxNl90KW9wdC0+cHNfbnRhc2tzX3Blcl9zb2NrZXQ7Ci0JaWYgKG9wdC0+cHNfbnRhc2tzX3Blcl9jb3JlICE9IE5PX1ZBTCkKLQkJai0+bnRhc2tzX3Blcl9jb3JlID0odWludDE2X3Qpb3B0LT5wc19udGFza3NfcGVyX2NvcmU7Ci0KLQlpZiAob3B0LT5wc19tYWlsX3VzZXIpCi0JCWotPm1haWxfdXNlciA9IHN0cmR1cChvcHQtPnBzX21haWxfdXNlcik7Ci0JaWYgKG9wdC0+cHNfYmVnaW4pCi0JCWotPmJlZ2luX3RpbWUgPSBvcHQtPnBzX2JlZ2luOwotCWlmIChvcHQtPnBzX2xpY2Vuc2VzKQotCQlqLT5saWNlbnNlcyA9IHN0cmR1cChvcHQtPnBzX2xpY2Vuc2VzKTsKLQlpZiAob3B0LT5wc19uZXR3b3JrKQotCQlqLT5uZXR3b3JrID0gc3RyZHVwKG9wdC0+cHNfbmV0d29yayk7Ci0JaWYgKG9wdC0+cHNfY29tbWVudCkKLQkJai0+Y29tbWVudCA9IHN0cmR1cChvcHQtPnBzX2NvbW1lbnQpOwotCi0JaWYgKG9wdC0+cHNfaG9sZCkKLQkJai0+cHJpb3JpdHkgPSAwOwotCWlmIChvcHQtPnBzX2pvYmlkICE9IE5PX1ZBTCkKLQkJai0+am9iX2lkID0gb3B0LT5wc19qb2JpZDsKLQotCSNpZiBTWVNURU1fRElNRU5TSU9OUwotCWlmIChvcHQtPnBzX2dlb21ldHJ5WzBdID4gMCkgewotCQlpbnQgaTsKLQkJZm9yIChpPTA7IGk8U1lTVEVNX0RJTUVOU0lPTlM7IGkrKykKLQkJCWotPmdlb21ldHJ5W2ldID0gb3B0LT5wc19nZW9tZXRyeVtpXTsKLQl9Ci0JI2VuZGlmCi0KLQlpZiAob3B0LT5wc19jb25uX3R5cGUgIT0gKHVpbnQxNl90KSBOT19WQUwpCi0JCWotPmNvbm5fdHlwZSA9IG9wdC0+cHNfY29ubl90eXBlOwotCQkJCi0JaWYgKG9wdC0+cHNfcmVib290KQotCQlqLT5yZWJvb3QgPSAxOwotCWlmIChvcHQtPnBzX25vX3JvdGF0ZSkKLQkJai0+cm90YXRlID0gMDsKLQotCWlmIChvcHQtPnBzX2JscnRzaW1hZ2UpCi0JCWotPmJscnRzaW1hZ2UgPSBzdHJkdXAob3B0LT5wc19ibHJ0c2ltYWdlKTsKLQlpZiAob3B0LT5wc19saW51eGltYWdlKQotCQlqLT5saW51eGltYWdlID0gc3RyZHVwKG9wdC0+cHNfbGludXhpbWFnZSk7Ci0JaWYgKG9wdC0+cHNfbWxvYWRlcmltYWdlKQotCQlqLT5tbG9hZGVyaW1hZ2UgPSBzdHJkdXAob3B0LT5wc19tbG9hZGVyaW1hZ2UpOwotCWlmIChvcHQtPnBzX3JhbWRpc2tpbWFnZSkKLQkJai0+cmFtZGlza2ltYWdlID0gc3RyZHVwKG9wdC0+cHNfcmFtZGlza2ltYWdlKTsKLQotCWlmIChvcHQtPnBzX21heF9ub2RlcykKLQkJai0+bWF4X25vZGVzID0gb3B0LT5wc19tYXhfbm9kZXM7Ci0JaWYgKG9wdC0+cHNfbWF4X3NvY2tldHNfcGVyX25vZGUpCi0JCWotPm1heF9zb2NrZXRzID0gb3B0LT5wc19tYXhfc29ja2V0c19wZXJfbm9kZTsKLQlpZiAob3B0LT5wc19tYXhfY29yZXNfcGVyX3NvY2tldCkKLQkJai0+bWF4X2NvcmVzID0gb3B0LT5wc19tYXhfY29yZXNfcGVyX3NvY2tldDsKLQlpZiAob3B0LT5wc19tYXhfdGhyZWFkc19wZXJfY29yZSkKLQkJai0+bWF4X3RocmVhZHMgPSBvcHQtPnBzX21heF90aHJlYWRzX3Blcl9jb3JlOwotCi0JaWYgKG9wdC0+cHNfam9iX21pbl9jcHVzICE9IE5PX1ZBTCkKLQkJai0+am9iX21pbl9wcm9jcyA9IG9wdC0+cHNfam9iX21pbl9jcHVzOwotCWlmIChvcHQtPnBzX2pvYl9taW5fc29ja2V0cyAhPSBOT19WQUwpCi0JCWotPmpvYl9taW5fc29ja2V0cyA9IG9wdC0+cHNfam9iX21pbl9zb2NrZXRzOwotCWlmIChvcHQtPnBzX2pvYl9taW5fY29yZXMgIT0gTk9fVkFMKQotCQlqLT5qb2JfbWluX2NvcmVzID0gb3B0LT5wc19qb2JfbWluX2NvcmVzOwotCWlmIChvcHQtPnBzX2pvYl9taW5fdGhyZWFkcyAhPSBOT19WQUwpCi0JCWotPmpvYl9taW5fdGhyZWFkcyA9IG9wdC0+cHNfam9iX21pbl90aHJlYWRzOwotCWlmIChvcHQtPnBzX2pvYl9taW5fbWVtb3J5ICE9IE5PX1ZBTCkKLQkJai0+am9iX21pbl9tZW1vcnkgPSBvcHQtPnBzX2pvYl9taW5fbWVtb3J5OwotCWlmIChvcHQtPnBzX2pvYl9taW5fdG1wX2Rpc2sgIT0gTk9fVkFMKQotCQlqLT5qb2JfbWluX3RtcF9kaXNrID0gb3B0LT5wc19qb2JfbWluX3RtcF9kaXNrOwotCWlmIChvcHQtPnBzX292ZXJjb21taXQpIHsKLQkJai0+bnVtX3Byb2NzICA9IG9wdC0+cHNfbWluX25vZGVzOwotCQlqLT5vdmVyY29tbWl0ID0gb3B0LT5wc19vdmVyY29tbWl0OwotCX0gZWxzZQotCQlqLT5udW1fcHJvY3MgID0gb3B0LT5wc19ucHJvY3MgKiBvcHQtPnBzX2NwdXNfcGVyX3Rhc2s7Ci0JaWYgKG9wdC0+cHNfbnByb2NzX3NldCkKLQkJai0+bnVtX3Rhc2tzICA9IG9wdC0+cHNfbnByb2NzOwotCi0JaWYgKG9wdC0+cHNfY3B1c19zZXQpCi0JCWotPmNwdXNfcGVyX3Rhc2sgPSBvcHQtPnBzX2NwdXNfcGVyX3Rhc2s7Ci0KLQlpZiAob3B0LT5wc19ub19raWxsKQotCQlqLT5raWxsX29uX25vZGVfZmFpbCA9IDA7Ci0JaWYgKG9wdC0+cHNfdGltZV9saW1pdCAhPSBOT19WQUwpCi0JCWotPnRpbWVfbGltaXQgID0gb3B0LT5wc190aW1lX2xpbWl0OwotCWotPnNoYXJlZCA9IG9wdC0+cHNfc2hhcmVkOwotCi0JLyoKLQkgKiBzcnVuIHVzZXMgdGhlIHNhbWUgbGlzdGVuaW5nIHBvcnQgZm9yIHRoZSBhbGxvY2F0aW9uIHJlc3BvbnNlCi0JICogbWVzc2FnZSBhcyBmb3IgYWxsIG90aGVyIG1lc3NhZ2UuCi0JICogc2x1cm1jdGxkX2NvbW1fYWRkciBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQgYnkgc2x1cm1jdGxkX21zZ19pbml0KCkKLQkgKi8KLQlqLT5hbGxvY19yZXNwX3BvcnQgPSBzbHVybWN0bGRfY29tbV9hZGRyLnBvcnQ7Ci0Jai0+b3RoZXJfcG9ydCA9IHNsdXJtY3RsZF9jb21tX2FkZHIucG9ydDsKLQotCXJldHVybiBqOwotfQotCi0vKgotICogQ2FsbGJhY2sgaGFuZGxlcnMgZm9yIGpvYiBhbGxvY2F0aW9uLgotICovCi1zdGF0aWMgdm9pZCAKLXRpbWVvdXRfaGFuZGxlcihzcnVuX3RpbWVvdXRfbXNnX3QgKm1zZykKLXsKLQlzdGF0aWMgdGltZV90IGxhc3RfdGltZW91dCA9IDA7Ci0KLQlpZiAobXNnLT50aW1lb3V0ICE9IGxhc3RfdGltZW91dCkgewotCQlsYXN0X3RpbWVvdXQgPSBtc2ctPnRpbWVvdXQ7Ci0JCWRlYnVnX2xvZyhsb2dmcCwiY2FsbGJhY2stLS0+dGltZW91dF9oYW5kbGVyOiIpOwotCQlkZWJ1Z19sb2cobG9nZnAsImpvYiB0aW1lIGxpbWl0IHRvIGJlIHJlYWNoZWQgYXQgJXMiLCAKLQkJCWN0aW1lKCZtc2ctPnRpbWVvdXQpKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIAotdXNlcl9tc2dfaGFuZGxlcihzcnVuX3VzZXJfbXNnX3QgKm1zZykKLXsKLQlkZWJ1Z19sb2cobG9nZnAsImNhbGxiYWNrLS0tPnVzcl9tc2dfaGFuZGxlcjogJXMiLCBtc2ctPm1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1waW5nX2hhbmRsZXIoc3J1bl9waW5nX21zZ190ICptc2cpIAotewotCWRlYnVnX2xvZyhsb2dmcCwiY2FsbGJhY2stLS0+cGluZ3RfaGFuZGxlcjoiKTsKLX0KLQotCi1zdGF0aWMgdm9pZCAKLW5vZGVfZmFpbF9oYW5kbGVyKHNydW5fbm9kZV9mYWlsX21zZ190ICptc2cpCi17Ci0JZGVidWdfbG9nKGxvZ2ZwLCJjYWxsYmFjay0tLT5ub2RlX2ZhaWxfaGFuZGxlcjogTm9kZSBmYWlsdXJlIG9uICVzIiwgbXNnLT5ub2RlbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIAotam9iX2NvbXBsZXRlX2hhbmRsZXIoc3J1bl9qb2JfY29tcGxldGVfbXNnX3QgKiBtc2cpCi17Ci0JZGVidWdfbG9nKGxvZ2ZwLCJjYWxsYmFjay0tLT5qb2JfY29tcGxldGVfaGFuZGxlcjogRm9yY2UgVGVybWluYXRlIGpvYlxuIik7Ci19Ci0KLXN0YXRpYyBib29sIAotd2FpdF9yZXRyeSgpCi17Ci0Jc3RhdGljIGludCBjb3VudCA9IDA7Ci0KLQlpZiAoY291bnQgPCBNQVhfUkVUUklFUykgewotCQlzbGVlcCgrK2NvdW50KTsKLQkJcmV0dXJuIHRydWU7Ci0JfWVsc2UKLQkJcmV0dXJuIGZhbHNlOwotfQotCi0vKgotICogSW5zdGFsbCBzaWdubyBoYW5kbGVyLgotICovCi1zdGF0aWMgU2lnRnVuYyAqCi14c2lnbmFsKGludCBzaWdubywgU2lnRnVuYyAqZikKLXsKLQlzdHJ1Y3Qgc2lnYWN0aW9uIHNhLCBvbGRfc2E7Ci0KLQlzYS5zYV9oYW5kbGVyID0gZjsKLQlzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7Ci0Jc2lnYWRkc2V0KCZzYS5zYV9tYXNrLCBzaWdubyk7Ci0Jc2Euc2FfZmxhZ3MgPSAwOwotCWlmIChzaWdhY3Rpb24oc2lnbm8sICZzYSwgJm9sZF9zYSkgPCAwKQotCQlkZWJ1Z19sb2cobG9nZnAsInhzaWduYWwoJWQpIGZhaWxlZDogJW0iLCBzaWdubyk7Ci0KLQlyZXR1cm4gb2xkX3NhLnNhX2hhbmRsZXI7Ci19Ci0KLS8qCi0gKiBTaWduYWwgaGFuZGxlciBkdXJpbmcgYWxsb2NhdGluZyBqb2JzLgotICovCi1zdGF0aWMgdm9pZAotc2lnbmFsX3doaWxlX2FsbG9jYXRpbmcoaW50IHNpZ25vKQotewotCWRlc3Ryb3lfam9iID0gMTsKLQlpZiAoc3luY19tc2dfYWRkciAmJiAoc3luY19tc2dfYWRkci0+c2x1cm1fam9iaWQgPiAwKSkgCi0JCXNsdXJtX2NvbXBsZXRlX2pvYihzeW5jX21zZ19hZGRyLT5zbHVybV9qb2JpZCwgMCk7Ci19Ci0KLQotLyoKLSAqIFBlbmRpbmcgY2FsbGJhY2sgZHVyaW5nIGJsb2NrIGpvYiBhbGxvY2F0aW9uLgotICovCi1zdGF0aWMgdm9pZAotc2V0X3BlbmRpbmdfam9iaWQodWludDMyX3QgaWQpCi17Ci0JLyogCi0JICogVGhpcyBjYWxsYmFjayBjYW4gc2V0IHRoZSBqb2JpZCBldmVuIGluIHRoZSBjYXNlIG9mIGJsb2NraW5nIGFsbG9jYXRpb24uCi0JICogU28gcHJveHkgYWdlbnQgY2FuIGdldCB0aGUgc2x1cm0gam9iaWQgYW5kIHdpbGwgbm90IGJsb2NrIC4KLQkgKi8KLQkgaWYgKHN5bmNfbXNnX2FkZHIgIT0gTlVMTCkgewotCQlzeW5jX21zZ19hZGRyLT5zbHVybV9qb2JpZCA9IChpbnQpIGlkOwotCQlzeW5jX21zZ19hZGRyLT5qb2JpZF9zZXQgPSB0cnVlOwotCX0KLX0KLQotc3RhdGljIHZvaWQgCi1pZ25vcmVfc2lnbmFsKGludCBzaWdubykKLXsKLQkvKmRvIG5vdGhpbmcqLwotfQotCi0vKgotICogUmVsZWFzZSBhbGxvY2F0ZWQgbWVtb3J5IGluIGpvYl9kZXNjX21zZy4KLSAqLwotc3RhdGljIHZvaWQgCi1kZXN0cm95X2pvYl9kZXNjX21zZyhqb2JfZGVzY19tc2dfdCAqIGopCi17Ci0JaWYgKGogIT0gTlVMTCkgewotCQlpZiAoai0+YWNjb3VudCAhPSBOVUxMKQotCQkJZnJlZShqLT5hY2NvdW50KTsKLQkJaWYgKGotPnJlcV9ub2RlcyAhPSBOVUxMKSAKLQkJCWZyZWUoai0+cmVxX25vZGVzKTsKLQkJaWYgKGotPm1haWxfdXNlciAhPSBOVUxMKQotCQkJZnJlZShqLT5tYWlsX3VzZXIpOwotCQlpZiAoai0+bGljZW5zZXMgIT0gTlVMTCkKLQkJCWZyZWUoai0+bGljZW5zZXMpOwotCQlpZiAoai0+bmV0d29yayAhPSBOVUxMKQotCQkJZnJlZShqLT5uZXR3b3JrKTsKLQkJaWYgKGotPmNvbW1lbnQgIT0gTlVMTCkKLQkJCWZyZWUoai0+Y29tbWVudCk7Ci0JCWlmIChqLT5ibHJ0c2ltYWdlICE9IE5VTEwpCi0JCQlmcmVlKGotPmJscnRzaW1hZ2UpOwotCQlpZiAoai0+bGludXhpbWFnZSAhPSBOVUxMKQotCQkJZnJlZShqLT5saW51eGltYWdlKTsKLQkJaWYgKGotPm1sb2FkZXJpbWFnZSAhPSBOVUxMKQotCQkJZnJlZShqLT5tbG9hZGVyaW1hZ2UpOwotCQlpZiAoai0+cmFtZGlza2ltYWdlICE9IE5VTEwpCi0JCQlmcmVlKGotPnJhbWRpc2tpbWFnZSk7Ci0KLQkJZnJlZShqKTsKLQl9Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBzb2NrZXQgdG8gY29tbXVuaWNhdGUgd2l0aCBzbHVybWN0bGQgCi0gKiBkdXJpbmcgam9iIGFsbG9jYXRpb24uIFRoaXMgZmQgd2lsbCBiZSBjbG9zZWQKLSAqIG9uIGV4ZWN1dGluZyBzcnVuIGFmdGVyIGpvYiBhbGxvY2F0aW9uLgotICovCi1zbHVybV9mZCAKLXNsdXJtX2luaXRfbXNnX2VuZ2luZV9wb3J0KHVpbnQxNl90IHBvcnQpCi17Ci0Jc2x1cm1fYWRkciBhZGRyOwotCi0JaW50IGZkOwotCWludCByYzsKLQljb25zdCBpbnQgb25lID0gMTsKLQljb25zdCBzaXplX3Qgc3oxID0gc2l6ZW9mKG9uZSk7Ci0KLQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCWFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOwotCi0JaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApKSA8IDApIHsKLQkJZGVidWdfbG9nKGxvZ2ZwLCJjcmVhdGUgc2x1cm1jdGxkIHNvY2tldCBlcnJvclxuIik7Ci0JCXJldHVybiBmZDsKLQl9Ci0JcmMgPSBzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsJm9uZSxzejEpOwotCWlmIChyYyA8IDApIHsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcmMgPSBiaW5kKGZkLCAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKLQlpZiAocmMgPCAwKSB7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXJjID0gbGlzdGVuKGZkLCAxMjgpOwotCWlmKHJjIDwgMCkgewotCQlnb3RvIGVycm9yOwotCX0KLQkKLQlyZXR1cm4gZmQ7Ci0KLWVycm9yOgotCWlmICgoY2xvc2UoZmQpIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkKLQkJY2xvc2UoZmQpOyAvKnRyeSBhZ2FpbiovCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qIAotICogSW5pdCBzb2NrZXQgZmQgdG8gaGFuZGxlIG1lc3NhZ2UgZnJvbSBzbHVybWN0bGQuCi0gKi8KLXNsdXJtX2ZkIAotc2x1cm1jdGxkX21zZ19pbml0KHNydW5fb3B0X3QgKiBvcHQpCi17Ci0Jc2x1cm1fYWRkciBzbHVybV9hZGRyZXNzOwotCXVpbnQxNl90IHBvcnQ7Ci0Jc3RhdGljIHNsdXJtX2ZkIHNsdXJtY3RsZF9mZCA9IDA7Ci0Jc29ja2xlbl90IG5hbWVfbGVuOwotCWludCBmdmFsOwotCWludCByYzsKLQkKLQlpZiAoc2x1cm1jdGxkX2ZkKQotCQlyZXR1cm4gc2x1cm1jdGxkX2ZkOwotCi0Jc2x1cm1jdGxkX2ZkID0gLTE7Ci0Jc2x1cm1jdGxkX2NvbW1fYWRkci5ob3N0bmFtZSA9IE5VTEw7Ci0Jc2x1cm1jdGxkX2NvbW1fYWRkci5wb3J0ID0gMDsKLQkKLQkvKiBvcGVuIHNvY2tldCAqLwotCWlmICgoc2x1cm1jdGxkX2ZkID0gc2x1cm1faW5pdF9tc2dfZW5naW5lX3BvcnQoMCkpIDwgMCkgewotCQlkZWJ1Z19sb2cobG9nZnAsICJzbHVybV9pbml0X21zZ19lbmdpbmVfcG9ydCBlcnJvclxuIik7Ci0JCXJldHVybiAtMTsJCi0JfQotCi0JLyogZ2V0IHNvY2tldCBwb3J0IG51bWJlciAqLwkKLQluYW1lX2xlbiA9IHNpemVvZihzbHVybV9hZGRyZXNzKTsKLQlpZiAoKHJjID0gZ2V0c29ja25hbWUoc2x1cm1jdGxkX2ZkLCAmc2x1cm1fYWRkcmVzcywgJm5hbWVfbGVuKSkgPCAwKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwgImdldHNvY2tuYW1lIGVycm9yXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIHNldCBub24tYmxvY2tpbmcgKi8KLQlmdmFsID0gZmNudGwoc2x1cm1jdGxkX2ZkLCBGX0dFVEZMLCAwKTsKLQlmY250bChzbHVybWN0bGRfZmQsIEZfU0VURkwsIGZ2YWx8T19OT05CTE9DSyk7Ci0KLQkvKiBzZXQgRkRfQ0xPRVhFQzogY2xvc2Ugc2x1cm1jdGxkX2ZkIHdoZW4gZXhlYyhzcnVuKSBhZnRlciBhbGxvY2F0aW9uICovCi0JZnZhbCA9IGZjbnRsKHNsdXJtY3RsZF9mZCwgRl9HRVRGRCwgMCk7Ci0JZmNudGwoc2x1cm1jdGxkX2ZkLCBGX1NFVEZELCBmdmFsfEZEX0NMT0VYRUMpOwotCQotCS8qIHNldCBnbG9iYWwgdmFyLjogc2x1cm1jdGxkX2NvbW1fYWRkciAqLwotCXNsdXJtY3RsZF9jb21tX2FkZHIuaG9zdG5hbWUgPSBzdHJkdXAob3B0LT5wc19jdHJsX2NvbW1faWZobik7Ci0JcG9ydCA9IG50b2hzKHNsdXJtX2FkZHJlc3Muc2luX3BvcnQpOwotCXNsdXJtY3RsZF9jb21tX2FkZHIucG9ydCA9IHBvcnQ7Ci0KLQlyZXR1cm4gc2x1cm1jdGxkX2ZkOwotfQotCi0vKgotICogQWxsb2NhdGUgam9iIHJlc291cmNlIGluIHJlc3BvbnNlIHRvIFN1Ym1pdEpvYiBjbWQuCi0gKiBDYWxsZWQgaW4gY2hpbGQgcHJvY2VzcyAKLSAqLwotc3RhdGljIHJlc291cmNlX2FsbG9jYXRpb25fcmVzcG9uc2VfbXNnX3QgKgotYWxsb2NhdGVfbm9kZXMoc3J1bl9vcHRfdCAqb3B0KQotewotCXJlc291cmNlX2FsbG9jYXRpb25fcmVzcG9uc2VfbXNnX3QgKnJlc3AgPSBOVUxMOwotCXNsdXJtX2FsbG9jYXRpb25fY2FsbGJhY2tzX3QgY2FsbGJhY2tzOwotCi0Jc2x1cm1jdGxkX21zZ19pbml0KG9wdCk7Ci0Jam9iX2Rlc2NfbXNnX3QgKmogPSBjcmVhdGVfam9iX2Rlc2NfbXNnX2Zyb21fb3B0cyhvcHQpOwotCWlmICghaikgCi0JCXJldHVybiBOVUxMOwotCQotCS8qIAotCSAqIERvIG5vdCByZS11c2UgZXhpc3Rpbmcgam9iIGlkIHdoZW4gc3VibWl0dGluZyBuZXcgam9iCi0JICogZnJvbSB3aXRoaW4gYSBydW5uaW5nIGpvYiAKLQkgKi8KLQlpZiAoKGotPmpvYl9pZCAhPSBOT19WQUwpICYmICFvcHQtPnBzX2pvYmlkX3NldCkgewotCQlpZiAoIW9wdC0+cHNfam9iaWRfc2V0KQkvKiBMZXQgc2x1cm1jdGxkIHNldCBqb2JpZCAqLwotCQkJai0+am9iX2lkID0gTk9fVkFMOwotCX0KLQljYWxsYmFja3MucGluZyA9IHBpbmdfaGFuZGxlcjsKLQljYWxsYmFja3MudGltZW91dCA9IHRpbWVvdXRfaGFuZGxlcjsKLQljYWxsYmFja3Muam9iX2NvbXBsZXRlID0gam9iX2NvbXBsZXRlX2hhbmRsZXI7Ci0JY2FsbGJhY2tzLnVzZXJfbXNnID0gdXNlcl9tc2dfaGFuZGxlcjsKLQljYWxsYmFja3Mubm9kZV9mYWlsID0gbm9kZV9mYWlsX2hhbmRsZXI7Ci0KLQkvKiBjcmVhdGUgbWVzc2FnZSB0aHJlYWQgdG8gaGFuZGxlIHBpbmdzIGFuZCBzdWNoIGZyb20gc2x1cm1jdGxkICovCi0JbXNnX3RociA9IHNsdXJtX2FsbG9jYXRpb25fbXNnX3Rocl9jcmVhdGUoJmotPm90aGVyX3BvcnQsICZjYWxsYmFja3MpOwotCi0JeHNpZ25hbChTSUdIVVAsIHNpZ25hbF93aGlsZV9hbGxvY2F0aW5nKTsKLQl4c2lnbmFsKFNJR0lOVCwgc2lnbmFsX3doaWxlX2FsbG9jYXRpbmcpOwotCXhzaWduYWwoU0lHUVVJVCwgc2lnbmFsX3doaWxlX2FsbG9jYXRpbmcpOwotCXhzaWduYWwoU0lHUElQRSwgc2lnbmFsX3doaWxlX2FsbG9jYXRpbmcpOwotCXhzaWduYWwoU0lHVEVSTSwgc2lnbmFsX3doaWxlX2FsbG9jYXRpbmcpOwotCXhzaWduYWwoU0lHVVNSMSwgc2lnbmFsX3doaWxlX2FsbG9jYXRpbmcpOwotCXhzaWduYWwoU0lHVVNSMiwgc2lnbmFsX3doaWxlX2FsbG9jYXRpbmcpOwotCi0vLwl3aGlsZSAoIXJlc3ApIAotCXsKLQkJLyogCi0JCSAqIEJMT0NLIHVuaXRsIGFsbG9jYXRpb24gZ3JhbnRlZCBvciBpbnRlcnJ1cHQgYnkgc2lnbmFsCi0JCSAqIGlmIGFsbG9jYXRpb24gYmxvY2tlZC9wZW5kaW5nLCAKLQkJICogdGhlIGpvYmlkIGNhbiBiZSByZXR1cm5lZCB0byBwYXJlbnQgYnkgJ3NldF9wZW5kaW5nX2pvYmlkJyBjYWxsYmFjawotCQkgKi8KLQkJcmVzcCA9IHNsdXJtX2FsbG9jYXRlX3Jlc291cmNlc19ibG9ja2luZyhqLCAwLCBzZXRfcGVuZGluZ19qb2JpZCk7Ci0JCWlmIChyZXNwID09IE5VTEwpCi0JCQlkZWJ1Z19sb2cobG9nZnAsICJibG9ja2luZyBqb2IgYWxsb2NhdGUgZXJyb3IhXG4iKTsKLS8vCQlpZiAoZGVzdHJveV9qb2IpIC8qIGludGVycnVwdCBieSBzaWduYWwgKi8KLS8vCQkJYnJlYWs7Ci0vLwkgCWVsc2UgaWYoIXJlc3AgJiYgIXdhaXRfcmV0cnkoKSkgLyogdGltZSBvdXQgKi8gCi0vLwkJCWJyZWFrOwkJCi0JfQotCQotCi0JeHNpZ25hbChTSUdIVVAsIGlnbm9yZV9zaWduYWwpOwotCXhzaWduYWwoU0lHSU5ULCBpZ25vcmVfc2lnbmFsKTsKLQl4c2lnbmFsKFNJR1FVSVQsIGlnbm9yZV9zaWduYWwpOwotCXhzaWduYWwoU0lHUElQRSwgaWdub3JlX3NpZ25hbCk7Ci0JeHNpZ25hbChTSUdURVJNLCBpZ25vcmVfc2lnbmFsKTsKLQl4c2lnbmFsKFNJR1VTUjEsIGlnbm9yZV9zaWduYWwpOwotCXhzaWduYWwoU0lHVVNSMiwgaWdub3JlX3NpZ25hbCk7Ci0KLQlkZXN0cm95X2pvYl9kZXNjX21zZyhqKTsKLQlyZXR1cm4gcmVzcDsKLX0KLQotc3RhdGljIGludCAKLWhhbmRsZV9hdHRhY2hfZGVidWcoKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IAotaGFuZGxlX2RlYnVnKCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIHRocmVhZCB0byByZXRyaWV2ZSBzcnVuJ3Mgc3Rkb3V0L3N0ZGVyciwKLSAqIGFuZCBzZW5kIHRvIHB0cCB1aS4KLSAqLwotc3RhdGljIGludCAKLWNyZWF0ZV9pb3RocmVhZChwdHBfam9iICogam9iKQotewotCXB0aHJlYWRfYXR0cl90IGF0dHI7Ci0JcHRocmVhZF90IGlvdGhyZWFkX2lkOwotCWludCByYzsKLQkJCQkKLQlwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7Ci0JcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7Ci0JaWYgKHB0aHJlYWRfY3JlYXRlKCZpb3RocmVhZF9pZCwgJmF0dHIsIHNydW5fb3V0cHV0X2ZvcndhcmRpbmcsICh2b2lkICopam9iKSA9PSAwICkgewotCQlqb2ItPmlvdGhyZWFkX2lkID0gaW90aHJlYWRfaWQ7Ci0JCWRlYnVnX2xvZyhsb2dmcCwgImlvdGhyZWFkIGNyZWF0ZWQgZm9yIGpvYlslZF0uXG4iLCBqb2ItPnNsdXJtX2pvYmlkKTsKLQkJcmMgPSAwOwotCX0gZWxzZSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwiZXJyb3Igb24gY3JlYXRpbmcgaW90aHJlYWQgZm9yIGpvYlslZF0uXG4iLCBqb2ItPnNsdXJtX2pvYmlkKTsKLQkJcmMgPSAgLTE7Ci0JfQkKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIGpvYiByZXNvdXJjZSBpZiBuZWNlc3NhcnksIGxhdW5jaCBqb2IKLSAqIGFuZCBmb3J3YXJkIGpvYiBzdGRvdXQvc3RkZXJyIHRvIHB0cCB1aS4gCi0gKi8KLXN0YXRpYyBpbnQgCi1hbGxvY2F0ZV9hbmRfbGF1bmNoX2pvYihpbnQgdHJhbnNfaWQsIGNoYXIgKiBqb2JzdWJpZCwgcHRwX2pvYiAqIGluLCBzcnVuX29wdF90ICogb3B0LCBpbnQgc3J1bl9hcmdjLCBjaGFyICogc3J1bl9hcmd2W10pCi17Ci0JaW50IGk7Ci0JaW50IHNobWlkOwotCWludCBmZF9vdXRbMl07Ci0JaW50IGZkX2VyclsyXTsKLQlib29sIG5lZWRfYWxsb2M7Ci0JcGlkX3QgcGlkOwotCWludCByYzsKLQljaGFyICogcHRyOwotCXN5bmNfbXNnICogcHAsICpwYzsKLQljaGFyICogbXNnOwotCXB0cF9qb2IgKiBqb2I7Ci0JY2hhciAqIG5hbWU7Ci0JcHRwX3Byb2Nlc3MgICogcDsKLQlpbnQgbm9kZV9pZCA9IC0xOwotCWludCB0YXNrX2lkID0gLTE7Ci0JaW50IHByb2NfcGlkID0gLTE7Ci0JcHRwX21hY2hpbmUgKiBtOwotCXB0cF9ub2RlICogbjsKLQlpbnQga2lsbF9qb2JpZCA9IC0xOwotCWludCBhbGxvY2F0ZWRfam9iaWQgPSAtMTsKLQlyZXNvdXJjZV9hbGxvY2F0aW9uX3Jlc3BvbnNlX21zZ190ICogcmVzcCA9IE5VTEw7Ci0KLQkvKiBjcmVhdGUgYSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiB0byBjb21tdW5pYXRlL3N5bmNocm9uaXplIHdpdGggY2hpbGQgcHJvY2VzcyAqLwotCWlmICgoc2htaWQgPSBzaG1nZXQoSVBDX1BSSVZBVEUsIHNpemVvZihzeW5jX21zZyksIFNITV9SfFNITV9XKSkgPCAwKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwiZXJyb3Igb24gY3JlYXRpbmcgc2hhcmVkIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JLyogaW5pdCBzaG0gKi8KLQlwcCA9IChzeW5jX21zZyAqKXNobWF0KHNobWlkLCAwLCAwKTsKLQlwcC0+c2x1cm1fam9iaWQgPSBKT0JJRF9JTklUOwotCXBwLT5qb2JpZF9zZXQgPSBmYWxzZTsgCi0JcHAtPmlvX3JlYWR5ID0gZmFsc2U7Ci0KLQlwaXBlKGZkX291dCk7Ci0JcGlwZShmZF9lcnIpOyAKLQkKLQlpZiAob3B0LT5wc19qb2JpZCA9PSBOT19WQUwgJiYgb3B0LT5wc19qb2JpZF9zZXQgPT0gZmFsc2UpCi0JCW5lZWRfYWxsb2MgPSB0cnVlOwotCWVsc2UgewotCQluZWVkX2FsbG9jID0gZmFsc2U7Ci0JCWFsbG9jYXRlZF9qb2JpZCA9IG9wdC0+cHNfam9iaWQ7Ci0JfQkKLQotCXN3aXRjaCAocGlkID0gZm9yaygpKSB7Ci0JY2FzZSAwOgkvKiBjaGlsZDogYWxsb2NhdGUgam9iIGlmIG5lY2Vzc2FyeSBhbmQgbGF1bmNoIGpvYiB2aWEgc3J1biAqLwotCQkvKiBhdHRhY2ggc2htICovCi0JCXBjID0gKHN5bmNfbXNnICopc2htYXQoc2htaWQsIDAsIDApOwotCQkvKgotCQkgKiBzYXZlIHNobSBhZGRyIGluIGEgZ2xvYmFsIHZhcmlhYmxlLgotCQkgKiBpZiBqb2IgYWxsb2NhdGlvbiBibG9ja2VkLCBTTFVSTSBjYWxsYmFjayBjYW4gc3RvcmUgdGhlIHBlbmRpbmcgam9iIGlkIGF0IHRoaXMgYWRkciwgCi0JCSAqIHNvIHBhcmVudCBjYW4gZ2V0IHRoZSBzbHVybSBqb2JpZCB3aXRob3V0IGJsb2NraW5nLgotCQkgKi8KLQkJc3luY19tc2dfYWRkciA9IHBjOwotCi0JCWlmIChuZWVkX2FsbG9jKSB7IC8qIHJlcXVpcmUgbmV3IGpvYiBhbGxvY2F0aW9uICovCi0JCQlyZXNwID0gYWxsb2NhdGVfbm9kZXMob3B0KTsJCQkKLQkJCWlmIChyZXNwID09IE5VTEwgfHwgcmVzcC0+bm9kZV9saXN0ID09IE5VTEwpIHsgLyogYWxsb2NhdGlvbiBmYWlsLCByYXJlbHkgaGFwcGVuICovCi0JCQkJcGMtPnNsdXJtX2pvYmlkID0gSk9CSURfRkFJTDsKLQkJCQlwYy0+am9iaWRfc2V0ID0gdHJ1ZTsKLQkJCQlzaG1kdChwYyk7Ci0JCQkJZXhpdChFWElUX0pPQl9BTExPQ19GQUlMKTsgCi0JCQl9Ci0KLQkJCS8qIGFsbG9jYXRpb24gZ3JhbnRlZCAqLwotCQkJaWYgKHBjLT5qb2JpZF9zZXQgID09IGZhbHNlKSB7Ci0JCQkJcGMtPnNsdXJtX2pvYmlkID0gcmVzcC0+am9iX2lkOwotCQkJCXBjLT5qb2JpZF9zZXQgPSB0cnVlOwotCQkJfQkKLQkJCQotCQkJa2lsbF9qb2JpZCA9IHJlc3AtPmpvYl9pZDsKLQotCQkJYXNwcmludGYoJnB0ciwiJWQiLChpbnQpcmVzcC0+am9iX2lkKTsKLQkJCS8qIHNydW4gd2lsbCBubyBtb3JlIGFsbG9jYXRlIHJlc291cmNlIGlmIFNMVVJNX0pPQklEIHNldC4gKi8KLQkJCXNldGVudigiU0xVUk1fSk9CSUQiLCBwdHIsIDEpOwotCQkJZnJlZShwdHIpOwotCQkJaWYgKHJlc3ApCi0JCQkJc2x1cm1fZnJlZV9yZXNvdXJjZV9hbGxvY2F0aW9uX3Jlc3BvbnNlX21zZyhyZXNwKTsKLQkJfQotCQllbHNlIHsgCi0JCQkvKiAKLQkJCSAqIHJ1biBpbiBhbGxvY2F0ZWQgam9iIChyZXF1aXJlZCBieSBBVFRBQ0ggZGVidWcpCi0JCQkgKi8KLQkJCXBjLT5zbHVybV9qb2JpZCA9IGFsbG9jYXRlZF9qb2JpZDsKLQkJCXBjLT5qb2JpZF9zZXQgPSB0cnVlOwotCQkJYXNwcmludGYoJnB0ciwiJWQiLGFsbG9jYXRlZF9qb2JpZCk7Ci0JCQlzZXRlbnYoIlNMVVJNX0pPQklEIiwgcHRyLCAxKTsKLQkJCWZyZWUocHRyKTsKLQkJfQotCQkvKgotCQkgKiBCTE9DSyB1bnRpbCBwYXJlbnQgc2V0cyBpb19yZWFkeSB0byB0cnVlLAotCQkgKiB3aGljaCBtZWFucyB0aGUgaW8gdGhyZWFkIGlzIHJlYWR5LgotCQkgKiBQYXJlbnQgc2V0cyB0aGlzIGZsYWcgYWZ0ZXIgZ2V0dGluZyBqb2JpZCBhbmQgY3JlYXRlIGlvdGhyZWFkLgotCQkgKi8KLQkJd2hpbGUgKCFwYy0+aW9fcmVhZHkgJiYgd2FpdF9yZXRyeSgpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghcGMtPmlvX3JlYWR5KSB7Ci0JCQlpZiAobmVlZF9hbGxvYyl7Ci0JCQkJLy9zbHVybV9jb21wbGV0ZV9qb2Ioa2lsbF9qb2JpZCwgMCk7Ci0JCQkJc2x1cm1fa2lsbF9qb2Ioa2lsbF9qb2JpZCwgU0lHS0lMTCwgMCk7Ci0JCQl9CQotCQkJc2htZHQocGMpOwotCQkJZGVidWdfbG9nKGxvZ2ZwLCAiY2hpbGQgZXhpdHMgZHVlIHRvIGlvdGhyZWFkIGZhaWxcbiIpOwotCQkJZXhpdChFWElUX0pPQl9JT1RIUkVBRF9GQUlMKTsgCi0JCX0gZWxzZSB7IC8qIGlvIHRocmVhZCByZWFkeSAqLwotCQkJc2htZHQocGMpOwotCQkJLyogcmVkaXJlY3Qgc3J1bidzIHN0ZG91dCBhbmQgc3RkZXJyICovCi0JCQljbG9zZShmZF9vdXRbMF0pOwotCQkJY2xvc2UoZmRfZXJyWzBdKTsKLQkJCS8qIGpvYiBzdGRvdXQrc3RkZXJyID09PiBzcnVuJ3Mgc3Rkb3V0ICovCi0JCQlkdXAyKGZkX291dFsxXSwxKTsKLQkJCS8qIHNydW4gb3V0cHV0cyA9PT4gc3J1bidzIHN0ZGVyciAqLwotCQkJZHVwMihmZF9lcnJbMV0sMik7Ci0gCQkJLyogc3Bhd24gam9iIHdpdGggc3J1biBjbWQgKi8KLQkJCXJjID0gZXhlY3ZwKHNydW5fYXJndlswXSwgc3J1bl9hcmd2KTsgCi0JCQlpZiAocmMgPCAwKSB7LyogcmFyZWx5IGhhcHBlbnMgKi8KLQkJCQlpZiAobmVlZF9hbGxvYykgewotCQkJCQkvL3NsdXJtX2NvbXBsZXRlX2pvYihraWxsX2pvYmlkLCAwKTsKLSAJCQkJCXNsdXJtX2tpbGxfam9iKGtpbGxfam9iaWQsIFNJR0tJTEwsIDApOwotCQkJCX0JCi0JCQkJZGVidWdfbG9nKGxvZ2ZwLCJzcnVuIGV4ZWMgZmFpbFxuIik7Ci0JCQkJZXhpdChFWElUX0VYRUNfRkFJTCk7IAotCQkJfQkKLQkJfQotCQlicmVhazsKLQljYXNlIC0xOi8qIGVycm9yICovCi0JCWRlYnVnX2xvZyhsb2dmcCwiY2hpbGQgZm9yayBlcnJvclxuIik7Ci0JCWNsb3NlKGZkX291dFswXSk7Ci0JCWNsb3NlKGZkX291dFsxXSk7Ci0JCWNsb3NlKGZkX2VyclswXSk7Ci0JCWNsb3NlKGZkX2VyclsxXSk7Ci0JCWlmIChwcCkKLQkJCXNobWR0KHBwKTsKLQkJc2htY3RsKHNobWlkLElQQ19STUlELCAwKTsKLQkJcmV0dXJuIC0xOwotCWRlZmF1bHQ6LyogcGFyZW50ICovCi0JCS8qIAotCQkgKiBCTE9DSyB1bnRpbCBjaGlsZCBzZXQgdGhlIHNsdXJtIGpvYmlkICAKLQkJICovCi0JCXdoaWxlICghcHAtPmpvYmlkX3NldCAmJiB3YWl0X3JldHJ5KCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghcHAtPmpvYmlkX3NldCB8fCBwcC0+c2x1cm1fam9iaWQgPT0gSk9CSURfRkFJTCkgeyAKLQkJCW1zZyA9ICJKb2IgYWxsb2NhdGlvbiBmYWlsIVxuUGxlYXNlIGNoZWNrIFJNUyBhbmQgam9iIGNvbmZpZyBwYXJhbWV0ZXJzISI7Ci0JCQlkZWJ1Z19sb2cobG9nZnAsIG1zZyk7Ci0JCQlzZW5kSm9iU3ViRXJyb3JFdmVudCh0cmFuc19pZCwgam9ic3ViaWQsIG1zZyk7Ci0JCQljbG9zZShmZF9vdXRbMF0pOwotCQkJY2xvc2UoZmRfb3V0WzFdKTsKLQkJCWNsb3NlKGZkX2VyclswXSk7Ci0JCQljbG9zZShmZF9lcnJbMV0pOwotCQkJc2htZHQocHApOwotCQkJa2lsbChwaWQsIFNJR0tJTEwpOyAKLQkJCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIDApOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJLyogY2VhdGUgam9iIHN0cnVjdHVyZSBhZnRlciBnZXR0aW5nIHNsdXJtIGpvYmlkICovCi0JCWluLT5zbHVybV9qb2JpZCA9IHBwLT5zbHVybV9qb2JpZDsKLQkJam9iID0gbmV3X2pvYihpbi0+bnVtX3Byb2NzLCBpbi0+ZGVidWcsIGluLT5wdHBfam9iaWQsIGluLT5zbHVybV9qb2JpZCwgaW4tPmRlYnVnX2pvYmlkLCBuZWVkX2FsbG9jKTsKLQkJam9iLT5zcnVuX3BpZCA9IHBpZDsKLQkJCi0JCQotCQkvKiBzZW5kIE9LIGV2ZW50IGZvciBTdWJtaXRKb2IgY21kICovCQotCQlzZW5kT0tFdmVudCh0cmFuc19pZCk7Ci0JCi0JCS8qIHNlbmQgTmV3Sm9iIGV2ZW50ICovCi0JCWFzcHJpbnRmKCZuYW1lLCBTTFVSTV9KT0JfTkFNRV9GTVQsIGpvYi0+c2x1cm1fam9iaWQpOwotCQlzZW5kTmV3Sm9iRXZlbnQoZ1RyYW5zSUQsIGpvYi0+cHRwX2pvYmlkLCBuYW1lLCBqb2JzdWJpZCwgSk9CX1NUQVRFX0lOSVQpOwotCQlmcmVlKG5hbWUpOwotCi0JCS8qCi0JCSAqIEFzIHJlcXVpcmVkIGJ5IHB0cCB1aSwKLQkJICogb25lIE5ld1Byb2Nlc3MgRXZlbnQgTVVTVCBiZSBzZW50IGZvciBlYWNoIHByb2Nlc3Mgb2YgdGhpcyBuZXcgam9iLgotCQkgKi8KLQkJdGFza19pZCA9IDA7Ci0JCW5vZGVfaWQgPSAwOwotCQlwcm9jX3BpZCA9IDA7Ci0JCVNldExpc3QoZ01hY2hpbmVMaXN0KTsKLQkJLyogQnkgbm93LCBvbmx5IDEgbWFjaGluZSBpcyBzdXBwb3J0ZWQgKi8KLQkJbSA9IChwdHBfbWFjaGluZSAqKUdldEZpcnN0RWxlbWVudChnTWFjaGluZUxpc3QpOwotCQlTZXRMaXN0KG0tPm5vZGVzKTsKLQkJbiA9IChwdHBfbm9kZSAqKUdldExpc3RFbGVtZW50KG0tPm5vZGVzKTsKLQkJbm9kZV9pZCA9IG4tPmlkOyAvKiBub2RlX2lkIGNhbGN1bGF0ZWQgYnkgZ2VuZXJhdGVpZCgpICovCi0KLQkJZm9yIChpID0gMDsgaSA8IGpvYi0+bnVtX3Byb2NzOyBpKyspIHsKLQkJCS8qCi0JCQkgKiBTTFVSTSBwcm92aWRlIG5vIEFQSSB0byBnZXQgcGlkICxub2RlX2lkIGFuZCB0YXNrX2lkLgotCQkJICogQW5kIHRoZXNlIGluZm9ybWF0aW9uIGNhbiBvYnRhaW5lZCBPTkxZIGFmdGVyIGpvYiBsYXVuY2hpbmcuCi0JCQkgKiBTbyBGQUtFIHRoZW0gYnkgbm93LiAKLQkJCSAqIHNlbmROZXdQcm9jZXNzRXZlbnQoKSBzaG91bGRuJ3QgbWFrZSB1c2Ugb2YgdGhlc2UgZmlsZWRzLgotCQkJICogRklYTUU6Ci0JCQkgKgljYWxsIHNsdXJtX2pvYl9zdGVwX2xheW91dF9nZXQoKSB0byBvYnRhaW4gc3VjaCBpbmZvcm1hdGlvbgotCQkJICoJYW5kIHNlbmQgdG8gdWkgdmlhIHNlbmRQcm9jZXNzQ2hhbmdlRXZlbnQJCi0JCQkgKi8KLQkJCXAgPSBuZXdfcHJvY2Vzcyhqb2IsIG5vZGVfaWQsIHRhc2tfaWQsIHByb2NfcGlkKTsKLQkJCXNlbmROZXdQcm9jZXNzRXZlbnQoZ1RyYW5zSUQsIGpvYi0+cHRwX2pvYmlkLCBwLCBQUk9DX1NUQVRFX1NUQVJUSU5HKTsKLQkJCXRhc2tfaWQgKz0gMTsKLQkJCXByb2NfcGlkICs9IDE7Ci0JCSB9Ci0KLQkJY2xvc2UoZmRfb3V0WzFdKTsKLQkJY2xvc2UoZmRfZXJyWzFdKTsKLQkJam9iLT5mZF9vdXQgPSBmZF9vdXRbMF07Ci0JCWpvYi0+ZmRfZXJyID0gZmRfZXJyWzBdOwotCi0JCS8qIAotCQkgKiBDcmVhdGUgaW8gdGhyZWFkIHRvIG1hbmFnZSBzcnVuJ3Mgc3RkZXJyIGFuZCBzdGRvdXQgCi0JICAgICAqIERvbid0IHN0YXJ0IGl0IGJlZm9yZSBzZW5kaW5nIHRoZSBOZXdQcm9jZXNzIGV2ZW50cyEKLQkgICAgICovCi0JCWlmIChjcmVhdGVfaW90aHJlYWQoam9iKSA9PSAwKSB7Ci0JCQlwcC0+aW9fcmVhZHkgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJcHAtPmlvX3JlYWR5ID0gZmFsc2U7Ci0JCQlqb2ItPmlvdGhyZWFkX2V4aXQgPSB0cnVlOwotCQl9Ci0JCXNobWR0KHBwKTsKLQkJc2htY3RsKHNobWlkLCBJUENfUk1JRCwgMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2VhcmNoICRDV0QgYW5kICRQQVRIIGRpciBhbmQgcmV0dXJuIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGNtZC4gCi0gKi8KLXN0YXRpYyBjaGFyICoKLWdldF9wYXRoKGNoYXIgKiBjbWQsIGNoYXIgKiBjd2QsIGludCBtb2RlKQotewotCWNoYXIgKiBwYXRoID0gTlVMTDsKLQljaGFyICogZnVsbHBhdGggPSBOVUxMOwotCWNoYXIgKiBjOwotCWNoYXIgKiBwdHI7Ci0KLQlpZiAoIChjbWRbMF0gPT0gJy4nIHx8IGNtZFswXSA9PSAnLycpCi0JCSYmIGFjY2VzcyhjbWQsIG1vZGUpID09IDApIHsKLQkJaWYgKGNtZFswXSA9PSAnLicpIAotCQkJYXNwcmludGYoJmZ1bGxwYXRoLCIlcy8lcyIsY3dkLGNtZCk7Ci0JCWVsc2UgCi0JCQlhc3ByaW50ZigmZnVsbHBhdGgsY21kKTsKLQl9IGVsc2UgewotCQkvKiBzZWFyY2ggJFBBVEggKi8KLQkJcGF0aCA9IGdldGVudigiUEFUSCIpOwotCQlpZiAocGF0aCAhPSBOVUxMKSB7Ci0JCQljID0gcHRyID0gcGF0aDsKLQkJCXdoaWxlKChjPXN0cmNocihwdHIsJzonKSkgIT0gTlVMTCkgewotCQkJCSpjID0gJ1wwJzsKLQkJCQlhc3ByaW50ZigmZnVsbHBhdGgsICIlcy8lcyIscHRyLGNtZCk7Ci0JCQkJaWYgKGFjY2VzcyhmdWxscGF0aCwgbW9kZSkgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQkJZWxzZSB7Ci0JCQkJCWZyZWUoZnVsbHBhdGgpOwotCQkJCQlmdWxscGF0aCA9IE5VTEw7Ci0JCQkJCXB0ciA9IGMgKyAxOwotCQkJCX0JCi0JCQl9Ci0JCQkvKiBoYW5kbGUgdGhlIGxhc3QgZWxlbWVudCAqLwotCQkJaWYgKCpwdHIgIT0gJ1wwJykgewotCQkJCWFzcHJpbnRmKCZmdWxscGF0aCwgIiVzLyVzIixwdHIsY21kKTsKLQkJCQlpZiAoYWNjZXNzKGZ1bGxwYXRoLCBtb2RlKSAhPSAwKSB7Ci0JCQkJCWZyZWUoZnVsbHBhdGgpOwotCQkJCQlmdWxscGF0aCA9IE5VTEw7Ci0JCQkJfQkKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gZnVsbHBhdGg7Ci19Ci0KLXNzaXplX3QgZmRfcmVhZF9saW5lKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbWF4bGVuKQotewotICAgIHNzaXplX3QgbiwgcmM7Ci0gICAgdW5zaWduZWQgY2hhciBjLCAqcDsKLQotICAgIG4gPSAwOwotICAgIHAgPSBidWY7Ci0gICAgd2hpbGUgKG4gPCBtYXhsZW4gLSAxKSB7ICAgLyogcmVzZXJ2ZSBzcGFjZSBmb3IgTlVMLXRlcm1pbmF0aW9uICovCi0JCWlmICgocmMgPSByZWFkKGZkLCAmYywgMSkpID09IDEpIHsKLQkJCW4rKzsKLQkJCSpwKysgPSBjOwotCQkJaWYgKGMgPT0gJ1xuJykKLQkJCQlicmVhazsgICAgICAgICAvKiBzdG9yZSBuZXdsaW5lLCBsaWtlIGZnZXRzKCkgKi8KLQkJfWVsc2UgaWYgKHJjID09IDApIHsKLQkJCWlmIChuID09IDApICAgICAgICAvKiBFT0YsIG5vIGRhdGEgcmVhZCAqLwotCQkJCXJldHVybigwKTsKLQkJCWVsc2UgICAgICAgICAgICAgICAvKiBFT0YsIHNvbWUgZGF0YSByZWFkICovCi0JCQkJYnJlYWs7Ci0JCX1lbHNlIHsKLQkJCWlmIChlcnJubyA9PSBFSU5UUikKLQkJCQljb250aW51ZTsKLQkJCXJldHVybigtMSk7Ci0JCX0KLQl9Ci0KLQkqcCA9ICdcMCc7ICAvKiBOVUxMLXRlcm1pbmF0ZSwgbGlrZSBmZ2V0cygpICovCi0JcmV0dXJuKG4pOwotfQotCi0vKgotICogRm9yd2FyZGluZyBzcnVuJ3Mgc3Rkb3V0IHRvIHB0cCB1aQotICogRklYTUU6Ci0gKiAJCUhvdyBhYm91dCBzcnVuJ3Mgc3RkZXJyPyBCeSBub3csIGl0J3MgaWdub3JlZC4KLSAqLwotdm9pZCAqCi1zcnVuX291dHB1dF9mb3J3YXJkaW5nKHZvaWQgKiBhcmcpCi17Ci0JaW50IGZkID0gLTE7Ci0JY2hhciAqIHB0cjsKLQlwdHBfam9iICogam9iOwotCWludCB0YXNrX2lkOwotCWZkX3NldCByZmRzOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWNoYXIgYnVmW01BWF9CVUZfU0laRV07Ci0JRklMRSAqIGZwID0gTlVMTDsKLQlpbnQgY2FuY2VsX3N0YXRlOwotCWludCBjYW5jZWxfdHlwZTsKLQlpbnQJcmV0OwotCWNoYXIgKiBwOwotCXBpZF90IGNwaWQ7Ci0JaW50IHN0YXR1czsKLQkKLQlwdGhyZWFkX3NldGNhbmNlbHN0YXRlKFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwmY2FuY2VsX3N0YXRlKTsKLQlwdGhyZWFkX3NldGNhbmNlbHR5cGUoUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsICZjYW5jZWxfdHlwZSk7Ci0JCi0Jam9iID0gKHB0cF9qb2IgKilhcmc7Ci0Jam9iLT5pb3RocmVhZF9leGl0ID0gZmFsc2U7Ci0JLyogQnkgbm93IG9ubHkgZm9jdXMgb24gam9iIHN0ZG91dCAqLwotCWZkID0gam9iLT5mZF9vdXQ7Ci0JCi0Jd2hpbGUgKDEpCi0JewotCQlpZiAoam9iLT5pb3RocmVhZF9leGl0X3JlcSkgewotCQkJZGVidWdfbG9nKGxvZ2ZwLCAiam9iWyVkXSBpb3RocmVhZCBleGl0IG9uIGV4aXRfcmVxdWVzdC5cbiIsIGpvYi0+c2x1cm1fam9iaWQpOwotCQkJam9iLT5pb3RocmVhZF9leGl0ID0gdHJ1ZTsKLQkJCWlmIChmcCkKLQkJCQlmY2xvc2UoZnApOwotCQkJcHRocmVhZF9leGl0KE5VTEwpOwotCQl9Ci0JCQotCQl0di50dl9zZWMgPSAwOwotCQl0di50dl91c2VjID0gNTAwMDsKLQkJCi0JCS8qIAotCQkgKiBpZiB0aW1lb3V0LCB0aGUgcmZkcyB3aWxsIGJlIGNsZWFyZWQgCi0JCSAqIHJmZHMgbXVzdCBiZSBzZXQgaW4gZWFjaCBpdGVyYXRpb24KLQkJICovCi0JCUZEX1pFUk8oJnJmZHMpOwotCQlGRF9TRVQoZmQsICZyZmRzKTsKLQkJcmV0ID0gc2VsZWN0KGZkKzEsJnJmZHMsTlVMTCxOVUxMLCZ0dik7Ci0KLQkJc3dpdGNoKHJldCkKLQkJewotCQljYXNlIC0xOiAvKiBlcnJvciAqLwotCQkJZGVidWdfbG9nKGxvZ2ZwLCJqb2JbJWRdIGlvdGhyZWFkIGV4aXQgb24gc2VsZWN0IGVycm9yXG4iLGpvYi0+c2x1cm1fam9iaWQpOwotCQkJaWYgKGZwKQotCQkJCWZjbG9zZShmcCk7Ci0JCQlqb2ItPmlvdGhyZWFkX2V4aXQgPSB0cnVlOwotCQkJcHRocmVhZF9leGl0KE5VTEwpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAwOiAvKiB0aW1lb3V0ICovCi0JCQkvL2RlYnVnX2xvZyhsb2dmcCwic2VsZWN0IHRpbWVvdXRcbiIpOwotCQkJYnJlYWs7Ci0JCQkJCi0JCWRlZmF1bHQ6IC8qIGZkIHJlYWR5ICovCi0JCQlpZiAoZnAgPT0gTlVMTCkKLQkJCQlmcCA9IGZkb3BlbihmZCwiciIpOwotCQkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSAhPSBOVUxMKSB7Ci0JCQkvL2lmICgocmMgPSBmZF9yZWFkX2xpbmUoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKT4gMCApIHsKLQkJCQlwID0gYnVmOwotCQkJCS8qIGdldCB0YXNrIGlkIGZyb20gc3J1biBsYWJlbCAqLwotCQkJCXRhc2tfaWQgPSBhdG9pKHApOwotCQkJCXB0ciA9IHN0cmNocihwLCAnOicpOwotCQkJCXB0ciArKzsKLQkJCQlpZiAocHRyICE9IE5VTEwpIHsKLQkJCQkJLy9kZWJ1Z19sb2cobG9nZnAsInNlbmQgdGFza1slZF0gb3V0cHV0IHRvIHB0cCB1aVxuIiwgdGFza19pZCk7Ci0JCQkJCS8qIAotCQkJCQkgKiBubyBzeW5jaHJvbml6YXRpb24gbmVlZGVkIAotCQkJCQkgKiBzaW5jZSB0aGUgZXZlbnQgbGlzdCBpcyBpbnRlcm5hbGx5IHByb3RlY3RlZCBieSBwdGhyZWFkX211dGV4Ci0JCQkJCSAqLwotCQkJCQlwdHBfcHJvY2VzcyAqIHByb2M7Ci0JCQkJCXByb2MgPSBmaW5kX3Byb2Nlc3Moam9iLCB0YXNrX2lkKTsKLQkJCQkJc2VuZFByb2Nlc3NPdXRwdXRFdmVudChnVHJhbnNJRCwgcHJvYy0+aWQsIHB0cik7Ci0JCQkJfSBlbHNlIAotCQkJCQlkZWJ1Z19sb2cobG9nZnAsInByb2Nlc3MgbGFiZWwgbm90IGZvdW5kXG4iKTsKLQkJCX0gZWxzZSB7IC8qIGVycm9yIG9yIEVPRiBvZiBwaXBlKHdyaXRlIGVuZCBjbG9zZWQpICovCi0JCQkJZGVidWdfbG9nKGxvZ2ZwLCJFT0Ygb2YgcGlwZVxuIik7Ci0JCQkJaWYgKGZwKQotCQkJCQlmY2xvc2UoZnApOwotCQkJCWpvYi0+aW90aHJlYWRfZXhpdCA9IHRydWU7Ci0JCQkJY3BpZCA9IHdhaXRwaWQoam9iLT5zcnVuX3BpZCwgJnN0YXR1cywgMCk7Ci0JCQkJaWYgKGNwaWQgPT0gam9iLT5zcnVuX3BpZCkgewotCQkJCQlpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKLQkJCQkJCWlmIChqb2ItPm5lZWRfYWxsb2MpCi0JCQkJCQkJc2x1cm1fY29tcGxldGVfam9iKGpvYi0+c2x1cm1fam9iaWQsIDApOwotCQkJCQkJZGVidWdfbG9nKGxvZ2ZwLCAic3J1biBleGl0IGNvZGU6JWRcbiIsIFdFWElUU1RBVFVTKHN0YXR1cykpOwotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKLQkJCQkJCWlmIChqb2ItPm5lZWRfYWxsb2MpCi0JCQkJCQkJc2x1cm1fa2lsbF9qb2Ioam9iLT5zbHVybV9qb2JpZCwgU0lHS0lMTCwgMCk7Ci0JCQkJCQlkZWJ1Z19sb2cobG9nZnAsICJzcnVuIHRlcm1pbmF0ZWQgYnkgc2lnbmFsWyVkXVxuIiwgV1RFUk1TSUcoc3RhdHVzKSk7Ci0JCQkJCX0KLQkJCQkJcHRocmVhZF9leGl0KE5VTEwpOwotCQkJCX0KLQkJCX0JCi0JCQlicmVhazsgCi0JCX0JCi0JfQkJCi0JCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBEZWxldGUgcmVtb3ZhYmxlIGpvYiBmcm8gZ0pvYkxpc3QuCi0gKi8KLXN0YXRpYyB2b2lkIAotcHVyZ2VfZ2xvYmFsX2pvYmxpc3QoKQotewotCXB0cF9qb2IgKiBqOwotCQotCWZvciAoU2V0TGlzdChnSm9iTGlzdCk7IChqID0gKHB0cF9qb2IgKilHZXRMaXN0RWxlbWVudChnSm9iTGlzdCkpICE9IE5VTEw7ICkgewotCQlpZiAoai0+aW90aHJlYWRfZXhpdCAmJiAhc2x1cm1fam9iX2FjdGl2ZShqKSkKLQkJCWotPnJlbW92YWJsZSA9IHRydWU7Ci0JCWlmIChqLT5yZW1vdmFibGUpIHsKLQkJCVJlbW92ZUZyb21MaXN0KGdKb2JMaXN0LCBqKTsKLQkJCWZyZWVfam9iKGopOwotCQl9CQotCX0KLQlyZXR1cm47Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU1RBUlQgT0YgRElTUEFUQ0ggUk9VVElORVMgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotaW50Ci1TTFVSTV9Jbml0aWFsaXplKGludCB0cmFuc19pZCwgaW50IG5hcmdzLCBjaGFyICoqYXJncykKLXsKLQlpbnQJCWk7Ci0JaW50IAlwcmltYXJ5ID0gMTsKLQlpbnQgCXNlY29uZGFyeSA9IDI7Ci0JbG9uZwl2ZXJzaW9uOwotCQotCWRlYnVnX2xvZyhsb2dmcCwgIlNMVVJNX0luaXRpYWxpemUgKCVkKTpcbiIsIHRyYW5zX2lkKTsKLQkKLQlpZiAocHJveHlfc3RhdGUgIT0gU1RBVEVfSU5JVCkgewotCQlzZW5kRXJyb3JFdmVudCh0cmFuc19pZCwgUlRFVl9FUlJPUl9TTFVSTV9JTklULCAiQWxyZWFkeSBpbml0aWFsaXplZCIpOwotCQlyZXR1cm4gUFJPWFlfUkVTX09LOwotCX0KLQkKLQlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykgewotCQlpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoUFJPVE9DT0xfVkVSU0lPTl9BVFRSLCBhcmdzW2ldKSkgewotCQkJaWYgKHN0cmNtcChwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX3N0cihhcmdzW2ldKSwgV0lSRV9QUk9UT0NPTF9WRVJTSU9OKSAhPSAwKSB7Ci0JCQkJc2VuZEVycm9yRXZlbnQodHJhbnNfaWQsIFJURVZfRVJST1JfU0xVUk1fSU5JVCwgIldpcmUgcHJvdG9jb2wgdmVyc2lvbiBcIiVzXCIgbm90IHN1cHBvcnRlZCIsIGFyZ3NbMF0pOwotCQkJCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoQkFTRV9JRF9BVFRSLCBhcmdzW2ldKSkgCi0JCQlnQmFzZUlEID0gcHJveHlfZ2V0X2F0dHJpYnV0ZV92YWx1ZV9pbnQoYXJnc1tpXSk7Ci0JfQotCi0JaWYgKGdCYXNlSUQgPCAwKSB7Ci0JCXNlbmRFcnJvckV2ZW50KHRyYW5zX2lkLCBSVEVWX0VSUk9SX1NMVVJNX0lOSVQsICJObyBiYXNlIElEIHN1cHBsaWVkIik7Ci0JCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JfQotCQotIAkvKiBjb25maXJtIHNsdXJtY3RsZCB3b3JrcyB3ZWxsIHZpYSBzbHVybV9waW5nICovIAotCWlmIChzbHVybV9waW5nKHByaW1hcnkpICYmIHNsdXJtX3Bpbmcoc2Vjb25kYXJ5KSkgewotCQlzZW5kRXJyb3JFdmVudCh0cmFuc19pZCwgUlRFVl9FUlJPUl9TTFVSTV9JTklULCAiTm8gcmVzcG9uc2UgZnJvbSBzbHVybWN0bGQuIENoZWNrIFNMVVJNIFJNUyEiKTsKLQkJcmV0dXJuIFBST1hZX1JFU19PSzsKLQl9CQotICAJLyogCi0JICogU0xVUk0gdmVyc2lvbiB2ZXJmaWNhdGlvbiwKLQkgKiBTaG91bGQgd29yayBvbiBtb3JlIHZlcnNpb25zIHN1cHBvcnRpbmcgdXNlZCBBUEkuIAotCSAqLwotCSB2ZXJzaW9uID0gc2x1cm1fYXBpX3ZlcnNpb24oKTsKLQkgaWYgKHZlcnNpb24gPCBTTFVSTV9WRVJTSU9OX05VTSgxLDMsNCkpIHsKLQkJc2VuZEVycm9yRXZlbnQodHJhbnNfaWQsIFJURVZfRVJST1JfU0xVUk1fSU5JVCwgIlNMVVJNIHZlcnNpb24gbnVtYmVyIHRvbyBsb3ciKTsKLQkJcmV0dXJuIFBST1hZX1JFU19PSzsKLQkgfQotCi0JcHJveHlfc3RhdGUgPSBTVEFURV9SVU5OSU5HOwotCXNlbmRPS0V2ZW50KHRyYW5zX2lkKTsKLQkKLQlyZXR1cm4gUFJPWFlfUkVTX09LOwotfQotCi0vKgotICogSW5pdCB0aGUgbW9kZWwgZGVmaW5pdGlvbiBwaGFzZS4KLSAqLwotaW50Ci1TTFVSTV9Nb2RlbERlZihpbnQgdHJhbnNfaWQsIGludCBuYXJncywgY2hhciAqKmFyZ3MpCi17Ci0JZGVidWdfbG9nKGxvZ2ZwLCAiU0xVUk1fTW9kZWxEZWYgKCVkKTpcbiIsIHRyYW5zX2lkKTsgCi0JCi0Jc2VuZE9LRXZlbnQodHJhbnNfaWQpOwotCXJldHVybiBQUk9YWV9SRVNfT0s7Ci19Ci0KLWludAotU0xVUk1fU3RvcEV2ZW50cyhpbnQgdHJhbnNfaWQsIGludCBuYXJncywgY2hhciAqKmFyZ3MpCi17Ci0JZGVidWdfbG9nKGxvZ2ZwLCAiU0xVUk1fU3RvcEV2ZW50cyAoJWQpOlxuIiwgdHJhbnNfaWQpOyAKLQotCS8qIE5vdGlmeSB0aGF0IHRhcnRFdmVudHMgY29tcGxldGUgKi8KLQlzZW5kT0tFdmVudChnVHJhbnNJRCk7Ci0JZ1RyYW5zSUQgPSAwOwotCXNlbmRPS0V2ZW50KHRyYW5zX2lkKTsKLQlyZXR1cm4gUFJPWFlfUkVTX09LOwkKLX0KLQotCi0vKgotICogU3VibWl0IGEgam9iIHdpdGggdGhlIGdpdmVuIGV4ZWN1dGFibGUgcGF0aCBhbmQgYXJndW1lbnRzLiAKLSAqICgxKVByb2Nlc3MgY21kIGFyZ3VtZW50czsKLSAqICgyKURpc3Rpbmd1aXNoIGJldHdlZW4gZGVidWcgam9iIGFuZCBub24tZGVidWcgam9iOwotICogKDMpQWxsb2NhdGUgcmVzb3VyY2UgYW5kIHNwYXduIGpvYiBzdGVwLgotICovCi1pbnQKLVNMVVJNX1N1Ym1pdEpvYihpbnQgdHJhbnNfaWQsIGludCBuYXJncywgY2hhciAqKmFyZ3MpCi17Ci0JaW50CQlpLGs7Ci0JaW50CQludW1fYXJncyA9IDA7Ci0JaW50CQludW1fZW52ID0gMDsKLQljaGFyICoJam9ic3ViaWQgPSBOVUxMOyAvKiBqb2JpZCBhc3NpZ25lZCBieSBSTVModWkpICovCi0JCi0JLyogc3J1biBvcHRpb25zOiAtbiwgLU4sIC10LCAtcCwgLWwsIC12LCAtLWpvYmlkLCAtdywgLXgsIC0tam9iX3R5cGUgKi8KLQlpbnQJCW51bV9wcm9jcyA9IDA7IC8qIC1uOiBudW1iZXIgb2YgdGFza3MgdG8gcnVuKi8KLQlpbnQJCW51bV9ub2RlcyA9IDA7IC8qIC1OOiBudW1iZXIgb2Ygbm9kZXMgb24gd2hpY2ggdG8gcnVuIChOPW1pblstbWF4XSkgKi8KLQlpbnQJCXRsaW1pdCA9IC0xOyAgIC8qIC10OiB0aW1lIGxpbWl0ICovCQkKLQlib29sIAl0bGltaXRfc2V0ID0gZmFsc2U7Ci0JY2hhciAqIAlwYXJ0aXRpb24gPSBOVUxMOyAvKiAtcDogcGFydGl0aW9uIHJlcXVlc3RlZCAqLwotCWJvb2wJcGFydGl0aW9uX3NldCA9IGZhbHNlOwotCWJvb2wJaW9fbGFiZWwgPSBmYWxzZTsgLyogLWw6IHByZXBlbmQgdGFzayBudW1iZXIgdG8gbGluZXMgb2Ygc3Rkb3V0L2VyciAqLwotCWJvb2wgCWlvX2xhYmVsX3NldCA9IGZhbHNlOwotCWJvb2wgCXZlcmJvc2UgPSBmYWxzZTsJLyogLXY6dmVyYm9zZSBtb2RlICovCi0JYm9vbAl2ZXJib3NlX3NldCA9IGZhbHNlOwotCWNoYXIgKiAJbm9kZV9saXN0PU5VTEw7CS8qIC13OiByZXF1ZXN0IGEgc3BlY2lmaWMgbGlzdCBvZiBob3N0cyAqLwotCWJvb2wJbm9kZWxpc3Rfc2V0ID0gZmFsc2U7Ci0JaW50CQlhbGxvY2F0ZWRfam9iaWQ7IC8qIC0tam9iaWQ6IHJ1biB1bmRlciBhbHJlYWR5IGFsbG9jYXRlZCBqb2IgKi8KLQlib29sCWpvYmlkX3NldCA9IGZhbHNlOwotCWNoYXIgKiAJam9idHlwZSA9IE5VTEw7CS8qIC0tam9iX3R5cGU6bXBpLG9tcCxzZXJpYWwgKi8KLQlib29sCWpvYnR5cGVfc2V0ID0gZmFsc2U7Ci0KLQljaGFyICoJZnVsbF9wYXRoID0gTlVMTDsKLQljaGFyICoJY3dkID0gTlVMTDsKLQljaGFyICoJZXhlY19wYXRoID0gTlVMTDsgLyogUEFUSCBvZiBleGVjdXRhYmxlICovCi0JY2hhciAqCXBnbV9uYW1lID0gTlVMTDsgCi0JCi0JLyogZGVidWcgam9iIHN1cHBvcnQgKi8gCi0JYm9vbAlkZWJ1ZyA9IGZhbHNlOwotCWludAkJZGVidWdfYXJnYyA9IDA7Ci0JaW50CQlhdHRhY2hfbW9kZTsKLQljaGFyICoJZGVidWdfZXhlY19uYW1lID0gTlVMTDsKLQljaGFyICoJZGVidWdfZXhlY19wYXRoID0gTlVMTDsKLQljaGFyICoJZGVidWdfZnVsbF9wYXRoOwotCWNoYXIgKioJZGVidWdfYXJncyA9IE5VTEw7Ci0KLQlpbnQJCXNydW5fYXJnYyA9IDA7Ci0JY2hhciAqKiBzcnVuX2FyZ3YgPSBOVUxMOwotCWludCAJcmV0OwotCWludAkJcHRwaWQgPSBnZW5lcmF0ZV9pZCgpOwotCi0JZGVidWdfbG9nKGxvZ2ZwLCAiU0xVUk1fU3VibWl0Sm9iICglZCk6XG4iLCB0cmFuc19pZCk7Ci0JLyogUHJvY2VzcyBqb2Igc3VibWl0IGFyZ3MgICovCi0JZGVidWdfbG9nKGxvZ2ZwLCAiam9iIHN1Ym1pdCBjb21tYW5kczpcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwgIlx0JXNcbiIsIGFyZ3NbaV0pOwotCQlpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX1NVQl9JRF9BVFRSLCBhcmdzW2ldKSkgewotCQkJam9ic3ViaWQgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX3N0cihhcmdzW2ldKTsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfTlVNX1BST0NTX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQludW1fcHJvY3MgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX2ludChhcmdzW2ldKTsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfTlVNX05PREVTX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQludW1fbm9kZXMgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX2ludChhcmdzW2ldKTsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfVElNRV9MSU1JVF9BVFRSLCBhcmdzW2ldKSkgewotCQkJdGxpbWl0X3NldCA9IHRydWU7Ci0JCQl0bGltaXQgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX2ludChhcmdzW2ldKTsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfUEFSVElUSU9OX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQlwYXJ0aXRpb25fc2V0ID0gdHJ1ZTsKLQkJCXBhcnRpdGlvbiA9IHByb3h5X2dldF9hdHRyaWJ1dGVfdmFsdWVfc3RyKGFyZ3NbaV0pOwotCQl9IGVsc2UgaWYgKHByb3h5X3Rlc3RfYXR0cmlidXRlKFNMVVJNX0pPQl9JT0xBQkVMX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQlpb19sYWJlbF9zZXQgPSB0cnVlOwotCQkJaW9fbGFiZWwgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX2Jvb2woYXJnc1tpXSk7Ci0JCX0gZWxzZSBpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX1ZFUkJPU0VfQVRUUiwgYXJnc1tpXSkpIHsKLQkJCXZlcmJvc2Vfc2V0ID0gdHJ1ZTsKLQkJCXZlcmJvc2UgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX2Jvb2woYXJnc1tpXSk7Ci0JCX0gZWxzZSBpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX0lEX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQlqb2JpZF9zZXQgPSB0cnVlOwotCQkJYWxsb2NhdGVkX2pvYmlkID0gcHJveHlfZ2V0X2F0dHJpYnV0ZV92YWx1ZV9pbnQoYXJnc1tpXSk7Ci0JCX0gZWxzZSBpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX1RZUEVfQVRUUiwgYXJnc1tpXSkpIHsKLQkJCWpvYnR5cGVfc2V0ID0gdHJ1ZTsKLQkJCWpvYnR5cGUgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX3N0cihhcmdzW2ldKTsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfTk9ERUxJU1RfQVRUUiwgYXJnc1tpXSkpIHsKLQkJCW5vZGVsaXN0X3NldCA9IHRydWU7Ci0JCQlub2RlX2xpc3QgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX3N0cihhcmdzW2ldKTsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfRVhFQ19OQU1FX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQlwZ21fbmFtZSA9IHByb3h5X2dldF9hdHRyaWJ1dGVfdmFsdWVfc3RyKGFyZ3NbaV0pOwotCQl9IGVsc2UgaWYgKHByb3h5X3Rlc3RfYXR0cmlidXRlKFNMVVJNX0pPQl9FWEVDX1BBVEhfQVRUUiwgYXJnc1tpXSkpIHsKLQkJCWV4ZWNfcGF0aCA9IHByb3h5X2dldF9hdHRyaWJ1dGVfdmFsdWVfc3RyKGFyZ3NbaV0pOwotCQl9IGVsc2UgaWYgKHByb3h5X3Rlc3RfYXR0cmlidXRlKFNMVVJNX0pPQl9XT1JLSU5HX0RJUl9BVFRSLCBhcmdzW2ldKSkgewotCQkJY3dkID0gcHJveHlfZ2V0X2F0dHJpYnV0ZV92YWx1ZV9zdHIoYXJnc1tpXSk7Ci0JCX0gZWxzZSBpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX1BST0dfQVJHU19BVFRSLCBhcmdzW2ldKSkgewotCQkJbnVtX2FyZ3MrKzsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfRU5WX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQludW1fZW52Kys7Ci0JCX0gZWxzZSBpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX0RFQlVHX0FSR1NfQVRUUiwgYXJnc1tpXSkpIHsKLQkJCWRlYnVnX2FyZ2MrKzsKLQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfREVCVUdfRkxBR19BVFRSLCBhcmdzW2ldKSkgewotCQkJZGVidWcgPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX2Jvb2woYXJnc1tpXSk7Ci0JCX0KLQl9Ci0KLQkvKiBEbyBzb21lIGNoZWNraW5nIGZpcnN0ICovCi0JaWYgKGpvYnN1YmlkID09IE5VTEwpIHsKLQkJc2VuZEVycm9yRXZlbnQodHJhbnNfaWQsIFJURVZfRVJST1JfU0xVUk1fU1VCTUlULCAibWlzc2luZyBJRCBvbiBqb2Igc3VibWlzc2lvbiIpOwotCQlyZXR1cm4gUFJPWFlfUkVTX09LOwotCX0KLQlpZiAocHJveHlfc3RhdGUgIT0gU1RBVEVfUlVOTklORykgewotCQlzZW5kSm9iU3ViRXJyb3JFdmVudCh0cmFuc19pZCwgam9ic3ViaWQsICJtdXN0IGNhbGwgSU5JVCBmaXJzdCIpOwotCQlyZXR1cm4gUFJPWFlfUkVTX09LOwotCX0KLQlpZiAobmFyZ3MgPCAxKSB7Ci0JCXNlbmRKb2JTdWJFcnJvckV2ZW50KHRyYW5zX2lkLCBqb2JzdWJpZCwgImluY29ycmVjdCBhcmcgY291bnQiKTsKLQkJcmV0dXJuIFBST1hZX1JFU19PSzsKLQl9Ci0JaWYgKHBnbV9uYW1lID09IE5VTEwpIHsKLQkJc2VuZEpvYlN1YkVycm9yRXZlbnQodHJhbnNfaWQsIGpvYnN1YmlkLCAibXVzdCBzcGVjaWZ5IGEgcHJvZ3JhbSBuYW1lIik7Ci0JCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JfQotCWlmIChudW1fcHJvY3MgPD0gMCkgewotCQlzZW5kSm9iU3ViRXJyb3JFdmVudCh0cmFuc19pZCwgam9ic3ViaWQsICJtdXN0IHNwZWNpZnkgbnVtYmVyIG9mIHRhc2sgdG8gbGF1bmNoIik7Ci0JCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JfQotCi0JLyoKLQkgKiBQcm9jZXNzIGVudmlyb25tZW50IHZhcmlhYmxlcy4gCi0JICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgYnJvdWdodCB0byBjb21wdXRlIG5vZGUgCi0JICogYnkgU0xVUk0gYmVmb3JlIGxhdW5jaGluZyBqb2IuIAotCSAqLwotCWlmIChudW1fZW52ID4gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykgewotCQkJaWYgKHByb3h5X3Rlc3RfYXR0cmlidXRlKFNMVVJNX0pPQl9FTlZfQVRUUiwgYXJnc1tpXSkpCi0JCQkJcHV0ZW52KHByb3h5X2dldF9hdHRyaWJ1dGVfdmFsdWVfc3RyKGFyZ3NbaV0pKTsKLQkJfQotCX0KLQkvKiBsb2NhdGUgZXhlY3VhYmxlICovCi0JaWYgKGV4ZWNfcGF0aCA9PSBOVUxMKSB7Ci0JCWZ1bGxfcGF0aCA9IGdldF9wYXRoKHBnbV9uYW1lLCBjd2QsIFhfT0spOwotCQlpZiAoZnVsbF9wYXRoID09IE5VTEwpIHsKLQkJCXNlbmRKb2JTdWJFcnJvckV2ZW50KHRyYW5zX2lkLCBqb2JzdWJpZCwgImV4ZWN1dGFibGUgbm90IGZvdW5kIik7Ci0JCQlyZXR1cm4gUFJPWFlfUkVTX09LOwotCQl9Ci0JfSBlbHNlIAotCQlhc3ByaW50ZigmZnVsbF9wYXRoLCAiJXMvJXMiLCBleGVjX3BhdGgsIHBnbV9uYW1lKTsKLQkvKiBjaGVjayBhY2Nlc3MgcmlnaHQgKi8JCQotCWlmIChhY2Nlc3MoZnVsbF9wYXRoLCBYX09LKSA8IDApIHsKLQkJc2VuZEpvYlN1YkVycm9yRXZlbnQodHJhbnNfaWQsIGpvYnN1YmlkLCBzdHJlcnJvcihlcnJubykpOwotCQlpZiAoZnVsbF9wYXRoICE9IE5VTEwpCi0JCQlmcmVlKGZ1bGxfcGF0aCk7Ci0JCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JfQotCQotCS8qIGFsbG9jYXRlIHNwYWNlIGZvciBzcnVuIGFyZ3MgKi8KLQlzcnVuX2FyZ3YgPSAoY2hhciAqKiltYWxsb2Moc2l6ZW9mKGNoYXIgKikqTUFYX1NSVU5fQVJHX05VTSk7Ci0JaWYgKHNydW5fYXJndiA9PSBOVUxMKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwgIm1lbW9yeSBhbGxvY2F0aW9uIGZvciBzcnVuX2FyZ3YgZmFpbCIpOwotCQlzZW5kSm9iU3ViRXJyb3JFdmVudCh0cmFuc19pZCwgam9ic3ViaWQsICJtZW1vcnkgYWxsb2NhdGlvbiBmb3Igc3J1bl9hcmdzIGZhaWwiKTsKLQkJcmV0dXJuIFBST1hZX1JFU19PSzsKLQl9Ci0KLQkvKgotCSAqRklYTUU6IG1vcmUgZGVidWcgam9iIHN1cHBvcnQgd2lsbCBiZSBhZGRlZCBzb29uLgotCSAqLwotCS8qKioqKioqKioqKioqKioqaGFuZGxlIGRlYnVnIGpvYioqKioqKioqKioqKioqKioqLwotCWlmIChkZWJ1ZykgewkJCi0JCWRlYnVnX2FyZ2MrKzsKLQkJZGVidWdfYXJncyA9IChjaGFyICoqKW1hbGxvYygoZGVidWdfYXJnYysxKSAqIHNpemVvZihjaGFyICopKTsKLQkJZm9yIChpID0gMCwgayA9IDE7IGkgPCBuYXJnczsgaSsrKSB7Ci0JCQlpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX0RFQlVHX0FSR1NfQVRUUiwgYXJnc1tpXSkpIHsKLQkJCQlkZWJ1Z19hcmdzW2srK10gPSBwcm94eV9nZXRfYXR0cmlidXRlX3ZhbHVlX3N0cihhcmdzW2ldKTsKLQkJCX0gZWxzZSBpZiAocHJveHlfdGVzdF9hdHRyaWJ1dGUoU0xVUk1fSk9CX0RFQlVHX0VYRUNfTkFNRV9BVFRSLCBhcmdzW2ldKSkgewotCQkJCWRlYnVnX2V4ZWNfbmFtZSA9IHByb3h5X2dldF9hdHRyaWJ1dGVfdmFsdWVfc3RyKGFyZ3NbaV0pOwotCQkJfSBlbHNlIGlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfREVCVUdfRVhFQ19QQVRIX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQkJZGVidWdfZXhlY19wYXRoID0gcHJveHlfZ2V0X2F0dHJpYnV0ZV92YWx1ZV9zdHIoYXJnc1tpXSk7Ci0JCQl9Ci0JCX0KLQkJZGVidWdfYXJnc1trXSA9IE5VTEw7Ci0JCQotCQkvKgotCQkgKiBJZiBubyBwYXRoIHNwZWNpZmllZCwgdHJ5IHRvIGxvY2F0ZSBleGVjdWFibGUuCi0JCSAqLwkJCi0JCWlmIChkZWJ1Z19leGVjX3BhdGggPT0gTlVMTCkgewotCQkJZGVidWdfZnVsbF9wYXRoID0gZ2V0X3BhdGgoZGVidWdfZXhlY19uYW1lLCBjd2QsIFhfT0spOwotCQkJaWYgKGRlYnVnX2Z1bGxfcGF0aCA9PSBOVUxMKSB7Ci0JCQkJc2VuZEpvYlN1YkVycm9yRXZlbnQodHJhbnNfaWQsIGpvYnN1YmlkLCAiRGVidWdnZXIgZXhlY3V0dWFibGUgbm90IGZvdW5kIik7Ci0JCQkJcmV0dXJuIFBST1hZX1JFU19PSzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFzcHJpbnRmKCZkZWJ1Z19mdWxsX3BhdGgsICIlcy8lcyIsIGRlYnVnX2V4ZWNfcGF0aCwgZGVidWdfZXhlY19uYW1lKTsKLQkJfQotCQkKLQkJaWYgKGFjY2VzcyhkZWJ1Z19mdWxsX3BhdGgsIFhfT0spIDwgMCkgewotCQkJc2VuZEpvYlN1YkVycm9yRXZlbnQodHJhbnNfaWQsIGpvYnN1YmlkLCBzdHJlcnJvcihlcnJubykpOwotCQkJaWYgKGRlYnVnX2Z1bGxfcGF0aCAhPSBOVUxMKQotCQkJCWZyZWUoZGVidWdfZnVsbF9wYXRoKTsKLQkJCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JCX0KLQotCQlkZWJ1Z19hcmdzWzBdID0gc3RyZHVwKGRlYnVnX2Z1bGxfcGF0aCk7Ci0JCWlmIChkZWJ1Z19mdWxsX3BhdGggIT0gTlVMTCkKLQkJCWZyZWUoZGVidWdfZnVsbF9wYXRoKTsKLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQkvKiBzZXQgZGVmYXVsdCBzcnVuIG9wdGlvbnMgKi8KLQlzZXRfc3J1bl9vcHRpb25zX2RlZmF1bHRzKCZvcHQpOwotCi0JLyoKLQkgKiBjaGFuZ2Ugc3J1biBvcHRpb25zIGJhc2VkIG9uIFN1Ym1pdEpvYiBjbWQgYXJncwotCSAqIGFuZCBwcmVwYXJlIHNydW5fYXJnYyxzcnVuX2FyZ3YKLQkgKi8KLQlpbnQgaW5kZXggPSAwOwotCXNydW5fYXJndltpbmRleCsrXSA9IHN0cmR1cCgic3J1biIpOwotCi0JaWYgKG51bV9wcm9jcyA+IDApIHsKLQkJb3B0LnBzX25wcm9jcyA9IG51bV9wcm9jczsKLQkJb3B0LnBzX25wcm9jc19zZXQgPSB0cnVlOwotCQlhc3ByaW50ZigmKHNydW5fYXJndltpbmRleF0pLCAiLS1udGFza3M9JWQiLCBvcHQucHNfbnByb2NzKTsKLQkJaW5kZXggKz0gMTsKLQl9CQotCWlmIChudW1fbm9kZXMgPiAwKSB7Ci0JCW9wdC5wc19taW5fbm9kZXMgPSBudW1fbm9kZXM7Ci0JCW9wdC5wc19ub2Rlc19zZXQgPSB0cnVlOwotCQlhc3ByaW50ZigmKHNydW5fYXJndltpbmRleF0pLCAiLS1ub2Rlcz0lZCIsIG9wdC5wc19taW5fbm9kZXMpOwotCQlpbmRleCArPSAxOwotCX0KLQlpZiAodGxpbWl0X3NldCkgewotCQlvcHQucHNfdGltZV9saW1pdCA9IHRsaW1pdDsKLQkJYXNwcmludGYoJihzcnVuX2FyZ3ZbaW5kZXhdKSwgIi0tdGltZT0lZCIsIG9wdC5wc190aW1lX2xpbWl0KTsKLQkJaW5kZXggKz0gMTsKLQl9Ci0JaWYgKHBhcnRpdGlvbl9zZXQpIHsKLQkJb3B0LnBzX3BhcnRpdGlvbiA9ICBwYXJ0aXRpb247Ci0JCWFzcHJpbnRmKCYoc3J1bl9hcmd2W2luZGV4XSksICItLXBhcnRpdGlvbj0lcyIsIG9wdC5wc19wYXJ0aXRpb24pOwotCQlpbmRleCArPSAxOwotCX0KLQkvKiBUbyBkaXN0aW5ndWlzaCB0YXNrIHN0ZG91dCwgdGhpcyBvcHRpb24gTVVTVCBiZSBzZXQgKi8KLQlpb19sYWJlbF9zZXQgPSB0cnVlOwotCWlmIChpb19sYWJlbF9zZXQpIHsgCi0JCW9wdC5wc19sYWJlbGlvID0gaW9fbGFiZWw7Ci0JCWFzcHJpbnRmKCYoc3J1bl9hcmd2W2luZGV4XSksICItLWxhYmVsIik7Ci0JCWluZGV4ICs9IDE7Ci0JfQotCWlmICh2ZXJib3NlX3NldCkgewotCQlhc3ByaW50ZigmKHNydW5fYXJndltpbmRleF0pLCAiLS12ZXJib3NlIik7Ci0JCWluZGV4ICs9IDE7Ci0JfQotCWlmIChqb2JpZF9zZXQpIHsKLQkJb3B0LnBzX2pvYmlkID0gYWxsb2NhdGVkX2pvYmlkOwotCQlvcHQucHNfam9iaWRfc2V0ID0gdHJ1ZTsKLQkJYXNwcmludGYoJihzcnVuX2FyZ3ZbaW5kZXhdKSwgIi0tam9iaWQ9JWQiLCBvcHQucHNfam9iaWQpOwotCQlpbmRleCArPSAxOwotCX0KLQkKLQkvKmlmIChqb2J0eXBlX3NldCkgewotCQlvcHQucHNfam9idHlwZSA9IGpvYnR5cGU7Ci0gICAgCWFzcHJpbnRmKCYoc3J1bl9hcmd2W2luZGV4XSksICItLWpvYnR5cGU9JXMiLCBvcHQucHNfam9idHlwZSk7Ci0JCWluZGV4ICs9IDE7Ci0JfQotCSovCi0JaWYgKG5vZGVsaXN0X3NldCkgewotCQlvcHQucHNfbm9kZWxpc3QgPSBzdHJkdXAobm9kZV9saXN0KTsKLQkJb3B0LnBzX25vZGVzX3NldCA9IHRydWU7Ci0JCWFzcHJpbnRmKCYoc3J1bl9hcmd2W2luZGV4XSksICItLW5vZGVsaXN0PSVzIiwgb3B0LnBzX25vZGVsaXN0KTsKLQkJaW5kZXggKz0gMTsKLQl9Ci0KLQlpZiAoY3dkKSB7Ci0JCWlmIChvcHQucHNfY3dkICE9IE5VTEwpCi0JCQlmcmVlKG9wdC5wc19jd2QpOwotCQlvcHQucHNfY3dkID0gc3RyZHVwKGN3ZCk7Ci0JCW9wdC5wc19jd2Rfc2V0ID0gdHJ1ZTsKLQl9Ci0KLQlvcHQucHNfcHJvZ25hbWUgPSBmdWxsX3BhdGg7Ci0JLyogc2V0IGpvYiBuYW1lLG90aGVyd2lzZSBiZSBOVUxMICovCi0Jb3B0LnBzX2pvYl9uYW1lID0gYmFzZW5hbWUoZnVsbF9wYXRoKTsKLQlhc3ByaW50ZigmKHNydW5fYXJndltpbmRleF0pLCAiJXMiLCBvcHQucHNfcHJvZ25hbWUpOwotCWluZGV4ICs9IDE7Ci0JCi0JLyogcHJvZ3JhbSBuYW1lIGZvbGxvd2QgYnkgYXJncyAqLwotCWlmIChudW1fYXJncyA+IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspIHsKLQkJCWlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShTTFVSTV9KT0JfUFJPR19BUkdTX0FUVFIsIGFyZ3NbaV0pKSB7Ci0JCQkJYXNwcmludGYoJihzcnVuX2FyZ3ZbaW5kZXhdKSwgIiVzIiwgcHJveHlfZ2V0X2F0dHJpYnV0ZV92YWx1ZV9zdHIoYXJnc1tpXSkpOwotCQkJCWluZGV4ICs9IDE7Ci0JCQl9CQotCQl9Ci0JfQotCXNydW5fYXJndltpbmRleF0gPSBOVUxMOyAvKiBtYXJrIHRoZSBlbmQgb2Ygc3J1bl9hcmd2W10gKi8KLQotCXNydW5fYXJnYyA9IGluZGV4OwkKLQlkZWJ1Z19sb2cobG9nZnAsICJzcnVuIGNtZDoiKTsKLQlmb3IgKGkgPSAwOyBpIDwgc3J1bl9hcmdjOyBpKyspIAotCQlkZWJ1Z19sb2cobG9nZnAsIiVzICIsc3J1bl9hcmd2W2ldKTsKLQlkZWJ1Z19sb2cobG9nZnAsICJcbiIpOwotCi0KLQkvKgotCSAqIEZJWE1FOiBCeSBub3csIGRlYnVnIGpvYiBpcyBub3Qgc3VwcG9ydGVkLgotCSAqLwotCWlmIChkZWJ1ZykgewotCQlpZiAoYXR0YWNoX21vZGUpIHsKLQkJCXJldCA9ICBoYW5kbGVfYXR0YWNoX2RlYnVnKCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBoYW5kbGVfZGVidWcoKTsKLQkJfQkKLQl9IGVsc2UgewotCQlwdHBfam9iIGo7Ci0JCWouZGVidWcgPSBkZWJ1ZzsKLQkJai5wdHBfam9iaWQgPSBwdHBpZDsgLyogbW9kZWwgZWxlbWVudCBpZCBnZW5lcmF0ZWQgYnkgcHJveHkgYWdlbnQgKi8KLQkJai5udW1fcHJvY3MgPSBudW1fcHJvY3M7Ci0JCWFsbG9jYXRlX2FuZF9sYXVuY2hfam9iKHRyYW5zX2lkLCBqb2JzdWJpZCwgJmosICZvcHQsIHNydW5fYXJnYywgc3J1bl9hcmd2KTsKLQkJZnJlZV9vcHQoJm9wdCk7Ci0JCWZyZWVfc3J1bl9hcmd2KHNydW5fYXJnYyxzcnVuX2FyZ3YpOwotCX0KLQotCXJldHVybiBQUk9YWV9SRVNfT0s7Ci19CQkKLQotLyogCi0gKiBDYW5jZWwgam9iLCBnaXZlbiBwdHAgam9iaWQgKG5vdCBzbHVybSBqb2JpZCkuCi0gKi8KLWludAotU0xVUk1fVGVybWluYXRlSm9iKGludCB0cmFuc19pZCwgaW50IG5hcmdzLCBjaGFyICoqYXJncykKLXsKLQlpbnQJCQlpOwotCWludCAJCXB0cF9qb2JpZCA9IC0xOwotCXB0cF9qb2IgKiAJajsKLQotCQotCWlmIChwcm94eV9zdGF0ZSAhPSBTVEFURV9SVU5OSU5HKSB7Ci0JCXNlbmRFcnJvckV2ZW50KHRyYW5zX2lkLCBSVEVWX0VSUk9SX0pPQiwgIm11c3QgY2FsbCBJTklUIGZpcnN0Iik7Ci0JCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JfQotCQotCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKSB7Ci0JCWlmIChwcm94eV90ZXN0X2F0dHJpYnV0ZShKT0JfSURfQVRUUiwgYXJnc1tpXSkpIHsKLQkJCXB0cF9qb2JpZCA9IHByb3h5X2dldF9hdHRyaWJ1dGVfdmFsdWVfaW50KGFyZ3NbaV0pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocHRwX2pvYmlkIDwgMCkgewotCQlzZW5kSm9iVGVybWluYXRlRXJyb3JFdmVudCh0cmFuc19pZCwgcHRwX2pvYmlkLCAiaW52YWxpZCBqb2JpZCAiKTsKLQkJcmV0dXJuIFBST1hZX1JFU19PSzsKLQl9Ci0KLQkvKiBjb252ZXJ0IHB0cCBqb2JpZCB0byBzbHVybSBqb2JpZCAqLwotCWlmICgoaiA9IGZpbmRfam9iKHB0cF9qb2JpZCwgUFRQX0pPQklEKSkgIT0gTlVMTCkgewotCQkvKgotCQkgKiBLaWxsIGFsbCBqb2Igc3RlcHMgYW5kIHJlcXVlc3QgaW90aHJlYWQgdG8gZXhpdC4KLQkJICogUmVtb3Zpbmcgam9iIHN0cnVjdHVyZSBmcm9tIHRoZSBnbG9iYWwgam9iIGxpc3QgCi0JCSAqIGlzIGxlZnQgdG8gcHVyZ2VfZ2xvYmFsX2pvYmxpc3QoKS4KLQkJICovCi0JCWtpbGwoai0+c3J1bl9waWQsIFNJR0tJTEwpOwotCQlqLT5pb3RocmVhZF9leGl0X3JlcSA9IHRydWU7Ci0JCWlmIChqLT5uZWVkX2FsbG9jKSB7Ci0JCQlzbHVybV9raWxsX2pvYihqLT5zbHVybV9qb2JpZCwgU0lHS0lMTCwgMCk7IAotCQl9CQotCX0gCi0Jc2VuZE9LRXZlbnQodHJhbnNfaWQpOwotCi0JcmV0dXJuIFBST1hZX1JFU19PSzsKLX0KLQotLyoKLSAqIEVuYWJsZSBzZW5kaW5nIG9mIGV2ZW50cy4KLSAqIFRoZSBmaXJzdCBtc2cgdGhhdCBtdXN0IGJlIHNlbnQgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kZWwuIAotICogVGhpcyBjb21wcmlzZXMgTkVXIG1vZGVsIGVsZW1lbnQgZXZlbnRzCi0gKiAoTmV3TWFjaGluZSwgTmV3Tm9kZSwgTmV3UXVldWUpIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1vZGVsLiAKLSAqIE9uY2UgdGhlIG1vZGVsIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHNlbnQsIG1vZGVsIGNoYW5nZSBldmVudHMgd2lsbCBiZSBzZW50IGFzIGRldGVjdGVkLgotICovCi1pbnQKLVNMVVJNX1N0YXJ0RXZlbnRzKGludCB0cmFuc19pZCwgaW50IG5hcmdzLCBjaGFyICoqYXJncykKLXsKLQlpbnQgCQkJbnVtX21hY2hpbmVzOwotCWludAkJCQltOwotCXB0cF9tYWNoaW5lICoJbWFjaDsKLQlpbnQJCQkJbnVtX25vZGVzOwotCQotCWRlYnVnX2xvZyhsb2dmcCwgIlNMVVJNX1N0YXJ0RXZlbnRzICglZCk6XG4iLCB0cmFuc19pZCk7IAotCi0JaWYgKHByb3h5X3N0YXRlICE9IFNUQVRFX1JVTk5JTkcpIHsKLQkJc2VuZEVycm9yRXZlbnQodHJhbnNfaWQsIFJURVZfRVJST1JfU0xVUk1fSU5JVCwgIk11c3QgY2FsbCBJTklUIGZpcnN0Iik7Ci0JCXJldHVybiBQUk9YWV9SRVNfT0s7Ci0JfQotCi0JLyogTm9kZUNoYW5nZSwgSm9iQ2hhbmdlIGV2ZW50IHVzZSBnVHJhbnNJRCBhcyBUSUQgdG8gbWF0Y2ggU1RBUlRfRVZFTlRTIGNtZCAqLwotCWdUcmFuc0lEID0gdHJhbnNfaWQ7Ci0JCi0JLyoKLQkgKiBGSVhNRTogaG93IHRvIGhhbmRsZSBwYXJ0aXRpb24gaW5mb3JtYXRpb24gaW4gU0xVUk0/Ci0JICovCi0JbnVtX21hY2hpbmVzID0gZ2V0X251bV9tYWNoaW5lcygpOwotCWZvcihtID0gMDsgbSA8IG51bV9tYWNoaW5lczsgbSsrKSB7Ci0JCW1hY2ggPSBuZXdfbWFjaGluZSgpOwotCQkvKiBOZXdNYWNoaW5lIGVsZW1lbnQgKi8KLQkJc2VuZE5ld01hY2hpbmVFdmVudCh0cmFuc19pZCwgbWFjaC0+aWQsIGdldF9tYWNoaW5lX25hbWUobSkpOwotCQludW1fbm9kZXMgPSBnZXRfbnVtX25vZGVzKG1hY2gtPmlkKTsKLQkJaWYoY3JlYXRlX25vZGVfbGlzdChtYWNoKSkgewotCQkJc2VuZEVycm9yRXZlbnQodHJhbnNfaWQsIFJURVZfRVJST1JfTkFUVFIsICJGYWlsIHRvIGNyZWF0ZSBub2RlbGlzdCIpOwotCQkJcmV0dXJuIFBST1hZX1JFU19PSzsKLQkJfQotCQkvKiBOZXdOb2RlIGVsZW1lbnQgKi8KLQkJc2VuZE5ld05vZGVFdmVudCh0cmFuc19pZCwgbWFjaC0+aWQsIG1hY2gpOwotCX0KLQkvKiBOZXdRdWV1ZSBlbGVtZW50ICovCi0Jc2VuZE5ld1F1ZXVlRXZlbnQodHJhbnNfaWQpOwotCi0JLyogRnJvbSBub3cgb24sIGpvYiBzdGF0ZSBhbmQgbm9kZSBzdGF0ZSB1cGRhdGUgbXNnIGNhbiBiZSBzZW50ICovCi0JZW5hYmxlX3N0YXRlX3VwZGF0ZSA9IHRydWU7Ci0JCi0JcmV0dXJuIFBST1hZX1JFU19PSzsKLX0KLQotCi0vKgotICogQ29tcGl0YWJsZSBpbnRlcmZhY2UuCi0gKiBQcm94eSBub3QgYWxsb3dlZCB0byBzdG9wIFNMVVJNIHJtcy4KLSAqLwotaW50Ci1TTFVSTV9RdWl0KGludCB0cmFuc19pZCwgaW50IG5hcmdzLCBjaGFyICoqYXJncykKLXsKLQlpbnQgb2xkX3N0YXRlID0gcHJveHlfc3RhdGU7Ci0JCi0JZGVidWdfbG9nKGxvZ2ZwLCAiU0xVUk1fUXVpdCBjYWxsZWRcbiIpOwotCQotCXByb3h5X3N0YXRlID0gU1RBVEVfU0hVVFRJTkdfRE9XTjsKLQlpZiAob2xkX3N0YXRlID09IFNUQVRFX1JVTk5JTkcpIAotCQlkb19zbHVybV9zaHV0ZG93bigpOwotCQotCXNlbmRTaHV0ZG93bkV2ZW50KHRyYW5zX2lkKTsKLQkKLQlyZXR1cm4gUFJPWFlfUkVTX09LOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBFTkQgT0YgRElTUEFUQ0ggUk9VVElORVMgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEluaXQgam9ic3RhdGVfdXBkYXRlX3RpbWVyLgotICovCi1zdGF0aWMgdm9pZCAKLWluaXRfam9iX3RpbWVyKCkKLXsKLQlnZXR0aW1lb2ZkYXkoJmpvYl91cGRhdGVfdGltZXIsIE5VTEwpOwotCXJldHVybjsKLX0KLQotLyoKLSAqIEluaXQgbm9kZXN0YXRlX3VwZGF0ZV90aW1lci4KLSAqLwotc3RhdGljIHZvaWQgCi1pbml0X25vZGVfdGltZXIoKQotewotCWdldHRpbWVvZmRheSgmbm9kZV91cGRhdGVfdGltZXIsIE5VTEwpOwotCXJldHVybjsKLX0KLQotLyoKLSAqIENoZWNrIGlmIHRpbWVyIGV4cGlyZXMgZ2l2ZW4gdGltZW91dCB2YWx1ZS4KLSAqLwotc3RhdGljIGJvb2wKLXVwZGF0ZV90aW1lb3V0KGludCB0aW1lcl9pZCwgY29uc3QgaW50IHRpbWVvdXQpCi17Ci0Jc3RydWN0IHRpbWV2YWwgKiB0aW1lcjsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0JaW50IHZhbDsKLQlib29sIHJjID0gZmFsc2U7Ci0KLQlzd2l0Y2ggKHRpbWVyX2lkKSB7Ci0JY2FzZSBKT0JfVVBEQVRFX1RJTUVSOgotCQl0aW1lciA9ICZqb2JfdXBkYXRlX3RpbWVyOwotCQlicmVhazsKLQljYXNlIE5PREVfVVBEQVRFX1RJTUVSOgotCQl0aW1lciA9ICZub2RlX3VwZGF0ZV90aW1lcjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOyAKLQl9Ci0JZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotCXZhbCA9IChub3cudHZfc2VjIC0gdGltZXItPnR2X3NlYykgKiAxMDAwMDAwICsgKG5vdy50dl91c2VjIC0gdGltZXItPnR2X3VzZWMpIC0gdGltZW91dDsKLQlpZiAodmFsID49IDApIHsKLQkJLyogdXBkYXRlIHRpbWVyICovCi0JCWdldHRpbWVvZmRheSh0aW1lciwgTlVMTCk7Ci0JCXJjID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBXcmFwcGVyIHJvdXRpbmUgdG8gY2hlY2sgam9iX3VwZGF0ZV90aW1lci4KLSAqLwotc3RhdGljIGJvb2wKLWpvYl91cGRhdGVfdGltZW91dCgpCi17Ci0JcmV0dXJuIHVwZGF0ZV90aW1lb3V0KEpPQl9VUERBVEVfVElNRVIsIEpPQl9VUERBVEVfVElNRU9VVCk7Ci19Ci0KLS8qCi0gKiBXcmFwcGVyIHJvdXRpbmUgdG8gY2hlY2sgbm9kZV91cGRhdGVfdGltZXIuCi0gKi8KLXN0YXRpYyBib29sCi1ub2RlX3VwZGF0ZV90aW1lb3V0KCkKLXsKLQlyZXR1cm4gdXBkYXRlX3RpbWVvdXQoTk9ERV9VUERBVEVfVElNRVIsIE5PREVfVVBEQVRFX1RJTUVPVVQpOwotfQotCi0vKgotICogVXBkYXRlIGpvYi9wcm9jZXNzIHN0YXRlIGFuZCBzZW5kIHN0YXRlIENIQU5HRSB0byB1aS4KLSAqLwotc3RhdGljIHZvaWQgCi11cGRhdGVfam9iX3N0YXRlKGludCBzbHVybV9qb2JpZCkKLXsKLQlpbnQgaTsKLQlpbnQgZXJyY29kZTsKLQlib29sIGpvYl9maW5kOwotCXB0cF9qb2IgKiBqOwotCWpvYl9pbmZvX21zZ190ICogbXNnID0gTlVMTDsKLQotCWVycmNvZGUgPSBzbHVybV9sb2FkX2pvYnMoKHRpbWVfdClOVUxMLCAmbXNnLCBTSE9XX0FMTCk7Ci0JaWYgKGVycmNvZGUpIHsKLQkJZGVidWdfbG9nKGxvZ2ZwLCJzbHVybV9sb2FkX2pvYnMgZXJyb3IiKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoU2V0TGlzdChnSm9iTGlzdCk7IChqID0gKHB0cF9qb2IgKilHZXRMaXN0RWxlbWVudChnSm9iTGlzdCkpICE9IE5VTEw7KSB7Ci0JCWlmIChzbHVybV9qb2JpZCA+IC0xKSB7IAotCQkJaWYgKGotPnNsdXJtX2pvYmlkICE9IHNsdXJtX2pvYmlkKQotCQkJCWNvbnRpbnVlOwotCQl9Ci0JCWpvYl9maW5kID0gZmFsc2U7Ci0JCWZvciAoaSA9IDA7IGkgPCBtc2ctPnJlY29yZF9jb3VudDsgaSsrKSB7Ci0JCQlpZiAoai0+c2x1cm1fam9iaWQgPT0gKG1zZy0+am9iX2FycmF5W2ldKS5qb2JfaWQpIHsKLQkJCQlqb2JfZmluZCA9IHRydWU7Ci0JCQkJaWYgKGotPnN0YXRlICE9IChtc2ctPmpvYl9hcnJheVtpXSkuam9iX3N0YXRlKSB7IC8qc3RhdGUgY2hhbmdlKi8KLQkJCQkJai0+c3RhdGUgPSAobXNnLT5qb2JfYXJyYXlbaV0pLmpvYl9zdGF0ZTsKLQkJCQkJLyogCi0JCQkJCSAqIFNMVVJNIGRvZXNuJ3QgcHJvdmlkZSBwcm9jZXNzIHN0YXRlLgotCQkJCQkgKiBGb3JjZSBwcm9jZXNzIHN0YXRlIGNoYW5ncyB3aXRoIGpvYiBzdGF0ZS4gCi0JCQkJCSAqLwotCQkJCQlzZW5kUHJvY2Vzc1N0YXRlQ2hhbmdlRXZlbnQoZ1RyYW5zSUQsIGosIGpvYnN0YXRlX3RvX3N0cmluZyhqLT5zdGF0ZSkpOwotCQkJCQlzZW5kSm9iU3RhdGVDaGFuZ2VFdmVudChnVHJhbnNJRCwgai0+cHRwX2pvYmlkLCBqb2JzdGF0ZV90b19zdHJpbmcoai0+c3RhdGUpKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9CQotCQl9Ci0JCWlmICgham9iX2ZpbmQpIHsgCi0JCQkvKgotCQkJICogam9iIG5vdCBmb3VuZChyYXJlbHkgaGFwcGVucykuCi0JCQkgKiBJbiB0aGlzIGNhc2UsIHNpbXBseSBtYXJrIHRoaXMgam9iIHJlbW92YWJsZS4KLQkJCSAqIFNMVVJNIGtlZXAgdGhlIGluZm9ybWF0aW4gb2YgY29tcGxldGUvZmFpbCBqb2JzIGZvciBNaW5Kb2JBZ2UgKGRlZmF1bHQgdG8gMzAwKSBzZWNvbmRzCi0JCQkgKiBNaW5Kb2JBZ2UgY2FuIGJlIHNldCBpbiBzbHVybS9ldGMvc2x1cm0uY29uZi4KLQkJCSAqLwotCQkJai0+cmVtb3ZhYmxlID0gdHJ1ZTsKLQkJfQotCQlpZiAoc2x1cm1fam9iaWQgPiAtMSkKLQkJCWJyZWFrOwotCX0KLQlzbHVybV9mcmVlX2pvYl9pbmZvX21zZyhtc2cpOwotCi0JcmV0dXJuOwotfQotCi0vKgotICogVXBkYXRlIEFMTCBub2RlcyBzdGF0ZSBhbmQgc2VuZCBzdGF0ZSBDSEFOR0UgdG8gdWkuCi0gKi8KLXZvaWQKLXVwZGF0ZV9ub2RlX3N0YXRlKCkKLXsKLQlpbnQgaTsKLQlwdHBfbm9kZSAqIG5vZGU7Ci0JaW50IGVycmNvZGU7Ci0Jbm9kZV9pbmZvX21zZ190ICogbXNnOwotCXJhbmdlc2V0ICogdW5rbm93bl9zZXQgPSBuZXdfcmFuZ2VzZXQoKTsKLQlyYW5nZXNldCAqIGlkbGVfc2V0ID0gbmV3X3Jhbmdlc2V0KCk7Ci0JcmFuZ2VzZXQgKiBkb3duX3NldCA9IG5ld19yYW5nZXNldCgpOwotCXJhbmdlc2V0ICogYWxsb2NhdGVkX3NldCA9IG5ld19yYW5nZXNldCgpOwotCi0JaWYgKHVua25vd25fc2V0ID09IE5VTEwgfHwgaWRsZV9zZXQgPT0gTlVMTCB8fCBkb3duX3NldCA9PSBOVUxMIHx8IGFsbG9jYXRlZF9zZXQgPT0gTlVMTCkKLQkJZ290byBjbGVhbnVwOwotCi0JZXJyY29kZSA9IHNsdXJtX2xvYWRfbm9kZSgodGltZV90KU5VTEwsICZtc2csIFNIT1dfQUxMKTsKLQlpZiAoZXJyY29kZSkgewotCQlkZWJ1Z19sb2cobG9nZnAsInNsdXJtX2xvYWRfbm9kZSBlcnJvci5cbiIpOwotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG1zZy0+cmVjb3JkX2NvdW50OyBpKyspIHsKLQkJCW5vZGUgPSBmaW5kX25vZGVfYnlfbmFtZShtc2ctPm5vZGVfYXJyYXlbaV0ubmFtZSk7Ci0JCQlpZiAobm9kZS0+c3RhdGUgPT0gbXNnLT5ub2RlX2FycmF5W2ldLm5vZGVfc3RhdGUpCi0JCQkJY29udGludWU7Ci0JCQllbHNlIHsgLyogbm9kZSBzdGF0ZSBjaGFuZ2UgKi8KLQkJCQlub2RlLT5zdGF0ZSA9IG1zZy0+bm9kZV9hcnJheVtpXS5ub2RlX3N0YXRlOwotCQkJCXN3aXRjaCAobXNnLT5ub2RlX2FycmF5W2ldLm5vZGVfc3RhdGUgJiBOT0RFX1NUQVRFX0JBU0UpIHsKLQkJCQljYXNlIE5PREVfU1RBVEVfVU5LTk9XTjoKLQkJCQkJaW5zZXJ0X2luX3Jhbmdlc2V0KHVua25vd25fc2V0LG5vZGUtPmlkKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBOT0RFX1NUQVRFX0RPV046Ci0JCQkJCWluc2VydF9pbl9yYW5nZXNldChkb3duX3NldCxub2RlLT5pZCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgTk9ERV9TVEFURV9JRExFOgotCQkJCQlpbnNlcnRfaW5fcmFuZ2VzZXQoaWRsZV9zZXQsbm9kZS0+aWQpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIE5PREVfU1RBVEVfQUxMT0NBVEVEOgotCQkJCQlpbnNlcnRfaW5fcmFuZ2VzZXQoYWxsb2NhdGVkX3NldCxub2RlLT5pZCk7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWRlYnVnX2xvZyhsb2dmcCwgInVucmVjb2duaXplZCBub2RlIHN0YXRlXG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQkKLQkJCX0KLQkJfQkKLQkJCQotCQlpZiAoIUVtcHR5TGlzdCh1bmtub3duX3NldC0+ZWxlbWVudHMpKSB7Ci0JCQlzZW5kTm9kZUNoYW5nZUV2ZW50KGdUcmFuc0lELHJhbmdlc2V0X3RvX3N0cmluZyh1bmtub3duX3NldCksbm9kZXN0YXRlX3RvX3N0cmluZyhOT0RFX1NUQVRFX1VOS05PV04pKTsKLQkJfQotCQlpZiAoIUVtcHR5TGlzdChkb3duX3NldC0+ZWxlbWVudHMpKSB7Ci0JCQlzZW5kTm9kZUNoYW5nZUV2ZW50KGdUcmFuc0lELHJhbmdlc2V0X3RvX3N0cmluZyhkb3duX3NldCksbm9kZXN0YXRlX3RvX3N0cmluZyhOT0RFX1NUQVRFX0RPV04pKTsKLQkJfQotCQlpZiAoIUVtcHR5TGlzdChpZGxlX3NldC0+ZWxlbWVudHMpKSB7Ci0JCQlzZW5kTm9kZUNoYW5nZUV2ZW50KGdUcmFuc0lELHJhbmdlc2V0X3RvX3N0cmluZyhpZGxlX3NldCksbm9kZXN0YXRlX3RvX3N0cmluZyhOT0RFX1NUQVRFX0lETEUpKTsKLQkJfQotCQlpZiAoIUVtcHR5TGlzdChhbGxvY2F0ZWRfc2V0LT5lbGVtZW50cykpIHsKLQkJCXNlbmROb2RlQ2hhbmdlRXZlbnQoZ1RyYW5zSUQscmFuZ2VzZXRfdG9fc3RyaW5nKGFsbG9jYXRlZF9zZXQpLG5vZGVzdGF0ZV90b19zdHJpbmcoTk9ERV9TVEFURV9BTExPQ0FURUQpKTsKLQkJfQotCi0JCXNsdXJtX2ZyZWVfbm9kZV9pbmZvX21zZyhtc2cpOwotCX0KLQotY2xlYW51cDoKLQlpZih1bmtub3duX3NldCkKLQkJZnJlZV9yYW5nZXNldCh1bmtub3duX3NldCk7Ci0JaWYoZG93bl9zZXQpCQotCQlmcmVlX3Jhbmdlc2V0KGRvd25fc2V0KTsKLQlpZihpZGxlX3NldCkJCi0JCWZyZWVfcmFuZ2VzZXQoaWRsZV9zZXQpOwotCWlmIChhbGxvY2F0ZWRfc2V0KQkKLQkJZnJlZV9yYW5nZXNldChhbGxvY2F0ZWRfc2V0KTsKLQotCXJldHVybjsKLX0KLQotCi0vKgotICogc2lnbmFsIGhhbmRsZXIgb2Ygc2x1cm0gcHJveHkuIAotICovCi1SRVRTSUdUWVBFCi1wdHBfc2lnbmFsX2hhbmRsZXIoaW50IHNpZykKLXsKLQlpZiAoc2lnICE9IFNJR0NITEQpICAvKiBwcm94eSBkb2Vzbid0IGV4aXQgb24gU0lHQ0hMRCAqLyAKLQkJcHRwX3NpZ25hbF9leGl0ID0gc2lnOwotfQotCi0vKgotICogQ2xlYW51cCB3b3JrIG9uIHByb3h5IGV4aXRpbmc6Ci0gKiAga2lsbCBzcnVuIHByb2Nlc3MsIHJlbGVhc2Ugam9iIHJlc291cmNlLCAKLSAqCXRlcm1pbmF0ZSBpb190aHJlYWQsYW5kIGZyZWUgc3BhY2UuCi0gKi8KLXN0YXRpYyB2b2lkCi1kZXN0cm95X2dsb2JhbF9qb2JsaXN0KCkKLXsKLQlwdHBfam9iICogajsKLQkKLQlmb3IgKFNldExpc3QoZ0pvYkxpc3QpOyAoaiA9IChwdHBfam9iICopR2V0TGlzdEVsZW1lbnQoZ0pvYkxpc3QpKSAhPSBOVUxMOyApIHsKLQkJaWYgKHNsdXJtX2pvYl9hY3RpdmUoaikpIHsKLQkJCWtpbGwoai0+c3J1bl9waWQsIFNJR0tJTEwpOwotCQkJc2x1cm1fa2lsbF9qb2Ioai0+c2x1cm1fam9iaWQsIFNJR0tJTEwsIDApOwotCQl9CQotCQlpZiAoai0+aW90aHJlYWRfZXhpdCA9PSBmYWxzZSkKLQkJCWotPmlvdGhyZWFkX2V4aXRfcmVxID0gdHJ1ZTsKLQkJUmVtb3ZlRnJvbUxpc3QoZ0pvYkxpc3QsIGopOwotCQlmcmVlX2pvYihqKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50Ci1zZXJ2ZXIoY2hhciAqbmFtZSwgY2hhciAqaG9zdCwgaW50IHBvcnQpCi17Ci0JaW50CQkJCXJjID0gMDsKLQlzdHJ1Y3QgdGltZXZhbAl0aW1lb3V0ID0gezAsIDIwMDAwfTsKLQotCWdKb2JMaXN0ID0gTmV3TGlzdCgpOwotCWdNYWNoaW5lTGlzdCA9IE5ld0xpc3QoKTsKLQkKLQlpbml0X2pvYl90aW1lcigpOwotCWluaXRfbm9kZV90aW1lcigpOwotCi0JaWYgKHByb3h5X3N2cl9pbml0KG5hbWUsICZ0aW1lb3V0LCAmaGVscGVyX2Z1bmNzLCAmY29tbWFuZF90YWIsICZzbHVybV9wcm94eSkgIT0gUFJPWFlfUkVTX09LKSB7Ci0JCWRlYnVnX2xvZyhsb2dmcCwgInByb3h5IGZhaWxlZCB0byBpbml0aWFsaXplZFxuIik7IAotCQlyZXR1cm4gMDsKLQl9Ci0JCi0JaWYgKHByb3h5X3N2cl9jb25uZWN0KHNsdXJtX3Byb3h5LCBob3N0LCBwb3J0KSA9PSBQUk9YWV9SRVNfT0spIHsKLQkJZGVidWdfbG9nKGxvZ2ZwLCAicHJveHkgY29ubmVjdGVkXG4iKTsgCi0JCQotCQl3aGlsZSAocHRwX3NpZ25hbF9leGl0ID09IDAgJiYgcHJveHlfc3RhdGUgIT0gU1RBVEVfU0hVVERPV04pIHsKLQkJCWlmIChwcm94eV9zdGF0ZSA9PSBTVEFURV9TSFVUVElOR19ET1dOKSB7Ci0JCQkJcHJveHlfc3RhdGUgPSBTVEFURV9TSFVURE9XTjsKLQkJCX0KLQkJCWlmIChwcm94eV9zdnJfcHJvZ3Jlc3Moc2x1cm1fcHJveHkpICE9IFBST1hZX1JFU19PSykKLQkJCQlicmVhazsKLQkJCS8qIHVwZGF0ZSBqb2IgYW5kIG5vZGUgc3RhdGUgKi8JCi0JCQlpZiAoZW5hYmxlX3N0YXRlX3VwZGF0ZSkgewotCQkJCWlmIChqb2JfdXBkYXRlX3RpbWVvdXQoKSkgIAotCQkJCQl1cGRhdGVfam9iX3N0YXRlKEFMTF9KT0JTVEFURSk7IAotCQkJCWlmIChub2RlX3VwZGF0ZV90aW1lb3V0KCkpIAotCQkJCQl1cGRhdGVfbm9kZV9zdGF0ZSgpOwotCQkJfQotCQkJLyogZGVsZXRlIHJlbW92YWJsZSBqb2IgKi8KLQkJCXB1cmdlX2dsb2JhbF9qb2JsaXN0KCk7Ci0JCX0KLQkJaWYgKHB0cF9zaWduYWxfZXhpdCAhPSAwKSB7Ci0JCQlpZiAocHJveHlfc3RhdGUgIT0gU1RBVEVfU0hVVFRJTkdfRE9XTgotCQkJCSYmIHByb3h5X3N0YXRlICE9IFNUQVRFX1NIVVRET1dOKSB7Ci0JCQkJZG9fc2x1cm1fc2h1dGRvd24oKTsKLQkJCX0KLQkJCQotCQkJZGVzdHJveV9nbG9iYWxfam9ibGlzdCgpOwotCi0JCQkvKiBvdXIgcmV0dXJuIGNvZGUgPSB0aGUgc2lnbmFsIHRoYXQgZmlyZWQgKi8KLQkJCXJjID0gcHRwX3NpZ25hbF9leGl0OwotCQkJZGVidWdfbG9nKGxvZ2ZwLCAicHRwX3NsdXJtX3Byb3h5IHRlcm1pbmF0ZWQgYnkgc2lnbmFsIFslZF1cbiIsIHB0cF9zaWduYWxfZXhpdCk7Ci0JCX0KLQl9IGVsc2UgCi0JCWRlYnVnX2xvZyhsb2dmcCwgInByb3h5IGNvbm5lY3Rpb24gZmFpbGVkXG4iKTsgCi0JCi0JcHJveHlfc3ZyX2ZpbmlzaChzbHVybV9wcm94eSk7Ci0JCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qCi0gKiBFbnRyeSByb3V0aW5lCi0gKi8KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWludCAJY2g7Ci0JaW50CQlwb3J0ID0gUFJPWFlfVENQX1BPUlQ7Ci0JY2hhciAqCWhvc3QgPSBERUZBVUxUX0hPU1Q7Ci0JY2hhciAqCXByb3h5X3N0ciA9IERFRkFVTFRfUFJPWFk7Ci0JaW50CQlyYzsKLQkKLQl3aGlsZSAoKGNoID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIlA6cDpoOiIsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpeyAKLQkJc3dpdGNoIChjaCkgewotCQljYXNlICdQJzoKLQkJCXByb3h5X3N0ciA9IG9wdGFyZzsKLQkJCWJyZWFrOwotCQljYXNlICdwJzoKLQkJCXBvcnQgPSAoaW50KXN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKLQkJCWJyZWFrOwotCQljYXNlICdoJzoKLQkJCWhvc3QgPSBvcHRhcmc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWZwcmludGYoc3RkZXJyLCAiJXMgWy0tcHJveHk9cHJveHldIFstLWhvc3Q9aG9zdF9uYW1lXSBbLS1wb3J0PXBvcnRdIFxuIiwgYXJndlswXSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0JCi0KLQkvL3B1dGVudigiUFRQX1NMVVJNX1BST1hZX0xPR0RJUj0kSE9NRS9sb2ciKTsKLQlsb2dmcCA9IGluaXRfbG9nZnAoKTsKLQotCS8qIAotCSAqIHNpZ25hbCBjYW4gaGFwcGVuIGFueSB0aW1lIGFmdGVyIGhhbmRsZXJzIGFyZSBpbnN0YWxsZWQsIHNvCi0JICogbWFrZSBzdXJlIHdlIGNhdGNoIGl0LgotCSAqLwotCXB0cF9zaWduYWxfZXhpdCA9IDA7Ci0JCi0JLyogc2V0dXAgc2lnbmFsIGhhbmRsZXJzICovCi0JeHNpZ25hbChTSUdJTlQsIHB0cF9zaWduYWxfaGFuZGxlcik7Ci0JeHNpZ25hbChTSUdIVVAsIHB0cF9zaWduYWxfaGFuZGxlcik7Ci0JeHNpZ25hbChTSUdJTEwsIHB0cF9zaWduYWxfaGFuZGxlcik7Ci0JeHNpZ25hbChTSUdTRUdWLCBwdHBfc2lnbmFsX2hhbmRsZXIpOwotCXhzaWduYWwoU0lHVEVSTSwgcHRwX3NpZ25hbF9oYW5kbGVyKTsKLQl4c2lnbmFsKFNJR1FVSVQsIHB0cF9zaWduYWxfaGFuZGxlcik7Ci0JeHNpZ25hbChTSUdBQlJULCBwdHBfc2lnbmFsX2hhbmRsZXIpOwotCXhzaWduYWwoU0lHQ0hMRCwgcHRwX3NpZ25hbF9oYW5kbGVyKTsKLQkKLQlyYyA9IHNlcnZlcihwcm94eV9zdHIsIGhvc3QsIHBvcnQpOwotCQotCXJldHVybiByYzsKLX0KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvLmNsYXNzcGF0aCBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQxODE0Zi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS9wdHAvcm0vcmVtb3RlL2NvcmUvKiIvPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvcm0vcmVtb3RlL3VpLyoiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLy5wcm9qZWN0IGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxMmJlZC4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdERlc2NyaXB0aW9uPg0KLQk8bmFtZT5vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWk8L25hbWU+DQotCTxjb21tZW50PjwvY29tbWVudD4NCi0JPHByb2plY3RzPg0KLQk8L3Byb2plY3RzPg0KLQk8YnVpbGRTcGVjPg0KLQkJPGJ1aWxkQ29tbWFuZD4NCi0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4NCi0JCQk8YXJndW1lbnRzPg0KLQkJCTwvYXJndW1lbnRzPg0KLQkJPC9idWlsZENvbW1hbmQ+DQotCQk8YnVpbGRDb21tYW5kPg0KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+DQotCQkJPGFyZ3VtZW50cz4NCi0JCQk8L2FyZ3VtZW50cz4NCi0JCTwvYnVpbGRDb21tYW5kPg0KLQkJPGJ1aWxkQ29tbWFuZD4NCi0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4NCi0JCQk8YXJndW1lbnRzPg0KLQkJCTwvYXJndW1lbnRzPg0KLQkJPC9idWlsZENvbW1hbmQ+DQotCTwvYnVpbGRTcGVjPg0KLQk8bmF0dXJlcz4NCi0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQotCTwvbmF0dXJlcz4NCi08L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg2NGNjYy4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wDQotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aTtzaW5nbGV0b246PXRydWUNCi1CdW5kbGUtVmVyc2lvbjogMi4xLjAucXVhbGlmaWVyDQotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLkFjdGl2YXRvcg0KLUJ1bmRsZS1WZW5kb3I6ICVwbHVnaW5Qcm92aWRlcg0KLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwNCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLA0KLSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLA0KLSBvcmcuZWNsaXBzZS5wdHAuY29yZSwNCi0gb3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aSwNCi0gb3JnLmVjbGlwc2UucHRwLnV0aWxzLnVpO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsDQotIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlDQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUNCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLA0KLSBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkucHJlZmVyZW5jZXMNCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcywNCi0gb3JnLmVjbGlwc2UucHRwLmNvcmUuZWxlbWVudHMsDQotIG9yZy5lY2xpcHNlLnB0cC5jb3JlLmVsZW1lbnRzLmF0dHJpYnV0ZXMsDQotIG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucywNCi0gb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlLA0KLSBvcmcuZWNsaXBzZS5wdHAucmVtb3RlLmNvcmUuZXhjZXB0aW9uLA0KLSBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLnVpLnByZWZlcmVuY2VzLA0KLSBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLnVpLndpemFyZHMsDQotIG9yZy5lY2xpcHNlLnB0cC51aS53aXphcmRzDQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9hYm91dC5odG1sIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTA2ZjNhLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4NCi08aHRtbD4NCi08aGVhZD4NCi08dGl0bGU+QWJvdXQ8L3RpdGxlPg0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08L2hlYWQ+DQotPGJvZHkgbGFuZz0iRU4tVVMiPg0KLTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPg0KLSANCi08cD5BcHJpIDE0LCAyMDA5PC9wPgkNCi08aDM+TGljZW5zZTwvaDM+DQotDQotPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluICgmcXVvdDtDb250ZW50JnF1b3Q7KS4gIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KLUVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4NCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPg0KLQ0KLTxwPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQ0KLWFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gIENoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiAgSWYgbm8gc3VjaCBsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gIFVubGVzcyBvdGhlcndpc2UNCi1pbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCBhbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy48L3A+DQotDQotPC9ib2R5Pg0KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvYnVpbGQucHJvcGVydGllcyBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1Y2Y4Ni4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLw0KLW91dHB1dC4uID0gYmluLw0KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXA0KLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQotICAgICAgICAgICAgICAgLixcDQotICAgICAgICAgICAgICAgYmluLyxcDQotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMNCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg4NjMzMi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLSAjIENvcHlyaWdodCAoYykgMjAwOCwyMDA5IFNjaG9vbCBvZiBDb21wdXRlcixOYXRpb25hbCBVbml2ZXJzaXR5IA0KLSAjIG9mIERlZmVuc2UgVGVjaG5vbG9neSxQLlIuQ2hpbmEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbQ0KLSAjIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIA0KLSAjIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sDQotICMgYW5kIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAjIENvbnRyaWJ1dG9yczoNCi0gIyBTY2hvb2wgb2YgQ29tcHV0ZXIgLSA2MDUgc3RhZmYgcm9vbQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1wbHVnaW5OYW1lPVBUUCBTbHVybSBVSQ0KLXBsdWdpblByb3ZpZGVyPUVjbGlwc2Uub3JnDQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9wbHVnaW4ueG1sIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWFkZDUyLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/Pg0KLTxwbHVnaW4+DQotDQotICAgPGV4dGVuc2lvbg0KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPg0KLSAgICAgIDxwYWdlDQotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnB0cC51aS5wcmVmZXJlbmNlcy5ybVByZWZlcmVuY2VzUGFnZSINCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLnByZWZlcmVuY2VzLlNMVVJNUHJlZmVyZW5jZVBhZ2UiDQotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5zbHVybS51aS5wcmVmZXJlbmNlcy5PTVBJUHJlZmVyZW5jZVBhZ2UiDQotICAgICAgICAgICAgbmFtZT0iU0xVUk0iPg0KLSAgICAgIDwvcGFnZT4NCi0gICA8L2V4dGVuc2lvbj4NCi0gICA8ZXh0ZW5zaW9uDQotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnB0cC51aS5ybUNvbmZpZ3VyYXRpb25XaXphcmRzIj4NCi0gICAgICA8Y29uZmlndXJhdGlvbldpemFyZA0KLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkud2l6YXJkcy5TTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25XaXphcmRQYWdlRmFjdG9yeSINCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnNsdXJtLnVpLmNvbmZpZ3VyYXRpb25XaXphcmQiLz4NCi0gICA8L2V4dGVuc2lvbj4NCi0gICA8ZXh0ZW5zaW9uDQotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnB0cC5sYXVuY2gucm1MYXVuY2hDb25maWd1cmF0aW9ucyI+DQotICAgICAgPGxhdW5jaENvbmZpZ3VyYXRpb24NCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLnJtTGF1bmNoQ29uZmlndXJhdGlvbi5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkZhY3RvcnkiDQotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnB0cC5zbHVybS51aS5sYXVuY2hDb25maWd1cmF0aW9uIi8+DQotICAgPC9leHRlbnNpb24+DQotDQotPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL0FjdGl2YXRvci5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL0FjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzU3ZGE5Li4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS91aS9BY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlLlNMVVJNUHJlZmVyZW5jZU1hbmFnZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOw0KLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsNCi0NCi0vKioNCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUNCi0gKi8NCi1wdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7DQotDQotCS8vIFRoZSBwbHVnLWluIElEDQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkiOyAvLyROT04tTkxTLTEkDQotDQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UNCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsNCi0JDQotCS8qKg0KLQkgKiBUaGUgY29uc3RydWN0b3INCi0JICovDQotCXB1YmxpYyBBY3RpdmF0b3IoKSB7DQotCQlwbHVnaW4gPSB0aGlzOw0KLQl9DQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkNCi0JICovDQotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlzdXBlci5zdGFydChjb250ZXh0KTsNCi0JCVNMVVJNUHJlZmVyZW5jZU1hbmFnZXIuaW5pdGlhbGl6ZVByZWZlcmVuY2VzKCk7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQotCSAqLw0KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlwbHVnaW4gPSBudWxsOw0KLQkJc3VwZXIuc3RvcChjb250ZXh0KTsNCi0JfQ0KLQ0KLQkvKioNCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlDQotCSAqDQotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQ0KLQkgKi8NCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsNCi0JCXJldHVybiBwbHVnaW47DQotCX0NCi0NCi0JLyoqDQotCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIGltYWdlIGZpbGUgYXQgdGhlIGdpdmVuDQotCSAqIHBsdWctaW4gcmVsYXRpdmUgcGF0aA0KLQkgKg0KLQkgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aA0KLQkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yDQotCSAqLw0KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsNCi0JCXJldHVybiBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgcGF0aCk7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL21lc3NhZ2VzL01lc3NhZ2VzLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vdWkvbWVzc2FnZXMvTWVzc2FnZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBkNWMwMS4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vdWkvbWVzc2FnZXMvTWVzc2FnZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgDQotICogU2Nob29sIG9mIENvbXB1dGVyLCBOYXRpb25hbCBVbml2ZXJzaXR5IG9mIERlZmVuc2UgVGVjaG5vbG9neSwgUC5SLkNoaW5hDQotICoNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqIAkJCVBlaWNoYW5nIFNoaSA8cGNtdXRhdGVzQDE2My5jb20+LzxwY3NoaUBudWR0LmVkdS5jbj4NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS5tZXNzYWdlczsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS51dGlsLk5MUzsNCi0NCi1wdWJsaWMgY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBOTFMgew0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLm1lc3NhZ2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJA0KLQ0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX25hbWU7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfdGl0bGU7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfZGVzY3JpcHRpb247DQotDQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl8wOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfMTsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzI7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl8zOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfNDsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzU7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl82Ow0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfNzsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzg7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl85Ow0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfMTA7DQotDQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfbmFtZTsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV90aXRsZTsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9kZXNjcmlwdGlvbjsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9kZWZhdWx0QnV0dG9uOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Jyb3dzZUJ1dHRvbjsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9wYXRoOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2FyZ3VtZW50czsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9pbnZhbGlkOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX3NlbGVjdDsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9jb25uZWN0aW9uX2Vycm9yOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Nvbm5lY3Rpb25fZXJyb3JfbXNnOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX251bVByb2NzSW52YWxpZDsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV90aW1lTGltaXRJbnZhbGlkOw0KLQ0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVByZWZlcmVuY2VzUGFnZV9ncm91cF9zbHVybWQ7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUHJlZmVyZW5jZXNQYWdlX3NsdXJtZEZpbGVfdGV4dDsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1QcmVmZXJlbmNlc1BhZ2VfU2VsZWN0X1NMVVJNZF9GSUxFOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVByZWZlcmVuY2VzUGFnZV9JbmNvcnJlY3RfU0xVUk1kX2ZpbGU7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUHJlZmVyZW5jZXNQYWdlX3NsdXJtZEFyZ3NfdGV4dDsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1QcmVmZXJlbmNlc1BhZ2Vfc2x1cm1kRnVsbF90ZXh0Ow0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVByZWZlcmVuY2VzUGFnZV9ncm91cF9wcm94eTsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1QcmVmZXJlbmNlc1BhZ2Vfc2x1cm1TZXJ2ZXJfdGV4dDsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1QcmVmZXJlbmNlc1BhZ2VfU2VsZWN0X1NMVVJNX1BST1hZX0ZJTEU7DQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFNMVVJNUHJlZmVyZW5jZXNQYWdlX0luY29ycmVjdF9zZXJ2ZXJfZmlsZTsNCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgU0xVUk1QcmVmZXJlbmNlc1BhZ2VfbWFudWFsOw0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBTTFVSTVByZWZlcmVuY2VzUGFnZV9icm93c2VCdXR0b247DQotCQ0KLQlzdGF0aWMgew0KLQkJLy8gaW5pdGlhbGl6ZSByZXNvdXJjZSBidW5kbGUNCi0JCU5MUy5pbml0aWFsaXplTWVzc2FnZXMoQlVORExFX05BTUUsIE1lc3NhZ2VzLmNsYXNzKTsNCi0JfQ0KLQ0KLQlwcml2YXRlIE1lc3NhZ2VzKCkgew0KLQkJLy8gUHJldmVudCBpbnN0YW5jZXMuDQotCX0NCi19DQotDQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL21lc3NhZ2VzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vdWkvbWVzc2FnZXMvbWVzc2FnZXMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFkNWE4Mi4uMDAwMDAwMAotLS0gYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vdWkvbWVzc2FnZXMvbWVzc2FnZXMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLVNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfbmFtZT1TTFVSTSBQcm94eSBDb25maWd1cmF0aW9uDQotU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV90aXRsZT1TTFVSTSBQcm94eSBDb25maWd1cmF0aW9uDQotU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9kZXNjcmlwdGlvbj1FbnRlciBpbmZvcm1hdGlvbiB0byBjb25uZWN0IHRvIGFuIFNMVVJNIHByb3h5IHNlcnZlcg0KLVNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl8wPU51bWJlciBvZiBQcm9jZXNzZXMoLW4pOiANCi1TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfMT1UaW1lIExpbWl0KC10KToNCi1TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfMTA9UGxlYXNlIGlucHV0IHRoZSBsaW1pdCg+PTEpIG9mIHJ1bm5pbmcgdGltZShtaW51dGVzKVwhDQotU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzI9UGFydGF0aW9uIFJlcXVlc3RlZCgtcCk6DQotU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzM9Sm9iIFR5cGUoLS1qb2J0eXBlKToNCi1TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfND10cnVlDQotU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzU9Sm9iIElvIExhYmVsKC1sKToNCi1TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfNj10cnVlDQotU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzc9Sm9iIFZlcmJvc2UgTW9kZSgtdik6DQotU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzg9Sm9iIE5vZGVsaXN0KC13KToNCi1TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfOT1QbGVhc2UgaW5wdXQgdGhlIGludGVnZXIgbnVtYmVyKD49MSkgb2YgcHJvY2Vzc2VzXCENCi0NCi1TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX25hbWU9U0xVUk1EIENvbmZpZ3VyYXRpb24NCi1TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX3RpdGxlPVNMVVJNRCBDb25maWd1cmF0aW9uDQotU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9kZXNjcmlwdGlvbj1FbnRlciBpbmZvcm1hdGlvbiB0byBjb25maWd1cmUgU0xVUk1EDQotU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9kZWZhdWx0QnV0dG9uPVVzZSBkZWZhdWx0IHNldHRpbmdzDQotU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9icm93c2VCdXR0b249QnJvd3NlDQotU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9wYXRoPVBhdGggdG8gU0xVUk1EOg0KLVNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfYXJndW1lbnRzPUV4dHJhIFNMVVJNRCBhcmd1bWVudHM6DQotU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9pbnZhbGlkPUludmFsaWQgU0xVUk1EIHBhdGgNCi1TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX3NlbGVjdD1TZWxlY3QgU0xVUk1EIGV4ZWN1dGFibGUNCi1TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Nvbm5lY3Rpb25fZXJyb3I9Q29ubmVjdGlvbiBFcnJvcg0KLVNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfY29ubmVjdGlvbl9lcnJvcl9tc2c9Q291bGQgbm90IG9wZW4gY29ubmVjdGlvbg0KLVNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfbnVtUHJvY3NJbnZhbGlkPQ0KLVNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfdGltZUxpbWl0SW52YWxpZD0NCi1TTFVSTVByZWZlcmVuY2VzUGFnZV9ncm91cF9zbHVybWQ9T3BlbiBSdW50aW1lIEVudmlyb25tZW50IERhZW1vbg0KLVNMVVJNUHJlZmVyZW5jZXNQYWdlX3NsdXJtZEZpbGVfdGV4dD1TTFVSTWQgZmlsZToNCi1TTFVSTVByZWZlcmVuY2VzUGFnZV9TZWxlY3RfU0xVUk1kX0ZJTEU9U2VsZWN0IFNMVVJNZCBmaWxlDQotU0xVUk1QcmVmZXJlbmNlc1BhZ2VfSW5jb3JyZWN0X1NMVVJNZF9maWxlPUludmFsaWQgU0xVUk0gZGFlbW9uIGZpbGUNCi1TTFVSTVByZWZlcmVuY2VzUGFnZV9zbHVybWRBcmdzX3RleHQ9U0xVUk1kIGFyZ3VtZW50czoNCi1TTFVSTVByZWZlcmVuY2VzUGFnZV9zbHVybWRGdWxsX3RleHQ9U0xVUk1kIHJ1biBjb21tYW5kOg0KLVNMVVJNUHJlZmVyZW5jZXNQYWdlX2dyb3VwX3Byb3h5PVNsdXJtIFBUUCBQcm94eSBTZXJ2ZXINCi1TTFVSTVByZWZlcmVuY2VzUGFnZV9zbHVybVNlcnZlcl90ZXh0PVNMVVJNfFBUUCBwcm94eSBzZXJ2ZXIgZmlsZToNCi1TTFVSTVByZWZlcmVuY2VzUGFnZV9TZWxlY3RfU0xVUk1fUFJPWFlfRklMRT1TZWxlY3QgU0xVUk18UFRQIFByb3h5IHNlcnZlciBmaWxlDQotU0xVUk1QcmVmZXJlbmNlc1BhZ2VfSW5jb3JyZWN0X3NlcnZlcl9maWxlPUludmFsaWQgU0xVUk18UFRQIHByb3h5IHNlcnZlciBmaWxlDQotU0xVUk1QcmVmZXJlbmNlc1BhZ2VfbWFudWFsPUxhdW5jaCBTTFVSTSBzZXJ2ZXIgbWFudWFsbHkNCi1TTFVSTVByZWZlcmVuY2VzUGFnZV9icm93c2VCdXR0b249QnJvd3NlDQotDQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3ByZWZlcmVuY2VzL1NMVVJNUHJlZmVyZW5jZVBhZ2UuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS91aS9wcmVmZXJlbmNlcy9TTFVSTVByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlOGEwMWIuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3ByZWZlcmVuY2VzL1NMVVJNUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgDQotICogU2Nob29sIG9mIENvbXB1dGVyLCBOYXRpb25hbCBVbml2ZXJzaXR5IG9mIERlZmVuc2UgVGVjaG5vbG9neSwgUC5SLkNoaW5hDQotICoNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqIAkJCVBlaWNoYW5nIFNoaSA8cGNtdXRhdGVzQDE2My5jb20+LzxwY3NoaUBudWR0LmVkdS5jbj4NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS5wcmVmZXJlbmNlczsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS5TTFVSTVByZWZlcmVuY2VNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0ucmVtb3RlLnVpLnByZWZlcmVuY2VzLkFic3RyYWN0UmVtb3RlUHJlZmVyZW5jZVBhZ2U7DQotDQotcHVibGljIGNsYXNzIFNMVVJNUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBBYnN0cmFjdFJlbW90ZVByZWZlcmVuY2VQYWdlIHsNCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUudWkucHJlZmVyZW5jZXMuQWJzdHJhY3RSZW1vdGVQcmVmZXJlbmNlUGFnZSNnZXRQcmVmZXJlbmNlcygpDQotCSAqLw0KLQlwdWJsaWMgUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMoKSB7DQotCQlyZXR1cm4gU0xVUk1QcmVmZXJlbmNlTWFuYWdlci5nZXRQcmVmZXJlbmNlcygpOw0KLQl9DQotCQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aS5wcmVmZXJlbmNlcy5BYnN0cmFjdFJlbW90ZVByZWZlcmVuY2VQYWdlI3NhdmVQcmVmZXJlbmNlcygpDQotCSAqLw0KLQlwdWJsaWMgdm9pZCBzYXZlUHJlZmVyZW5jZXMoKSB7DQotCQlTTFVSTVByZWZlcmVuY2VNYW5hZ2VyLnNhdmVQcmVmZXJlbmNlcygpOw0KLQl9DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS91aS9ybUxhdW5jaENvbmZpZ3VyYXRpb24vU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vdWkvcm1MYXVuY2hDb25maWd1cmF0aW9uL1NMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWY1ODYyLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS91aS9ybUxhdW5jaENvbmZpZ3VyYXRpb24vU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsMjAwOSANCi0gKiBTY2hvb2wgb2YgQ29tcHV0ZXIsIE5hdGlvbmFsIFVuaXZlcnNpdHkgb2YgRGVmZW5zZSBUZWNobm9sb2d5LCBQLlIuQ2hpbmENCi0gKg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogCQkJUGVpY2hhbmcgU2hpIDxwY211dGF0ZXNAMTYzLmNvbT4vPHBjc2hpQG51ZHQuZWR1LmNuPg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLnJtTGF1bmNoQ29uZmlndXJhdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5JQXR0cmlidXRlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLklsbGVnYWxWYWx1ZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLmNvcmUuYXR0cmlidXRlcy5JbnRlZ2VyQXR0cmlidXRlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5hdHRyaWJ1dGVzLkludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUFF1ZXVlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUmVzb3VyY2VNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5hdHRyaWJ1dGVzLkpvYkF0dHJpYnV0ZXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5BYnN0cmFjdFJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5STUxhdW5jaFZhbGlkYXRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlLlNMVVJNSm9iQXR0cmlidXRlczsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLkFjdGl2YXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLm1lc3NhZ2VzLk1lc3NhZ2VzOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7DQotDQotcHVibGljIGNsYXNzIFNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiBleHRlbmRzDQotCQlBYnN0cmFjdFJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIgew0KLQkNCi0JLy9qb2JOdW1Qcm9jZXMNCi0JcHJpdmF0ZSBUZXh0IG51bVByb2NzVGV4dDsNCi0JcHJpdmF0ZSBTdHJpbmcgbnVtUHJvY3NTdHJpbmcgPSAiMSI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5VTUJFUl9PRl9QUk9DRVNTRVNfTEFCRUwgPSBNZXNzYWdlcy5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfMDsNCi0JLy9qb2JOdW1Ob2Rlcw0KLQkvKg0KLQlwcml2YXRlIFRleHQgTnVtTm9kZXNUZXh0Ow0KLQlwcml2YXRlIFN0cmluZyBudW1iZXJub2Rlc1N0cmluZyA9ICIyIjsNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpPQl9OVU1CRVJfT0ZfTk9ERVNfTEFCRUwgPSAiTnVtYmVyIG9mIE5vZGVzKC1OKTogIjsNCi0JKi8NCi0JLy9qb2JUaW1lTGltaXQNCi0JcHJpdmF0ZSBUZXh0IFRpbWVMaW1pdFRleHQ7DQotCXByaXZhdGUgU3RyaW5nIHRpbWVMaW1pdFN0cmluZyA9ICIyIjsgLy8kTk9OLU5MUy0xJA0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSk9CX1RJTUVfTElNSVRfTEFCRUwgPSBNZXNzYWdlcy5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfMTsNCi0JLy9qb2JQYXJ0aXRpb24NCi0JcHJpdmF0ZSBTdHJpbmcgcGFydGF0aW9uUmVxdWVzdGVkU3RyaW5nID0gIjMiOyAvLyROT04tTkxTLTEkDQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKT0JfUEFSVEFUSU9OX0xBQkVMID0gTWVzc2FnZXMuU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzI7DQotCS8vam9iVHlwZQ0KLQlwcml2YXRlIFN0cmluZyBqb2JUeXBlQ29tYm9TdHJpbmcgPSAibXBpIjsgLy8kTk9OLU5MUy0xJA0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSk9CX1RZUEVfTEFCRUwgPSBNZXNzYWdlcy5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfMzsNCi0JLy9qb2JJb0xhYmVsDQotCXByaXZhdGUgU3RyaW5nIGpvYklvU3RyaW5nID0gTWVzc2FnZXMuU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzQ7DQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKT0JfSU9fTEFCRUwgPSBNZXNzYWdlcy5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfNTsNCi0JLy9qb2JWZXJib3NlDQotCXByaXZhdGUgU3RyaW5nIGpvYlZlcmJvc2VNb2RTdHJpbmcgPSBNZXNzYWdlcy5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfNjsNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpPQl9WRVJCT1NFX01PREVfTEFCRUwgPSBNZXNzYWdlcy5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfNzsNCi0JLy9qb2JOb2RlTGlzdA0KLQlwcml2YXRlIFN0cmluZyBqb2JOb2RlTGlzdFN0cmluZyA9ICJub2RlMCxub2RlMSI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpPQl9OT0RFX0xJU1RfTEFCRUwgPU1lc3NhZ2VzLlNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYl84Ow0KLQkNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfUFJFRklYID0gQWN0aXZhdG9yLlBMVUdJTl9JRCArICIubGF1bmNoQXR0cmlidXRlcyI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTlVNUFJPQ1MgPSBBVFRSX1BSRUZJWCArICIubnVtUHJvY3MiOwkgLy8kTk9OLU5MUy0xJA0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9OVU1OT0RFUyA9IEFUVFJfUFJFRklYICsgIi5udW1Ob2RlcyI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfVElNRUxJTUlUID0gQVRUUl9QUkVGSVggKyAiLnRpbWVMaW1pdCI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSk9CUEFSVEFUSU9OID0gQVRUUl9QUkVGSVggKyAiLmpvYnBhcnRhdGlvbiI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSk9CVFlQRSA9IEFUVFJfUFJFRklYICsgIi5qb2J0eXBlIjsgLy8kTk9OLU5MUy0xJA0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9KT0JJTyA9IEFUVFJfUFJFRklYICsgIi5qb2JpbyI7IC8vJE5PTi1OTFMtMSQNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSk9CVkVSQk9TRU1PREUgPSBBVFRSX1BSRUZJWCArICIuam9idmVyYm9zZW1vZGUiOwkgLy8kTk9OLU5MUy0xJA0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBSTUxhdW5jaFZhbGlkYXRpb24gc3VjY2VzcyA9IG5ldyBSTUxhdW5jaFZhbGlkYXRpb24odHJ1ZSwgIiIpOyAvLyROT04tTkxTLTEkDQotCQ0KLQlwcml2YXRlIENvbXBvc2l0ZSBjb250cm9sOw0KLQ0KLQlwdWJsaWMgU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiKElSZXNvdXJjZU1hbmFnZXIgcm0pIHsNCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAubGF1bmNoLnVpLmV4dGVuc2lvbnMuSVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIjY2FuU2F2ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLCBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlciwgb3JnLmVjbGlwc2UucHRwLmNvcmUuSVBRdWV1ZSkNCi0JICovDQotCXB1YmxpYyBSTUxhdW5jaFZhbGlkYXRpb24gY2FuU2F2ZShDb250cm9sIGNvbnRyb2wsIElSZXNvdXJjZU1hbmFnZXIgcm0sIElQUXVldWUgcXVldWUpIHsNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gbnVtUHJvY3NBdHRyRGVmID0gZ2V0TnVtUHJvY3NBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpDQotCQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0ciA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKG51bVByb2NzQXR0ckRlZiwgbnVtUHJvY3NTdHJpbmcpOw0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgTlVNQkVSX09GX1BST0NFU1NFU19MQUJFTCArIGUuZ2V0TWVzc2FnZSgpKTsNCi0JCX0NCi0JCQ0KLQkJLyoNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iTnVtTm9kZXNBdHRyRGVmID0gZ2V0Sm9iTnVtTm9kZXNBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpDQotCQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0ciA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKGpvYk51bU5vZGVzQXR0ckRlZiwgbnVtYmVybm9kZXNTdHJpbmcpOw0KLQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJ0aGUgaWF0dHIgdmFsdWUgaXM6IitpYXR0cisidGhlIG51bXByb2NzU3RyaW5nIHZhbHVlIGlzOiIrbnVtUHJvY3NTdHJpbmcpOw0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX05VTUJFUl9PRl9OT0RFU19MQUJFTCArIGUuZ2V0TWVzc2FnZSgpKTsNCi0JCX0NCi0JCSovDQotCQkNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iVGltZUxpbWl0QXR0ckRlZiA9IGdldEpvYlRpbWVMaW1pdEF0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikNCi0JCQlJbnRlZ2VyQXR0cmlidXRlIGlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iVGltZUxpbWl0QXR0ckRlZiwgdGltZUxpbWl0U3RyaW5nKTsJCQ0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX1RJTUVfTElNSVRfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQkvKg0KLQkJDQotCQl0cnkgew0KLQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYlBhcnRhdGlvbkF0dHJEZWYgPSBnZXRKb2JQYXJ0YXRpb25BdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpDQotCQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0ciA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKGpvYlBhcnRhdGlvbkF0dHJEZWYsIHBhcnRhdGlvblJlcXVlc3RlZFN0cmluZyk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfUEFSVEFUSU9OX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJDQotCQkNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iVHlwZUNvbWJvQXR0ckRlZiA9IGdldEpvYlR5cGVDb21ib0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikNCi0JCQlJbnRlZ2VyQXR0cmlidXRlIGlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iVHlwZUNvbWJvQXR0ckRlZiwgam9iVHlwZUNvbWJvU3RyaW5nKTsJCQ0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX1RZUEVfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQkNCi0JCQ0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JJb0F0dHJEZWYgPSBnZXRKb2JJb0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikNCi0JCQlJbnRlZ2VyQXR0cmlidXRlIGlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iSW9BdHRyRGVmLCBqb2JJb1N0cmluZyk7CQkNCi0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9JT19MQUJFTCArIGUuZ2V0TWVzc2FnZSgpKTsNCi0JCX0JCQ0KLQkJKi8NCi0JCQkJDQotCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbih0cnVlLCAiIik7IC8vJE5PTi1OTFMtMSQNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLmxhdW5jaC51aS5leHRlbnNpb25zLklSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiI2NyZWF0ZUNvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlciwgb3JnLmVjbGlwc2UucHRwLmNvcmUuSVBRdWV1ZSkNCi0JICovDQotCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCwJSVJlc291cmNlTWFuYWdlciBybSwgSVBRdWV1ZSBxdWV1ZSkgew0KLQkJY29udHJvbCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7DQotCQljb250cm9sLnNldExheW91dChuZXcgR3JpZExheW91dCgxLCB0cnVlKSk7DQotCQlHcmlkRGF0YSBnZDsNCi0JCQ0KLQkJZmluYWwgaW50IG51bUNvbHVtbnMgPSAyOw0KLQkJDQotCQlmaW5hbCBDb21wb3NpdGUgY29tcCA9IG5ldyBDb21wb3NpdGUoY29udHJvbCwgU1dULkJPUkRFUik7DQotCQlHcmlkTGF5b3V0IGxhdW5jaENvbmZpZ0xheW91dCA9IG5ldyBHcmlkTGF5b3V0KG51bUNvbHVtbnMsIHRydWUpOw0KLQkJbGF1bmNoQ29uZmlnTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7DQotCQlsYXVuY2hDb25maWdMYXlvdXQubWFyZ2luV2lkdGggPSAwOw0KLQkJbGF1bmNoQ29uZmlnTGF5b3V0Lm51bUNvbHVtbnMgPSBudW1Db2x1bW5zOw0KLQkJY29tcC5zZXRMYXlvdXQobGF1bmNoQ29uZmlnTGF5b3V0KTsNCi0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7DQotCQlnZC5ob3Jpem9udGFsU3BhbiA9IG51bUNvbHVtbnM7DQotCQljb21wLnNldExheW91dERhdGEoZ2QpOw0KLQkJDQotCQkNCi0JCUxhYmVsIG51bWJlck9mUHJvY2Vzc2VzbkxhYmVsID0gbmV3IExhYmVsKGNvbXAsIFNXVC5OT05FKTsNCi0JCW51bWJlck9mUHJvY2Vzc2VzbkxhYmVsLnNldFRleHQoTlVNQkVSX09GX1BST0NFU1NFU19MQUJFTCk7DQotCQlmaW5hbCBHcmlkRGF0YSBnZF9udW1iZXJPZlByb2Nlc3Nlc25MYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlLCAxLCAxKTsNCi0JCWdkX251bWJlck9mUHJvY2Vzc2VzbkxhYmVsLm1pbmltdW1XaWR0aCA9IG51bWJlck9mUHJvY2Vzc2VzbkxhYmVsLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkueDsNCi0JCW51bWJlck9mUHJvY2Vzc2VzbkxhYmVsLnNldExheW91dERhdGEoZ2RfbnVtYmVyT2ZQcm9jZXNzZXNuTGFiZWwpOw0KLQkJDQotCQkNCi0JCW51bVByb2NzVGV4dCA9IG5ldyBUZXh0KGNvbXAsIFNXVC5CT1JERVIgfCBTV1QuV1JBUCk7DQotCQludW1Qcm9jc1RleHQuc2V0VGV4dExpbWl0KDEwKTsNCi0JCW51bVByb2NzVGV4dC5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWJfOSk7DQotCQlnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlLCBudW1Db2x1bW5zLTEsIDEpOw0KLQkJZ2QubWluaW11bVdpZHRoID0gbnVtUHJvY3NUZXh0LmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkueDsNCi0JCW51bVByb2NzVGV4dC5zZXRMYXlvdXREYXRhKGdkKTsNCi0NCi0JCS8vIFRlbGwgdGhlIGNsaWVudCBvZiB0aGlzIGR5bmFtaWMgdGFiIHRoYXQgdGhlDQotCQkvLyBjb250ZW50cyBvZiB0aGlzIHRhYiBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNvbnRlbnRzDQotCQkvLyBvZiB0aGlzIHdpZGdldC4NCi0JCW51bVByb2NzVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKXsNCi0NCi0JCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsNCi0JCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIlRoZSB2YWx1ZSBvZiBudW1Qcm9jc1N0cmluZzoiK251bVByb2NzU3RyaW5nKTsNCi0JCQkJbnVtUHJvY3NTdHJpbmcgPSBudW1Qcm9jc1RleHQuZ2V0VGV4dCgpOw0KLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiVGhlIHZhbHVlIG9mIG51bVByb2NzU3RyaW5nMToiK251bVByb2NzU3RyaW5nKTsNCi0JCQkJZmlyZUNvbnRlbnRzQ2hhbmdlZCgpOw0KLQkJCX19KTsNCi0gICAgICAgIC8qDQotCQlmaW5hbCBMYWJlbCBudW1iZXJPZk5vZGVzTGFiZWwgPSBuZXcgTGFiZWwoY29tcCwgU1dULk5PTkUpOw0KLQkJbnVtYmVyT2ZOb2Rlc0xhYmVsLnNldFRleHQoSk9CX05VTUJFUl9PRl9OT0RFU19MQUJFTCk7DQotDQotCQlOdW1Ob2Rlc1RleHQgPSBuZXcgVGV4dChjb21wLCBTV1QuQk9SREVSIHwgU1dULldSQVApOw0KLQkJTnVtTm9kZXNUZXh0LnNldFRleHRMaW1pdCgxMCk7DQotCQlOdW1Ob2Rlc1RleHQuc2V0VG9vbFRpcFRleHQoIlBsZWFzZSBpbnB1dCB0aGUgbnVtYmVyIG9mIG5vZGVzISIpOw0KLQkJZmluYWwgR3JpZERhdGEgZ2RfbnVtTm9kZXNUZXh0ID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7DQotCQlOdW1Ob2Rlc1RleHQuc2V0TGF5b3V0RGF0YShnZF9udW1Ob2Rlc1RleHQpOw0KLQkJLy9OdW1Ob2Rlc1RleHQgICB2YWx1ZQ0KLQkJTnVtTm9kZXNUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpew0KLQ0KLQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgew0KLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiVGhlIHZhbHVlIG9mIG51bWJlcm5vZGVzU3RyaW5nOiIrbnVtYmVybm9kZXNTdHJpbmcpOw0KLQkJCQludW1iZXJub2Rlc1N0cmluZyA9IE51bU5vZGVzVGV4dC5nZXRUZXh0KCk7DQotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJUaGUgdmFsdWUgb2YgbnVtYmVybm9kZXNTdHJpbmcxOiIrbnVtYmVybm9kZXNTdHJpbmcpOw0KLQkJCQlmaXJlQ29udGVudHNDaGFuZ2VkKCk7DQotCQkJfX0pOw0KLQkJDQotICAgICAgICAqLw0KLQkJZmluYWwgTGFiZWwgdGltZUxpbWl0TGFiZWwgPSBuZXcgTGFiZWwoY29tcCwgU1dULk5PTkUpOw0KLQkJdGltZUxpbWl0TGFiZWwuc2V0VGV4dChKT0JfVElNRV9MSU1JVF9MQUJFTCk7DQotDQotCQlUaW1lTGltaXRUZXh0ID0gbmV3IFRleHQoY29tcCwgU1dULkJPUkRFUiB8IFNXVC5XUkFQKTsNCi0JCVRpbWVMaW1pdFRleHQuc2V0VGV4dExpbWl0KDEwKTsNCi0JCVRpbWVMaW1pdFRleHQuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiXzEwKTsNCi0JCWZpbmFsIEdyaWREYXRhIGdkX3RpbWVMaW1pdFRleHQgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsNCi0JCVRpbWVMaW1pdFRleHQuc2V0TGF5b3V0RGF0YShnZF90aW1lTGltaXRUZXh0KTsNCi0JCS8vVGltZUxpbWl0VGV4dCAgIHZhbHVlDQotCQlUaW1lTGltaXRUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpew0KLQ0KLQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgew0KLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiVGhlIHZhbHVlIG9mIHRpbWVMaW1pdFN0cmluZzoiK3RpbWVMaW1pdFN0cmluZyk7DQotCQkJCXRpbWVMaW1pdFN0cmluZyA9IFRpbWVMaW1pdFRleHQuZ2V0VGV4dCgpOw0KLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiVGhlIHZhbHVlIG9mIHRpbWVMaW1pdFN0cmluZzE6Iit0aW1lTGltaXRTdHJpbmcpOw0KLQkJCQlmaXJlQ29udGVudHNDaGFuZ2VkKCk7DQotCQkJfX0pOw0KLQkJLy9wYXJ0YXRpb25SZXF1ZXN0ZWRDb21ibyAgIHZhbHVlDQotCQkvL0pvYklkVGV4dCAgIHZhbHVlDQotCQkvL2pvYlR5cGVDb21ibyAgIHZhbHVlDQotCQkvL0pvYklPTGFibGVUZXh0ICAgdmFsdWUNCi0JCS8vSm9iVmVyYm9zZU1vZGVUZXh0ICB2YWx1ZQ0KLQkJLy9Kb2JOb2RlbGlzdFRleHQgIHZhbHVlDQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5JUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiNnZXRBdHRyaWJ1dGVzKG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5JUmVzb3VyY2VNYW5hZ2VyLCBvcmcuZWNsaXBzZS5wdHAuY29yZS5JUFF1ZXVlLCBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uKQ0KLQkgKi8NCi0JcHVibGljIElBdHRyaWJ1dGU8Pyw/LD8+W10gZ2V0QXR0cmlidXRlcyhJUmVzb3VyY2VNYW5hZ2VyIHJtLCBJUFF1ZXVlIHF1ZXVlLA0KLQkJCUlMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIFN0cmluZyBtb2RlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQkNCi0JCWludCBudW1Qcm9jcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfTlVNUFJPQ1MsIC0xKTsNCi0JCUludGVnZXJBdHRyaWJ1dGUgaWF0dHIgPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBudW1Qcm9jc0F0dHJEZWYgPSBnZXROdW1Qcm9jc0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlpYXR0ciA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKG51bVByb2NzQXR0ckRlZiwgbnVtUHJvY3MpOw0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IElBdHRyaWJ1dGVbMF07DQotCQl9DQotCQkNCi0JCS8qCQkJCQ0KLQkJaW50IGpvYk51bU5vZGVzID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9OVU1OT0RFUywgLTEpOw0KLQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIlRoZSB2YWx1ZSBvZiBqb2JOdW1Ob2RlcyBpczogIitqb2JOdW1Ob2Rlcyk7DQotCQ0KLQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0cjEgPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JOdW1Ob2Rlc0F0dHJEZWYgPSBnZXRKb2JOdW1Ob2Rlc0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlpYXR0cjEgPSBuZXcgSW50ZWdlckF0dHJpYnV0ZShqb2JOdW1Ob2Rlc0F0dHJEZWYsIGpvYk51bU5vZGVzKTsNCi0JCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiVGhlIHZhbHVlIG9mIE51bU5vZGVzIGlzOiAiK2lhdHRyMSk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgSUF0dHJpYnV0ZVsxXTsNCi0JCX0NCi0JCSovCQkJDQotCQlpbnQgam9iVGltZUxpbWl0ID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9USU1FTElNSVQsIC0xKTsNCi0JCUludGVnZXJBdHRyaWJ1dGUgaWF0dHIyID0gbnVsbDsNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iVGltZUxpbWl0QXR0ckRlZiA9IGdldEpvYlRpbWVMaW1pdEF0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlpYXR0cjIgPSBuZXcgSW50ZWdlckF0dHJpYnV0ZShqb2JUaW1lTGltaXRBdHRyRGVmLCBqb2JUaW1lTGltaXQpOw0KLQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJUaGUgdmFsdWUgb2YgVGltZUxpbWl0IGlzOiAiK2lhdHRyMik7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgSUF0dHJpYnV0ZVsyXTsNCi0JCX0NCi0JCQ0KLQkJLyoJCQkNCi0JCWludCBqb2JQYXJ0YXRpb24gPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShBVFRSX0pPQlBBUlRBVElPTiwgLTEpOw0KLQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0cjMgPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JQYXJ0YXRpb25BdHRyRGVmID0gZ2V0Sm9iUGFydGF0aW9uQXR0ckRlZihybSwgcXVldWUpOw0KLQkJCWlhdHRyMiA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKGpvYlBhcnRhdGlvbkF0dHJEZWYsIGpvYlBhcnRhdGlvbik7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgSUF0dHJpYnV0ZVszXTsNCi0JCX0NCi0JCQkJCQ0KLQkJaW50IGpvYlR5cGVDb21ibyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfSk9CVFlQRSwgLTEpOw0KLQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0cjMgPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JUeXBlQ29tYm9BdHRyRGVmID0gZ2V0Sm9iVGltZUxpbWl0QXR0ckRlZihybSwgcXVldWUpOw0KLQkJCWlhdHRyMiA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKGpvYlR5cGVDb21ib0F0dHJEZWYsIGpvYlR5cGVDb21ibyk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgSUF0dHJpYnV0ZVszXTsNCi0JCX0JCQkNCi0JCQkNCi0JCWludCBqb2JJbyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfSk9CSU8sIC0xKTsNCi0JCUludGVnZXJBdHRyaWJ1dGUgaWF0dHIzID0gbnVsbDsNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iSW9BdHRyRGVmID0gZ2V0Sm9iSW9BdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJaWF0dHIzID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iSW9BdHRyRGVmLCBqb2JJbyk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgSUF0dHJpYnV0ZVszXTsNCi0JCX0NCi0JCSovDQotCQkNCi0JCQ0KLQkJDQotCQlyZXR1cm4gbmV3IElBdHRyaWJ1dGVbXXtpYXR0cixpYXR0cjJ9Ow0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAubGF1bmNoLnVpLmV4dGVuc2lvbnMuSVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIjZ2V0Q29udHJvbCgpDQotCSAqLw0KLQlwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkgew0KLQkJcmV0dXJuIGNvbnRyb2w7DQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5JUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiNpbml0aWFsaXplRnJvbShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sLCBvcmcuZWNsaXBzZS5wdHAucm1zeXN0ZW0uSVJlc291cmNlTWFuYWdlciwgb3JnLmVjbGlwc2UucHRwLmNvcmUuSVBRdWV1ZSwgb3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbikNCi0JICovDQotCXB1YmxpYyBSTUxhdW5jaFZhbGlkYXRpb24gaW5pdGlhbGl6ZUZyb20oQ29udHJvbCBjb250cm9sLCBJUmVzb3VyY2VNYW5hZ2VyIHJtLA0KLQkJCUlQUXVldWUgcXVldWUsIElMYXVuY2hDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsNCi0JCQ0KLQkJaW50IG51bVByb2NzOw0KLQkJdHJ5IHsNCi0JCQludW1Qcm9jcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfTlVNUFJPQ1MsIDEpOw0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJdHJ5IHsNCi0JCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gbnVtUHJvY3NBdHRyRGVmID0gZ2V0TnVtUHJvY3NBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJCW51bVByb2NzVGV4dC5zZXRUZXh0KG51bVByb2NzQXR0ckRlZi5jcmVhdGUoKS5nZXRWYWx1ZUFzU3RyaW5nKCkpOw0KLQkJCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlMSkgew0KLQkJCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgTlVNQkVSX09GX1BST0NFU1NFU19MQUJFTCArDQotCQkJCQkJZS5nZXRNZXNzYWdlKCkgKyAiIDogIiArIGUxLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQNCi0JCQl9DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIE5VTUJFUl9PRl9QUk9DRVNTRVNfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQludW1Qcm9jc1RleHQuc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKG51bVByb2NzKSk7DQotCQkvKg0KLQkJaW50IGpvYk51bU5vZGVzOw0KLQkJdHJ5IHsNCi0JCQlqb2JOdW1Ob2RlcyA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfTlVNTk9ERVMsIDEpOw0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJdHJ5IHsNCi0JCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iTnVtTm9kZXNBdHRyRGVmID0gZ2V0Sm9iTnVtTm9kZXNBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJCU51bU5vZGVzVGV4dC5zZXRUZXh0KGpvYk51bU5vZGVzQXR0ckRlZi5jcmVhdGUoKS5nZXRWYWx1ZUFzU3RyaW5nKCkpOw0KLQkJCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlMSkgew0KLQkJCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX05VTUJFUl9PRl9OT0RFU19MQUJFTCArDQotCQkJCQkJZS5nZXRNZXNzYWdlKCkgKyAiIDogIiArIGUxLmdldE1lc3NhZ2UoKSk7DQotCQkJfQ0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfTlVNQkVSX09GX05PREVTX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJTnVtTm9kZXNUZXh0LnNldFRleHQoSW50ZWdlci50b1N0cmluZyhqb2JOdW1Ob2RlcykpOw0KLQkJKi8JCQ0KLQkJaW50IGpvYlRpbWVMaW1pdDsNCi0JCXRyeSB7DQotCQkJam9iVGltZUxpbWl0ID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9USU1FTElNSVQsIDEpOw0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJdHJ5IHsNCi0JCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iVGltZUxpbWl0QXR0ckRlZiA9IGdldEpvYlRpbWVMaW1pdEF0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQkJVGltZUxpbWl0VGV4dC5zZXRUZXh0KGpvYlRpbWVMaW1pdEF0dHJEZWYuY3JlYXRlKCkuZ2V0VmFsdWVBc1N0cmluZygpKTsNCi0JCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZTEpIHsNCi0JCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9USU1FX0xJTUlUX0xBQkVMICsNCi0JCQkJCQllLmdldE1lc3NhZ2UoKSArICIgOiAiICsgZTEuZ2V0TWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJA0KLQkJCX0NCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX1RJTUVfTElNSVRfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQlUaW1lTGltaXRUZXh0LnNldFRleHQoSW50ZWdlci50b1N0cmluZyhqb2JUaW1lTGltaXQpKTsNCi0JCS8qCQkNCi0JCWludCBqb2JQYXJ0YXRpb247DQotCQl0cnkgew0KLQkJCWpvYlBhcnRhdGlvbiA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlKEFUVFJfSk9CUEFSVEFUSU9OLCAxKTsNCi0JCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgew0KLQkJCXRyeSB7DQotCQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYlBhcnRhdGlvbkF0dHJEZWYgPSBnZXRKb2JQYXJ0YXRpb25BdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJCXBhcnRhdGlvblJlcXVlc3RlZENvbWJvLnNldFRleHQoam9iUGFydGF0aW9uQXR0ckRlZi5jcmVhdGUoKS5nZXRWYWx1ZUFzU3RyaW5nKCkpOw0KLQkJCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlMSkgew0KLQkJCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX1BBUlRBVElPTl9MQUJFTCArDQotCQkJCQkJZS5nZXRNZXNzYWdlKCkgKyAiIDogIiArIGUxLmdldE1lc3NhZ2UoKSk7DQotCQkJfQ0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfUEFSVEFUSU9OX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJcGFydGF0aW9uUmVxdWVzdGVkQ29tYm8uc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKGpvYlBhcnRhdGlvbikpOw0KLQkJaW50IGpvYlR5cGVDb207DQotCQl0cnkgew0KLQkJCWpvYlR5cGVDb20gPSBjb25maWd1cmF0aW9uLmdldEF0dHJpYnV0ZShBVFRSX0pPQlRZUEUsIDEpOw0KLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJdHJ5IHsNCi0JCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iVHlwZUNvbWJvQXR0ckRlZiA9IGdldEpvYlR5cGVDb21ib0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQkJam9iVHlwZUNvbWJvLnNldFRleHQoam9iVHlwZUNvbWJvQXR0ckRlZi5jcmVhdGUoKS5nZXRWYWx1ZUFzU3RyaW5nKCkpOw0KLQkJCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlMSkgew0KLQkJCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX1RZUEVfTEFCRUwgKw0KLQkJCQkJCWUuZ2V0TWVzc2FnZSgpICsgIiA6ICIgKyBlMS5nZXRNZXNzYWdlKCkpOw0KLQkJCX0NCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX1RZUEVfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQlqb2JUeXBlQ29tYm8uc2V0VGV4dChJbnRlZ2VyLnRvU3RyaW5nKGpvYlR5cGVDb20pKTsJDQotCQlpbnQgam9iSW87DQotCQl0cnkgew0KLQkJCWpvYklvID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGUoQVRUUl9KT0JJTywgMSk7DQotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCi0JCQl0cnkgew0KLQkJCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JJb0F0dHJEZWYgPSBnZXRKb2JJb0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQkJSm9iSU9MYWJsZVRleHQuc2V0VGV4dChqb2JJb0F0dHJEZWYuY3JlYXRlKCkuZ2V0VmFsdWVBc1N0cmluZygpKTsNCi0JCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZTEpIHsNCi0JCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9JT19MQUJFTCArDQotCQkJCQkJZS5nZXRNZXNzYWdlKCkgKyAiIDogIiArIGUxLmdldE1lc3NhZ2UoKSk7DQotCQkJfQ0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfSU9fTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQlKb2JJT0xhYmxlVGV4dC5zZXRUZXh0KEludGVnZXIudG9TdHJpbmcoam9iSW8pKTsNCi0JCSovDQotCQlyZXR1cm4gc3VjY2VzczsNCi0JfQ0KLQ0KLQkvKiAobm9uLUphdmFkb2MpDQotCSAqIEBzZWUgb3JnLmVjbGlwc2UucHRwLmxhdW5jaC51aS5leHRlbnNpb25zLklSTUxhdW5jaENvbmZpZ3VyYXRpb25EeW5hbWljVGFiI2lzVmFsaWQob3JnLmVjbGlwc2UuZGVidWcuY29yZS5JTGF1bmNoQ29uZmlndXJhdGlvbiwgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLklSZXNvdXJjZU1hbmFnZXIsIG9yZy5lY2xpcHNlLnB0cC5jb3JlLklQUXVldWUpDQotCSAqLw0KLQ0KLQlwdWJsaWMgUk1MYXVuY2hWYWxpZGF0aW9uIGlzVmFsaWQoSUxhdW5jaENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwNCi0JCQlJUmVzb3VyY2VNYW5hZ2VyIHJtLCBJUFF1ZXVlIHF1ZXVlKSB7DQotCQkNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gbnVtUHJvY3NBdHRyRGVmID0gZ2V0TnVtUHJvY3NBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpDQotCQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0ciA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKG51bVByb2NzQXR0ckRlZiwgbnVtUHJvY3NTdHJpbmcpOw0KLQkJCWlmIChpYXR0ci5nZXRWYWx1ZSgpIDwgMSkgew0KLQkJCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgTWVzc2FnZXMuU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9udW1Qcm9jc0ludmFsaWQpOw0KLQkJCX0NCi0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIE5VTUJFUl9PRl9QUk9DRVNTRVNfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQkvKg0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JOdW1Ob2Rlc0F0dHJEZWYgPSBnZXRKb2JOdW1Ob2Rlc0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikNCi0JCQlJbnRlZ2VyQXR0cmlidXRlIGlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iTnVtTm9kZXNBdHRyRGVmLCBudW1iZXJub2Rlc1N0cmluZyk7DQotCQkJaWYgKGlhdHRyLmdldFZhbHVlKCkgPCAxKSB7DQotCQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBNZXNzYWdlcy5nZXRTdHJpbmcoIlNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2UubnVtYmVybm9kZXNJbnZhbGlkIikpOyAvLyROT04tTkxTLTEkDQotCQkJfQ0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX05VTUJFUl9PRl9OT0RFU19MQUJFTCArIGUuZ2V0TWVzc2FnZSgpKTsNCi0JCX0NCi0JCSovDQotCQl0cnkgew0KLQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYlRpbWVMaW1pdEF0dHJEZWYgPSBnZXRKb2JUaW1lTGltaXRBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpDQotCQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0ciA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKGpvYlRpbWVMaW1pdEF0dHJEZWYsIHRpbWVMaW1pdFN0cmluZyk7DQotCQkJaWYgKGlhdHRyLmdldFZhbHVlKCkgPCAxKSB7DQotCQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBNZXNzYWdlcy5TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX3RpbWVMaW1pdEludmFsaWQpOw0KLQkJCX0NCi0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9USU1FX0xJTUlUX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJLyoNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iUGFydGF0aW9uQXR0ckRlZiA9IGdldEpvYlBhcnRhdGlvbkF0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikNCi0JCQlJbnRlZ2VyQXR0cmlidXRlIGlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iUGFydGF0aW9uQXR0ckRlZiwgcGFydGF0aW9uUmVxdWVzdGVkU3RyaW5nKTsNCi0JCQlpZiAoaWF0dHIuZ2V0VmFsdWUoKSA8IDEpIHsNCi0JCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIE1lc3NhZ2VzLmdldFN0cmluZygiU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZS5udW1Qcm9jc0ludmFsaWQiKSk7IC8vJE5PTi1OTFMtMSQNCi0JCQl9DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfUEFSVEFUSU9OX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JUeXBlQ29tYm9BdHRyRGVmID0gZ2V0Sm9iVHlwZUNvbWJvQXR0ckRlZihybSwgcXVldWUpOw0KLQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQ0KLQkJCUludGVnZXJBdHRyaWJ1dGUgaWF0dHIgPSBuZXcgSW50ZWdlckF0dHJpYnV0ZShqb2JUeXBlQ29tYm9BdHRyRGVmLCBqb2JUeXBlQ29tYm9TdHJpbmcpOw0KLQkJCWlmIChpYXR0ci5nZXRWYWx1ZSgpIDwgMSkgew0KLQkJCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlLm51bVByb2NzSW52YWxpZCIpKTsgLy8kTk9OLU5MUy0xJA0KLQkJCX0NCi0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9UWVBFX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JJb0F0dHJEZWYgPSBnZXRKb2JJb0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikNCi0JCQlJbnRlZ2VyQXR0cmlidXRlIGlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iSW9BdHRyRGVmLCBqb2JJb1N0cmluZyk7DQotCQkJaWYgKGlhdHRyLmdldFZhbHVlKCkgPCAxKSB7DQotCQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBNZXNzYWdlcy5nZXRTdHJpbmcoIlNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2UubnVtUHJvY3NJbnZhbGlkIikpOyAvLyROT04tTkxTLTEkDQotCQkJfQ0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX0lPX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJKi8NCi0JCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKHRydWUsICIiKTsgLy8kTk9OLU5MUy0xJA0KLQl9DQotDQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAubGF1bmNoLnVpLmV4dGVuc2lvbnMuSVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWIjcGVyZm9ybUFwcGx5KG9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuSUxhdW5jaENvbmZpZ3VyYXRpb25Xb3JraW5nQ29weSwgb3JnLmVjbGlwc2UucHRwLnJtc3lzdGVtLklSZXNvdXJjZU1hbmFnZXIsIG9yZy5lY2xpcHNlLnB0cC5jb3JlLklQUXVldWUpDQotCSAqLw0KLQlwdWJsaWMgUk1MYXVuY2hWYWxpZGF0aW9uIHBlcmZvcm1BcHBseShJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24sDQotCQkJSVJlc291cmNlTWFuYWdlciBybSwgSVBRdWV1ZSBxdWV1ZSkgew0KLQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0ciA9IG51bGw7DQotCQl0cnkgew0KLQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIG51bVByb2NzQXR0ckRlZiA9IGdldE51bVByb2NzQXR0ckRlZihybSwgcXVldWUpOw0KLQkJCWlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUobnVtUHJvY3NBdHRyRGVmLCBudW1Qcm9jc1N0cmluZyk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoQVRUUl9OVU1QUk9DUywgaWF0dHIuZ2V0VmFsdWUoKSk7DQotCQkvKg0KLQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0cjEgPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JOdW1Ob2Rlc0F0dHJEZWYgPSBnZXRKb2JOdW1Ob2Rlc0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQlpYXR0cjEgPSBuZXcgSW50ZWdlckF0dHJpYnV0ZShqb2JOdW1Ob2Rlc0F0dHJEZWYsIG51bWJlcm5vZGVzU3RyaW5nKTsNCi0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9OVU1CRVJfT0ZfTk9ERVNfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShBVFRSX05VTU5PREVTLCBpYXR0cjEuZ2V0VmFsdWUoKSk7DQotCQkqLw0KLQkJSW50ZWdlckF0dHJpYnV0ZSBpYXR0cjIgPSBudWxsOw0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JUaW1lTGltaXRBdHRyRGVmID0gZ2V0Sm9iVGltZUxpbWl0QXR0ckRlZihybSwgcXVldWUpOw0KLQkJCWlhdHRyMiA9IG5ldyBJbnRlZ2VyQXR0cmlidXRlKGpvYlRpbWVMaW1pdEF0dHJEZWYsIHRpbWVMaW1pdFN0cmluZyk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfVElNRV9MSU1JVF9MQUJFTCArIGUuZ2V0TWVzc2FnZSgpKTsNCi0JCX0NCi0JCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEFUVFJfVElNRUxJTUlULCBpYXR0cjIuZ2V0VmFsdWUoKSk7DQotCQkvKg0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JQYXJ0YXRpb25BdHRyRGVmID0gZ2V0Sm9iUGFydGF0aW9uQXR0ckRlZihybSwgcXVldWUpOw0KLQkJCWlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iUGFydGF0aW9uQXR0ckRlZiwgcGFydGF0aW9uUmVxdWVzdGVkU3RyaW5nKTsNCi0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9QQVJUQVRJT05fTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShBVFRSX0pPQlBBUlRBVElPTiwgaWF0dHIuZ2V0VmFsdWUoKSk7DQotCQl0cnkgew0KLQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYlR5cGVDb21ib0F0dHJEZWYgPSBnZXRKb2JUeXBlQ29tYm9BdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJaWF0dHIgPSBuZXcgSW50ZWdlckF0dHJpYnV0ZShqb2JUeXBlQ29tYm9BdHRyRGVmLCBqb2JUeXBlQ29tYm9TdHJpbmcpOw0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX1RZUEVfTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShBVFRSX1RJTUVMSU1JVCwgaWF0dHIuZ2V0VmFsdWUoKSk7DQotCQl0cnkgew0KLQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYklvQXR0ckRlZiA9IGdldEpvYklvQXR0ckRlZihybSwgcXVldWUpOw0KLQkJCWlhdHRyID0gbmV3IEludGVnZXJBdHRyaWJ1dGUoam9iSW9BdHRyRGVmLCBqb2JJb1N0cmluZyk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfSU9fTEFCRUwgKyBlLmdldE1lc3NhZ2UoKSk7DQotCQl9DQotCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShBVFRSX0pPQklPLCBpYXR0ci5nZXRWYWx1ZSgpKTsNCi0JCSovDQotCQkvL1N5c3RlbS5vdXQucHJpbnRsbihBVFRSX05VTU5PREVTKTsNCi0JCQ0KLQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24odHJ1ZSwgIiIpOyAvLyROT04tTkxTLTEkDQotCX0NCi0NCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5sYXVuY2gudWkuZXh0ZW5zaW9ucy5JUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiNzZXREZWZhdWx0cyhvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlLklMYXVuY2hDb25maWd1cmF0aW9uV29ya2luZ0NvcHksIG9yZy5lY2xpcHNlLnB0cC5ybXN5c3RlbS5JUmVzb3VyY2VNYW5hZ2VyLCBvcmcuZWNsaXBzZS5wdHAuY29yZS5JUFF1ZXVlKQ0KLQkgKi8NCi0JcHVibGljIFJNTGF1bmNoVmFsaWRhdGlvbiBzZXREZWZhdWx0cyhJTGF1bmNoQ29uZmlndXJhdGlvbldvcmtpbmdDb3B5IGNvbmZpZ3VyYXRpb24sDQotCQkJSVJlc291cmNlTWFuYWdlciBybSwgSVBRdWV1ZSBxdWV1ZSkgew0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBudW1Qcm9jc0F0dHJEZWYgPSBnZXROdW1Qcm9jc0F0dHJEZWYocm0sIHF1ZXVlKTsNCi0JCQljb25maWd1cmF0aW9uLnNldEF0dHJpYnV0ZShBVFRSX05VTVBST0NTLCBudW1Qcm9jc0F0dHJEZWYuY3JlYXRlKCkuZ2V0VmFsdWUoKSk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJLyoNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iTnVtTm9kZXNBdHRyRGVmID0gZ2V0Sm9iTnVtTm9kZXNBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoQVRUUl9OVU1OT0RFUywgam9iTnVtTm9kZXNBdHRyRGVmLmNyZWF0ZSgpLmdldFZhbHVlKCkpOw0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX05VTUJFUl9PRl9OT0RFU19MQUJFTCArIGUuZ2V0TWVzc2FnZSgpKTsNCi0JCX0NCi0JCSovDQotCQl0cnkgew0KLQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYlRpbWVMaW1pdEF0dHJEZWYgPSBnZXRKb2JUaW1lTGltaXRBdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoQVRUUl9USU1FTElNSVQsIGpvYlRpbWVMaW1pdEF0dHJEZWYuY3JlYXRlKCkuZ2V0VmFsdWUoKSk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfVElNRV9MSU1JVF9MQUJFTCArIGUuZ2V0TWVzc2FnZSgpKTsNCi0JCX0NCi0JCS8qDQotCQl0cnkgew0KLQkJCUludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGpvYlBhcnRhdGlvbkF0dHJEZWYgPSBnZXRKb2JQYXJ0YXRpb25BdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoQVRUUl9KT0JQQVJUQVRJT04sIGpvYlBhcnRhdGlvbkF0dHJEZWYuY3JlYXRlKCkuZ2V0VmFsdWUoKSk7DQotCQl9IGNhdGNoIChJbGxlZ2FsVmFsdWVFeGNlcHRpb24gZSkgew0KLQkJCXJldHVybiBuZXcgUk1MYXVuY2hWYWxpZGF0aW9uKGZhbHNlLCBKT0JfUEFSVEFUSU9OX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQ0KLQkJdHJ5IHsNCi0JCQlJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBqb2JUeXBlQ29tYm9BdHRyRGVmID0gZ2V0Sm9iVHlwZUNvbWJvQXR0ckRlZihybSwgcXVldWUpOw0KLQkJCWNvbmZpZ3VyYXRpb24uc2V0QXR0cmlidXRlKEFUVFJfSk9CVFlQRSwgam9iVHlwZUNvbWJvQXR0ckRlZi5jcmVhdGUoKS5nZXRWYWx1ZSgpKTsNCi0JCX0gY2F0Y2ggKElsbGVnYWxWYWx1ZUV4Y2VwdGlvbiBlKSB7DQotCQkJcmV0dXJuIG5ldyBSTUxhdW5jaFZhbGlkYXRpb24oZmFsc2UsIEpPQl9UWVBFX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQkNCi0JCXRyeSB7DQotCQkJSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gam9iSW9BdHRyRGVmID0gZ2V0Sm9iSW9BdHRyRGVmKHJtLCBxdWV1ZSk7DQotCQkJY29uZmlndXJhdGlvbi5zZXRBdHRyaWJ1dGUoQVRUUl9KT0JJTywgam9iSW9BdHRyRGVmLmNyZWF0ZSgpLmdldFZhbHVlKCkpOw0KLQkJfSBjYXRjaCAoSWxsZWdhbFZhbHVlRXhjZXB0aW9uIGUpIHsNCi0JCQlyZXR1cm4gbmV3IFJNTGF1bmNoVmFsaWRhdGlvbihmYWxzZSwgSk9CX0lPX0xBQkVMICsgZS5nZXRNZXNzYWdlKCkpOw0KLQkJfQkNCi0JCSovDQotCQlyZXR1cm4gc3VjY2VzczsNCi0JfQ0KLQ0KLQkvKioNCi0JICogR2V0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmb3IgdGhlIG51bWJlciBvZiBwcm9jZXNzZXMgam9iIGxhdW5jaCBhdHRyaWJ1dGUNCi0JICogDQotCSAqIEBwYXJhbSBybQ0KLQkgKiBAcGFyYW0gcXVldWUNCi0JICogQHJldHVybg0KLQkgKi8NCi0JcHJpdmF0ZSBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBnZXROdW1Qcm9jc0F0dHJEZWYoSVJlc291cmNlTWFuYWdlciBybSwgSVBRdWV1ZSBxdWV1ZSkgew0KLQkJcmV0dXJuIEpvYkF0dHJpYnV0ZXMuZ2V0TnVtYmVyT2ZQcm9jZXNzZXNBdHRyaWJ1dGVEZWZpbml0aW9uKCk7DQotCX0NCi0JcHJpdmF0ZSBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBnZXRKb2JOdW1Ob2Rlc0F0dHJEZWYoSVJlc291cmNlTWFuYWdlciBybSwgSVBRdWV1ZSBxdWV1ZSkgew0KLQkJcmV0dXJuIFNMVVJNSm9iQXR0cmlidXRlcy5nZXROdW1iZXJPZk5vZGVzQXR0cmlidXRlRGVmaW5pdGlvbigpOw0KLQl9DQotCXByaXZhdGUgSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gZ2V0Sm9iVGltZUxpbWl0QXR0ckRlZihJUmVzb3VyY2VNYW5hZ2VyIHJtLCBJUFF1ZXVlIHF1ZXVlKSB7DQotCQlyZXR1cm4gU0xVUk1Kb2JBdHRyaWJ1dGVzLmdldFRpbWVMaW1pdEF0dHJpYnV0ZURlZmluaXRpb24oKTsNCi0JfQ0KLQkvKg0KLQlwcml2YXRlIEludGVnZXJBdHRyaWJ1dGVEZWZpbml0aW9uIGdldEpvYlBhcnRhdGlvbkF0dHJEZWYoSVJlc291cmNlTWFuYWdlciBybSwgSVBRdWV1ZSBxdWV1ZSkgew0KLQkJcmV0dXJuIEpvYkF0dHJpYnV0ZXMuZ2V0Sm9iUGFydGF0aW9uQXR0cmlidXRlRGVmaW5pdGlvbigpOw0KLQl9DQotCXByaXZhdGUgSW50ZWdlckF0dHJpYnV0ZURlZmluaXRpb24gZ2V0Sm9iVHlwZUNvbWJvQXR0ckRlZihJUmVzb3VyY2VNYW5hZ2VyIHJtLCBJUFF1ZXVlIHF1ZXVlKSB7DQotCQlyZXR1cm4gSm9iQXR0cmlidXRlcy5nZXRKb2JUeXBlQ29tYm9BdHRyaWJ1dGVEZWZpbml0aW9uKCk7DQotCX0NCi0JcHJpdmF0ZSBJbnRlZ2VyQXR0cmlidXRlRGVmaW5pdGlvbiBnZXRKb2JJb0F0dHJEZWYoSVJlc291cmNlTWFuYWdlciBybSwgSVBRdWV1ZSBxdWV1ZSkgew0KLQkJcmV0dXJuIEpvYkF0dHJpYnV0ZXMuZ2V0Sm9iSW9BdHRyaWJ1dGVEZWZpbml0aW9uKCk7DQotCX0NCi0JKi8NCi0JLy9uZWVkIHRvIG1vZGlmeSBKb2JBdHRyaWJ1dGVzLmphdmENCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3JtTGF1bmNoQ29uZmlndXJhdGlvbi9TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkZhY3RvcnkuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS91aS9ybUxhdW5jaENvbmZpZ3VyYXRpb24vU0xVUk1STUxhdW5jaENvbmZpZ3VyYXRpb25GYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMWJjM2UuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3JtTGF1bmNoQ29uZmlndXJhdGlvbi9TTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgDQotICogU2Nob29sIG9mIENvbXB1dGVyLCBOYXRpb25hbCBVbml2ZXJzaXR5IG9mIERlZmVuc2UgVGVjaG5vbG9neSwgUC5SLkNoaW5hDQotICoNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqIAkJCVBlaWNoYW5nIFNoaSA8cGNtdXRhdGVzQDE2My5jb20+LzxwY3NoaUBudWR0LmVkdS5jbj4NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS5ybUxhdW5jaENvbmZpZ3VyYXRpb247DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAuY29yZS5lbGVtZW50cy5JUmVzb3VyY2VNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAubGF1bmNoLnVpLmV4dGVuc2lvbnMuQWJzdHJhY3RSTUxhdW5jaENvbmZpZ3VyYXRpb25GYWN0b3J5Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAubGF1bmNoLnVpLmV4dGVuc2lvbnMuSVJNTGF1bmNoQ29uZmlndXJhdGlvbkR5bmFtaWNUYWI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS5jb3JlLnJtc3lzdGVtLlNMVVJNUmVzb3VyY2VNYW5hZ2VyOw0KLQ0KLXB1YmxpYyBjbGFzcyBTTFVSTVJNTGF1bmNoQ29uZmlndXJhdGlvbkZhY3RvcnkgZXh0ZW5kcw0KLQkJQWJzdHJhY3RSTUxhdW5jaENvbmZpZ3VyYXRpb25GYWN0b3J5IHsNCi0NCi0JQE92ZXJyaWRlDQotCXByb3RlY3RlZCBJUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYiBkb0NyZWF0ZShJUmVzb3VyY2VNYW5hZ2VyIHJtKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQlyZXR1cm4gbmV3IFNMVVJNUk1MYXVuY2hDb25maWd1cmF0aW9uRHluYW1pY1RhYihybSk7DQotCX0NCi0NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSVJlc291cmNlTWFuYWdlcj4gZ2V0UmVzb3VyY2VNYW5hZ2VyQ2xhc3MoKSB7DQotCQlyZXR1cm4gU0xVUk1SZXNvdXJjZU1hbmFnZXIuY2xhc3M7DQotCX0NCi0NCi19DQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3dpemFyZHMvU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZS5qYXZhIGIvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3dpemFyZHMvU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTNmODBkLi4wMDAwMDAwCi0tLSBhL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS91aS93aXphcmRzL1NMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOCwyMDA5IA0KLSAqIFNjaG9vbCBvZiBDb21wdXRlciwgTmF0aW9uYWwgVW5pdmVyc2l0eSBvZiBEZWZlbnNlIFRlY2hub2xvZ3ksIFAuUi5DaGluYQ0KLSAqDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAJCQlQZWljaGFuZyBTaGkgPHBjbXV0YXRlc0AxNjMuY29tPi88cGNzaGlAbnVkdC5lZHUuY24+DQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkud2l6YXJkczsNCi0NCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRXJyb3JEaWFsb2c7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlByb3BlcnR5Q2hhbmdlRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZS5JUmVtb3RlQ29ubmVjdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlLklSZW1vdGVTZXJ2aWNlczsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS5jb3JlLlBUUFJlbW90ZUNvcmVQbHVnaW47DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5yZW1vdGUuY29yZS5leGNlcHRpb24uUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aS5JUmVtb3RlVUlGaWxlTWFuYWdlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aS5JUmVtb3RlVUlTZXJ2aWNlczsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJlbW90ZS51aS5QVFBSZW1vdGVVSVBsdWdpbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLmNvcmUucm1zeXN0ZW0uU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkuQWN0aXZhdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkubWVzc2FnZXMuTWVzc2FnZXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC51aS53aXphcmRzLlJNQ29uZmlndXJhdGlvbldpemFyZDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnVpLndpemFyZHMuUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnV0aWxzLnVpLnN3dC5TV1RVdGlsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0Ow0KLQ0KLXB1YmxpYyBjbGFzcyBTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlIGV4dGVuZHMgUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZSB7DQotCQ0KLQlwcm90ZWN0ZWQgY2xhc3MgV2lkZ2V0TGlzdGVuZXIgZXh0ZW5kcyBTZWxlY3Rpb25BZGFwdGVyIGltcGxlbWVudHMgTW9kaWZ5TGlzdGVuZXIsIElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIA0KLQl7DQotCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGV2dCkgew0KLQkJCU9iamVjdCBzb3VyY2UgPSBldnQuZ2V0U291cmNlKCk7DQotCQkJaWYoIWxvYWRpbmcgJiYgKHNvdXJjZSA9PSBwYXRoVGV4dCB8fCBzb3VyY2UgPT0gYXJnc1RleHQpKSB7DQotCQkJCXVwZGF0ZVBhZ2UoKTsNCi0JCQl9DQotCQl9DQotCQ0KLQkJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2UoUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgew0KLQkJCWlmIChldmVudC5nZXRQcm9wZXJ0eSgpLmVxdWFscyhGaWVsZEVkaXRvci5JU19WQUxJRCkpIHsNCi0JCQkJdXBkYXRlUGFnZSgpOw0KLQkJCX0NCi0JCX0NCi0JDQotCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7DQotCQkJT2JqZWN0IHNvdXJjZSA9IGUuZ2V0U291cmNlKCk7DQotCQkJaWYgKHNvdXJjZSA9PSBicm93c2VCdXR0b24pIHsNCi0JCQkJaGFuZGxlUGF0aEJyb3dzZUJ1dHRvblNlbGVjdGVkKCk7DQotCQkJfSBlbHNlIHsNCi0JCQkJdXBkYXRlU2V0dGluZ3MoKTsNCi0JCQkJdXBkYXRlUGFnZSgpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9TVFJJTkcgPSAiIjsgLy8kTk9OLU5MUy0xJA0KLQ0KLQlwcml2YXRlIFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbiBjb25maWc7DQotCXByaXZhdGUgU3RyaW5nIHNsdXJtZFBhdGggPSBFTVBUWV9TVFJJTkc7DQotCXByaXZhdGUgU3RyaW5nIHNsdXJtZEFyZ3MgPSBFTVBUWV9TVFJJTkc7DQotCXByaXZhdGUgSVJlbW90ZVNlcnZpY2VzIHJlbW90ZVNlcnZpY2VzID0gbnVsbDsNCi0JcHJpdmF0ZSBJUmVtb3RlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsNCi0JcHJpdmF0ZSBib29sZWFuIGxvYWRpbmcgPSB0cnVlOw0KLQlwcml2YXRlIGJvb2xlYW4gaXNWYWxpZDsNCi0JcHJpdmF0ZSBib29sZWFuIHVzZURlZmF1bHRzOw0KLQlwcml2YXRlIFRleHQgcGF0aFRleHQgPSBudWxsOw0KLQ0KLQlwcml2YXRlIFRleHQgYXJnc1RleHQgPSBudWxsOw0KLQlwcml2YXRlIEJ1dHRvbiBicm93c2VCdXR0b24gPSBudWxsOw0KLQlwcml2YXRlIEJ1dHRvbiBkZWZhdWx0QnV0dG9uID0gbnVsbDsNCi0JcHJpdmF0ZSBXaWRnZXRMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBXaWRnZXRMaXN0ZW5lcigpOw0KLQkNCi0JcHVibGljIFNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2UoUk1Db25maWd1cmF0aW9uV2l6YXJkIHdpemFyZCkgew0KLQkJc3VwZXIod2l6YXJkLCBNZXNzYWdlcy5TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX25hbWUpOw0KLQkJc2V0VGl0bGUoTWVzc2FnZXMuU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV90aXRsZSk7DQotCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Rlc2NyaXB0aW9uKTsNCi0JCXNldFBhZ2VDb21wbGV0ZSh0cnVlKTsNCi0JCWlzVmFsaWQgPSB0cnVlOw0KLQl9DQotDQotCS8qIChub24tSmF2YWRvYykNCi0JICogQHNlZSBvcmcuZWNsaXBzZS5wdHAudWkud2l6YXJkcy5STUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlI2NyZWF0ZUNvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQ0KLQkgKi8NCi0JcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7DQotCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsNCi0JCUdyaWRMYXlvdXQgdG9wTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsNCi0JICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQodG9wTGF5b3V0KTsNCi0JCWNyZWF0ZUNvbnRlbnRzKGNvbXBvc2l0ZSk7DQotCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7DQotCX0NCi0NCi0JLyoqDQotCSAqIFNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlIFJNIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyDQotCSAqIGFueXRoaW5nIGlzIGNoYW5nZWQuDQotCSAqIA0KLQkgKiBAcmV0dXJuDQotCSAqLw0KLQlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKSANCi0Jew0KLQkJc3RvcmUoKTsNCi0JCWNvbmZpZy5zZXRVc2VEZWZhdWx0cyh1c2VEZWZhdWx0cyk7DQotCQlpZiAoIXVzZURlZmF1bHRzKSB7DQotCQkJY29uZmlnLnNldFNsdXJtZFBhdGgoc2x1cm1kUGF0aCk7DQotCQkJY29uZmlnLnNldFNsdXJtZEFyZ3Moc2x1cm1kQXJncyk7DQotCQl9DQotCQlyZXR1cm4gdHJ1ZTsNCi0JfQ0KLQkNCi0JLyogKG5vbi1KYXZhZG9jKQ0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nUGFnZSNzZXRWaXNpYmxlKGJvb2xlYW4pDQotCSAqLw0KLQlAT3ZlcnJpZGUNCi0JcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsNCi0JCWlmICh2aXNpYmxlKSB7DQotCQkJaW5pdENvbnRlbnRzKCk7DQotCQl9DQotCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOw0KLQl9DQotCQ0KLQkvKioNCi0JICogQ3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkIHBhZ2UuDQotCSAqIA0KLQkgKiBAcGFyYW0gcGFyZW50DQotCSAqIEBwYXJhbSBjb2xTcGFuDQotCSAqLw0KLQlwcml2YXRlIHZvaWQgY3JlYXRlQ29udGVudHMoQ29tcG9zaXRlIHBhcmVudCkgew0KLQkJLyoNCi0JCSAqIENvbXBvc2l0ZSBmb3IgcmVtb3RlIHByb3ZpZGVyIGFuZCBwcm94eSBsb2NhdGlvbiBjb21ibydzDQotCQkgKi8NCi0JCUNvbXBvc2l0ZSBjb250ZW50cyA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7DQotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQotCQlsYXlvdXQubnVtQ29sdW1ucyA9IDM7DQotCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOw0KLQkJY29udGVudHMuc2V0TGF5b3V0KGxheW91dCk7DQotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOw0KLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAzOw0KLQkJY29udGVudHMuc2V0TGF5b3V0RGF0YShnZCk7DQotDQotCQkvKg0KLQkJICogRGVmYXVsdA0KLQkJICovDQotCQlkZWZhdWx0QnV0dG9uID0gY3JlYXRlQ2hlY2tCdXR0b24oY29udGVudHMsIE1lc3NhZ2VzLlNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfZGVmYXVsdEJ1dHRvbik7DQotCQlkZWZhdWx0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsNCi0JCWdkID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7DQotCQlnZC5ob3Jpem9udGFsU3BhbiA9IDM7DQotCQlkZWZhdWx0QnV0dG9uLnNldExheW91dERhdGEoZ2QpOw0KLQ0KLQkJLyoNCi0JCSAqIFNMVVJNRCBwYXRoDQotCQkgKi8NCi0JCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRlbnRzLCBTV1QuTk9ORSk7DQotCQlsYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLlNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfcGF0aCk7DQotDQotCQlwYXRoVGV4dCA9IG5ldyBUZXh0KGNvbnRlbnRzLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7DQotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOw0KLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAxOw0KLQkJZ2Qud2lkdGhIaW50ID0gNjA7DQotCQlwYXRoVGV4dC5zZXRMYXlvdXREYXRhKGdkKTsNCi0JCXBhdGhUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKGxpc3RlbmVyKTsNCi0JCQ0KLQkJYnJvd3NlQnV0dG9uID0gU1dUVXRpbC5jcmVhdGVQdXNoQnV0dG9uKGNvbnRlbnRzLCBNZXNzYWdlcy5TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Jyb3dzZUJ1dHRvbiwgbnVsbCk7DQotCQlicm93c2VCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobGlzdGVuZXIpOw0KLQkJDQotCQkvKg0KLQkJICogU0xVUk1EIGFyZ3MNCi0JCSAqLw0KLQkJbGFiZWwgPSBuZXcgTGFiZWwoY29udGVudHMsIFNXVC5OT05FKTsNCi0JCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9hcmd1bWVudHMpOw0KLQkJDQotCQlhcmdzVGV4dCA9IG5ldyBUZXh0KGNvbnRlbnRzLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7DQotCQlnZCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpOw0KLQkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOw0KLQkJYXJnc1RleHQuc2V0TGF5b3V0RGF0YShnZCk7DQotCQlhcmdzVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihsaXN0ZW5lcik7DQotCX0NCi0NCi0JLyoqDQotCSAqIEluaXRpYWxpemUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9scy4NCi0JICovDQotCXByaXZhdGUgdm9pZCBpbml0Q29udGVudHMoKSB7DQotCQlsb2FkaW5nID0gdHJ1ZTsNCi0JCWNvbmZpZyA9IChTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb24pZ2V0Q29uZmlndXJhdGlvbldpemFyZCgpLmdldENvbmZpZ3VyYXRpb24oKTsNCi0JCWxvYWRTYXZlZCgpOw0KLQkJdXBkYXRlU2V0dGluZ3MoKTsNCi0JCWRlZmF1bHRTZXR0aW5nKCk7DQotCQlsb2FkaW5nID0gZmFsc2U7DQotCQl1cGRhdGVQYWdlKCk7CQ0KLQl9DQotCQ0KLQkvKioNCi0JICogTG9hZCB0aGUgaW5pdGlhbCB3aXphcmQgc3RhdGUgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4NCi0JICovDQotCXByaXZhdGUgdm9pZCBsb2FkU2F2ZWQoKQ0KLQl7DQotCQl1c2VEZWZhdWx0cyA9IGNvbmZpZy51c2VEZWZhdWx0cygpOw0KLQkJc2x1cm1kUGF0aCA9IGNvbmZpZy5nZXRTbHVybWRQYXRoKCk7DQotCQlzbHVybWRBcmdzID0gY29uZmlnLmdldFNsdXJtZEFyZ3MoKTsNCi0JfQ0KLQkNCi0JLyoqDQotCSAqIEBwYXJhbSBiDQotCSAqLw0KLQlwcml2YXRlIHZvaWQgc2V0VmFsaWQoYm9vbGVhbiBiKSB7DQotCQlpc1ZhbGlkID0gYjsNCi0JCXNldFBhZ2VDb21wbGV0ZShpc1ZhbGlkKTsNCi0JfQ0KLQkNCi0JLyoqDQotCSAqIA0KLQkgKi8NCi0JcHJpdmF0ZSB2b2lkIHN0b3JlKCkgDQotCXsNCi0JCWlmICghbG9hZGluZykgew0KLQkJCWlmIChkZWZhdWx0QnV0dG9uICE9IG51bGwpIHsNCi0JCQkJdXNlRGVmYXVsdHMgPSBkZWZhdWx0QnV0dG9uLmdldFNlbGVjdGlvbigpOw0KLQkJCX0NCi0JCQlpZiAocGF0aFRleHQgIT0gbnVsbCkgew0KLQkJCQlzbHVybWRQYXRoID0gcGF0aFRleHQuZ2V0VGV4dCgpOw0KLQkJCX0NCi0JCQlpZiAoYXJnc1RleHQgIT0gbnVsbCkgew0KLQkJCQlzbHVybWRBcmdzID0gYXJnc1RleHQuZ2V0VGV4dCgpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQkNCi0JLyoqDQotCSAqIFVwZGF0ZSB3aXphcmQgVUkgc2VsZWN0aW9ucyBmcm9tIHNldHRpbmdzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgYW55DQotCSAqIHNldHRpbmdzIGFyZSBjaGFuZ2VkLg0KLQkgKi8NCi0JcHJpdmF0ZSB2b2lkIHVwZGF0ZVNldHRpbmdzKCkgew0KLQkJc3RvcmUoKTsNCi0JCXBhdGhUZXh0LnNldEVuYWJsZWQoIXVzZURlZmF1bHRzKTsNCi0JCWFyZ3NUZXh0LnNldEVuYWJsZWQoIXVzZURlZmF1bHRzKTsNCi0JCWJyb3dzZUJ1dHRvbi5zZXRFbmFibGVkKCF1c2VEZWZhdWx0cyk7DQotCX0NCi0NCi0JLyoqDQotCSAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBidXR0b24gd2lkZ2V0Lg0KLQkgKiANCi0JICogQHBhcmFtIHBhcmVudA0KLQkgKiBAcGFyYW0gbGFiZWwNCi0JICogQHBhcmFtIHR5cGUNCi0JICogQHJldHVybiB0aGUgYnV0dG9uIHdpZGdldA0KLQkgKi8NCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVCdXR0b24oQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGxhYmVsLCBpbnQgdHlwZSkgew0KLQkJQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24ocGFyZW50LCB0eXBlKTsNCi0JCWJ1dHRvbi5zZXRUZXh0KGxhYmVsKTsNCi0JCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCi0JCWJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOw0KLQkJcmV0dXJuIGJ1dHRvbjsNCi0JfQ0KLQkNCi0JLyoqDQotCSAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBjaGVjayBidXR0b24gd2lkZ2V0Lg0KLQkgKiANCi0JICogQHBhcmFtIHBhcmVudA0KLQkgKiBAcGFyYW0gbGFiZWwNCi0JICogQHJldHVybiB0aGUgY2hlY2sgYnV0dG9uIHdpZGdldA0KLQkgKi8NCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVDaGVja0J1dHRvbihDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwpIHsNCi0JCXJldHVybiBjcmVhdGVCdXR0b24ocGFyZW50LCBsYWJlbCwgU1dULkNIRUNLIHwgU1dULkxFRlQpOw0KLQl9DQotDQotCS8qKg0KLQkgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgZ3JpZCBsYXlvdXQuDQotCSAqIA0KLQkgKiBAcGFyYW0gY29sdW1ucw0KLQkgKiBAcGFyYW0gaXNFcXVhbA0KLQkgKiBAcGFyYW0gbWgNCi0JICogQHBhcmFtIG13DQotCSAqIEByZXR1cm4gdGhlIG5ldyBncmlkIGxheW91dA0KLQkgKi8NCi0JcHJvdGVjdGVkIEdyaWRMYXlvdXQgY3JlYXRlR3JpZExheW91dChpbnQgY29sdW1ucywgYm9vbGVhbiBpc0VxdWFsLCBpbnQgbWgsIGludCBtdykgIHsNCi0JCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQotCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSBjb2x1bW5zOw0KLQkJZ3JpZExheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBpc0VxdWFsOw0KLQkJZ3JpZExheW91dC5tYXJnaW5IZWlnaHQgPSBtaDsNCi0JCWdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSBtdzsNCi0JCXJldHVybiBncmlkTGF5b3V0Ow0KLQl9DQotCQ0KLQkvKioNCi0JICogQ3JlYXRlcyBhbiBuZXcgcmFkaW8gYnV0dG9uIGluc3RhbmNlIGFuZCBzZXRzIHRoZSBkZWZhdWx0DQotCSAqIGxheW91dCBkYXRhLg0KLQkgKg0KLQkgKiBAcGFyYW0gZ3JvdXAgIHRoZSBjb21wb3NpdGUgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSByYWRpbyBidXR0b24NCi0JICogQHBhcmFtIGxhYmVsICB0aGUgc3RyaW5nIHRvIHNldCBpbnRvIHRoZSByYWRpbyBidXR0b24NCi0JICogQHBhcmFtIHZhbHVlICB0aGUgc3RyaW5nIHRvIGlkZW50aWZ5IHJhZGlvIGJ1dHRvbg0KLQkgKiBAcmV0dXJuIHRoZSBuZXcgcmFkaW8gYnV0dG9uDQotCSAqLyANCi0JcHJvdGVjdGVkIEJ1dHRvbiBjcmVhdGVSYWRpb0J1dHRvbihDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgbGFiZWwsIFN0cmluZyB2YWx1ZSwgU2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsNCi0JCUJ1dHRvbiBidXR0b24gPSBjcmVhdGVCdXR0b24ocGFyZW50LCBsYWJlbCwgU1dULlJBRElPIHwgU1dULkxFRlQpOw0KLQkJYnV0dG9uLnNldERhdGEoKG51bGwgPT0gdmFsdWUpID8gbGFiZWwgOiB2YWx1ZSk7DQotCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCk7DQotCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KLQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkJFR0lOTklORzsNCi0JCWJ1dHRvbi5zZXRMYXlvdXREYXRhKGRhdGEpOw0KLQkJaWYobnVsbCAhPSBsaXN0ZW5lcikgew0KLQkJCWJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7DQotCQl9DQotCQlyZXR1cm4gYnV0dG9uOw0KLQl9DQotCQ0KLQkvKioNCi0JICogDQotCSAqLw0KLQlwcm90ZWN0ZWQgdm9pZCBkZWZhdWx0U2V0dGluZygpIA0KLQl7DQotCQlkZWZhdWx0QnV0dG9uLnNldFNlbGVjdGlvbih1c2VEZWZhdWx0cyk7DQotCQlwYXRoVGV4dC5zZXRUZXh0KHNsdXJtZFBhdGgpOw0KLQkJYXJnc1RleHQuc2V0VGV4dChzbHVybWRBcmdzKTsNCi0JfQ0KLQ0KLQkvKioNCi0JICogQ2xlYW4gdXAgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0IGZpZWxkLg0KLQkgKiANCi0JICogQHBhcmFtIHRleHQNCi0JICogQHJldHVybiBjbGVhbmVkIHVwIHRleHQuDQotCSAqLw0KLQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZpZWxkQ29udGVudChTdHJpbmcgdGV4dCkgDQotCXsNCi0JCWlmICh0ZXh0LnRyaW0oKS5sZW5ndGgoKSA9PSAwIHx8IHRleHQuZXF1YWxzKEVNUFRZX1NUUklORykpDQotCQkJcmV0dXJuIG51bGw7DQotCQ0KLQkJcmV0dXJuIHRleHQ7DQotCX0NCi0NCi0JLyoqDQotCSAqIFNob3cgYSBkaWFsb2cgdGhhdCBsZXRzIHRoZSB1c2VyIHNlbGVjdCBhIGZpbGUuDQotCSAqLw0KLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVQYXRoQnJvd3NlQnV0dG9uU2VsZWN0ZWQoKSANCi0Jew0KLQkJLyoNCi0JCSAqIE5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2UgdGhlIGNvbm5lY3Rpb24gbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIA0KLQkJICogYnkgdGhlIHByZXZpb3VzIHdpemFyZCBwYWdlDQotCQkgKi8NCi0JCVN0cmluZyBybUlEID0gY29uZmlnLmdldFJlbW90ZVNlcnZpY2VzSWQoKTsNCi0JCWlmIChybUlEICE9IG51bGwpIHsNCi0JCQlyZW1vdGVTZXJ2aWNlcyA9IFBUUFJlbW90ZUNvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlbW90ZVNlcnZpY2VzKHJtSUQpOw0KLQkJCVN0cmluZyBjb25uID0gY29uZmlnLmdldENvbm5lY3Rpb25OYW1lKCk7DQotCQkJaWYgKHJlbW90ZVNlcnZpY2VzICE9IG51bGwgJiYgY29ubiAhPSBudWxsKSB7DQotCQkJCWNvbm5lY3Rpb24gPSByZW1vdGVTZXJ2aWNlcy5nZXRDb25uZWN0aW9uTWFuYWdlcigpLmdldENvbm5lY3Rpb24oY29ubik7DQotCQkJfQ0KLQkJfQ0KLQkJDQotCQlpZiAoY29ubmVjdGlvbiAhPSBudWxsKSB7DQotCQkJaWYgKCFjb25uZWN0aW9uLmlzT3BlbigpKSB7DQotCQkJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcCA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7DQotCQkJCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKQ0KLQkJCQkJCQl0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwNCi0JCQkJCQkJSW50ZXJydXB0ZWRFeGNlcHRpb24gew0KLQkJCQkJCXRyeSB7DQotCQkJCQkJCWNvbm5lY3Rpb24ub3Blbihtb25pdG9yKTsNCi0JCQkJCQl9IGNhdGNoIChSZW1vdGVDb25uZWN0aW9uRXhjZXB0aW9uIGUpIHsNCi0JCQkJCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKGdldFNoZWxsKCksIE1lc3NhZ2VzLlNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfY29ubmVjdGlvbl9lcnJvciwNCi0JCQkJCQkJCQlNZXNzYWdlcy5TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Nvbm5lY3Rpb25fZXJyb3JfbXNnLA0KLQkJCQkJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQWN0aXZhdG9yLlBMVUdJTl9JRCwgZS5nZXRNZXNzYWdlKCkpKTsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCQkNCi0JCQkJfTsNCi0JCQkJdHJ5IHsNCi0JCQkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2hlbGwoKSkucnVuKHRydWUsIHRydWUsIG9wKTsNCi0JCQkJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7DQotCQkJCQlFcnJvckRpYWxvZy5vcGVuRXJyb3IoZ2V0U2hlbGwoKSwgTWVzc2FnZXMuU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9jb25uZWN0aW9uX2Vycm9yLA0KLQkJCQkJCQlNZXNzYWdlcy5TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Nvbm5lY3Rpb25fZXJyb3JfbXNnLA0KLQkJCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEFjdGl2YXRvci5QTFVHSU5fSUQsIGUuZ2V0TWVzc2FnZSgpKSk7DQotCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsNCi0JCQkJCUVycm9yRGlhbG9nLm9wZW5FcnJvcihnZXRTaGVsbCgpLCBNZXNzYWdlcy5TTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlX2Nvbm5lY3Rpb25fZXJyb3IsDQotCQkJCQkJCU1lc3NhZ2VzLlNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfY29ubmVjdGlvbl9lcnJvcl9tc2csDQotCQkJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQWN0aXZhdG9yLlBMVUdJTl9JRCwgZS5nZXRNZXNzYWdlKCkpKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlJUmVtb3RlVUlTZXJ2aWNlcyByZW1vdGVVSVNlcnZpY2VzID0gUFRQUmVtb3RlVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlbW90ZVVJU2VydmljZXMocmVtb3RlU2VydmljZXMpOw0KLQkJCUlSZW1vdGVVSUZpbGVNYW5hZ2VyIGZpbGVNZ3IgPSByZW1vdGVVSVNlcnZpY2VzLmdldFVJRmlsZU1hbmFnZXIoKTsNCi0JCQkNCi0JCQlTdHJpbmcgaW5pdGlhbFBhdGggPSAiLy8iOyAvLyBTdGFydCBhdCByb290IHNpbmNlIFNMVVJNRCBpcyBwcm9iYWJseSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbSBzb21ld2hlcmUgLy8kTk9OLU5MUy0xJA0KLQkJCUlQYXRoIHNlbGVjdGVkUGF0aCA9IGZpbGVNZ3IuYnJvd3NlRmlsZShnZXRDb250cm9sKCkuZ2V0U2hlbGwoKSwgTWVzc2FnZXMuU0xVUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZV9zZWxlY3QsIGluaXRpYWxQYXRoKTsNCi0JCQlpZiAoc2VsZWN0ZWRQYXRoICE9IG51bGwpIHsNCi0JCQkJcGF0aFRleHQuc2V0VGV4dChzZWxlY3RlZFBhdGgudG9TdHJpbmcoKSk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCS8qKg0KLQkgKiBAcmV0dXJuDQotCSAqLw0KLQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkU2V0dGluZygpIA0KLQl7DQotCQlpZiAoZGVmYXVsdEJ1dHRvbiAhPSBudWxsICYmIGRlZmF1bHRCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsNCi0JCQlyZXR1cm4gdHJ1ZTsNCi0JCX0NCi0JCQ0KLQkJaWYgKHBhdGhUZXh0ICE9IG51bGwpIHsNCi0JCQlTdHJpbmcgbmFtZSA9IGdldEZpZWxkQ29udGVudChwYXRoVGV4dC5nZXRUZXh0KCkpOw0KLQkJCWlmIChuYW1lID09IG51bGwpIHsNCi0JCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLlNMVVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfaW52YWxpZCk7IA0KLQkJCQlyZXR1cm4gZmFsc2U7DQotCQkJfQ0KLQkJfQ0KLQkNCi0JCXJldHVybiB0cnVlOw0KLQl9DQotDQotCS8qKg0KLQkgKiBAcGFyYW0gc3R5bGUNCi0JICogQHBhcmFtIHNwYWNlDQotCSAqIEByZXR1cm4NCi0JICovDQotCXByb3RlY3RlZCBHcmlkRGF0YSBzcGFuR3JpZERhdGEoaW50IHN0eWxlLCBpbnQgc3BhY2UpIA0KLQl7DQotCQlHcmlkRGF0YSBnZCA9IG51bGw7DQotCQlpZiAoc3R5bGUgPT0gLTEpDQotCQkJZ2QgPSBuZXcgR3JpZERhdGEoKTsNCi0JCWVsc2UNCi0JCQlnZCA9IG5ldyBHcmlkRGF0YShzdHlsZSk7DQotCQlnZC5ob3Jpem9udGFsU3BhbiA9IHNwYWNlOw0KLQkJcmV0dXJuIGdkOw0KLQl9DQotDQotCS8qKg0KLQkgKiANCi0JICovDQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVBhZ2UoKSANCi0Jew0KLQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOw0KLQkJc2V0TWVzc2FnZShudWxsKTsNCi0JDQotCQlpZiAoIWlzVmFsaWRTZXR0aW5nKCkpIHsNCi0JCQlzZXRWYWxpZChmYWxzZSk7DQotCQl9IGVsc2UgewkNCi0JCQlwZXJmb3JtT2soKTsNCi0JCQlzZXRWYWxpZCh0cnVlKTsNCi0JCX0NCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vdWkvd2l6YXJkcy9TTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25XaXphcmRQYWdlLmphdmEgYi9ybXMvb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpL3NyYy9vcmcvZWNsaXBzZS9wdHAvcm0vc2x1cm0vdWkvd2l6YXJkcy9TTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25XaXphcmRQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MDM0Y2YuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3dpemFyZHMvU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsMjAwOSANCi0gKiBTY2hvb2wgb2YgQ29tcHV0ZXIsIE5hdGlvbmFsIFVuaXZlcnNpdHkgb2YgRGVmZW5zZSBUZWNobm9sb2d5LCBQLlIuQ2hpbmENCi0gKg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogCQkJUGVpY2hhbmcgU2hpIDxwY211dGF0ZXNAMTYzLmNvbT4vPHBjc2hpQG51ZHQuZWR1LmNuPg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnJtLnNsdXJtLnVpLndpemFyZHM7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5yZW1vdGUudWkud2l6YXJkcy5BYnN0cmFjdFJlbW90ZVByb3h5UmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2U7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS5tZXNzYWdlcy5NZXNzYWdlczsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnVpLndpemFyZHMuUk1Db25maWd1cmF0aW9uV2l6YXJkOw0KLQ0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25XaXphcmRQYWdlIGV4dGVuZHMNCi0JQWJzdHJhY3RSZW1vdGVQcm94eVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25XaXphcmRQYWdlIHsNCi0JDQotCXB1YmxpYyBTTFVSTVJlc291cmNlTWFuYWdlckNvbmZpZ3VyYXRpb25XaXphcmRQYWdlKFJNQ29uZmlndXJhdGlvbldpemFyZCB3aXphcmQpIHsNCi0JCXN1cGVyKHdpemFyZCwgTWVzc2FnZXMuU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9uYW1lKTsNCi0JCXNldFRpdGxlKE1lc3NhZ2VzLlNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VfdGl0bGUpOw0KLQkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZV9kZXNjcmlwdGlvbik7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3dpemFyZHMvU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZUZhY3RvcnkuamF2YSBiL3Jtcy9vcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0udWkvc3JjL29yZy9lY2xpcHNlL3B0cC9ybS9zbHVybS91aS93aXphcmRzL1NMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YzYyYjkuLjAwMDAwMDAKLS0tIGEvcm1zL29yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS9zcmMvb3JnL2VjbGlwc2UvcHRwL3JtL3NsdXJtL3VpL3dpemFyZHMvU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZUZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgDQotICogU2Nob29sIG9mIENvbXB1dGVyLCBOYXRpb25hbCBVbml2ZXJzaXR5IG9mIERlZmVuc2UgVGVjaG5vbG9neSwgUC5SLkNoaW5hDQotICoNCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqIAkJCVBlaWNoYW5nIFNoaSA8cGNtdXRhdGVzQDE2My5jb20+LzxwY3NoaUBudWR0LmVkdS5jbj4NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5ybS5zbHVybS51aS53aXphcmRzOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucm0uc2x1cm0uY29yZS5ybXN5c3RlbS5TTFVSTVJlc291cmNlTWFuYWdlckZhY3Rvcnk7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC51aS53aXphcmRzLlJNQ29uZmlndXJhdGlvbldpemFyZDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnVpLndpemFyZHMuUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnVpLndpemFyZHMuUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZUZhY3Rvcnk7DQotDQotcHVibGljIGNsYXNzIFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5IGV4dGVuZHMNCi0JCVJNQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5IHsNCi0NCi0JcHVibGljIFNMVVJNUmVzb3VyY2VNYW5hZ2VyQ29uZmlndXJhdGlvbldpemFyZFBhZ2VGYWN0b3J5KCkgew0KLQkJLy8gbm8tb3ANCi0JfQ0KLQ0KLQlwdWJsaWMgUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZVtdIGdldFBhZ2VzKFJNQ29uZmlndXJhdGlvbldpemFyZCB3aXphcmQpIHsNCi0JCXJldHVybiBuZXcgUk1Db25maWd1cmF0aW9uV2l6YXJkUGFnZVtdew0KLQkJCQluZXcgU0xVUk1SZXNvdXJjZU1hbmFnZXJDb25maWd1cmF0aW9uV2l6YXJkUGFnZSh3aXphcmQpLA0KLQkJCQkvL25ldyBTTFVSTUNvbmZpZ3VyYXRpb25XaXphcmRQYWdlKHdpemFyZCkNCi0JCX07DQotCX0NCi0NCi0JcHVibGljIENsYXNzPFNMVVJNUmVzb3VyY2VNYW5hZ2VyRmFjdG9yeT4gZ2V0Uk1GYWN0b3J5Q2xhc3MoKSB7DQotCQlyZXR1cm4gU0xVUk1SZXNvdXJjZU1hbmFnZXJGYWN0b3J5LmNsYXNzOw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvLmNsYXNzcGF0aCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNWUzMS4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy8ucHJvamVjdCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZDg4ZDMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZGE4YmUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNUaHUgSnVuIDE5IDA5OjE3OjA4IEVEVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjA2ZTVjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBUZXN0cyBQbHVnLWluCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iMy44LjIiLAotIG9yZy5lY2xpcHNlLmNkdC5jb3JlLnRlc3RzO2J1bmRsZS12ZXJzaW9uPSI1LjAuMCIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IjMuNC4wIiwKLSBvcmcuZWNsaXBzZS5jZHQuY29yZSwKLSBvcmcuZWNsaXBzZS5wdHAucGxkdC5jb21tb247YnVuZGxlLXZlcnNpb249IjIuMS4wIiwKLSBvcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuY29yZTtidW5kbGUtdmVyc2lvbj0iMi4wLjAiCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDJlNGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvcmVzb3VyY2VzL2luY2x1ZGVzL21waS5oIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy9yZXNvdXJjZXMvaW5jbHVkZXMvbXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNzFjZDMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy9yZXNvdXJjZXMvaW5jbHVkZXMvbXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzg3ICswLDAgQEAKLS8qIG9tcGkvaW5jbHVkZS9tcGkuaC4gIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFRoZSBUcnVzdGVlcyBvZiBJbmRpYW5hIFVuaXZlcnNpdHkgYW5kIEluZGlhbmEKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdHkgUmVzZWFyY2ggYW5kIFRlY2hub2xvZ3kKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IFRoZSBVbml2ZXJzaXR5IG9mIFRlbm5lc3NlZSBhbmQgVGhlIFVuaXZlcnNpdHkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFRlbm5lc3NlZSBSZXNlYXJjaCBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotICogICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBIaWdoIFBlcmZvcm1hbmNlIENvbXB1dGluZyBDZW50ZXIgU3R1dHRnYXJ0LAotICogICAgICAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0eSBvZiBTdHV0dGdhcnQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgICAgICBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogJENPUFlSSUdIVCQKLSAqCi0gKiBBZGRpdGlvbmFsIGNvcHlyaWdodHMgbWF5IGZvbGxvdwotICoKLSAqICRIRUFERVIkCi0gKi8KLQotI2lmbmRlZiBPTVBJX01QSV9ICi0jZGVmaW5lIE9NUElfTVBJX0gKLQotLyogVGhlIGNvbW1lbnQgYmVsb3cgKGFuZCB0aGUgZW5kaW5nIHBhcnRuZXIpIGFyZSBmb3IgYnVpbGRpbmcgZmF0Ci0gICBkaXN0cmlidXRpb25zIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQuICBQbGVhc2UgZG8gbm90IHJlbW92ZSAqLwotCi0vKiBAT01QSV9CRUdJTl9DT05GSUdVUkVfU0VDVElPTkAgKi8KLQotI2lmbmRlZiBPTVBJX0NPTkZJR19ICi0KLS8qIE9ubHkgaW5jbHVkZSB0aGVzZSBpZiBPTVBJX0NPTkZJR19IIGlzbid0IGRlZmluZWQgKG1lYW5pbmcgaWYKLSAgIG9tcGlfY29uZmlnLmggaGFzbid0IGFscmVhZHkgYmVlbiBpbmNsdWRlZCkuICBPdGhlcndpc2UsIHdlJ2xsCi0gICBkdXBsaWNhdGUgYWxsIHRob3NlIHN5bWJvbHMuICBPTVBJIGNvZGluZyBzdGFuZGFyZHMgc2F5IHRoYXQKLSAgIG9tcGlfY29uZmlnLmggbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgYWxsIG90aGVyIGZpbGVzLCBzbyB0aGlzCi0gICBzaG91bGQgYmUgZ29vZCBlbm91Z2ggKi8KLQotLyogV2hldGhlciB3ZSBoYXZlIEZPUlRSQU4gSU5URUdFUioxIG9yIG5vdCAqLwotI2RlZmluZSBPTVBJX0hBVkVfRk9SVFJBTl9JTlRFR0VSMSAwCi0KLS8qIFdoZXRoZXIgd2UgaGF2ZSBGT1JUUkFOIElOVEVHRVIqMTYgb3Igbm90ICovCi0jZGVmaW5lIE9NUElfSEFWRV9GT1JUUkFOX0lOVEVHRVIxNiAwCi0KLS8qIFdoZXRoZXIgd2UgaGF2ZSBGT1JUUkFOIElOVEVHRVIqMiBvciBub3QgKi8KLSNkZWZpbmUgT01QSV9IQVZFX0ZPUlRSQU5fSU5URUdFUjIgMAotCi0vKiBXaGV0aGVyIHdlIGhhdmUgRk9SVFJBTiBJTlRFR0VSKjQgb3Igbm90ICovCi0jZGVmaW5lIE9NUElfSEFWRV9GT1JUUkFOX0lOVEVHRVI0IDAKLQotLyogV2hldGhlciB3ZSBoYXZlIEZPUlRSQU4gSU5URUdFUio4IG9yIG5vdCAqLwotI2RlZmluZSBPTVBJX0hBVkVfRk9SVFJBTl9JTlRFR0VSOCAwCi0KLS8qIFdoZXRoZXIgd2UgaGF2ZSBGT1JUUkFOIFJFQUwqMTYgb3Igbm90ICovCi0jZGVmaW5lIE9NUElfSEFWRV9GT1JUUkFOX1JFQUwxNiAwCi0KLS8qIFdoZXRoZXIgd2UgaGF2ZSBGT1JUUkFOIFJFQUwqNCBvciBub3QgKi8KLSNkZWZpbmUgT01QSV9IQVZFX0ZPUlRSQU5fUkVBTDQgMAotCi0vKiBXaGV0aGVyIHdlIGhhdmUgRk9SVFJBTiBSRUFMKjggb3Igbm90ICovCi0jZGVmaW5lIE9NUElfSEFWRV9GT1JUUkFOX1JFQUw4IDAKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGxvbmcgbG9uZycuICovCi0jZGVmaW5lIEhBVkVfTE9OR19MT05HIDEKLQotLyogVGhlIHNpemUgb2YgYSBgYm9vbCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSNkZWZpbmUgU0laRU9GX0JPT0wgMQotCi0vKiBUaGUgc2l6ZSBvZiBhIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jZGVmaW5lIFNJWkVPRl9JTlQgNAotCi0vKiBUeXBlIG9mIE1QSV9PZmZzZXQgLS0gaGFzIHRvIGJlIGRlZmluZWQgaGVyZSBhbmQgdHlwZWRlZidlZCBsYXRlciBiZWNhdXNlIG1waS5oIGRvZXMgbm90IGdldCBBQyBTVUJTVCdzICovCi0jZGVmaW5lIE9NUElfTVBJX09GRlNFVF9UWVBFIGxvbmcgbG9uZwotCi0vKiB0eXBlIHRvIHVzZSBmb3IgcHRyZGlmZl90LCBpZiBpdCBkb2VzIG5vdCBleGlzdCwgc2V0IHRvIHB0cmRpZmZfdCBpZiBpdCBkb2VzIGV4aXN0ICovCi0jZGVmaW5lIE9NUElfUFRSRElGRl9UWVBFIHB0cmRpZmZfdAotCi0vKiBXaGV0aGVyIHdlIHdhbnQgTVBJIGN4eCBzdXBwb3J0IG9yIG5vdCAqLwotI2RlZmluZSBPTVBJX1dBTlRfQ1hYX0JJTkRJTkdTIDEKLQotLyogZG8gd2Ugd2FudCB0byB0cnkgdG8gd29yayBhcm91bmQgQysrIGJpbmRpbmdzIFNFRUtfKiBpc3N1ZT8gKi8KLSNkZWZpbmUgT01QSV9XQU5UX01QSV9DWFhfU0VFSyAxCi0KLS8qIFdoZXRoZXIgYSBjb25zdF9jYXN0IG9uIGEgMi1kIGFycmF5IHdpbGwgd29yayB3aXRoIHRoZSBDKysgY29tcGlsZXIgKi8KLSNkZWZpbmUgT01QSV9DWFhfU1VQUE9SVFNfMkRfQ09OU1RfQ0FTVCAxCi0KLS8qIFdoZXRoZXIgd2Ugd2FudCB0aGUgTVBJIGY3NyBiaW5kaW5ncyBvciBub3QgKi8KLSNkZWZpbmUgT01QSV9XQU5UX0Y3N19CSU5ESU5HUyAwCi0KLS8qIFdoZXRoZXIgd2Ugd2FudCB0aGUgTVBJIGY5MCBiaW5kaW5ncyBvciBub3QgKi8KLSNkZWZpbmUgT01QSV9XQU5UX0Y5MF9CSU5ESU5HUyAwCi0KLS8qIFdoZXRoZXIgb3Igbm90IHdlIGhhdmUgY29tcGlsZWQgd2l0aCBDKysgZXhjZXB0aW9ucyBzdXBwb3J0ICovCi0jZGVmaW5lIE9NUElfSEFWRV9DWFhfRVhDRVBUSU9OX1NVUFBPUlQgMAotCi0vKiBNUEkgZGF0YXR5cGUgY29ycmVzcG9uZGluZyB0byBNUElfT2Zmc2V0ICovCi0jZGVmaW5lIE9NUElfT0ZGU0VUX0RBVEFUWVBFIE1QSV9MT05HX0xPTkcKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi0KLS8qIE1ham9yLCBtaW5vciwgYW5kIHJlbGVhc2UgdmVyc2lvbiBvZiBPcGVuIE1QSSAqLwotI2RlZmluZSBPTVBJX01BSk9SX1ZFUlNJT04gMQotI2RlZmluZSBPTVBJX01JTk9SX1ZFUlNJT04gMgotI2RlZmluZSBPTVBJX1JFTEVBU0VfVkVSU0lPTiAzCi0KLS8qIEEgIHR5cGUgdGhhdCBhbGxvd3MgdXMgdG8gaGF2ZSBzZW50aW5lbCB0eXBlIHZhbHVlcyB0aGF0IGFyZSBzdGlsbAotICAgdmFsaWQgKi8KLSNkZWZpbmUgb21waV9mb3J0cmFuX2JvZ3VzX3R5cGVfdCBpbnQKLQotLyogQyB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gRk9SVFJBTiBJTlRFR0VSICovCi0jZGVmaW5lIG9tcGlfZm9ydHJhbl9pbnRlZ2VyX3Qgb21waV9mb3J0cmFuX2JvZ3VzX3R5cGVfdAotCi0jaWZuZGVmIE9NUElfREVDTFNQRUMKLSNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikKLSNkZWZpbmUgT01QSV9ERUNMU1BFQyBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSNlbHNlCi0jZGVmaW5lIE9NUElfREVDTFNQRUMKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgTVBJX0ZpbnQKLS8qIE1QSV9GaW50IGlzIHRoZSBzYW1lIGFzIG9tcGlfZm9ydHJhbl9JTlRFR0VSX3QgKi8KLSNkZWZpbmUgTVBJX0ZpbnQgb21waV9mb3J0cmFuX2ludGVnZXJfdAotI2VuZGlmCi0KLSNlbmRpZiAvKiAjaWZuZGVmIE9NUElfQ09ORklHX0ggKi8KLQotLyogQE9NUElfRU5EX0NPTkZJR1VSRV9TRUNUSU9OQCAqLwotCi0vKiBpbmNsdWRlIGZvciBwdHJkaWZmX3QgKi8KLSNpZmRlZiBTVERDX0hFQURFUlMKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZgotCi0jaWZuZGVmIE9NUElfQlVJTERJTkcKLSNkZWZpbmUgT01QSV9CVUlMRElORyAwCi0jZW5kaWYKLQotCi0vKgotICogSnVzdCBpbiBjYXNlIHlvdSBuZWVkIGl0LiAgOi0pCi0gKi8KLSNkZWZpbmUgT1BFTl9NUEkgMQotCi0vKgotICogTVBJIHZlcnNpb24KLSAqLwotI2RlZmluZSBNUElfVkVSU0lPTiAyCi0jZGVmaW5lIE1QSV9TVUJWRVJTSU9OIDAKLQotLyoKLSAqIFRvIGFjY29tb2RhdGUgcHJvZ3JhbXMgd3JpdHRlbiBmb3IgTVBJIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBhCi0gKiBzdHJhaWdodCBST01JTyBpbXBvcnQKLSAqLwotI2lmICFPTVBJX0JVSUxESU5HCi0jZGVmaW5lIE1QSU9fUmVxdWVzdCBNUElfUmVxdWVzdAotI2RlZmluZSBNUElPX1Rlc3QgTVBJX1Rlc3QKLSNkZWZpbmUgTVBJT19XYWl0IE1QSV9XYWl0Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoY19wbHVzcGx1cykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKLWV4dGVybiAiQyIgewotI2VuZGlmCi0vKgotICogVHlwZWRlZnMKLSAqLwotCi10eXBlZGVmIE9NUElfUFRSRElGRl9UWVBFIE1QSV9BaW50OwotdHlwZWRlZiBPTVBJX01QSV9PRkZTRVRfVFlQRSBNUElfT2Zmc2V0OwotdHlwZWRlZiBzdHJ1Y3Qgb21waV9jb21tdW5pY2F0b3JfdCAqTVBJX0NvbW07Ci10eXBlZGVmIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3QgKk1QSV9EYXRhdHlwZTsKLXR5cGVkZWYgc3RydWN0IG9tcGlfZXJyaGFuZGxlcl90ICpNUElfRXJyaGFuZGxlcjsKLXR5cGVkZWYgc3RydWN0IG9tcGlfZmlsZV90ICpNUElfRmlsZTsKLXR5cGVkZWYgc3RydWN0IG9tcGlfZ3JvdXBfdCAqTVBJX0dyb3VwOwotdHlwZWRlZiBzdHJ1Y3Qgb21waV9pbmZvX3QgKk1QSV9JbmZvOwotdHlwZWRlZiBzdHJ1Y3Qgb21waV9vcF90ICpNUElfT3A7Ci10eXBlZGVmIHN0cnVjdCBvbXBpX3JlcXVlc3RfdCAqTVBJX1JlcXVlc3Q7Ci10eXBlZGVmIHN0cnVjdCBvbXBpX3N0YXR1c19wdWJsaWNfdCBNUElfU3RhdHVzOwotdHlwZWRlZiBzdHJ1Y3Qgb21waV93aW5fdCAqTVBJX1dpbjsKLQotLyoKLSAqIE1QSV9TdGF0dXMKLSAqLwotc3RydWN0IG9tcGlfc3RhdHVzX3B1YmxpY190IHsKLSAgaW50IE1QSV9TT1VSQ0U7Ci0gIGludCBNUElfVEFHOwotICBpbnQgTVBJX0VSUk9SOwotICBpbnQgX2NvdW50OwotICBpbnQgX2NhbmNlbGxlZDsKLX07Ci10eXBlZGVmIHN0cnVjdCBvbXBpX3N0YXR1c19wdWJsaWNfdCBvbXBpX3N0YXR1c19wdWJsaWNfdDsKLQotLyoKLSAqIFVzZXIgdHlwZWRlZnMKLSAqLwotdHlwZWRlZiBpbnQgKE1QSV9Db3B5X2Z1bmN0aW9uKShNUElfQ29tbSwgaW50LCB2b2lkICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgdm9pZCAqLCBpbnQgKik7Ci10eXBlZGVmIGludCAoTVBJX0RlbGV0ZV9mdW5jdGlvbikoTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lkICopOwotdHlwZWRlZiBpbnQgKE1QSV9EYXRhcmVwX2V4dGVudF9mdW5jdGlvbikoTVBJX0RhdGF0eXBlLCBNUElfQWludCAqLCB2b2lkICopOwotdHlwZWRlZiBpbnQgKE1QSV9EYXRhcmVwX2NvbnZlcnNpb25fZnVuY3Rpb24pKHZvaWQgKiwgTVBJX0RhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgdm9pZCAqLCBNUElfT2Zmc2V0LCB2b2lkICopOwotdHlwZWRlZiB2b2lkIChNUElfQ29tbV9lcnJoYW5kbGVyX2ZuKShNUElfQ29tbSAqLCBpbnQgKiwgLi4uKTsKLXR5cGVkZWYgdm9pZCAoTVBJX0ZpbGVfZXJyaGFuZGxlcl9mbikoTVBJX0ZpbGUgKiwgaW50ICosIC4uLik7Ci10eXBlZGVmIHZvaWQgKE1QSV9XaW5fZXJyaGFuZGxlcl9mbikoTVBJX1dpbiAqLCBpbnQgKiwgLi4uKTsKLXR5cGVkZWYgdm9pZCAoTVBJX0hhbmRsZXJfZnVuY3Rpb24pKE1QSV9Db21tICosIGludCAqLCAuLi4pOwotdHlwZWRlZiB2b2lkIChNUElfVXNlcl9mdW5jdGlvbikodm9pZCAqLCB2b2lkICosIGludCAqLCBNUElfRGF0YXR5cGUgKik7Ci10eXBlZGVmIGludCAoTVBJX0NvbW1fY29weV9hdHRyX2Z1bmN0aW9uKShNUElfQ29tbSwgaW50LCB2b2lkICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgdm9pZCAqLCBpbnQgKik7Ci10eXBlZGVmIGludCAoTVBJX0NvbW1fZGVsZXRlX2F0dHJfZnVuY3Rpb24pKE1QSV9Db21tLCBpbnQsIHZvaWQgKiwgdm9pZCAqKTsKLXR5cGVkZWYgaW50IChNUElfVHlwZV9jb3B5X2F0dHJfZnVuY3Rpb24pKE1QSV9EYXRhdHlwZSwgaW50LCB2b2lkICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgdm9pZCAqLCBpbnQgKik7Ci10eXBlZGVmIGludCAoTVBJX1R5cGVfZGVsZXRlX2F0dHJfZnVuY3Rpb24pKE1QSV9EYXRhdHlwZSwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgdm9pZCAqKTsKLXR5cGVkZWYgaW50IChNUElfV2luX2NvcHlfYXR0cl9mdW5jdGlvbikoTVBJX1dpbiwgaW50LCB2b2lkICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCB2b2lkICosIGludCAqKTsKLXR5cGVkZWYgaW50IChNUElfV2luX2RlbGV0ZV9hdHRyX2Z1bmN0aW9uKShNUElfV2luLCBpbnQsIHZvaWQgKiwgdm9pZCAqKTsKLXR5cGVkZWYgaW50IChNUElfR3JlcXVlc3RfcXVlcnlfZnVuY3Rpb24pKHZvaWQgKiwgTVBJX1N0YXR1cyAqKTsKLXR5cGVkZWYgaW50IChNUElfR3JlcXVlc3RfZnJlZV9mdW5jdGlvbikodm9pZCAqKTsKLXR5cGVkZWYgaW50IChNUElfR3JlcXVlc3RfY2FuY2VsX2Z1bmN0aW9uKSh2b2lkICosIGludCk7Ci0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbnN0YW50cwotICovCi0jZGVmaW5lIE1QSV9BTllfU09VUkNFICAgICAgICAgLTEgICAgICAvKiBtYXRjaCBhbnkgc291cmNlIHJhbmsgKi8KLSNkZWZpbmUgTVBJX1BST0NfTlVMTCAgICAgICAgICAtMiAgICAgIC8qIHJhbmsgb2YgbnVsbCBwcm9jZXNzICovCi0jZGVmaW5lIE1QSV9ST09UICAgICAgICAgICAgICAgLTQKLSNkZWZpbmUgTVBJX0FOWV9UQUcgICAgICAgICAgICAtMSAgICAgIC8qIG1hdGNoIGFueSBtZXNzYWdlIHRhZyAqLwotI2RlZmluZSBNUElfTUFYX1BST0NFU1NPUl9OQU1FIDI1NiAgICAgLyogbWF4IHByb2MuIG5hbWUgbGVuZ3RoICovCi0jZGVmaW5lIE1QSV9NQVhfRVJST1JfU1RSSU5HICAgMjU2ICAgICAvKiBtYXggZXJyb3IgbWVzc2FnZSBsZW5ndGggKi8KLSNkZWZpbmUgTVBJX01BWF9PQkpFQ1RfTkFNRSAgICA2NCAgICAgIC8qIG1heCBvYmplY3QgbmFtZSBsZW5ndGggKi8KLSNkZWZpbmUgTVBJX1VOREVGSU5FRCAgICAgICAgICAtMzI3NjYgIC8qIHVuZGVmaW5lZCBzdHVmZiAqLwotI2RlZmluZSBNUElfQ0FSVCAgICAgICAgICAgICAgIDEgICAgICAgLyogY2FydGVzaWFuIHRvcG9sb2d5ICovCi0jZGVmaW5lIE1QSV9HUkFQSCAgICAgICAgICAgICAgMiAgICAgICAvKiBncmFwaCB0b3BvbG9neSAqLwotI2RlZmluZSBNUElfS0VZVkFMX0lOVkFMSUQgICAgIC0xICAgICAgLyogaW52YWxpZCBrZXkgdmFsdWUgKi8KLQotLyoKLSAqIE1vcmUgY29uc3RhbnRzCi0gKi8KLSNkZWZpbmUgTVBJX0JPVFRPTSAgICAgICAgICAgICAgICgodm9pZCAqKSAwKSAgICAvKiBiYXNlIHJlZmVyZW5jZSBhZGRyZXNzICovCi0jZGVmaW5lIE1QSV9JTl9QTEFDRSAgICAgICAgICAgICAoKHZvaWQgKikgMSkgICAgLyogaW4gcGxhY2UgYnVmZmVyICovCi0jZGVmaW5lIE1QSV9CU0VORF9PVkVSSEVBRCAgICAgICAxMjggICAgIC8qIHNpemUgb2YgYnNlbmQgaGVhZGVyICsgcHRyICovCi0jZGVmaW5lIE1QSV9NQVhfSU5GT19LRVkgICAgICAgICAzNiAgICAgIC8qIG1heCBpbmZvIGtleSBsZW5ndGggKi8KLSNkZWZpbmUgTVBJX01BWF9JTkZPX1ZBTCAgICAgICAgIDI1NiAgICAgLyogbWF4IGluZm8gdmFsdWUgbGVuZ3RoICovCi0jZGVmaW5lIE1QSV9BUkdWX05VTEwgICAgICAgICAgICAoKGNoYXIgKiopIDApICAgLyogTlVMTCBhcmd1bWVudCB2ZWN0b3IgKi8KLSNkZWZpbmUgTVBJX0FSR1ZTX05VTEwgICAgICAgICAgICgoY2hhciAqKiopIDApICAvKiBOVUxMIGFyZ3VtZW50IHZlY3RvcnMgKi8KLSNkZWZpbmUgTVBJX0VSUkNPREVTX0lHTk9SRSAgICAgICgoaW50ICopIDApICAgIC8qIGRvbid0IHJldHVybiBlcnJvciBjb2RlcyAqLwotI2RlZmluZSBNUElfTUFYX1BPUlRfTkFNRSAgICAgICAgMzYgICAgICAvKiBtYXggcG9ydCBuYW1lIGxlbmd0aCAqLwotI2RlZmluZSBNUElfTUFYX05BTUVfTEVOICAgICAgICAgTVBJX01BWF9QT1JUX05BTUUgLyogbWF4IHBvcnQgbmFtZSBsZW5ndGggKi8KLSNkZWZpbmUgTVBJX09SREVSX0MgICAgICAgICAgICAgIDAgICAgICAgLyogQyByb3cgbWFqb3Igb3JkZXIgKi8KLSNkZWZpbmUgTVBJX09SREVSX0ZPUlRSQU4gICAgICAgIDEgICAgICAgLyogRm9ydHJhbiBjb2x1bW4gbWFqb3Igb3JkZXIgKi8KLSNkZWZpbmUgTVBJX0RJU1RSSUJVVEVfQkxPQ0sgICAgIDAgICAgICAgLyogYmxvY2sgZGlzdHJpYnV0aW9uICovCi0jZGVmaW5lIE1QSV9ESVNUUklCVVRFX0NZQ0xJQyAgICAxICAgICAgIC8qIGN5Y2xpYyBkaXN0cmlidXRpb24gKi8KLSNkZWZpbmUgTVBJX0RJU1RSSUJVVEVfTk9ORSAgICAgIDIgICAgICAgLyogbm90IGRpc3RyaWJ1dGVkICovCi0jZGVmaW5lIE1QSV9ESVNUUklCVVRFX0RGTFRfREFSRyAoLTEpICAgIC8qIGRlZmF1bHQgZGlzdHJpYnV0aW9uIGFyZyAqLwotCi0vKgotICogU2luY2UgdGhlc2UgdmFsdWVzIGFyZSBhcmJpdHJhcnkgdG8gT3BlbiBNUEksIHdlIG1pZ2h0IGFzIHdlbGwgbWFrZQotICogdGhlbSB0aGUgc2FtZSBhcyBST01JTyBmb3IgZWFzZSBvZiBtYXBwaW5nLiAgVGhlc2UgdmFsdWVzIHRha2VuCi0gKiBmcm9tIFJPTUlPJ3MgbXBpby5oIGZpbGUuCi0gKi8KLSNkZWZpbmUgTVBJX01PREVfQ1JFQVRFICAgICAgICAgICAgICAxICAvKiBBRElPX0NSRUFURSAqLwotI2RlZmluZSBNUElfTU9ERV9SRE9OTFkgICAgICAgICAgICAgIDIgIC8qIEFESU9fUkRPTkxZICovCi0jZGVmaW5lIE1QSV9NT0RFX1dST05MWSAgICAgICAgICAgICAgNCAgLyogQURJT19XUk9OTFkgICovCi0jZGVmaW5lIE1QSV9NT0RFX1JEV1IgICAgICAgICAgICAgICAgOCAgLyogQURJT19SRFdSICAqLwotI2RlZmluZSBNUElfTU9ERV9ERUxFVEVfT05fQ0xPU0UgICAgMTYgIC8qIEFESU9fREVMRVRFX09OX0NMT1NFICovCi0jZGVmaW5lIE1QSV9NT0RFX1VOSVFVRV9PUEVOICAgICAgICAzMiAgLyogQURJT19VTklRVUVfT1BFTiAqLwotI2RlZmluZSBNUElfTU9ERV9FWENMICAgICAgICAgICAgICAgNjQgIC8qIEFESU9fRVhDTCAqLwotI2RlZmluZSBNUElfTU9ERV9BUFBFTkQgICAgICAgICAgICAxMjggIC8qIEFESU9fQVBQRU5EICovCi0jZGVmaW5lIE1QSV9NT0RFX1NFUVVFTlRJQUwgICAgICAgIDI1NiAgLyogQURJT19TRVFVRU5USUFMICovCi0KLSNkZWZpbmUgTVBJX0RJU1BMQUNFTUVOVF9DVVJSRU5UICAgLTU0Mjc4Mjc4Ci0KLSNkZWZpbmUgTVBJX1NFRUtfU0VUICAgICAgICAgICAgNjAwCi0jZGVmaW5lIE1QSV9TRUVLX0NVUiAgICAgICAgICAgIDYwMgotI2RlZmluZSBNUElfU0VFS19FTkQgICAgICAgICAgICA2MDQKLQotI2RlZmluZSBNUElfTUFYX0RBVEFSRVBfU1RSSU5HICAxMjgKLQotLyoKLSAqIE1QSS0yIE9uZS1TaWRlZCBDb21tdW5pY2F0aW9ucyBhc3NlcnRzCi0gKi8KLSNkZWZpbmUgTVBJX01PREVfTk9DSEVDSyAgICAgICAgICAgICAxCi0jZGVmaW5lIE1QSV9NT0RFX05PUFJFQ0VERSAgICAgICAgICAgMgotI2RlZmluZSBNUElfTU9ERV9OT1BVVCAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgTVBJX01PREVfTk9TVE9SRSAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1QSV9NT0RFX05PU1VDQ0VFRCAgICAgICAgICAxNgotCi0jZGVmaW5lIE1QSV9MT0NLX0VYQ0xVU0lWRSAgICAgICAgICAgMQotI2RlZmluZSBNUElfTE9DS19TSEFSRUQgICAgICAgICAgICAgIDIKLQotCi0vKgotICogUHJlZGVmaW5lZCBhdHRyaWJ1dGUga2V5dmFscwotICoKLSAqIERPIE5PVCBDSEFOR0UgVEhFIE9SREVSIFdJVEhPVVQgQUxTTyBDSEFOR0lORyBUSEUgT1JERVIgSU4KLSAqIHNyYy9hdHRyaWJ1dGUvYXR0cmlidXRlX3ByZWRlZmluZWQuYyBhbmQgbXBpZi5oLmluLgotICovCi1lbnVtIHsKLSAgICAvKiBNUEktMSAqLwotICAgIE1QSV9UQUdfVUIsCi0gICAgTVBJX0hPU1QsCi0gICAgTVBJX0lPLAotICAgIE1QSV9XVElNRV9JU19HTE9CQUwsCi0KLSAgICAvKiBNUEktMiAqLwotICAgIE1QSV9BUFBOVU0sCi0gICAgTVBJX0xBU1RVU0VEQ09ERSwKLSAgICBNUElfVU5JVkVSU0VfU0laRSwKLSAgICBNUElfV0lOX0JBU0UsCi0gICAgTVBJX1dJTl9TSVpFLAotICAgIE1QSV9XSU5fRElTUF9VTklULAotCi0gICAgLyogRXZlbiB0aG91Z2ggdGhlc2UgZm91ciBhcmUgSU1QSSBhdHRyaWJ1dGVzLCB0aGV5IG5lZWQgdG8gYmUgdGhlcmUKLSAgICAgICBmb3IgYWxsIE1QSSBqb2JzICovCi0gICAgSU1QSV9DTElFTlRfU0laRSwKLSAgICBJTVBJX0NMSUVOVF9DT0xPUiwKLSAgICBJTVBJX0hPU1RfU0laRSwKLSAgICBJTVBJX0hPU1RfQ09MT1IKLX07Ci0KLS8qCi0gKiBFcnJvciBjbGFzc2VzIGFuZCBjb2RlcwotICogRG8gbm90IGNoYW5nZSB0aGUgdmFsdWVzIG9mIHRoZXNlIHdpdGhvdXQgYWxzbyBtb2RpZnlpbmcgbXBpZi5oLmluLgotICovCi0jZGVmaW5lIE1QSV9TVUNDRVNTICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTVBJX0VSUl9CVUZGRVIgICAgICAgICAgICAgICAgMQotI2RlZmluZSBNUElfRVJSX0NPVU5UICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIE1QSV9FUlJfVFlQRSAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgTVBJX0VSUl9UQUcgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBNUElfRVJSX0NPTU0gICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1QSV9FUlJfUkFOSyAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgTVBJX0VSUl9SRVFVRVNUICAgICAgICAgICAgICAgNwotI2RlZmluZSBNUElfRVJSX1JPT1QgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIE1QSV9FUlJfR1JPVVAgICAgICAgICAgICAgICAgIDkKLSNkZWZpbmUgTVBJX0VSUl9PUCAgICAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgTVBJX0VSUl9UT1BPTE9HWSAgICAgICAgICAgICAgMTEKLSNkZWZpbmUgTVBJX0VSUl9ESU1TICAgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgTVBJX0VSUl9BUkcgICAgICAgICAgICAgICAgICAgMTMKLSNkZWZpbmUgTVBJX0VSUl9VTktOT1dOICAgICAgICAgICAgICAgMTQKLSNkZWZpbmUgTVBJX0VSUl9UUlVOQ0FURSAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgTVBJX0VSUl9PVEhFUiAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTVBJX0VSUl9JTlRFUk4gICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgTVBJX0VSUl9JTl9TVEFUVVMgICAgICAgICAgICAgMTgKLSNkZWZpbmUgTVBJX0VSUl9QRU5ESU5HICAgICAgICAgICAgICAgMTkKLSNkZWZpbmUgTVBJX0VSUl9BQ0NFU1MgICAgICAgICAgICAgICAgMjAKLSNkZWZpbmUgTVBJX0VSUl9BTU9ERSAgICAgICAgICAgICAgICAgMjEKLSNkZWZpbmUgTVBJX0VSUl9BU1NFUlQgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgTVBJX0VSUl9CQURfRklMRSAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgTVBJX0VSUl9CQVNFICAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgTVBJX0VSUl9DT05WRVJTSU9OICAgICAgICAgICAgMjUKLSNkZWZpbmUgTVBJX0VSUl9ESVNQICAgICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgTVBJX0VSUl9EVVBfREFUQVJFUCAgICAgICAgICAgMjcKLSNkZWZpbmUgTVBJX0VSUl9GSUxFX0VYSVNUUyAgICAgICAgICAgMjgKLSNkZWZpbmUgTVBJX0VSUl9GSUxFX0lOX1VTRSAgICAgICAgICAgMjkKLSNkZWZpbmUgTVBJX0VSUl9GSUxFICAgICAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgTVBJX0VSUl9JTkZPX0tFWSAgICAgICAgICAgICAgMzEKLSNkZWZpbmUgTVBJX0VSUl9JTkZPX05PS0VZICAgICAgICAgICAgMzIKLSNkZWZpbmUgTVBJX0VSUl9JTkZPX1ZBTFVFICAgICAgICAgICAgMzMKLSNkZWZpbmUgTVBJX0VSUl9JTkZPICAgICAgICAgICAgICAgICAgMzQKLSNkZWZpbmUgTVBJX0VSUl9JTyAgICAgICAgICAgICAgICAgICAgMzUKLSNkZWZpbmUgTVBJX0VSUl9LRVlWQUwgICAgICAgICAgICAgICAgMzYKLSNkZWZpbmUgTVBJX0VSUl9MT0NLVFlQRSAgICAgICAgICAgICAgMzcKLSNkZWZpbmUgTVBJX0VSUl9OQU1FICAgICAgICAgICAgICAgICAgMzgKLSNkZWZpbmUgTVBJX0VSUl9OT19NRU0gICAgICAgICAgICAgICAgMzkKLSNkZWZpbmUgTVBJX0VSUl9OT1RfU0FNRSAgICAgICAgICAgICAgNDAKLSNkZWZpbmUgTVBJX0VSUl9OT19TUEFDRSAgICAgICAgICAgICAgNDEKLSNkZWZpbmUgTVBJX0VSUl9OT19TVUNIX0ZJTEUgICAgICAgICAgNDIKLSNkZWZpbmUgTVBJX0VSUl9QT1JUICAgICAgICAgICAgICAgICAgNDMKLSNkZWZpbmUgTVBJX0VSUl9RVU9UQSAgICAgICAgICAgICAgICAgNDQKLSNkZWZpbmUgTVBJX0VSUl9SRUFEX09OTFkgICAgICAgICAgICAgNDUKLSNkZWZpbmUgTVBJX0VSUl9STUFfQ09ORkxJQ1QgICAgICAgICAgNDYKLSNkZWZpbmUgTVBJX0VSUl9STUFfU1lOQyAgICAgICAgICAgICAgNDcKLSNkZWZpbmUgTVBJX0VSUl9TRVJWSUNFICAgICAgICAgICAgICAgNDgKLSNkZWZpbmUgTVBJX0VSUl9TSVpFICAgICAgICAgICAgICAgICAgNDkKLSNkZWZpbmUgTVBJX0VSUl9TUEFXTiAgICAgICAgICAgICAgICAgNTAKLSNkZWZpbmUgTVBJX0VSUl9VTlNVUFBPUlRFRF9EQVRBUkVQICAgNTEKLSNkZWZpbmUgTVBJX0VSUl9VTlNVUFBPUlRFRF9PUEVSQVRJT04gNTIKLSNkZWZpbmUgTVBJX0VSUl9XSU4gICAgICAgICAgICAgICAgICAgNTMKLSNkZWZpbmUgTVBJX0VSUl9MQVNUQ09ERSAgICAgICAgICAgICAgNTQKLQotI2RlZmluZSBNUElfRVJSX1NZU1JFU09VUkNFICAgICAgICAgIC0yCi0KLQotLyoKLSAqIENvbXBhcmlzb24gcmVzdWx0cy4gIERvbid0IGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlc2UsIHRoZSBncm91cAotICogY29tcGFyaXNvbiBmdW5jdGlvbnMgcmVseSBvbiBpdC4KLSAqIERvIG5vdCBjaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZXNlIHdpdGhvdXQgYWxzbyBtb2RpZnlpbmcgbXBpZi5oLmluLgotICovCi1lbnVtIHsKLSAgTVBJX0lERU5ULAotICBNUElfQ09OR1JVRU5ULAotICBNUElfU0lNSUxBUiwKLSAgTVBJX1VORVFVQUwKLX07Ci0KLS8qCi0gKiBNUElfSW5pdF90aHJlYWQgY29uc3RhbnRzCi0gKiBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiB0aGVzZSB3aXRob3V0IGFsc28gbW9kaWZ5aW5nIG1waWYuaC5pbi4KLSAqLwotZW51bSB7Ci0gIE1QSV9USFJFQURfU0lOR0xFLAotICBNUElfVEhSRUFEX0ZVTk5FTEVELAotICBNUElfVEhSRUFEX1NFUklBTElaRUQsCi0gIE1QSV9USFJFQURfTVVMVElQTEUKLX07Ci0KLS8qCi0gKiBEYXRhdHlwZSBjb21iaW5lcnMuCi0gKiBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiB0aGVzZSB3aXRob3V0IGFsc28gbW9kaWZ5aW5nIG1waWYuaC5pbi4KLSAqLwotZW51bSB7Ci0gIE1QSV9DT01CSU5FUl9OQU1FRCwKLSAgTVBJX0NPTUJJTkVSX0RVUCwKLSAgTVBJX0NPTUJJTkVSX0NPTlRJR1VPVVMsCi0gIE1QSV9DT01CSU5FUl9WRUNUT1IsCi0gIE1QSV9DT01CSU5FUl9IVkVDVE9SX0lOVEVHRVIsCi0gIE1QSV9DT01CSU5FUl9IVkVDVE9SLAotICBNUElfQ09NQklORVJfSU5ERVhFRCwKLSAgTVBJX0NPTUJJTkVSX0hJTkRFWEVEX0lOVEVHRVIsCi0gIE1QSV9DT01CSU5FUl9ISU5ERVhFRCwKLSAgTVBJX0NPTUJJTkVSX0lOREVYRURfQkxPQ0ssCi0gIE1QSV9DT01CSU5FUl9TVFJVQ1RfSU5URUdFUiwKLSAgTVBJX0NPTUJJTkVSX1NUUlVDVCwKLSAgTVBJX0NPTUJJTkVSX1NVQkFSUkFZLAotICBNUElfQ09NQklORVJfREFSUkFZLAotICBNUElfQ09NQklORVJfRjkwX1JFQUwsCi0gIE1QSV9DT01CSU5FUl9GOTBfQ09NUExFWCwKLSAgTVBJX0NPTUJJTkVSX0Y5MF9JTlRFR0VSLAotICBNUElfQ09NQklORVJfUkVTSVpFRAotfTsKLQotLyoKLSAqIE5VTEwgaGFuZGxlcwotICovCi0jZGVmaW5lIE1QSV9HUk9VUF9OVUxMICgmb21waV9tcGlfZ3JvdXBfbnVsbCkKLSNkZWZpbmUgTVBJX0NPTU1fTlVMTCAoJm9tcGlfbXBpX2NvbW1fbnVsbCkKLSNkZWZpbmUgTVBJX1JFUVVFU1RfTlVMTCAoJm9tcGlfcmVxdWVzdF9udWxsKQotI2RlZmluZSBNUElfT1BfTlVMTCAoJm9tcGlfbXBpX29wX251bGwpCi0jZGVmaW5lIE1QSV9FUlJIQU5ETEVSX05VTEwgKCZvbXBpX21waV9lcnJoYW5kbGVyX251bGwpCi0jZGVmaW5lIE1QSV9JTkZPX05VTEwgKCZvbXBpX21waV9pbmZvX251bGwpCi0jZGVmaW5lIE1QSV9XSU5fTlVMTCAoJm9tcGlfbXBpX3dpbl9udWxsKQotI2RlZmluZSBNUElfRklMRV9OVUxMICgmb21waV9tcGlfZmlsZV9udWxsKQotCi0jZGVmaW5lIE1QSV9TVEFUVVNfSUdOT1JFICgoTVBJX1N0YXR1cyAqKSAwKQotI2RlZmluZSBNUElfU1RBVFVTRVNfSUdOT1JFICgoTVBJX1N0YXR1cyAqKSAwKQotCi0vKiBNUEktMiBzcGVjaWZpZXMgdGhhdCB0aGUgbmFtZSAiTVBJX1RZUEVfTlVMTF9ERUxFVEVfRk4iIChhbmQgYWxsCi0gICByZWxhdGVkIGZyaWVuZHMpIG11c3QgYmUgYWNjZXNzaWJsZSBpbiBDLCBDKyssIGFuZCBGb3J0cmFuLiBUaGlzIGlzCi0gICB1bndvcmthYmxlIGlmIHRoZSBiYWNrLWVuZCBGb3J0cmFuIGNvbXBpbGVyIHVzZXMgYWxsIGNhcHMgZm9yIGl0cwotICAgbGlua2VyIHN5bWJvbCBjb252ZW50aW9uIC0tIGl0IHJlc3VsdHMgaW4gdHdvIGZ1bmN0aW9ucyB3aXRoCi0gICBkaWZmZXJlbnQgc2lnbmF0dXJlcyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSAoaS5lLiwgYm90aCBDIGFuZAotICAgRm9ydHJhbiB1c2UgdGhlIHN5bWJvbCBNUElfVFlQRV9OVUxMX0RFTEVURV9GTikuICBTbyB3ZSBoYXZlIHRvCi0gICAjZGVmaW5lIHRoZSBDIG5hbWVzIHRvIGJlIHNvbWV0aGluZyBlbHNlLCBzbyB0aGF0IHRoZXkgbmFtZXMgYXJlCi0gICAqYWNjZXNzZWQqIHRocm91Z2ggTVBJX1RZUEVfTlVMTF9ERUxFVEVfRk4sIGJ1dCB0aGVpciBhY3R1YWwgc3ltYm9sCi0gICBuYW1lIGlzIGRpZmZlcmVudC4KLQotICAgSG93ZXZlciwgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIHdoZW4gdGhlIGZvcnRyYW4gd3JhcHBlciBmdW5jdGlvbnMKLSAgIGFyZSBjb21waWxlZCBpbiBPcGVuIE1QSSwgc28gd2UgZG8gKm5vdCogd2FudCB0aGVzZSAjZGVmaW5lcyBpbgotICAgdGhpcyBjYXNlIChpLmUuLCB3ZSBuZWVkIHRoZSBGb3J0cmFuIHdyYXBwZXIgZnVuY3Rpb24gdG8gYmUKLSAgIGNvbXBpbGVkIGFzIE1QSV9UWVBFX05VTExfREVMRVRFX0ZOKS4gIFNvIGFkZCBzb21lICNpZiBraW5kcyBvZgotICAgcHJvdGVjdGlvbiBmb3IgdGhpcyBjYXNlLiAqLwotCi0jaWYgIWRlZmluZWQoT01QSV9DT01QSUxJTkdfRjc3X1dSQVBQRVJTKQotI2RlZmluZSBNUElfTlVMTF9ERUxFVEVfRk4gT01QSV9DX01QSV9OVUxMX0RFTEVURV9GTgotI2RlZmluZSBNUElfTlVMTF9DT1BZX0ZOIE9NUElfQ19NUElfTlVMTF9DT1BZX0ZOCi0jZGVmaW5lIE1QSV9EVVBfRk4gT01QSV9DX01QSV9EVVBfRk4KLQotI2RlZmluZSBNUElfVFlQRV9OVUxMX0RFTEVURV9GTiBPTVBJX0NfTVBJX1RZUEVfTlVMTF9ERUxFVEVfRk4KLSNkZWZpbmUgTVBJX1RZUEVfTlVMTF9DT1BZX0ZOIE9NUElfQ19NUElfVFlQRV9OVUxMX0NPUFlfRk4KLSNkZWZpbmUgTVBJX1RZUEVfRFVQX0ZOIE9NUElfQ19NUElfVFlQRV9EVVBfRk4KLQotI2RlZmluZSBNUElfQ09NTV9OVUxMX0RFTEVURV9GTiBPTVBJX0NfTVBJX0NPTU1fTlVMTF9ERUxFVEVfRk4KLSNkZWZpbmUgTVBJX0NPTU1fTlVMTF9DT1BZX0ZOIE9NUElfQ19NUElfQ09NTV9OVUxMX0NPUFlfRk4KLSNkZWZpbmUgTVBJX0NPTU1fRFVQX0ZOIE9NUElfQ19NUElfQ09NTV9EVVBfRk4KLQotI2RlZmluZSBNUElfV0lOX05VTExfREVMRVRFX0ZOIE9NUElfQ19NUElfV0lOX05VTExfREVMRVRFX0ZOCi0jZGVmaW5lIE1QSV9XSU5fTlVMTF9DT1BZX0ZOIE9NUElfQ19NUElfV0lOX05VTExfQ09QWV9GTgotI2RlZmluZSBNUElfV0lOX0RVUF9GTiBPTVBJX0NfTVBJX1dJTl9EVVBfRk4KLSNlbmRpZgotCi1PTVBJX0RFQ0xTUEVDIGludCBPTVBJX0NfTVBJX1RZUEVfTlVMTF9ERUxFVEVfRk4oIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGVfa2V5dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhdHRyaWJ1dGVfdmFsX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogZXh0cmFfc3RhdGUgKTsKLU9NUElfREVDTFNQRUMgaW50IE9NUElfQ19NUElfVFlQRV9OVUxMX0NPUFlfRk4oIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGV4dHJhX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXR0cmlidXRlX3ZhbF9pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmbGFnICk7Ci1PTVBJX0RFQ0xTUEVDIGludCBPTVBJX0NfTVBJX1RZUEVfRFVQX0ZOKCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZV9rZXl2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBleHRyYV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhdHRyaWJ1dGVfdmFsX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZmxhZyApOwotT01QSV9ERUNMU1BFQyBpbnQgT01QSV9DX01QSV9DT01NX05VTExfREVMRVRFX0ZOKCBNUElfQ29tbSBjb21tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tbV9rZXl2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBleHRyYV9zdGF0ZSApOwotT01QSV9ERUNMU1BFQyBpbnQgT01QSV9DX01QSV9DT01NX05VTExfQ09QWV9GTiggTVBJX0NvbW0gY29tbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGV4dHJhX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXR0cmlidXRlX3ZhbF9pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmbGFnICk7Ci1PTVBJX0RFQ0xTUEVDIGludCBPTVBJX0NfTVBJX0NPTU1fRFVQX0ZOKCBNUElfQ29tbSBjb21tLCBpbnQgY29tbV9rZXl2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBleHRyYV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhdHRyaWJ1dGVfdmFsX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZmxhZyApOwotT01QSV9ERUNMU1BFQyBpbnQgT01QSV9DX01QSV9OVUxMX0RFTEVURV9GTiggTVBJX0NvbW0gY29tbSwgaW50IGNvbW1fa2V5dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXR0cmlidXRlX3ZhbF9vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBleHRyYV9zdGF0ZSApOwotT01QSV9ERUNMU1BFQyBpbnQgT01QSV9DX01QSV9OVUxMX0NPUFlfRk4oIE1QSV9Db21tIGNvbW0sIGludCBjb21tX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBleHRyYV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhdHRyaWJ1dGVfdmFsX2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZmxhZyApOwotT01QSV9ERUNMU1BFQyBpbnQgT01QSV9DX01QSV9EVVBfRk4oIE1QSV9Db21tIGNvbW0sIGludCBjb21tX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBleHRyYV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhdHRyaWJ1dGVfdmFsX2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZmxhZyApOwotT01QSV9ERUNMU1BFQyBpbnQgT01QSV9DX01QSV9XSU5fTlVMTF9ERUxFVEVfRk4oIE1QSV9XaW4gd2luZG93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5fa2V5dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGV4dHJhX3N0YXRlICk7Ci1PTVBJX0RFQ0xTUEVDIGludCBPTVBJX0NfTVBJX1dJTl9OVUxMX0NPUFlfRk4oIE1QSV9XaW4gd2luZG93LCBpbnQgd2luX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogZXh0cmFfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF0dHJpYnV0ZV92YWxfb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGZsYWcgKTsKLU9NUElfREVDTFNQRUMgaW50IE9NUElfQ19NUElfV0lOX0RVUF9GTiggTVBJX1dpbiB3aW5kb3csIGludCB3aW5fa2V5dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBleHRyYV9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXR0cmlidXRlX3ZhbF9pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXR0cmlidXRlX3ZhbF9vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZmxhZyApOwotCi0KLS8qCi0gKiBFeHRlcm5hbCB2YXJpYWJsZXMKLSAqLwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfY29tbXVuaWNhdG9yX3Qgb21waV9tcGlfY29tbV93b3JsZDsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2NvbW11bmljYXRvcl90IG9tcGlfbXBpX2NvbW1fc2VsZjsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2NvbW11bmljYXRvcl90IG9tcGlfbXBpX2NvbW1fbnVsbDsKLQotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZ3JvdXBfdCBvbXBpX21waV9ncm91cF9lbXB0eTsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2dyb3VwX3Qgb21waV9tcGlfZ3JvdXBfbnVsbDsKLQotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfcmVxdWVzdF90IG9tcGlfcmVxdWVzdF9udWxsOwotCi1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9vcF90IG9tcGlfbXBpX29wX251bGw7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9vcF90IG9tcGlfbXBpX29wX21heCwgb21waV9tcGlfb3BfbWluOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfb3BfdCBvbXBpX21waV9vcF9zdW0sIG9tcGlfbXBpX29wX3Byb2Q7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9vcF90IG9tcGlfbXBpX29wX2xhbmQsIG9tcGlfbXBpX29wX2JhbmQ7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9vcF90IG9tcGlfbXBpX29wX2xvciwgb21waV9tcGlfb3BfYm9yOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfb3BfdCBvbXBpX21waV9vcF9seG9yLCBvbXBpX21waV9vcF9ieG9yOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfb3BfdCBvbXBpX21waV9vcF9tYXhsb2MsIG9tcGlfbXBpX29wX21pbmxvYzsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX29wX3Qgb21waV9tcGlfb3BfcmVwbGFjZTsKLQotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9jaGFyLCBvbXBpX21waV9ieXRlOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9pbnQsIG9tcGlfbXBpX2xvZ2ljOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9zaG9ydCwgb21waV9tcGlfbG9uZzsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfZmxvYXQsIG9tcGlfbXBpX2RvdWJsZTsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfbG9uZ19kb3VibGU7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX2NwbGV4LCBvbXBpX21waV9wYWNrZWQ7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX3NpZ25lZF9jaGFyOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV91bnNpZ25lZF9jaGFyOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV91bnNpZ25lZF9zaG9ydDsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfdW5zaWduZWQsIG9tcGlfbXBpX2RhdGF0eXBlX251bGw7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX3Vuc2lnbmVkX2xvbmcsIG9tcGlfbXBpX2xkYmxjcGxleDsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfdWIsIG9tcGlfbXBpX2xiOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9mbG9hdF9pbnQsIG9tcGlfbXBpX2RvdWJsZV9pbnQ7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX2xvbmdfaW50LCBvbXBpX21waV8yaW50OwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9zaG9ydF9pbnQsIG9tcGlfbXBpX2RibGNwbGV4OwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9pbnRlZ2VyLCBvbXBpX21waV9yZWFsOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9kYmxwcmVjLCBvbXBpX21waV9jaGFyYWN0ZXI7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpXzJyZWFsLCBvbXBpX21waV8yZGJscHJlYzsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfMmludGVnZXIsIG9tcGlfbXBpX2xvbmdkYmxfaW50OwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV93Y2hhciwgb21waV9tcGlfbG9uZ19sb25nX2ludDsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfdW5zaWduZWRfbG9uZ19sb25nOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9jeHhfY3BsZXgsIG9tcGlfbXBpX2N4eF9kYmxjcGxleDsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfY3h4X2xkYmxjcGxleDsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfY3h4X2Jvb2w7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpXzJjcGxleCwgb21waV9tcGlfMmRibGNwbGV4OwotLyogb3RoZXIgTVBJMiBkYXRhdHlwZXMgKi8KLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9JTlRFR0VSMQotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9pbnRlZ2VyMTsKLSNlbmRpZgotI2lmIE9NUElfSEFWRV9GT1JUUkFOX0lOVEVHRVIyCi1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX2ludGVnZXIyOwotI2VuZGlmCi0jaWYgT01QSV9IQVZFX0ZPUlRSQU5fSU5URUdFUjQKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfaW50ZWdlcjQ7Ci0jZW5kaWYKLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9JTlRFR0VSOAotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9pbnRlZ2VyODsKLSNlbmRpZgotI2lmIE9NUElfSEFWRV9GT1JUUkFOX0lOVEVHRVIxNgotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9pbnRlZ2VyMTY7Ci0jZW5kaWYKLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9SRUFMNAotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZGF0YXR5cGVfdCBvbXBpX21waV9yZWFsNDsKLSNlbmRpZgotI2lmIE9NUElfSEFWRV9GT1JUUkFOX1JFQUw4Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX3JlYWw4OwotI2VuZGlmCi0jaWYgT01QSV9IQVZFX0ZPUlRSQU5fUkVBTDE2Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX3JlYWwxNjsKLSNlbmRpZgotI2lmIE9NUElfSEFWRV9GT1JUUkFOX1JFQUw0Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX2NvbXBsZXg4OwotI2VuZGlmCi0jaWYgT01QSV9IQVZFX0ZPUlRSQU5fUkVBTDgKLU9NUElfREVDTFNQRUMgZXh0ZXJuIHN0cnVjdCBvbXBpX2RhdGF0eXBlX3Qgb21waV9tcGlfY29tcGxleDE2OwotI2VuZGlmCi0jaWYgT01QSV9IQVZFX0ZPUlRSQU5fUkVBTDE2Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9kYXRhdHlwZV90IG9tcGlfbXBpX2NvbXBsZXgzMjsKLSNlbmRpZgotCi1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9lcnJoYW5kbGVyX3Qgb21waV9tcGlfZXJyaGFuZGxlcl9udWxsOwotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfZXJyaGFuZGxlcl90IG9tcGlfbXBpX2Vycm9yc19hcmVfZmF0YWw7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9lcnJoYW5kbGVyX3Qgb21waV9tcGlfZXJyb3JzX3JldHVybjsKLQotT01QSV9ERUNMU1BFQyBleHRlcm4gc3RydWN0IG9tcGlfd2luX3Qgb21waV9tcGlfd2luX251bGw7Ci1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9maWxlX3Qgb21waV9tcGlfZmlsZV9udWxsOwotCi1PTVBJX0RFQ0xTUEVDIGV4dGVybiBzdHJ1Y3Qgb21waV9pbmZvX3Qgb21waV9tcGlfaW5mb19udWxsOwotCi1PTVBJX0RFQ0xTUEVDIGV4dGVybiBNUElfRmludCAqTVBJX0ZfU1RBVFVTX0lHTk9SRTsKLU9NUElfREVDTFNQRUMgZXh0ZXJuIE1QSV9GaW50ICpNUElfRl9TVEFUVVNFU19JR05PUkU7Ci0KLS8qCi0gKiBNUEkgcHJlZGVmaW5lZCBoYW5kbGVzCi0gKi8KLSNkZWZpbmUgTVBJX0NPTU1fV09STEQgKCZvbXBpX21waV9jb21tX3dvcmxkKQotI2RlZmluZSBNUElfQ09NTV9TRUxGICgmb21waV9tcGlfY29tbV9zZWxmKQotCi0jZGVmaW5lIE1QSV9HUk9VUF9FTVBUWSAoJm9tcGlfbXBpX2dyb3VwX2VtcHR5KQotCi0jZGVmaW5lIE1QSV9NQVggKCZvbXBpX21waV9vcF9tYXgpCi0jZGVmaW5lIE1QSV9NSU4gKCZvbXBpX21waV9vcF9taW4pCi0jZGVmaW5lIE1QSV9TVU0gKCZvbXBpX21waV9vcF9zdW0pCi0jZGVmaW5lIE1QSV9QUk9EICgmb21waV9tcGlfb3BfcHJvZCkKLSNkZWZpbmUgTVBJX0xBTkQgKCZvbXBpX21waV9vcF9sYW5kKQotI2RlZmluZSBNUElfQkFORCAoJm9tcGlfbXBpX29wX2JhbmQpCi0jZGVmaW5lIE1QSV9MT1IgKCZvbXBpX21waV9vcF9sb3IpCi0jZGVmaW5lIE1QSV9CT1IgKCZvbXBpX21waV9vcF9ib3IpCi0jZGVmaW5lIE1QSV9MWE9SICgmb21waV9tcGlfb3BfbHhvcikKLSNkZWZpbmUgTVBJX0JYT1IgKCZvbXBpX21waV9vcF9ieG9yKQotI2RlZmluZSBNUElfTUFYTE9DICgmb21waV9tcGlfb3BfbWF4bG9jKQotI2RlZmluZSBNUElfTUlOTE9DICgmb21waV9tcGlfb3BfbWlubG9jKQotI2RlZmluZSBNUElfUkVQTEFDRSAoJm9tcGlfbXBpX29wX3JlcGxhY2UpCi0KLS8qIEMgZGF0YXR5cGVzICovCi0jZGVmaW5lIE1QSV9EQVRBVFlQRV9OVUxMICgmb21waV9tcGlfZGF0YXR5cGVfbnVsbCkKLSNkZWZpbmUgTVBJX0JZVEUgKCZvbXBpX21waV9ieXRlKQotI2RlZmluZSBNUElfUEFDS0VEICgmb21waV9tcGlfcGFja2VkKQotI2RlZmluZSBNUElfQ0hBUiAoJm9tcGlfbXBpX2NoYXIpCi0jZGVmaW5lIE1QSV9TSE9SVCAoJm9tcGlfbXBpX3Nob3J0KQotI2RlZmluZSBNUElfSU5UICgmb21waV9tcGlfaW50KQotI2RlZmluZSBNUElfTE9ORyAoJm9tcGlfbXBpX2xvbmcpCi0jZGVmaW5lIE1QSV9GTE9BVCAoJm9tcGlfbXBpX2Zsb2F0KQotI2RlZmluZSBNUElfRE9VQkxFICgmb21waV9tcGlfZG91YmxlKQotI2RlZmluZSBNUElfTE9OR19ET1VCTEUgKCZvbXBpX21waV9sb25nX2RvdWJsZSkKLSNkZWZpbmUgTVBJX1VOU0lHTkVEX0NIQVIgKCZvbXBpX21waV91bnNpZ25lZF9jaGFyKQotI2RlZmluZSBNUElfU0lHTkVEX0NIQVIgKCZvbXBpX21waV9zaWduZWRfY2hhcikKLSNkZWZpbmUgTVBJX1VOU0lHTkVEX1NIT1JUICgmb21waV9tcGlfdW5zaWduZWRfc2hvcnQpCi0jZGVmaW5lIE1QSV9VTlNJR05FRF9MT05HICgmb21waV9tcGlfdW5zaWduZWRfbG9uZykKLSNkZWZpbmUgTVBJX1VOU0lHTkVEICgmb21waV9tcGlfdW5zaWduZWQpCi0jZGVmaW5lIE1QSV9GTE9BVF9JTlQgKCZvbXBpX21waV9mbG9hdF9pbnQpCi0jZGVmaW5lIE1QSV9ET1VCTEVfSU5UICgmb21waV9tcGlfZG91YmxlX2ludCkKLSNkZWZpbmUgTVBJX0xPTkdfRE9VQkxFX0lOVCAoJm9tcGlfbXBpX2xvbmdkYmxfaW50KQotI2RlZmluZSBNUElfTE9OR19JTlQgKCZvbXBpX21waV9sb25nX2ludCkKLSNkZWZpbmUgTVBJX1NIT1JUX0lOVCAoJm9tcGlfbXBpX3Nob3J0X2ludCkKLSNkZWZpbmUgTVBJXzJJTlQgKCZvbXBpX21waV8yaW50KQotI2RlZmluZSBNUElfVUIgKCZvbXBpX21waV91YikKLSNkZWZpbmUgTVBJX0xCICgmb21waV9tcGlfbGIpCi0jZGVmaW5lIE1QSV9XQ0hBUiAoJm9tcGlfbXBpX3djaGFyKQotI2lmIEhBVkVfTE9OR19MT05HCi0jZGVmaW5lIE1QSV9MT05HX0xPTkdfSU5UICgmb21waV9tcGlfbG9uZ19sb25nX2ludCkKLSNkZWZpbmUgTVBJX0xPTkdfTE9ORyAoJm9tcGlfbXBpX2xvbmdfbG9uZ19pbnQpCi0jZGVmaW5lIE1QSV9VTlNJR05FRF9MT05HX0xPTkcgKCZvbXBpX21waV91bnNpZ25lZF9sb25nX2xvbmcpCi0jZW5kaWYgIC8qIEhBVkVfTE9OR19MT05HICovCi0jZGVmaW5lIE1QSV8yQ09NUExFWCAoJm9tcGlfbXBpXzJjcGxleCkKLSNkZWZpbmUgTVBJXzJET1VCTEVfQ09NUExFWCAoJm9tcGlfbXBpXzJkYmxjcGxleCkKLQotLyogRm9ydHJhbiBkYXRhdHlwZSBiaW5kaW5ncyAqLwotI2RlZmluZSBNUElfQ0hBUkFDVEVSICgmb21waV9tcGlfY2hhcmFjdGVyKQotI2RlZmluZSBNUElfTE9HSUNBTCAoJm9tcGlfbXBpX2xvZ2ljKQotI2RlZmluZSBNUElfSU5URUdFUiAoJm9tcGlfbXBpX2ludGVnZXIpCi0jaWYgT01QSV9IQVZFX0ZPUlRSQU5fSU5URUdFUjEKLSNkZWZpbmUgTVBJX0lOVEVHRVIxICgmb21waV9tcGlfaW50ZWdlcjEpCi0jZW5kaWYKLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9JTlRFR0VSMgotI2RlZmluZSBNUElfSU5URUdFUjIgKCZvbXBpX21waV9pbnRlZ2VyMikKLSNlbmRpZgotI2lmIE9NUElfSEFWRV9GT1JUUkFOX0lOVEVHRVI0Ci0jZGVmaW5lIE1QSV9JTlRFR0VSNCAoJm9tcGlfbXBpX2ludGVnZXI0KQotI2VuZGlmCi0jaWYgT01QSV9IQVZFX0ZPUlRSQU5fSU5URUdFUjgKLSNkZWZpbmUgTVBJX0lOVEVHRVI4ICgmb21waV9tcGlfaW50ZWdlcjgpCi0jZW5kaWYKLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9JTlRFR0VSMTYKLSNkZWZpbmUgTVBJX0lOVEVHRVIxNiAoJm9tcGlfbXBpX2ludGVnZXIxNikKLSNlbmRpZgotI2RlZmluZSBNUElfUkVBTCAoJm9tcGlfbXBpX3JlYWwpCi0jaWYgT01QSV9IQVZFX0ZPUlRSQU5fUkVBTDQKLSNkZWZpbmUgTVBJX1JFQUw0ICgmb21waV9tcGlfcmVhbDQpCi0jZW5kaWYKLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9SRUFMOAotI2RlZmluZSBNUElfUkVBTDggKCZvbXBpX21waV9yZWFsOCkKLSNlbmRpZgotI2lmIE9NUElfSEFWRV9GT1JUUkFOX1JFQUwxNgotI2RlZmluZSBNUElfUkVBTDE2ICgmb21waV9tcGlfcmVhbDE2KQotI2VuZGlmCi0jZGVmaW5lIE1QSV9ET1VCTEVfUFJFQ0lTSU9OICgmb21waV9tcGlfZGJscHJlYykKLSNkZWZpbmUgTVBJX0NPTVBMRVggKCZvbXBpX21waV9jcGxleCkKLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9SRUFMNAotI2RlZmluZSBNUElfQ09NUExFWDggKCZvbXBpX21waV9jb21wbGV4OCkKLSNlbmRpZgotI2lmIE9NUElfSEFWRV9GT1JUUkFOX1JFQUw4Ci0jZGVmaW5lIE1QSV9DT01QTEVYMTYgKCZvbXBpX21waV9jb21wbGV4MTYpCi0jZW5kaWYKLSNpZiBPTVBJX0hBVkVfRk9SVFJBTl9SRUFMMTYKLSNkZWZpbmUgTVBJX0NPTVBMRVgzMiAoJm9tcGlfbXBpX2NvbXBsZXgzMikKLSNlbmRpZgotI2RlZmluZSBNUElfRE9VQkxFX0NPTVBMRVggKCZvbXBpX21waV9kYmxjcGxleCkKLSNkZWZpbmUgTVBJXzJSRUFMICgmb21waV9tcGlfMnJlYWwpCi0jZGVmaW5lIE1QSV8yRE9VQkxFX1BSRUNJU0lPTiAoJm9tcGlfbXBpXzJkYmxwcmVjKQotI2RlZmluZSBNUElfMklOVEVHRVIgKCZvbXBpX21waV8yaW50ZWdlcikKLQotI2RlZmluZSBNUElfRVJST1JTX0FSRV9GQVRBTCAoJm9tcGlfbXBpX2Vycm9yc19hcmVfZmF0YWwpCi0jZGVmaW5lIE1QSV9FUlJPUlNfUkVUVVJOICgmb21waV9tcGlfZXJyb3JzX3JldHVybikKLQotLyogVHlwZWNsYXNzIGRlZmluaXRpb24gZm9yIE1QSV9UeXBlX21hdGNoX3NpemUgKi8KLSNkZWZpbmUgTVBJX1RZUEVDTEFTU19JTlRFR0VSICAgIDEKLSNkZWZpbmUgTVBJX1RZUEVDTEFTU19SRUFMICAgICAgIDIKLSNkZWZpbmUgTVBJX1RZUEVDTEFTU19DT01QTEVYICAgIDMKLQotLyoKLSAqIEZvciBhcHBsaWNhdGlvbnMgc3RpbGwgdXNpbmcgdGhlIG9sZCBbbm9uLXN0YW5kYXJkXSBST01JTyBjb252ZW50aW9ucwotICovCi0jZGVmaW5lIE1QSU9fUmVxdWVzdCBNUElfUmVxdWVzdAotI2RlZmluZSBNUElPX1Rlc3QgTVBJX1Rlc3QKLSNkZWZpbmUgTVBJT19XYWl0IE1QSV9XYWl0Ci0KLQotLyoKLSAqIE1QSSBBUEkKLSAqLwotCi1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0Fib3J0KE1QSV9Db21tIGNvbW0sIGludCBlcnJvcmNvZGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9BY2N1bXVsYXRlKHZvaWQgKm9yaWdpbl9hZGRyLCBpbnQgb3JpZ2luX2NvdW50LCBNUElfRGF0YXR5cGUgb3JpZ2luX2RhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YXJnZXRfcmFuaywgTVBJX0FpbnQgdGFyZ2V0X2Rpc3AsIGludCB0YXJnZXRfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHRhcmdldF9kYXRhdHlwZSwgTVBJX09wIG9wLCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0FkZF9lcnJvcl9jbGFzcyhpbnQgKmVycm9yY2xhc3MpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9BZGRfZXJyb3JfY29kZShpbnQgZXJyb3JjbGFzcywgaW50ICplcnJvcmNvZGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9BZGRfZXJyb3Jfc3RyaW5nKGludCBlcnJvcmNvZGUsIGNoYXIgKnN0cmluZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0FkZHJlc3Modm9pZCAqbG9jYXRpb24sIE1QSV9BaW50ICphZGRyZXNzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQWxsZ2F0aGVyKHZvaWQgKnNlbmRidWYsIGludCBzZW5kY291bnQsIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY3ZidWYsIGludCByZWN2Y291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgcmVjdnR5cGUsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9BbGxnYXRoZXJ2KHZvaWQgKnNlbmRidWYsIGludCBzZW5kY291bnQsIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWN2YnVmLCBpbnQgKnJlY3Zjb3VudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkaXNwbHMsIE1QSV9EYXRhdHlwZSByZWN2dHlwZSwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0FsbG9jX21lbShNUElfQWludCBzaXplLCBNUElfSW5mbyBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmFzZXB0cik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0FsbHJlZHVjZSh2b2lkICpzZW5kYnVmLCB2b2lkICpyZWN2YnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9PcCBvcCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0FsbHRvYWxsKHZvaWQgKnNlbmRidWYsIGludCBzZW5kY291bnQsIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjdmJ1ZiwgaW50IHJlY3Zjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHJlY3Z0eXBlLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQWxsdG9hbGx2KHZvaWQgKnNlbmRidWYsIGludCAqc2VuZGNvdW50cywgaW50ICpzZGlzcGxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHNlbmR0eXBlLCB2b2lkICpyZWN2YnVmLCBpbnQgKnJlY3Zjb3VudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJkaXNwbHMsIE1QSV9EYXRhdHlwZSByZWN2dHlwZSwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0FsbHRvYWxsdyh2b2lkICpzZW5kYnVmLCBpbnQgKnNlbmRjb3VudHMsIGludCAqc2Rpc3BscywgTVBJX0RhdGF0eXBlICpzZW5kdHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWN2YnVmLCBpbnQgKnJlY3Zjb3VudHMsIGludCAqcmRpc3BscywgTVBJX0RhdGF0eXBlICpyZWN2dHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQXR0cl9kZWxldGUoTVBJX0NvbW0gY29tbSwgaW50IGtleXZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0F0dHJfZ2V0KE1QSV9Db21tIGNvbW0sIGludCBrZXl2YWwsIHZvaWQgKmF0dHJpYnV0ZV92YWwsIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0F0dHJfcHV0KE1QSV9Db21tIGNvbW0sIGludCBrZXl2YWwsIHZvaWQgKmF0dHJpYnV0ZV92YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9CYXJyaWVyKE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9CY2FzdCh2b2lkICpidWZmZXIsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0JzZW5kKHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0LCBpbnQgdGFnLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQnNlbmRfaW5pdCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0LCBpbnQgdGFnLCBNUElfQ29tbSBjb21tLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0J1ZmZlcl9hdHRhY2godm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0J1ZmZlcl9kZXRhY2godm9pZCAqYnVmZmVyLCBpbnQgKnNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9DYW5jZWwoTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9DYXJ0X2Nvb3JkcyhNUElfQ29tbSBjb21tLCBpbnQgcmFuaywgaW50IG1heGRpbXMsIGludCAqY29vcmRzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ2FydF9jcmVhdGUoTVBJX0NvbW0gb2xkX2NvbW0sIGludCBuZGltcywgaW50ICpkaW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBlcmlvZHMsIGludCByZW9yZGVyLCBNUElfQ29tbSAqY29tbV9jYXJ0KTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ2FydF9nZXQoTVBJX0NvbW0gY29tbSwgaW50IG1heGRpbXMsIGludCAqZGltcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwZXJpb2RzLCBpbnQgKmNvb3Jkcyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NhcnRfbWFwKE1QSV9Db21tIGNvbW0sIGludCBuZGltcywgaW50ICpkaW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBlcmlvZHMsIGludCAqbmV3cmFuayk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NhcnRfcmFuayhNUElfQ29tbSBjb21tLCBpbnQgKmNvb3JkcywgaW50ICpyYW5rKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ2FydF9zaGlmdChNUElfQ29tbSBjb21tLCBpbnQgZGlyZWN0aW9uLCBpbnQgZGlzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJhbmtfc291cmNlLCBpbnQgKnJhbmtfZGVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NhcnRfc3ViKE1QSV9Db21tIGNvbW0sIGludCAqcmVtYWluX2RpbXMsIE1QSV9Db21tICpuZXdfY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NhcnRkaW1fZ2V0KE1QSV9Db21tIGNvbW0sIGludCAqbmRpbXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9DbG9zZV9wb3J0KGNoYXIgKnBvcnRfbmFtZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fYWNjZXB0KGNoYXIgKnBvcnRfbmFtZSwgTVBJX0luZm8gaW5mbywgaW50IHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Db21tIGNvbW0sIE1QSV9Db21tICpuZXdjb21tKTsKLU9NUElfREVDTFNQRUMgIE1QSV9GaW50IE1QSV9Db21tX2MyZihNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9jYWxsX2VycmhhbmRsZXIoTVBJX0NvbW0gY29tbSwgaW50IGVycm9yY29kZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fY29tcGFyZShNUElfQ29tbSBjb21tMSwgTVBJX0NvbW0gY29tbTIsIGludCAqcmVzdWx0KTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9jb25uZWN0KGNoYXIgKnBvcnRfbmFtZSwgTVBJX0luZm8gaW5mbywgaW50IHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQ29tbSBjb21tLCBNUElfQ29tbSAqbmV3Y29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fY3JlYXRlX2VycmhhbmRsZXIoTVBJX0NvbW1fZXJyaGFuZGxlcl9mbiAqZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0VycmhhbmRsZXIgKmVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX2NyZWF0ZV9rZXl2YWwoTVBJX0NvbW1fY29weV9hdHRyX2Z1bmN0aW9uICpjb21tX2NvcHlfYXR0cl9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Db21tX2RlbGV0ZV9hdHRyX2Z1bmN0aW9uICpjb21tX2RlbGV0ZV9hdHRyX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb21tX2tleXZhbCwgdm9pZCAqZXh0cmFfc3RhdGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX2NyZWF0ZShNUElfQ29tbSBjb21tLCBNUElfR3JvdXAgZ3JvdXAsIE1QSV9Db21tICpuZXdjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9kZWxldGVfYXR0cihNUElfQ29tbSBjb21tLCBpbnQgY29tbV9rZXl2YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX2Rpc2Nvbm5lY3QoTVBJX0NvbW0gKmNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX2R1cChNUElfQ29tbSBjb21tLCBNUElfQ29tbSAqbmV3Y29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfQ29tbSBNUElfQ29tbV9mMmMoTVBJX0ZpbnQgY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fZnJlZV9rZXl2YWwoaW50ICpjb21tX2tleXZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fZnJlZShNUElfQ29tbSAqY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fZ2V0X2F0dHIoTVBJX0NvbW0gY29tbSwgaW50IGNvbW1fa2V5dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmF0dHJpYnV0ZV92YWwsIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fZ2V0X2VycmhhbmRsZXIoTVBJX0NvbW0gY29tbSwgTVBJX0VycmhhbmRsZXIgKmVyaGFuZGxlcik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fZ2V0X25hbWUoTVBJX0NvbW0gY29tbSwgY2hhciAqY29tbV9uYW1lLCBpbnQgKnJlc3VsdGxlbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fZ2V0X3BhcmVudChNUElfQ29tbSAqcGFyZW50KTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9ncm91cChNUElfQ29tbSBjb21tLCBNUElfR3JvdXAgKmdyb3VwKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9qb2luKGludCBmZCwgTVBJX0NvbW0gKmludGVyY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fcmFuayhNUElfQ29tbSBjb21tLCBpbnQgKnJhbmspOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX3JlbW90ZV9ncm91cChNUElfQ29tbSBjb21tLCBNUElfR3JvdXAgKmdyb3VwKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9yZW1vdGVfc2l6ZShNUElfQ29tbSBjb21tLCBpbnQgKnNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX3NldF9hdHRyKE1QSV9Db21tIGNvbW0sIGludCBjb21tX2tleXZhbCwgdm9pZCAqYXR0cmlidXRlX3ZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fc2V0X2VycmhhbmRsZXIoTVBJX0NvbW0gY29tbSwgTVBJX0VycmhhbmRsZXIgZXJyaGFuZGxlcik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fc2V0X25hbWUoTVBJX0NvbW0gY29tbSwgY2hhciAqY29tbV9uYW1lKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9zaXplKE1QSV9Db21tIGNvbW0sIGludCAqc2l6ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0NvbW1fc3Bhd24oY2hhciAqY29tbWFuZCwgY2hhciAqKmFyZ3YsIGludCBtYXhwcm9jcywgTVBJX0luZm8gaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSwgTVBJX0NvbW0gKmludGVyY29tbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFycmF5X29mX2VycmNvZGVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfQ29tbV9zcGF3bl9tdWx0aXBsZShpbnQgY291bnQsIGNoYXIgKiphcnJheV9vZl9jb21tYW5kcywgY2hhciAqKiphcnJheV9vZl9hcmd2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYXJyYXlfb2ZfbWF4cHJvY3MsIE1QSV9JbmZvICphcnJheV9vZl9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb290LCBNUElfQ29tbSBjb21tLCBNUElfQ29tbSAqaW50ZXJjb21tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYXJyYXlfb2ZfZXJyY29kZXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX3NwbGl0KE1QSV9Db21tIGNvbW0sIGludCBjb2xvciwgaW50IGtleSwgTVBJX0NvbW0gKm5ld2NvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Db21tX3Rlc3RfaW50ZXIoTVBJX0NvbW0gY29tbSwgaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRGltc19jcmVhdGUoaW50IG5ub2RlcywgaW50IG5kaW1zLCBpbnQgKmRpbXMpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgTVBJX0VycmhhbmRsZXJfYzJmKE1QSV9FcnJoYW5kbGVyIGVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9mdW5jdGlvbiAqZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9FcnJoYW5kbGVyICplcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIE1QSV9FcnJoYW5kbGVyIE1QSV9FcnJoYW5kbGVyX2YyYyhNUElfRmludCBlcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRXJyaGFuZGxlcl9mcmVlKE1QSV9FcnJoYW5kbGVyICplcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRXJyaGFuZGxlcl9nZXQoTVBJX0NvbW0gY29tbSwgTVBJX0VycmhhbmRsZXIgKmVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9FcnJoYW5kbGVyX3NldChNUElfQ29tbSBjb21tLCBNUElfRXJyaGFuZGxlciBlcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRXJyb3JfY2xhc3MoaW50IGVycm9yY29kZSwgaW50ICplcnJvcmNsYXNzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRXJyb3Jfc3RyaW5nKGludCBlcnJvcmNvZGUsIGNoYXIgKnN0cmluZywgaW50ICpyZXN1bHRsZW4pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9FeHNjYW4odm9pZCAqc2VuZGJ1Ziwgdm9pZCAqcmVjdmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfT3Agb3AsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgTVBJX0ZpbGVfYzJmKE1QSV9GaWxlIGZpbGUpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbGUgTVBJX0ZpbGVfZjJjKE1QSV9GaW50IGZpbGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX2NhbGxfZXJyaGFuZGxlcihNUElfRmlsZSBmaCwgaW50IGVycm9yY29kZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfY3JlYXRlX2VycmhhbmRsZXIoTVBJX0ZpbGVfZXJyaGFuZGxlcl9mbiAqZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0VycmhhbmRsZXIgKmVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3NldF9lcnJoYW5kbGVyKCBNUElfRmlsZSBmaWxlLCBNUElfRXJyaGFuZGxlciBlcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9nZXRfZXJyaGFuZGxlciggTVBJX0ZpbGUgZmlsZSwgTVBJX0VycmhhbmRsZXIgKmVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX29wZW4oTVBJX0NvbW0gY29tbSwgY2hhciAqZmlsZW5hbWUsIGludCBhbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9JbmZvIGluZm8sIE1QSV9GaWxlICpmaCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfY2xvc2UoTVBJX0ZpbGUgKmZoKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9kZWxldGUoY2hhciAqZmlsZW5hbWUsIE1QSV9JbmZvIGluZm8pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3NldF9zaXplKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IHNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3ByZWFsbG9jYXRlKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IHNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX2dldF9zaXplKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0ICpzaXplKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9nZXRfZ3JvdXAoTVBJX0ZpbGUgZmgsIE1QSV9Hcm91cCAqZ3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX2dldF9hbW9kZShNUElfRmlsZSBmaCwgaW50ICphbW9kZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfc2V0X2luZm8oTVBJX0ZpbGUgZmgsIE1QSV9JbmZvIGluZm8pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX2dldF9pbmZvKE1QSV9GaWxlIGZoLCBNUElfSW5mbyAqaW5mb191c2VkKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9zZXRfdmlldyhNUElfRmlsZSBmaCwgTVBJX09mZnNldCBkaXNwLCBNUElfRGF0YXR5cGUgZXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGZpbGV0eXBlLCBjaGFyICpkYXRhcmVwLCBNUElfSW5mbyBpbmZvKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9nZXRfdmlldyhNUElfRmlsZSBmaCwgTVBJX09mZnNldCAqZGlzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgKmV0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSAqZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3JlYWRfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9yZWFkX2F0X2FsbChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV93cml0ZV9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX2lyZWFkX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfaXdyaXRlX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3JlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3JlYWRfYWxsKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfd3JpdGUoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV93cml0ZV9hbGwoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfaXJlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX2l3cml0ZShNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3NlZWsoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9nZXRfcG9zaXRpb24oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfZ2V0X2J5dGVfb2Zmc2V0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX09mZnNldCAqZGlzcCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfcmVhZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV93cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfaXJlYWRfc2hhcmVkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfaXdyaXRlX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9SZXF1ZXN0ICpyZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9yZWFkX29yZGVyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfc2Vla19zaGFyZWQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9nZXRfcG9zaXRpb25fc2hhcmVkKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0ICpvZmZzZXQpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3JlYWRfYXRfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9yZWFkX2F0X2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV93cml0ZV9hdF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV93cml0ZV9hdF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfcmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfcmVhZF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfd3JpdGVfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV93cml0ZV9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfcmVhZF9vcmRlcmVkX2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9yZWFkX29yZGVyZWRfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3dyaXRlX29yZGVyZWRfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbGVfZ2V0X3R5cGVfZXh0ZW50KE1QSV9GaWxlIGZoLCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3NldF9hdG9taWNpdHkoTVBJX0ZpbGUgZmgsIGludCBmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRmlsZV9nZXRfYXRvbWljaXR5KE1QSV9GaWxlIGZoLCBpbnQgKmZsYWcpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaWxlX3N5bmMoTVBJX0ZpbGUgZmgpOwotLyoKLSAqIGZpbGUgZnVuY3Rpb25zIGVuZAotICovCi1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0ZpbmFsaXplKHZvaWQpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9GaW5hbGl6ZWQoaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfRnJlZV9tZW0odm9pZCAqYmFzZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dhdGhlcih2b2lkICpzZW5kYnVmLCBpbnQgc2VuZGNvdW50LCBNUElfRGF0YXR5cGUgc2VuZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWN2YnVmLCBpbnQgcmVjdmNvdW50LCBNUElfRGF0YXR5cGUgcmVjdnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dhdGhlcnYodm9pZCAqc2VuZGJ1ZiwgaW50IHNlbmRjb3VudCwgTVBJX0RhdGF0eXBlIHNlbmR0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY3ZidWYsIGludCAqcmVjdmNvdW50cywgaW50ICpkaXNwbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHJlY3Z0eXBlLCBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dldF9hZGRyZXNzKHZvaWQgKmxvY2F0aW9uLCBNUElfQWludCAqYWRkcmVzcyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dldF9jb3VudChNUElfU3RhdHVzICpzdGF0dXMsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50ICpjb3VudCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dldF9lbGVtZW50cyhNUElfU3RhdHVzICpzdGF0dXMsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50ICpjb3VudCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dldCh2b2lkICpvcmlnaW5fYWRkciwgaW50IG9yaWdpbl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvcmlnaW5fZGF0YXR5cGUsIGludCB0YXJnZXRfcmFuaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50IHRhcmdldF9kaXNwLCBpbnQgdGFyZ2V0X2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHRhcmdldF9kYXRhdHlwZSwgTVBJX1dpbiB3aW4pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9HZXRfcHJvY2Vzc29yX25hbWUoY2hhciAqbmFtZSwgaW50ICpyZXN1bHRsZW4pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9HZXRfdmVyc2lvbihpbnQgKnZlcnNpb24sIGludCAqc3VidmVyc2lvbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyYXBoX2NyZWF0ZShNUElfQ29tbSBjb21tX29sZCwgaW50IG5ub2RlcywgaW50ICppbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZWRnZXMsIGludCByZW9yZGVyLCBNUElfQ29tbSAqY29tbV9ncmFwaCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyYXBoX2dldChNUElfQ29tbSBjb21tLCBpbnQgbWF4aW5kZXgsIGludCBtYXhlZGdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaW5kZXgsIGludCAqZWRnZXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9HcmFwaF9tYXAoTVBJX0NvbW0gY29tbSwgaW50IG5ub2RlcywgaW50ICppbmRleCwgaW50ICplZGdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmV3cmFuayk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyYXBoX25laWdoYm9yc19jb3VudChNUElfQ29tbSBjb21tLCBpbnQgcmFuaywgaW50ICpubmVpZ2hib3JzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfR3JhcGhfbmVpZ2hib3JzKE1QSV9Db21tIGNvbW0sIGludCByYW5rLCBpbnQgbWF4bmVpZ2hib3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpuZWlnaGJvcnMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9HcmFwaGRpbXNfZ2V0KE1QSV9Db21tIGNvbW0sIGludCAqbm5vZGVzLCBpbnQgKm5lZGdlcyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyZXF1ZXN0X2NvbXBsZXRlKE1QSV9SZXF1ZXN0IHJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9HcmVxdWVzdF9zdGFydChNUElfR3JlcXVlc3RfcXVlcnlfZnVuY3Rpb24gKnF1ZXJ5X2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfR3JlcXVlc3RfZnJlZV9mdW5jdGlvbiAqZnJlZV9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyZXF1ZXN0X2NhbmNlbF9mdW5jdGlvbiAqY2FuY2VsX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpleHRyYV9zdGF0ZSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgTVBJX0dyb3VwX2MyZihNUElfR3JvdXAgZ3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Hcm91cF9jb21wYXJlKE1QSV9Hcm91cCBncm91cDEsIE1QSV9Hcm91cCBncm91cDIsIGludCAqcmVzdWx0KTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfR3JvdXBfZGlmZmVyZW5jZShNUElfR3JvdXAgZ3JvdXAxLCBNUElfR3JvdXAgZ3JvdXAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Hcm91cCAqbmV3Z3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Hcm91cF9leGNsKE1QSV9Hcm91cCBncm91cCwgaW50IG4sIGludCAqcmFua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyb3VwICpuZXdncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfR3JvdXAgTVBJX0dyb3VwX2YyYyhNUElfRmludCBncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyb3VwX2ZyZWUoTVBJX0dyb3VwICpncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyb3VwX2luY2woTVBJX0dyb3VwIGdyb3VwLCBpbnQgbiwgaW50ICpyYW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfR3JvdXAgKm5ld2dyb3VwKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfR3JvdXBfaW50ZXJzZWN0aW9uKE1QSV9Hcm91cCBncm91cDEsIE1QSV9Hcm91cCBncm91cDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfR3JvdXAgKm5ld2dyb3VwKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfR3JvdXBfcmFuZ2VfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCBuLCBpbnQgcmFuZ2VzW11bM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyb3VwICpuZXdncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyb3VwX3JhbmdlX2luY2woTVBJX0dyb3VwIGdyb3VwLCBpbnQgbiwgaW50IHJhbmdlc1tdWzNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Hcm91cCAqbmV3Z3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Hcm91cF9yYW5rKE1QSV9Hcm91cCBncm91cCwgaW50ICpyYW5rKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfR3JvdXBfc2l6ZShNUElfR3JvdXAgZ3JvdXAsIGludCAqc2l6ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyb3VwX3RyYW5zbGF0ZV9yYW5rcyhNUElfR3JvdXAgZ3JvdXAxLCBpbnQgbiwgaW50ICpyYW5rczEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfR3JvdXAgZ3JvdXAyLCBpbnQgKnJhbmtzMik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0dyb3VwX3VuaW9uKE1QSV9Hcm91cCBncm91cDEsIE1QSV9Hcm91cCBncm91cDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Hcm91cCAqbmV3Z3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9JYnNlbmQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSBjb21tLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfRmludCBNUElfSW5mb19jMmYoTVBJX0luZm8gaW5mbyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0luZm9fY3JlYXRlKE1QSV9JbmZvICppbmZvKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfSW5mb19kZWxldGUoTVBJX0luZm8gaW5mbywgY2hhciAqa2V5KTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfSW5mb19kdXAoTVBJX0luZm8gaW5mbywgTVBJX0luZm8gKm5ld2luZm8pOwotT01QSV9ERUNMU1BFQyAgTVBJX0luZm8gTVBJX0luZm9fZjJjKE1QSV9GaW50IGluZm8pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9JbmZvX2ZyZWUoTVBJX0luZm8gKmluZm8pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9JbmZvX2dldChNUElfSW5mbyBpbmZvLCBjaGFyICprZXksIGludCB2YWx1ZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUsIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0luZm9fZ2V0X25rZXlzKE1QSV9JbmZvIGluZm8sIGludCAqbmtleXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9JbmZvX2dldF9udGhrZXkoTVBJX0luZm8gaW5mbywgaW50IG4sIGNoYXIgKmtleSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0luZm9fZ2V0X3ZhbHVlbGVuKE1QSV9JbmZvIGluZm8sIGNoYXIgKmtleSwgaW50ICp2YWx1ZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfSW5mb19zZXQoTVBJX0luZm8gaW5mbywgY2hhciAqa2V5LCBjaGFyICp2YWx1ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0luaXQoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Jbml0aWFsaXplZChpbnQgKmZsYWcpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Jbml0X3RocmVhZChpbnQgKmFyZ2MsIGNoYXIgKioqYXJndiwgaW50IHJlcXVpcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnByb3ZpZGVkKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfSW50ZXJjb21tX2NyZWF0ZShNUElfQ29tbSBsb2NhbF9jb21tLCBpbnQgbG9jYWxfbGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Db21tIGJyaWRnZV9jb21tLCBpbnQgcmVtb3RlX2xlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSAqbmV3aW50ZXJjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfSW50ZXJjb21tX21lcmdlKE1QSV9Db21tIGludGVyY29tbSwgaW50IGhpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQ29tbSAqbmV3aW50ZXJjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfSXByb2JlKGludCBzb3VyY2UsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIGludCAqZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0lyZWN2KHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIE1QSV9SZXF1ZXN0ICpyZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfSXJzZW5kKHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIGludCBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Jc2VuZCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBpbnQgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Jc3NlbmQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSBjb21tLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0lzX3RocmVhZF9tYWluKGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0tleXZhbF9jcmVhdGUoTVBJX0NvcHlfZnVuY3Rpb24gKmNvcHlfZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RlbGV0ZV9mdW5jdGlvbiAqZGVsZXRlX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqa2V5dmFsLCB2b2lkICpleHRyYV9zdGF0ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX0tleXZhbF9mcmVlKGludCAqa2V5dmFsKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfTG9va3VwX25hbWUoY2hhciAqc2VydmljZV9uYW1lLCBNUElfSW5mbyBpbmZvLCBjaGFyICpwb3J0X25hbWUpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgTVBJX09wX2MyZihNUElfT3Agb3ApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9PcF9jcmVhdGUoTVBJX1VzZXJfZnVuY3Rpb24gKmZ1bmN0aW9uLCBpbnQgY29tbXV0ZSwgTVBJX09wICpvcCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX09wZW5fcG9ydChNUElfSW5mbyBpbmZvLCBjaGFyICpwb3J0X25hbWUpOwotT01QSV9ERUNMU1BFQyAgTVBJX09wIE1QSV9PcF9mMmMoTVBJX0ZpbnQgb3ApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9PcF9mcmVlKE1QSV9PcCAqb3ApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9QYWNrX2V4dGVybmFsKGNoYXIgKmRhdGFyZXAsIHZvaWQgKmluYnVmLCBpbnQgaW5jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIHZvaWQgKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQWludCBvdXRzaXplLCBNUElfQWludCAqcG9zaXRpb24pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9QYWNrX2V4dGVybmFsX3NpemUoY2hhciAqZGF0YXJlcCwgaW50IGluY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9BaW50ICpzaXplKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfUGFjayh2b2lkICppbmJ1ZiwgaW50IGluY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRidWYsIGludCBvdXRzaXplLCBpbnQgKnBvc2l0aW9uLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfUGFja19zaXplKGludCBpbmNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9Db21tIGNvbW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9QY29udHJvbChjb25zdCBpbnQgbGV2ZWwsIC4uLik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1Byb2JlKGludCBzb3VyY2UsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1B1Ymxpc2hfbmFtZShjaGFyICpzZXJ2aWNlX25hbWUsIE1QSV9JbmZvIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwb3J0X25hbWUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9QdXQodm9pZCAqb3JpZ2luX2FkZHIsIGludCBvcmlnaW5fY291bnQsIE1QSV9EYXRhdHlwZSBvcmlnaW5fZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0X3JhbmssIE1QSV9BaW50IHRhcmdldF9kaXNwLCBpbnQgdGFyZ2V0X2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHRhcmdldF9kYXRhdHlwZSwgTVBJX1dpbiB3aW4pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9RdWVyeV90aHJlYWQoaW50ICpwcm92aWRlZCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1JlY3ZfaW5pdCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBpbnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9SZWN2KHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfUmVkdWNlKHZvaWQgKnNlbmRidWYsIHZvaWQgKnJlY3ZidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX09wIG9wLCBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1JlZHVjZV9zY2F0dGVyKHZvaWQgKnNlbmRidWYsIHZvaWQgKnJlY3ZidWYsIGludCAqcmVjdmNvdW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfT3Agb3AsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9SZWdpc3Rlcl9kYXRhcmVwKGNoYXIgKmRhdGFyZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGFyZXBfY29udmVyc2lvbl9mdW5jdGlvbiAqcmVhZF9jb252ZXJzaW9uX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhcmVwX2NvbnZlcnNpb25fZnVuY3Rpb24gKndyaXRlX2NvbnZlcnNpb25fZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGFyZXBfZXh0ZW50X2Z1bmN0aW9uICpkdHlwZV9maWxlX2V4dGVudF9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpleHRyYV9zdGF0ZSk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfRmludCBNUElfUmVxdWVzdF9jMmYoTVBJX1JlcXVlc3QgcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfUmVxdWVzdCBNUElfUmVxdWVzdF9mMmMoTVBJX0ZpbnQgcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1JlcXVlc3RfZnJlZShNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1JlcXVlc3RfZ2V0X3N0YXR1cyhNUElfUmVxdWVzdCByZXF1ZXN0LCBpbnQgKmZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Sc2VuZCh2b2lkICppYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWcsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9Sc2VuZF9pbml0KHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3QsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9TY2FuKHZvaWQgKnNlbmRidWYsIHZvaWQgKnJlY3ZidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9PcCBvcCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1NjYXR0ZXIodm9pZCAqc2VuZGJ1ZiwgaW50IHNlbmRjb3VudCwgTVBJX0RhdGF0eXBlIHNlbmR0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY3ZidWYsIGludCByZWN2Y291bnQsIE1QSV9EYXRhdHlwZSByZWN2dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1NjYXR0ZXJ2KHZvaWQgKnNlbmRidWYsIGludCAqc2VuZGNvdW50cywgaW50ICpkaXNwbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwgdm9pZCAqcmVjdmJ1ZiwgaW50IHJlY3Zjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHJlY3Z0eXBlLCBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1NlbmRfaW5pdCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3QsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1NlbmQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1NlbmRyZWN2KHZvaWQgKnNlbmRidWYsIGludCBzZW5kY291bnQsIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3QsIGludCBzZW5kdGFnLCB2b2lkICpyZWN2YnVmLCBpbnQgcmVjdmNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgcmVjdnR5cGUsIGludCBzb3VyY2UsIGludCByZWN2dGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQ29tbSBjb21tLCAgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfU2VuZHJlY3ZfcmVwbGFjZSh2b2lkICogYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdCwgaW50IHNlbmR0YWcsIGludCBzb3VyY2UsIGludCByZWN2dGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Db21tIGNvbW0sIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1NzZW5kX2luaXQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdCwgaW50IHRhZywgTVBJX0NvbW0gY29tbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1NzZW5kKHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIGludCBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfU3RhcnQoTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9TdGFydGFsbChpbnQgY291bnQsIE1QSV9SZXF1ZXN0ICphcnJheV9vZl9yZXF1ZXN0cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1N0YXR1c19jMmYoTVBJX1N0YXR1cyAqY19zdGF0dXMsIE1QSV9GaW50ICpmX3N0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1N0YXR1c19mMmMoTVBJX0ZpbnQgKmZfc3RhdHVzLCBNUElfU3RhdHVzICpjX3N0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1N0YXR1c19zZXRfY2FuY2VsbGVkKE1QSV9TdGF0dXMgKnN0YXR1cywgaW50IGZsYWcpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9TdGF0dXNfc2V0X2VsZW1lbnRzKE1QSV9TdGF0dXMgKnN0YXR1cywgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1Rlc3RhbGwoaW50IGNvdW50LCBNUElfUmVxdWVzdCBhcnJheV9vZl9yZXF1ZXN0c1tdLCBpbnQgKmZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1N0YXR1cyBhcnJheV9vZl9zdGF0dXNlc1tdKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVGVzdGFueShpbnQgY291bnQsIE1QSV9SZXF1ZXN0IGFycmF5X29mX3JlcXVlc3RzW10sIGludCAqaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmbGFnLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UZXN0KE1QSV9SZXF1ZXN0ICpyZXF1ZXN0LCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1Rlc3RfY2FuY2VsbGVkKE1QSV9TdGF0dXMgKnN0YXR1cywgaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVGVzdHNvbWUoaW50IGluY291bnQsIE1QSV9SZXF1ZXN0IGFycmF5X29mX3JlcXVlc3RzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqb3V0Y291bnQsIGludCBhcnJheV9vZl9pbmRpY2VzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9TdGF0dXMgYXJyYXlfb2Zfc3RhdHVzZXNbXSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1RvcG9fdGVzdChNUElfQ29tbSBjb21tLCBpbnQgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfRmludCBNUElfVHlwZV9jMmYoTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9jb21taXQoTVBJX0RhdGF0eXBlICp0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9jb250aWd1b3VzKGludCBjb3VudCwgTVBJX0RhdGF0eXBlIG9sZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2NyZWF0ZV9kYXJyYXkoaW50IHNpemUsIGludCByYW5rLCBpbnQgbmRpbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ3NpemVfYXJyYXlbXSwgaW50IGRpc3RyaWJfYXJyYXlbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYXJnX2FycmF5W10sIGludCBwc2l6ZV9hcnJheVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9yZGVyLCBNUElfRGF0YXR5cGUgb2xkdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSAqbmV3dHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfY3JlYXRlX2Y5MF9jb21wbGV4KGludCBwLCBpbnQgciwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9jcmVhdGVfZjkwX2ludGVnZXIoaW50IHIsIE1QSV9EYXRhdHlwZSAqbmV3dHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfY3JlYXRlX2Y5MF9yZWFsKGludCBwLCBpbnQgciwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9jcmVhdGVfaGluZGV4ZWQoaW50IGNvdW50LCBpbnQgYXJyYXlfb2ZfYmxvY2tsZW5ndGhzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50IGFycmF5X29mX2Rpc3BsYWNlbWVudHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIG9sZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSAqbmV3dHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfY3JlYXRlX2h2ZWN0b3IoaW50IGNvdW50LCBpbnQgYmxvY2tsZW5ndGgsIE1QSV9BaW50IHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgb2xkdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2NyZWF0ZV9rZXl2YWwoTVBJX1R5cGVfY29weV9hdHRyX2Z1bmN0aW9uICp0eXBlX2NvcHlfYXR0cl9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9UeXBlX2RlbGV0ZV9hdHRyX2Z1bmN0aW9uICp0eXBlX2RlbGV0ZV9hdHRyX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0eXBlX2tleXZhbCwgdm9pZCAqZXh0cmFfc3RhdGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2NyZWF0ZV9pbmRleGVkX2Jsb2NrKGludCBjb3VudCwgaW50IGJsb2NrbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcnJheV9vZl9kaXNwbGFjZW1lbnRzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIG9sZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9jcmVhdGVfc3RydWN0KGludCBjb3VudCwgaW50IGFycmF5X29mX2Jsb2NrX2xlbmd0aHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50IGFycmF5X29mX2Rpc3BsYWNlbWVudHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBhcnJheV9vZl90eXBlc1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50IG5kaW1zLCBpbnQgc2l6ZV9hcnJheVtdLCBpbnQgc3Vic2l6ZV9hcnJheVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRfYXJyYXlbXSwgaW50IG9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgb2xkdHlwZSwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9jcmVhdGVfcmVzaXplZChNUElfRGF0YXR5cGUgb2xkdHlwZSwgTVBJX0FpbnQgbGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgZXh0ZW50LCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2RlbGV0ZV9hdHRyKE1QSV9EYXRhdHlwZSB0eXBlLCBpbnQgdHlwZV9rZXl2YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2R1cChNUElfRGF0YXR5cGUgdHlwZSwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9leHRlbnQoTVBJX0RhdGF0eXBlIHR5cGUsIE1QSV9BaW50ICpleHRlbnQpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2ZyZWUoTVBJX0RhdGF0eXBlICp0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9mcmVlX2tleXZhbChpbnQgKnR5cGVfa2V5dmFsKTsKLU9NUElfREVDTFNQRUMgIE1QSV9EYXRhdHlwZSBNUElfVHlwZV9mMmMoTVBJX0ZpbnQgZGF0YXR5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2dldF9hdHRyKE1QSV9EYXRhdHlwZSB0eXBlLCBpbnQgdHlwZV9rZXl2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXR0cmlidXRlX3ZhbCwgaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9nZXRfY29udGVudHMoTVBJX0RhdGF0eXBlIG10eXBlLCBpbnQgbWF4X2ludGVnZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2FkZHJlc3NlcywgaW50IG1heF9kYXRhdHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcnJheV9vZl9pbnRlZ2Vyc1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQWludCBhcnJheV9vZl9hZGRyZXNzZXNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGFycmF5X29mX2RhdGF0eXBlc1tdKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9nZXRfZW52ZWxvcGUoTVBJX0RhdGF0eXBlIHR5cGUsIGludCAqbnVtX2ludGVnZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm51bV9hZGRyZXNzZXMsIGludCAqbnVtX2RhdGF0eXBlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb21iaW5lcik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfZ2V0X2V4dGVudChNUElfRGF0YXR5cGUgdHlwZSwgTVBJX0FpbnQgKmxiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgKmV4dGVudCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfZ2V0X25hbWUoTVBJX0RhdGF0eXBlIHR5cGUsIGNoYXIgKnR5cGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJlc3VsdGxlbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfZ2V0X3RydWVfZXh0ZW50KE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX0FpbnQgKnRydWVfbGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICp0cnVlX2V4dGVudCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfaGluZGV4ZWQoaW50IGNvdW50LCBpbnQgYXJyYXlfb2ZfYmxvY2tsZW5ndGhzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgYXJyYXlfb2ZfZGlzcGxhY2VtZW50c1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvbGR0eXBlLCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2h2ZWN0b3IoaW50IGNvdW50LCBpbnQgYmxvY2tsZW5ndGgsIE1QSV9BaW50IHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvbGR0eXBlLCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX2luZGV4ZWQoaW50IGNvdW50LCBpbnQgYXJyYXlfb2ZfYmxvY2tsZW5ndGhzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJyYXlfb2ZfZGlzcGxhY2VtZW50c1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIG9sZHR5cGUsIE1QSV9EYXRhdHlwZSAqbmV3dHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfbGIoTVBJX0RhdGF0eXBlIHR5cGUsIE1QSV9BaW50ICpsYik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfbWF0Y2hfc2l6ZShpbnQgdHlwZWNsYXNzLCBpbnQgc2l6ZSwgTVBJX0RhdGF0eXBlICp0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9zZXRfYXR0cihNUElfRGF0YXR5cGUgdHlwZSwgaW50IHR5cGVfa2V5dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmF0dHJfdmFsKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9zZXRfbmFtZShNUElfRGF0YXR5cGUgdHlwZSwgY2hhciAqdHlwZV9uYW1lKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV9zaXplKE1QSV9EYXRhdHlwZSB0eXBlLCBpbnQgKnNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9UeXBlX3N0cnVjdChpbnQgY291bnQsIGludCBhcnJheV9vZl9ibG9ja2xlbmd0aHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgYXJyYXlfb2ZfZGlzcGxhY2VtZW50c1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgYXJyYXlfb2ZfdHlwZXNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVHlwZV91YihNUElfRGF0YXR5cGUgbXR5cGUsIE1QSV9BaW50ICp1Yik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1R5cGVfdmVjdG9yKGludCBjb3VudCwgaW50IGJsb2NrbGVuZ3RoLCBpbnQgc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgb2xkdHlwZSwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfVW5wYWNrKHZvaWQgKmluYnVmLCBpbnQgaW5zaXplLCBpbnQgKnBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0YnVmLCBpbnQgb3V0Y291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9VbnB1Ymxpc2hfbmFtZShjaGFyICpzZXJ2aWNlX25hbWUsIE1QSV9JbmZvIGluZm8sIGNoYXIgKnBvcnRfbmFtZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1VucGFja19leHRlcm5hbCAoY2hhciAqZGF0YXJlcCwgdm9pZCAqaW5idWYsIE1QSV9BaW50IGluc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQWludCAqcG9zaXRpb24sIHZvaWQgKm91dGJ1ZiwgaW50IG91dGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dhaXRhbGwoaW50IGNvdW50LCBNUElfUmVxdWVzdCAqYXJyYXlfb2ZfcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1N0YXR1cyAqYXJyYXlfb2Zfc3RhdHVzZXMpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9XYWl0YW55KGludCBjb3VudCwgTVBJX1JlcXVlc3QgKmFycmF5X29mX3JlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaW5kZXgsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dhaXQoTVBJX1JlcXVlc3QgKnJlcXVlc3QsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dhaXRzb21lKGludCBpbmNvdW50LCBNUElfUmVxdWVzdCAqYXJyYXlfb2ZfcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqb3V0Y291bnQsIGludCAqYXJyYXlfb2ZfaW5kaWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1N0YXR1cyAqYXJyYXlfb2Zfc3RhdHVzZXMpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgTVBJX1dpbl9jMmYoTVBJX1dpbiB3aW4pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9XaW5fY2FsbF9lcnJoYW5kbGVyKE1QSV9XaW4gd2luLCBpbnQgZXJyb3Jjb2RlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX2NvbXBsZXRlKE1QSV9XaW4gd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX2NyZWF0ZSh2b2lkICpiYXNlLCBNUElfQWludCBzaXplLCBpbnQgZGlzcF91bml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9JbmZvIGluZm8sIE1QSV9Db21tIGNvbW0sIE1QSV9XaW4gKndpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9jcmVhdGVfZXJyaGFuZGxlcihNUElfV2luX2VycmhhbmRsZXJfZm4gKmZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0VycmhhbmRsZXIgKmVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9XaW5fY3JlYXRlX2tleXZhbChNUElfV2luX2NvcHlfYXR0cl9mdW5jdGlvbiAqd2luX2NvcHlfYXR0cl9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1dpbl9kZWxldGVfYXR0cl9mdW5jdGlvbiAqd2luX2RlbGV0ZV9hdHRyX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndpbl9rZXl2YWwsIHZvaWQgKmV4dHJhX3N0YXRlKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX2RlbGV0ZV9hdHRyKE1QSV9XaW4gd2luLCBpbnQgd2luX2tleXZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfV2luIE1QSV9XaW5fZjJjKE1QSV9GaW50IHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9mZW5jZShpbnQgYXNzZXJ0LCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9mcmVlKE1QSV9XaW4gKndpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9mcmVlX2tleXZhbChpbnQgKndpbl9rZXl2YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9XaW5fZ2V0X2F0dHIoTVBJX1dpbiB3aW4sIGludCB3aW5fa2V5dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXR0cmlidXRlX3ZhbCwgaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX2dldF9lcnJoYW5kbGVyKE1QSV9XaW4gd2luLCBNUElfRXJyaGFuZGxlciAqZXJyaGFuZGxlcik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9nZXRfZ3JvdXAoTVBJX1dpbiB3aW4sIE1QSV9Hcm91cCAqZ3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9XaW5fZ2V0X25hbWUoTVBJX1dpbiB3aW4sIGNoYXIgKndpbl9uYW1lLCBpbnQgKnJlc3VsdGxlbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9sb2NrKGludCBsb2NrX3R5cGUsIGludCByYW5rLCBpbnQgYXNzZXJ0LCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9wb3N0KE1QSV9Hcm91cCBncm91cCwgaW50IGFzc2VydCwgTVBJX1dpbiB3aW4pOwotT01QSV9ERUNMU1BFQyAgaW50IE1QSV9XaW5fc2V0X2F0dHIoTVBJX1dpbiB3aW4sIGludCB3aW5fa2V5dmFsLCB2b2lkICphdHRyaWJ1dGVfdmFsKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX3NldF9lcnJoYW5kbGVyKE1QSV9XaW4gd2luLCBNUElfRXJyaGFuZGxlciBlcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX3NldF9uYW1lKE1QSV9XaW4gd2luLCBjaGFyICp3aW5fbmFtZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl9zdGFydChNUElfR3JvdXAgZ3JvdXAsIGludCBhc3NlcnQsIE1QSV9XaW4gd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX3Rlc3QoTVBJX1dpbiB3aW4sIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgTVBJX1dpbl91bmxvY2soaW50IHJhbmssIE1QSV9XaW4gd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBNUElfV2luX3dhaXQoTVBJX1dpbiB3aW4pOwotT01QSV9ERUNMU1BFQyAgZG91YmxlIE1QSV9XdGljayh2b2lkKTsKLU9NUElfREVDTFNQRUMgIGRvdWJsZSBNUElfV3RpbWUodm9pZCk7Ci0KLQotICAvKgotICAgKiBQcm9maWxpbmcgTVBJIEFQSQotICAgKi8KLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0Fib3J0KE1QSV9Db21tIGNvbW0sIGludCBlcnJvcmNvZGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQWNjdW11bGF0ZSh2b2lkICpvcmlnaW5fYWRkciwgaW50IG9yaWdpbl9jb3VudCwgTVBJX0RhdGF0eXBlIG9yaWdpbl9kYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldF9yYW5rLCBNUElfQWludCB0YXJnZXRfZGlzcCwgaW50IHRhcmdldF9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHRhcmdldF9kYXRhdHlwZSwgTVBJX09wIG9wLCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9BZGRfZXJyb3JfY2xhc3MoaW50ICplcnJvcmNsYXNzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0FkZF9lcnJvcl9jb2RlKGludCBlcnJvcmNsYXNzLCBpbnQgKmVycm9yY29kZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9BZGRfZXJyb3Jfc3RyaW5nKGludCBlcnJvcmNvZGUsIGNoYXIgKnN0cmluZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9BZGRyZXNzKHZvaWQgKmxvY2F0aW9uLCBNUElfQWludCAqYWRkcmVzcyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9BbGxnYXRoZXIodm9pZCAqc2VuZGJ1ZiwgaW50IHNlbmRjb3VudCwgTVBJX0RhdGF0eXBlIHNlbmR0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY3ZidWYsIGludCByZWN2Y291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIHJlY3Z0eXBlLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0FsbGdhdGhlcnYodm9pZCAqc2VuZGJ1ZiwgaW50IHNlbmRjb3VudCwgTVBJX0RhdGF0eXBlIHNlbmR0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWN2YnVmLCBpbnQgKnJlY3Zjb3VudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZGlzcGxzLCBNUElfRGF0YXR5cGUgcmVjdnR5cGUsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQWxsb2NfbWVtKE1QSV9BaW50IHNpemUsIE1QSV9JbmZvIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYmFzZXB0cik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9BbGxyZWR1Y2Uodm9pZCAqc2VuZGJ1Ziwgdm9pZCAqcmVjdmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX09wIG9wLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0FsbHRvYWxsKHZvaWQgKnNlbmRidWYsIGludCBzZW5kY291bnQsIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY3ZidWYsIGludCByZWN2Y291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgcmVjdnR5cGUsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQWxsdG9hbGx2KHZvaWQgKnNlbmRidWYsIGludCAqc2VuZGNvdW50cywgaW50ICpzZGlzcGxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwgdm9pZCAqcmVjdmJ1ZiwgaW50ICpyZWN2Y291bnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmRpc3BscywgTVBJX0RhdGF0eXBlIHJlY3Z0eXBlLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0FsbHRvYWxsdyh2b2lkICpzZW5kYnVmLCBpbnQgKnNlbmRjb3VudHMsIGludCAqc2Rpc3BscywgTVBJX0RhdGF0eXBlICpzZW5kdHlwZXMsCi0gICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY3ZidWYsIGludCAqcmVjdmNvdW50cywgaW50ICpyZGlzcGxzLCBNUElfRGF0YXR5cGUgKnJlY3Z0eXBlcywKLSAgICAgICAgICAgICAgICAgICAgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9BdHRyX2RlbGV0ZShNUElfQ29tbSBjb21tLCBpbnQga2V5dmFsKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0F0dHJfZ2V0KE1QSV9Db21tIGNvbW0sIGludCBrZXl2YWwsIHZvaWQgKmF0dHJpYnV0ZV92YWwsIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9BdHRyX3B1dChNUElfQ29tbSBjb21tLCBpbnQga2V5dmFsLCB2b2lkICphdHRyaWJ1dGVfdmFsKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0JhcnJpZXIoTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9CY2FzdCh2b2lkICpidWZmZXIsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvb3QsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQnNlbmQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0LCBpbnQgdGFnLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0JzZW5kX2luaXQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3QsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIE1QSV9SZXF1ZXN0ICpyZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0J1ZmZlcl9hdHRhY2godm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9CdWZmZXJfZGV0YWNoKHZvaWQgKmJ1ZmZlciwgaW50ICpzaXplKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NhbmNlbChNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9DYXJ0X2Nvb3JkcyhNUElfQ29tbSBjb21tLCBpbnQgcmFuaywgaW50IG1heGRpbXMsIGludCAqY29vcmRzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NhcnRfY3JlYXRlKE1QSV9Db21tIG9sZF9jb21tLCBpbnQgbmRpbXMsIGludCAqZGltcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGVyaW9kcywgaW50IHJlb3JkZXIsIE1QSV9Db21tICpjb21tX2NhcnQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ2FydF9nZXQoTVBJX0NvbW0gY29tbSwgaW50IG1heGRpbXMsIGludCAqZGltcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGVyaW9kcywgaW50ICpjb29yZHMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ2FydF9tYXAoTVBJX0NvbW0gY29tbSwgaW50IG5kaW1zLCBpbnQgKmRpbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBlcmlvZHMsIGludCAqbmV3cmFuayk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9DYXJ0X3JhbmsoTVBJX0NvbW0gY29tbSwgaW50ICpjb29yZHMsIGludCAqcmFuayk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9DYXJ0X3NoaWZ0KE1QSV9Db21tIGNvbW0sIGludCBkaXJlY3Rpb24sIGludCBkaXNwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJhbmtfc291cmNlLCBpbnQgKnJhbmtfZGVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9DYXJ0X3N1YihNUElfQ29tbSBjb21tLCBpbnQgKnJlbWFpbl9kaW1zLCBNUElfQ29tbSAqbmV3X2NvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ2FydGRpbV9nZXQoTVBJX0NvbW0gY29tbSwgaW50ICpuZGltcyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9DbG9zZV9wb3J0KGNoYXIgKnBvcnRfbmFtZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX2FjY2VwdChjaGFyICpwb3J0X25hbWUsIE1QSV9JbmZvIGluZm8sIGludCByb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0NvbW0gY29tbSwgTVBJX0NvbW0gKm5ld2NvbW0pOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgUE1QSV9Db21tX2MyZihNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NvbW1fY2FsbF9lcnJoYW5kbGVyKE1QSV9Db21tIGNvbW0sIGludCBlcnJvcmNvZGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9jb21wYXJlKE1QSV9Db21tIGNvbW0xLCBNUElfQ29tbSBjb21tMiwgaW50ICpyZXN1bHQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9jb25uZWN0KGNoYXIgKnBvcnRfbmFtZSwgTVBJX0luZm8gaW5mbywgaW50IHJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0NvbW0gY29tbSwgTVBJX0NvbW0gKm5ld2NvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9jcmVhdGVfZXJyaGFuZGxlcihNUElfQ29tbV9lcnJoYW5kbGVyX2ZuICpmdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0VycmhhbmRsZXIgKmVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9jcmVhdGVfa2V5dmFsKE1QSV9Db21tX2NvcHlfYXR0cl9mdW5jdGlvbiAqY29tbV9jb3B5X2F0dHJfZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0NvbW1fZGVsZXRlX2F0dHJfZnVuY3Rpb24gKmNvbW1fZGVsZXRlX2F0dHJfZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb21tX2tleXZhbCwgdm9pZCAqZXh0cmFfc3RhdGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9jcmVhdGUoTVBJX0NvbW0gY29tbSwgTVBJX0dyb3VwIGdyb3VwLCBNUElfQ29tbSAqbmV3Y29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX2RlbGV0ZV9hdHRyKE1QSV9Db21tIGNvbW0sIGludCBjb21tX2tleXZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX2Rpc2Nvbm5lY3QoTVBJX0NvbW0gKmNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9kdXAoTVBJX0NvbW0gY29tbSwgTVBJX0NvbW0gKm5ld2NvbW0pOwotT01QSV9ERUNMU1BFQyAgTVBJX0NvbW0gUE1QSV9Db21tX2YyYyhNUElfRmludCBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NvbW1fZnJlZV9rZXl2YWwoaW50ICpjb21tX2tleXZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX2ZyZWUoTVBJX0NvbW0gKmNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9nZXRfYXR0cihNUElfQ29tbSBjb21tLCBpbnQgY29tbV9rZXl2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmF0dHJpYnV0ZV92YWwsIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX2dldF9lcnJoYW5kbGVyKE1QSV9Db21tIGNvbW0sIE1QSV9FcnJoYW5kbGVyICplcmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9nZXRfbmFtZShNUElfQ29tbSBjb21tLCBjaGFyICpjb21tX25hbWUsIGludCAqcmVzdWx0bGVuKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NvbW1fZ2V0X3BhcmVudChNUElfQ29tbSAqcGFyZW50KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NvbW1fZ3JvdXAoTVBJX0NvbW0gY29tbSwgTVBJX0dyb3VwICpncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX2pvaW4oaW50IGZkLCBNUElfQ29tbSAqaW50ZXJjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NvbW1fcmFuayhNUElfQ29tbSBjb21tLCBpbnQgKnJhbmspOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9yZW1vdGVfZ3JvdXAoTVBJX0NvbW0gY29tbSwgTVBJX0dyb3VwICpncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX3JlbW90ZV9zaXplKE1QSV9Db21tIGNvbW0sIGludCAqc2l6ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX3NldF9hdHRyKE1QSV9Db21tIGNvbW0sIGludCBjb21tX2tleXZhbCwgdm9pZCAqYXR0cmlidXRlX3ZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX3NldF9lcnJoYW5kbGVyKE1QSV9Db21tIGNvbW0sIE1QSV9FcnJoYW5kbGVyIGVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9zZXRfbmFtZShNUElfQ29tbSBjb21tLCBjaGFyICpjb21tX25hbWUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfQ29tbV9zaXplKE1QSV9Db21tIGNvbW0sIGludCAqc2l6ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX3NwYXduKGNoYXIgKmNvbW1hbmQsIGNoYXIgKiphcmd2LCBpbnQgbWF4cHJvY3MsIE1QSV9JbmZvIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb290LCBNUElfQ29tbSBjb21tLCBNUElfQ29tbSAqaW50ZXJjb21tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFycmF5X29mX2VycmNvZGVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NvbW1fc3Bhd25fbXVsdGlwbGUoaW50IGNvdW50LCBjaGFyICoqYXJyYXlfb2ZfY29tbWFuZHMsIGNoYXIgKioqYXJyYXlfb2ZfYXJndiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphcnJheV9vZl9tYXhwcm9jcywgTVBJX0luZm8gKmFycmF5X29mX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb290LCBNUElfQ29tbSBjb21tLCBNUElfQ29tbSAqaW50ZXJjb21tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFycmF5X29mX2VycmNvZGVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0NvbW1fc3BsaXQoTVBJX0NvbW0gY29tbSwgaW50IGNvbG9yLCBpbnQga2V5LCBNUElfQ29tbSAqbmV3Y29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Db21tX3Rlc3RfaW50ZXIoTVBJX0NvbW0gY29tbSwgaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0RpbXNfY3JlYXRlKGludCBubm9kZXMsIGludCBuZGltcywgaW50ICpkaW1zKTsKLU9NUElfREVDTFNQRUMgIE1QSV9GaW50IFBNUElfRXJyaGFuZGxlcl9jMmYoTVBJX0VycmhhbmRsZXIgZXJyaGFuZGxlcik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9mdW5jdGlvbiAqZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRXJyaGFuZGxlciAqZXJyaGFuZGxlcik7Ci1PTVBJX0RFQ0xTUEVDICBNUElfRXJyaGFuZGxlciBQTVBJX0VycmhhbmRsZXJfZjJjKE1QSV9GaW50IGVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRXJyaGFuZGxlcl9mcmVlKE1QSV9FcnJoYW5kbGVyICplcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0VycmhhbmRsZXJfZ2V0KE1QSV9Db21tIGNvbW0sIE1QSV9FcnJoYW5kbGVyICplcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0VycmhhbmRsZXJfc2V0KE1QSV9Db21tIGNvbW0sIE1QSV9FcnJoYW5kbGVyIGVycmhhbmRsZXIpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRXJyb3JfY2xhc3MoaW50IGVycm9yY29kZSwgaW50ICplcnJvcmNsYXNzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0Vycm9yX3N0cmluZyhpbnQgZXJyb3Jjb2RlLCBjaGFyICpzdHJpbmcsIGludCAqcmVzdWx0bGVuKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0V4c2Nhbih2b2lkICpzZW5kYnVmLCB2b2lkICpyZWN2YnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfT3Agb3AsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgUE1QSV9GaWxlX2MyZihNUElfRmlsZSBmaWxlKTsKLU9NUElfREVDTFNQRUMgIE1QSV9GaWxlIFBNUElfRmlsZV9mMmMoTVBJX0ZpbnQgZmlsZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2NhbGxfZXJyaGFuZGxlcihNUElfRmlsZSBmaCwgaW50IGVycm9yY29kZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2NyZWF0ZV9lcnJoYW5kbGVyKE1QSV9GaWxlX2VycmhhbmRsZXJfZm4gKmZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRXJyaGFuZGxlciAqZXJyaGFuZGxlcik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3NldF9lcnJoYW5kbGVyKCBNUElfRmlsZSBmaWxlLCBNUElfRXJyaGFuZGxlciBlcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfZ2V0X2VycmhhbmRsZXIoIE1QSV9GaWxlIGZpbGUsIE1QSV9FcnJoYW5kbGVyICplcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfb3BlbihNUElfQ29tbSBjb21tLCBjaGFyICpmaWxlbmFtZSwgaW50IGFtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9JbmZvIGluZm8sIE1QSV9GaWxlICpmaCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2Nsb3NlKE1QSV9GaWxlICpmaCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2RlbGV0ZShjaGFyICpmaWxlbmFtZSwgTVBJX0luZm8gaW5mbyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3NldF9zaXplKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IHNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9wcmVhbGxvY2F0ZShNUElfRmlsZSBmaCwgTVBJX09mZnNldCBzaXplKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfZ2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKnNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9nZXRfZ3JvdXAoTVBJX0ZpbGUgZmgsIE1QSV9Hcm91cCAqZ3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9nZXRfYW1vZGUoTVBJX0ZpbGUgZmgsIGludCAqYW1vZGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9zZXRfaW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gaW5mbyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2dldF9pbmZvKE1QSV9GaWxlIGZoLCBNUElfSW5mbyAqaW5mb191c2VkKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfc2V0X3ZpZXcoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgZGlzcCwgTVBJX0RhdGF0eXBlIGV0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXAsIE1QSV9JbmZvIGluZm8pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9nZXRfdmlldyhNUElfRmlsZSBmaCwgTVBJX09mZnNldCAqZGlzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlICpldHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlICpmaWxldHlwZSwgY2hhciAqZGF0YXJlcCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3JlYWRfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3JlYWRfYXRfYWxsKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfd3JpdGVfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfaXJlYWRfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2l3cml0ZV9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3JlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfcmVhZF9hbGwoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3dyaXRlKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV93cml0ZV9hbGwoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9pcmVhZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9pd3JpdGUoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3NlZWsoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfZ2V0X3Bvc2l0aW9uKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0ICpvZmZzZXQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9nZXRfYnl0ZV9vZmZzZXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX09mZnNldCAqZGlzcCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3JlYWRfc2hhcmVkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV93cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9pcmVhZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2l3cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9yZWFkX29yZGVyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV93cml0ZV9vcmRlcmVkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3NlZWtfc2hhcmVkKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgaW50IHdoZW5jZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX2dldF9wb3NpdGlvbl9zaGFyZWQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3JlYWRfYXRfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3JlYWRfYXRfYWxsX2VuZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV93cml0ZV9hdF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3dyaXRlX2F0X2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfcmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9yZWFkX2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfd3JpdGVfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3dyaXRlX2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfcmVhZF9vcmRlcmVkX2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GaWxlX3JlYWRfb3JkZXJlZF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfZ2V0X3R5cGVfZXh0ZW50KE1QSV9GaWxlIGZoLCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQWludCAqZXh0ZW50KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbGVfc2V0X2F0b21pY2l0eShNUElfRmlsZSBmaCwgaW50IGZsYWcpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9nZXRfYXRvbWljaXR5KE1QSV9GaWxlIGZoLCBpbnQgKmZsYWcpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmlsZV9zeW5jKE1QSV9GaWxlIGZoKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ZpbmFsaXplKHZvaWQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfRmluYWxpemVkKGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9GcmVlX21lbSh2b2lkICpiYXNlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dhdGhlcih2b2lkICpzZW5kYnVmLCBpbnQgc2VuZGNvdW50LCBNUElfRGF0YXR5cGUgc2VuZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjdmJ1ZiwgaW50IHJlY3Zjb3VudCwgTVBJX0RhdGF0eXBlIHJlY3Z0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb290LCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dhdGhlcnYodm9pZCAqc2VuZGJ1ZiwgaW50IHNlbmRjb3VudCwgTVBJX0RhdGF0eXBlIHNlbmR0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyZWN2YnVmLCBpbnQgKnJlY3Zjb3VudHMsIGludCAqZGlzcGxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgcmVjdnR5cGUsIGludCByb290LCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dldF9hZGRyZXNzKHZvaWQgKmxvY2F0aW9uLCBNUElfQWludCAqYWRkcmVzcyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9HZXRfY291bnQoTVBJX1N0YXR1cyAqc3RhdHVzLCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIGludCAqY291bnQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR2V0X2VsZW1lbnRzKE1QSV9TdGF0dXMgKnN0YXR1cywgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR2V0KHZvaWQgKm9yaWdpbl9hZGRyLCBpbnQgb3JpZ2luX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvcmlnaW5fZGF0YXR5cGUsIGludCB0YXJnZXRfcmFuaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQWludCB0YXJnZXRfZGlzcCwgaW50IHRhcmdldF9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgdGFyZ2V0X2RhdGF0eXBlLCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9HZXRfcHJvY2Vzc29yX25hbWUoY2hhciAqbmFtZSwgaW50ICpyZXN1bHRsZW4pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR2V0X3ZlcnNpb24oaW50ICp2ZXJzaW9uLCBpbnQgKnN1YnZlcnNpb24pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR3JhcGhfY3JlYXRlKE1QSV9Db21tIGNvbW1fb2xkLCBpbnQgbm5vZGVzLCBpbnQgKmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZWRnZXMsIGludCByZW9yZGVyLCBNUElfQ29tbSAqY29tbV9ncmFwaCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9HcmFwaF9nZXQoTVBJX0NvbW0gY29tbSwgaW50IG1heGluZGV4LCBpbnQgbWF4ZWRnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppbmRleCwgaW50ICplZGdlcyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9HcmFwaF9tYXAoTVBJX0NvbW0gY29tbSwgaW50IG5ub2RlcywgaW50ICppbmRleCwgaW50ICplZGdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5ld3JhbmspOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR3JhcGhfbmVpZ2hib3JzX2NvdW50KE1QSV9Db21tIGNvbW0sIGludCByYW5rLCBpbnQgKm5uZWlnaGJvcnMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR3JhcGhfbmVpZ2hib3JzKE1QSV9Db21tIGNvbW0sIGludCByYW5rLCBpbnQgbWF4bmVpZ2hib3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmVpZ2hib3JzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dyYXBoZGltc19nZXQoTVBJX0NvbW0gY29tbSwgaW50ICpubm9kZXMsIGludCAqbmVkZ2VzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dyZXF1ZXN0X2NvbXBsZXRlKE1QSV9SZXF1ZXN0IHJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR3JlcXVlc3Rfc3RhcnQoTVBJX0dyZXF1ZXN0X3F1ZXJ5X2Z1bmN0aW9uICpxdWVyeV9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9HcmVxdWVzdF9mcmVlX2Z1bmN0aW9uICpmcmVlX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyZXF1ZXN0X2NhbmNlbF9mdW5jdGlvbiAqY2FuY2VsX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZXh0cmFfc3RhdGUsIE1QSV9SZXF1ZXN0ICpyZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIE1QSV9GaW50IFBNUElfR3JvdXBfYzJmKE1QSV9Hcm91cCBncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Hcm91cF9jb21wYXJlKE1QSV9Hcm91cCBncm91cDEsIE1QSV9Hcm91cCBncm91cDIsIGludCAqcmVzdWx0KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dyb3VwX2RpZmZlcmVuY2UoTVBJX0dyb3VwIGdyb3VwMSwgTVBJX0dyb3VwIGdyb3VwMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyb3VwICpuZXdncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Hcm91cF9leGNsKE1QSV9Hcm91cCBncm91cCwgaW50IG4sIGludCAqcmFua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Hcm91cCAqbmV3Z3JvdXApOwotT01QSV9ERUNMU1BFQyAgTVBJX0dyb3VwIFBNUElfR3JvdXBfZjJjKE1QSV9GaW50IGdyb3VwKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dyb3VwX2ZyZWUoTVBJX0dyb3VwICpncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Hcm91cF9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50IG4sIGludCAqcmFua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Hcm91cCAqbmV3Z3JvdXApOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR3JvdXBfaW50ZXJzZWN0aW9uKE1QSV9Hcm91cCBncm91cDEsIE1QSV9Hcm91cCBncm91cDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyb3VwICpuZXdncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Hcm91cF9yYW5nZV9leGNsKE1QSV9Hcm91cCBncm91cCwgaW50IG4sIGludCByYW5nZXNbXVszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyb3VwICpuZXdncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Hcm91cF9yYW5nZV9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50IG4sIGludCByYW5nZXNbXVszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyb3VwICpuZXdncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Hcm91cF9yYW5rKE1QSV9Hcm91cCBncm91cCwgaW50ICpyYW5rKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0dyb3VwX3NpemUoTVBJX0dyb3VwIGdyb3VwLCBpbnQgKnNpemUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfR3JvdXBfdHJhbnNsYXRlX3JhbmtzKE1QSV9Hcm91cCBncm91cDEsIGludCBuLCBpbnQgKnJhbmtzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfR3JvdXAgZ3JvdXAyLCBpbnQgKnJhbmtzMik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Hcm91cF91bmlvbihNUElfR3JvdXAgZ3JvdXAxLCBNUElfR3JvdXAgZ3JvdXAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0dyb3VwICpuZXdncm91cCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9JYnNlbmQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSwgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgUE1QSV9JbmZvX2MyZihNUElfSW5mbyBpbmZvKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0luZm9fY3JlYXRlKE1QSV9JbmZvICppbmZvKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0luZm9fZGVsZXRlKE1QSV9JbmZvIGluZm8sIGNoYXIgKmtleSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9JbmZvX2R1cChNUElfSW5mbyBpbmZvLCBNUElfSW5mbyAqbmV3aW5mbyk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfSW5mbyBQTVBJX0luZm9fZjJjKE1QSV9GaW50IGluZm8pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfSW5mb19mcmVlKE1QSV9JbmZvICppbmZvKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0luZm9fZ2V0KE1QSV9JbmZvIGluZm8sIGNoYXIgKmtleSwgaW50IHZhbHVlbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsdWUsIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9JbmZvX2dldF9ua2V5cyhNUElfSW5mbyBpbmZvLCBpbnQgKm5rZXlzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0luZm9fZ2V0X250aGtleShNUElfSW5mbyBpbmZvLCBpbnQgbiwgY2hhciAqa2V5KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0luZm9fZ2V0X3ZhbHVlbGVuKE1QSV9JbmZvIGluZm8sIGNoYXIgKmtleSwgaW50ICp2YWx1ZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9JbmZvX3NldChNUElfSW5mbyBpbmZvLCBjaGFyICprZXksIGNoYXIgKnZhbHVlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0luaXQoaW50ICphcmdjLCBjaGFyICoqKmFyZ3YpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfSW5pdGlhbGl6ZWQoaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0luaXRfdGhyZWFkKGludCAqYXJnYywgY2hhciAqKiphcmd2LCBpbnQgcmVxdWlyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnByb3ZpZGVkKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ludGVyY29tbV9jcmVhdGUoTVBJX0NvbW0gbG9jYWxfY29tbSwgaW50IGxvY2FsX2xlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0NvbW0gYnJpZGdlX2NvbW0sIGludCByZW1vdGVfbGVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSAqbmV3aW50ZXJjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0ludGVyY29tbV9tZXJnZShNUElfQ29tbSBpbnRlcmNvbW0sIGludCBoaWdoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9Db21tICpuZXdpbnRlcmNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfSXByb2JlKGludCBzb3VyY2UsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIGludCAqZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfSXJlY3Yodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIE1QSV9SZXF1ZXN0ICpyZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0lyc2VuZCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBpbnQgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSBjb21tLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Jc2VuZCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBpbnQgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIE1QSV9SZXF1ZXN0ICpyZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX0lzc2VuZCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBpbnQgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSBjb21tLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Jc190aHJlYWRfbWFpbihpbnQgKmZsYWcpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfS2V5dmFsX2NyZWF0ZShNUElfQ29weV9mdW5jdGlvbiAqY29weV9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RlbGV0ZV9mdW5jdGlvbiAqZGVsZXRlX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmtleXZhbCwgdm9pZCAqZXh0cmFfc3RhdGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfS2V5dmFsX2ZyZWUoaW50ICprZXl2YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfTG9va3VwX25hbWUoY2hhciAqc2VydmljZV9uYW1lLCBNUElfSW5mbyBpbmZvLCBjaGFyICpwb3J0X25hbWUpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgUE1QSV9PcF9jMmYoTVBJX09wIG9wKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX09wX2NyZWF0ZShNUElfVXNlcl9mdW5jdGlvbiAqZnVuY3Rpb24sIGludCBjb21tdXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9PcCAqb3ApOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfT3Blbl9wb3J0KE1QSV9JbmZvIGluZm8sIGNoYXIgKnBvcnRfbmFtZSk7Ci1PTVBJX0RFQ0xTUEVDICBNUElfT3AgUE1QSV9PcF9mMmMoTVBJX0ZpbnQgb3ApOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfT3BfZnJlZShNUElfT3AgKm9wKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1BhY2tfZXh0ZXJuYWwoY2hhciAqZGF0YXJlcCwgdm9pZCAqaW5idWYsIGludCBpbmNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIHZvaWQgKm91dGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgb3V0c2l6ZSwgTVBJX0FpbnQgKnBvc2l0aW9uKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1BhY2tfZXh0ZXJuYWxfc2l6ZShjaGFyICpkYXRhcmVwLCBpbnQgaW5jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9BaW50ICpzaXplKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1BhY2sodm9pZCAqaW5idWYsIGludCBpbmNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1ZiwgaW50IG91dHNpemUsIGludCAqcG9zaXRpb24sIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfUGFja19zaXplKGludCBpbmNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9Db21tIGNvbW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzaXplKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1Bjb250cm9sKGNvbnN0IGludCBsZXZlbCwgLi4uKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1Byb2JlKGludCBzb3VyY2UsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9QdWJsaXNoX25hbWUoY2hhciAqc2VydmljZV9uYW1lLCBNUElfSW5mbyBpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBvcnRfbmFtZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9QdXQodm9pZCAqb3JpZ2luX2FkZHIsIGludCBvcmlnaW5fY291bnQsIE1QSV9EYXRhdHlwZSBvcmlnaW5fZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldF9yYW5rLCBNUElfQWludCB0YXJnZXRfZGlzcCwgaW50IHRhcmdldF9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgdGFyZ2V0X2RhdGF0eXBlLCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9RdWVyeV90aHJlYWQoaW50ICpwcm92aWRlZCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9SZWN2X2luaXQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSBjb21tLCBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9SZWN2KHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWcsIE1QSV9Db21tIGNvbW0sIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9SZWR1Y2Uodm9pZCAqc2VuZGJ1Ziwgdm9pZCAqcmVjdmJ1ZiwgaW50IGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX09wIG9wLCBpbnQgcm9vdCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9SZWR1Y2Vfc2NhdHRlcih2b2lkICpzZW5kYnVmLCB2b2lkICpyZWN2YnVmLCBpbnQgKnJlY3Zjb3VudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9PcCBvcCwgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9SZWdpc3Rlcl9kYXRhcmVwKGNoYXIgKmRhdGFyZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhcmVwX2NvbnZlcnNpb25fZnVuY3Rpb24gKnJlYWRfY29udmVyc2lvbl9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGFyZXBfY29udmVyc2lvbl9mdW5jdGlvbiAqd3JpdGVfY29udmVyc2lvbl9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGFyZXBfZXh0ZW50X2Z1bmN0aW9uICpkdHlwZV9maWxlX2V4dGVudF9mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZXh0cmFfc3RhdGUpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgUE1QSV9SZXF1ZXN0X2MyZihNUElfUmVxdWVzdCByZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIE1QSV9SZXF1ZXN0IFBNUElfUmVxdWVzdF9mMmMoTVBJX0ZpbnQgcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9SZXF1ZXN0X2ZyZWUoTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfUmVxdWVzdF9nZXRfc3RhdHVzKE1QSV9SZXF1ZXN0IHJlcXVlc3QsIGludCAqZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfUnNlbmQodm9pZCAqaWJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIGludCBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9Sc2VuZF9pbml0KHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0LCBpbnQgdGFnLCBNUElfQ29tbSBjb21tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfUmVxdWVzdCAqcmVxdWVzdCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9TY2FuKHZvaWQgKnNlbmRidWYsIHZvaWQgKnJlY3ZidWYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfT3Agb3AsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfU2NhdHRlcih2b2lkICpzZW5kYnVmLCBpbnQgc2VuZGNvdW50LCBNUElfRGF0YXR5cGUgc2VuZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnJlY3ZidWYsIGludCByZWN2Y291bnQsIE1QSV9EYXRhdHlwZSByZWN2dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvb3QsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfU2NhdHRlcnYodm9pZCAqc2VuZGJ1ZiwgaW50ICpzZW5kY291bnRzLCBpbnQgKmRpc3BscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBzZW5kdHlwZSwgdm9pZCAqcmVjdmJ1ZiwgaW50IHJlY3Zjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSByZWN2dHlwZSwgaW50IHJvb3QsIE1QSV9Db21tIGNvbW0pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfU2VuZF9pbml0KHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3QsIGludCB0YWcsIE1QSV9Db21tIGNvbW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfU2VuZCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBpbnQgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhZywgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9TZW5kcmVjdih2b2lkICpzZW5kYnVmLCBpbnQgc2VuZGNvdW50LCBNUElfRGF0YXR5cGUgc2VuZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdCwgaW50IHNlbmR0YWcsIHZvaWQgKnJlY3ZidWYsIGludCByZWN2Y291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgcmVjdnR5cGUsIGludCBzb3VyY2UsIGludCByZWN2dGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0NvbW0gY29tbSwgIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9TZW5kcmVjdl9yZXBsYWNlKHZvaWQgKiBidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdCwgaW50IHNlbmR0YWcsIGludCBzb3VyY2UsIGludCByZWN2dGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQ29tbSBjb21tLCBNUElfU3RhdHVzICpzdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfU3NlbmRfaW5pdCh2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdCwgaW50IHRhZywgTVBJX0NvbW0gY29tbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1JlcXVlc3QgKnJlcXVlc3QpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfU3NlbmQodm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFnLCBNUElfQ29tbSBjb21tKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1N0YXJ0KE1QSV9SZXF1ZXN0ICpyZXF1ZXN0KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1N0YXJ0YWxsKGludCBjb3VudCwgTVBJX1JlcXVlc3QgKmFycmF5X29mX3JlcXVlc3RzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1N0YXR1c19jMmYoTVBJX1N0YXR1cyAqY19zdGF0dXMsIE1QSV9GaW50ICpmX3N0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9TdGF0dXNfZjJjKE1QSV9GaW50ICpmX3N0YXR1cywgTVBJX1N0YXR1cyAqY19zdGF0dXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfU3RhdHVzX3NldF9jYW5jZWxsZWQoTVBJX1N0YXR1cyAqc3RhdHVzLCBpbnQgZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9TdGF0dXNfc2V0X2VsZW1lbnRzKE1QSV9TdGF0dXMgKnN0YXR1cywgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVGVzdGFsbChpbnQgY291bnQsIE1QSV9SZXF1ZXN0IGFycmF5X29mX3JlcXVlc3RzW10sIGludCAqZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1N0YXR1cyBhcnJheV9vZl9zdGF0dXNlc1tdKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1Rlc3RhbnkoaW50IGNvdW50LCBNUElfUmVxdWVzdCBhcnJheV9vZl9yZXF1ZXN0c1tdLCBpbnQgKmluZGV4LCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UZXN0KE1QSV9SZXF1ZXN0ICpyZXF1ZXN0LCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UZXN0X2NhbmNlbGxlZChNUElfU3RhdHVzICpzdGF0dXMsIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UZXN0c29tZShpbnQgaW5jb3VudCwgTVBJX1JlcXVlc3QgYXJyYXlfb2ZfcmVxdWVzdHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqb3V0Y291bnQsIGludCBhcnJheV9vZl9pbmRpY2VzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfU3RhdHVzIGFycmF5X29mX3N0YXR1c2VzW10pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVG9wb190ZXN0KE1QSV9Db21tIGNvbW0sIGludCAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIE1QSV9GaW50IFBNUElfVHlwZV9jMmYoTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfY29tbWl0KE1QSV9EYXRhdHlwZSAqdHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UeXBlX2NvbnRpZ3VvdXMoaW50IGNvdW50LCBNUElfRGF0YXR5cGUgb2xkdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9jcmVhdGVfZGFycmF5KGludCBzaXplLCBpbnQgcmFuaywgaW50IG5kaW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnc2l6ZV9hcnJheVtdLCBpbnQgZGlzdHJpYl9hcnJheVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkYXJnX2FycmF5W10sIGludCBwc2l6ZV9hcnJheVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcmRlciwgTVBJX0RhdGF0eXBlIG9sZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfY3JlYXRlX2Y5MF9jb21wbGV4KGludCBwLCBpbnQgciwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfY3JlYXRlX2Y5MF9pbnRlZ2VyKGludCByLCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9jcmVhdGVfZjkwX3JlYWwoaW50IHAsIGludCByLCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9jcmVhdGVfaGluZGV4ZWQoaW50IGNvdW50LCBpbnQgYXJyYXlfb2ZfYmxvY2tsZW5ndGhzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQWludCBhcnJheV9vZl9kaXNwbGFjZW1lbnRzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgb2xkdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSAqbmV3dHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UeXBlX2NyZWF0ZV9odmVjdG9yKGludCBjb3VudCwgaW50IGJsb2NrbGVuZ3RoLCBNUElfQWludCBzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvbGR0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9jcmVhdGVfa2V5dmFsKE1QSV9UeXBlX2NvcHlfYXR0cl9mdW5jdGlvbiAqdHlwZV9jb3B5X2F0dHJfZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1R5cGVfZGVsZXRlX2F0dHJfZnVuY3Rpb24gKnR5cGVfZGVsZXRlX2F0dHJfZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0eXBlX2tleXZhbCwgdm9pZCAqZXh0cmFfc3RhdGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9jcmVhdGVfaW5kZXhlZF9ibG9jayhpbnQgY291bnQsIGludCBibG9ja2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFycmF5X29mX2Rpc3BsYWNlbWVudHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIG9sZHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSAqbmV3dHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UeXBlX2NyZWF0ZV9zdHJ1Y3QoaW50IGNvdW50LCBpbnQgYXJyYXlfb2ZfYmxvY2tfbGVuZ3Roc1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50IGFycmF5X29mX2Rpc3BsYWNlbWVudHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgYXJyYXlfb2ZfdHlwZXNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50IG5kaW1zLCBpbnQgc2l6ZV9hcnJheVtdLCBpbnQgc3Vic2l6ZV9hcnJheVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0X2FycmF5W10sIGludCBvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvbGR0eXBlLCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9jcmVhdGVfcmVzaXplZChNUElfRGF0YXR5cGUgb2xkdHlwZSwgTVBJX0FpbnQgbGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50IGV4dGVudCwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfZGVsZXRlX2F0dHIoTVBJX0RhdGF0eXBlIHR5cGUsIGludCB0eXBlX2tleXZhbCk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UeXBlX2R1cChNUElfRGF0YXR5cGUgdHlwZSwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfZXh0ZW50KE1QSV9EYXRhdHlwZSB0eXBlLCBNUElfQWludCAqZXh0ZW50KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfZnJlZShNUElfRGF0YXR5cGUgKnR5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9mcmVlX2tleXZhbChpbnQgKnR5cGVfa2V5dmFsKTsKLU9NUElfREVDTFNQRUMgIE1QSV9EYXRhdHlwZSBQTVBJX1R5cGVfZjJjKE1QSV9GaW50IGRhdGF0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfZ2V0X2F0dHIoTVBJX0RhdGF0eXBlIHR5cGUsIGludCB0eXBlX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXR0cmlidXRlX3ZhbCwgaW50ICpmbGFnKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfZ2V0X2NvbnRlbnRzKE1QSV9EYXRhdHlwZSBtdHlwZSwgaW50IG1heF9pbnRlZ2VycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfYWRkcmVzc2VzLCBpbnQgbWF4X2RhdGF0eXBlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcnJheV9vZl9pbnRlZ2Vyc1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgYXJyYXlfb2ZfYWRkcmVzc2VzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgYXJyYXlfb2ZfZGF0YXR5cGVzW10pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9nZXRfZW52ZWxvcGUoTVBJX0RhdGF0eXBlIHR5cGUsIGludCAqbnVtX2ludGVnZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpudW1fYWRkcmVzc2VzLCBpbnQgKm51bV9kYXRhdHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvbWJpbmVyKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfZ2V0X2V4dGVudChNUElfRGF0YXR5cGUgdHlwZSwgTVBJX0FpbnQgKmxiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9nZXRfbmFtZShNUElfRGF0YXR5cGUgdHlwZSwgY2hhciAqdHlwZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnJlc3VsdGxlbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UeXBlX2dldF90cnVlX2V4dGVudChNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9BaW50ICp0cnVlX2xiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgKnRydWVfZXh0ZW50KTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfaGluZGV4ZWQoaW50IGNvdW50LCBpbnQgYXJyYXlfb2ZfYmxvY2tsZW5ndGhzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50IGFycmF5X29mX2Rpc3BsYWNlbWVudHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIG9sZHR5cGUsIE1QSV9EYXRhdHlwZSAqbmV3dHlwZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UeXBlX2h2ZWN0b3IoaW50IGNvdW50LCBpbnQgYmxvY2tsZW5ndGgsIE1QSV9BaW50IHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgb2xkdHlwZSwgTVBJX0RhdGF0eXBlICpuZXd0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfaW5kZXhlZChpbnQgY291bnQsIGludCBhcnJheV9vZl9ibG9ja2xlbmd0aHNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJyYXlfb2ZfZGlzcGxhY2VtZW50c1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvbGR0eXBlLCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9sYihNUElfRGF0YXR5cGUgdHlwZSwgTVBJX0FpbnQgKmxiKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfbWF0Y2hfc2l6ZShpbnQgdHlwZWNsYXNzLCBpbnQgc2l6ZSwgTVBJX0RhdGF0eXBlICp0eXBlKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfc2V0X2F0dHIoTVBJX0RhdGF0eXBlIHR5cGUsIGludCB0eXBlX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXR0cl92YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV9zZXRfbmFtZShNUElfRGF0YXR5cGUgdHlwZSwgY2hhciAqdHlwZV9uYW1lKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfc2l6ZShNUElfRGF0YXR5cGUgdHlwZSwgaW50ICpzaXplKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1R5cGVfc3RydWN0KGludCBjb3VudCwgaW50IGFycmF5X29mX2Jsb2NrbGVuZ3Roc1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0FpbnQgYXJyYXlfb2ZfZGlzcGxhY2VtZW50c1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGFycmF5X29mX3R5cGVzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVHlwZV91YihNUElfRGF0YXR5cGUgbXR5cGUsIE1QSV9BaW50ICp1Yik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9UeXBlX3ZlY3RvcihpbnQgY291bnQsIGludCBibG9ja2xlbmd0aCwgaW50IHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBvbGR0eXBlLCBNUElfRGF0YXR5cGUgKm5ld3R5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVW5wYWNrKHZvaWQgKmluYnVmLCBpbnQgaW5zaXplLCBpbnQgKnBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGJ1ZiwgaW50IG91dGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0NvbW0gY29tbSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9VbnB1Ymxpc2hfbmFtZShjaGFyICpzZXJ2aWNlX25hbWUsIE1QSV9JbmZvIGluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwb3J0X25hbWUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfVW5wYWNrX2V4dGVybmFsIChjaGFyICpkYXRhcmVwLCB2b2lkICppbmJ1ZiwgTVBJX0FpbnQgaW5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfQWludCAqcG9zaXRpb24sIHZvaWQgKm91dGJ1ZiwgaW50IG91dGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2FpdGFsbChpbnQgY291bnQsIE1QSV9SZXF1ZXN0ICphcnJheV9vZl9yZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1N0YXR1cyAqYXJyYXlfb2Zfc3RhdHVzZXMpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2FpdGFueShpbnQgY291bnQsIE1QSV9SZXF1ZXN0ICphcnJheV9vZl9yZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppbmRleCwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dhaXQoTVBJX1JlcXVlc3QgKnJlcXVlc3QsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9XYWl0c29tZShpbnQgaW5jb3VudCwgTVBJX1JlcXVlc3QgKmFycmF5X29mX3JlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpvdXRjb3VudCwgaW50ICphcnJheV9vZl9pbmRpY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1N0YXR1cyAqYXJyYXlfb2Zfc3RhdHVzZXMpOwotT01QSV9ERUNMU1BFQyAgTVBJX0ZpbnQgUE1QSV9XaW5fYzJmKE1QSV9XaW4gd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9jYWxsX2VycmhhbmRsZXIoTVBJX1dpbiB3aW4sIGludCBlcnJvcmNvZGUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2luX2NvbXBsZXRlKE1QSV9XaW4gd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9jcmVhdGUodm9pZCAqYmFzZSwgTVBJX0FpbnQgc2l6ZSwgaW50IGRpc3BfdW5pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0luZm8gaW5mbywgTVBJX0NvbW0gY29tbSwgTVBJX1dpbiAqd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9jcmVhdGVfZXJyaGFuZGxlcihNUElfV2luX2VycmhhbmRsZXJfZm4gKmZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9FcnJoYW5kbGVyICplcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9jcmVhdGVfa2V5dmFsKE1QSV9XaW5fY29weV9hdHRyX2Z1bmN0aW9uICp3aW5fY29weV9hdHRyX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX1dpbl9kZWxldGVfYXR0cl9mdW5jdGlvbiAqd2luX2RlbGV0ZV9hdHRyX2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp3aW5fa2V5dmFsLCB2b2lkICpleHRyYV9zdGF0ZSk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9XaW5fZGVsZXRlX2F0dHIoTVBJX1dpbiB3aW4sIGludCB3aW5fa2V5dmFsKTsKLU9NUElfREVDTFNQRUMgIE1QSV9XaW4gUE1QSV9XaW5fZjJjKE1QSV9GaW50IHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9XaW5fZmVuY2UoaW50IGFzc2VydCwgTVBJX1dpbiB3aW4pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2luX2ZyZWUoTVBJX1dpbiAqd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9mcmVlX2tleXZhbChpbnQgKndpbl9rZXl2YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2luX2dldF9hdHRyKE1QSV9XaW4gd2luLCBpbnQgd2luX2tleXZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphdHRyaWJ1dGVfdmFsLCBpbnQgKmZsYWcpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2luX2dldF9lcnJoYW5kbGVyKE1QSV9XaW4gd2luLCBNUElfRXJyaGFuZGxlciAqZXJyaGFuZGxlcik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9XaW5fZ2V0X2dyb3VwKE1QSV9XaW4gd2luLCBNUElfR3JvdXAgKmdyb3VwKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9nZXRfbmFtZShNUElfV2luIHdpbiwgY2hhciAqd2luX25hbWUsIGludCAqcmVzdWx0bGVuKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9sb2NrKGludCBsb2NrX3R5cGUsIGludCByYW5rLCBpbnQgYXNzZXJ0LCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9XaW5fcG9zdChNUElfR3JvdXAgZ3JvdXAsIGludCBhc3NlcnQsIE1QSV9XaW4gd2luKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9zZXRfYXR0cihNUElfV2luIHdpbiwgaW50IHdpbl9rZXl2YWwsIHZvaWQgKmF0dHJpYnV0ZV92YWwpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2luX3NldF9lcnJoYW5kbGVyKE1QSV9XaW4gd2luLCBNUElfRXJyaGFuZGxlciBlcnJoYW5kbGVyKTsKLU9NUElfREVDTFNQRUMgIGludCBQTVBJX1dpbl9zZXRfbmFtZShNUElfV2luIHdpbiwgY2hhciAqd2luX25hbWUpOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2luX3N0YXJ0KE1QSV9Hcm91cCBncm91cCwgaW50IGFzc2VydCwgTVBJX1dpbiB3aW4pOwotT01QSV9ERUNMU1BFQyAgaW50IFBNUElfV2luX3Rlc3QoTVBJX1dpbiB3aW4sIGludCAqZmxhZyk7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9XaW5fdW5sb2NrKGludCByYW5rLCBNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBpbnQgUE1QSV9XaW5fd2FpdChNUElfV2luIHdpbik7Ci1PTVBJX0RFQ0xTUEVDICBkb3VibGUgUE1QSV9XdGljayh2b2lkKTsKLU9NUElfREVDTFNQRUMgIGRvdWJsZSBQTVBJX1d0aW1lKHZvaWQpOwotCi0jaWYgZGVmaW5lZChjX3BsdXNwbHVzKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQotfQotI2VuZGlmCi0KLS8qCi0gKiBDb25kaXRpb25hbCBNUEkgMiBDKysgYmluZGluZ3Mgc3VwcG9ydC4gIEluY2x1ZGUgaWY6Ci0gKiAgIC0gVGhlIHVzZXIgZG9lcyBub3QgZXhwbGljaXRseSByZXF1ZXN0IHVzIHRvIHNraXAgaXQgKHdoZW4gYSBDKysgY29tcGlsZXIKLSAqICAgICAgIGlzIHVzZWQgdG8gY29tcGlsZSBDIGNvZGUpLgotICogICAtIFdlIHdhbnQgQysrIGJpbmRpbmdzIHN1cHBvcnQKLSAqICAgLSBXZSBhcmUgbm90IGJ1aWxkaW5nIE9NUEkgaXRzZWxmCi0gKiAgIC0gV2UgYXJlIHVzaW5nIGEgQysrIGNvbXBpbGVyCi0gKi8KLSNpZiAhZGVmaW5lZChPTVBJX1NLSVBfTVBJQ1hYKSAmJiBPTVBJX1dBTlRfQ1hYX0JJTkRJTkdTICYmICFPTVBJX0JVSUxESU5HCi0jaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQotI2luY2x1ZGUgIm9wZW5tcGkvb21waS9tcGkvY3h4L21waWN4eC5oIgotI2VuZGlmCi0jZW5kaWYKLQotI2VuZGlmIC8qIE9NUElfTVBJX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvcmVzb3VyY2VzL3Rlc3RNUEkuYyBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvcmVzb3VyY2VzL3Rlc3RNUEkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhMTZjZS4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzL3Jlc291cmNlcy90ZXN0TVBJLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJtcGkuaCIKLS8vIFNhbXBsZSBNUEkgcHJvZ3JhbQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSl7Ci0JcHJpbnRmKCJIZWxsbyBNUEkgUFRQIFdvcmxkIVxuIik7CQotCWludCAgbXlfcmFuazsgLyogcmFuayBvZiBwcm9jZXNzICovCi0JaW50ICBwOyAgICAgICAvKiBudW1iZXIgb2YgcHJvY2Vzc2VzICovCi0JaW50IHNvdXJjZTsgICAvKiByYW5rIG9mIHNlbmRlciAqLwotCWludCBkZXN0OyAgICAgLyogcmFuayBvZiByZWNlaXZlciAqLwotCWludCB0YWc9MDsgICAgLyogdGFnIGZvciBtZXNzYWdlcyAqLwotCWNoYXIgbWVzc2FnZVsxMDBdOyAgICAgICAgLyogc3RvcmFnZSBmb3IgbWVzc2FnZSAqLwotCU1QSV9TdGF0dXMgc3RhdHVzIDsgICAvKiByZXR1cm4gc3RhdHVzIGZvciByZWNlaXZlICovCi0JCi0JLyogc3RhcnQgdXAgTVBJICovCi0JCi0JTVBJX0luaXQoJmFyZ2MsICZhcmd2KTsKLQkKLQkvKiBmaW5kIG91dCBwcm9jZXNzIHJhbmsgKi8KLQlNUElfQ29tbV9yYW5rKE1QSV9DT01NX1dPUkxELCAmbXlfcmFuayk7IAotCQotCS8qIGZpbmQgb3V0IG51bWJlciBvZiBwcm9jZXNzZXMgKi8KLQlNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmcCk7IAotCQotCQotCWlmIChteV9yYW5rICE9MCl7Ci0JCS8qIGNyZWF0ZSBtZXNzYWdlICovCi0JCXNwcmludGYobWVzc2FnZSwgIkdyZWV0aW5ncyBmcm9tIHByb2Nlc3MgJWQhIiwgbXlfcmFuayk7Ci0JCWRlc3QgPSAwOwotCQkvKiB1c2Ugc3RybGVuKzEgc28gdGhhdCAnXDAnIGdldCB0cmFuc21pdHRlZCAqLwotCQlNUElfU2VuZChtZXNzYWdlLCBzdHJsZW4obWVzc2FnZSkrMSwgTVBJX0NIQVIsCi0JCSAgIGRlc3QsIHRhZywgTVBJX0NPTU1fV09STEQpOwotCX0KLQllbHNlewotCQlwcmludGYoIkZyb20gcHJvY2VzcyAwOiBOdW0gcHJvY2Vzc2VzOiAlZFxuIixwKTsKLQkJZm9yIChzb3VyY2UgPSAxOyBzb3VyY2UgPCBwOyBzb3VyY2UrKykgewotCQkJTVBJX1JlY3YobWVzc2FnZSwgMTAwLCBNUElfQ0hBUiwgc291cmNlLCB0YWcsCi0JCQkgICAgICBNUElfQ09NTV9XT1JMRCwgJnN0YXR1cyk7Ci0JCQlwcmludGYoIiVzXG4iLG1lc3NhZ2UpOwotCQl9Ci0JfQotCS8qIHNodXQgZG93biBNUEkgKi8KLQlNUElfRmluYWxpemUoKTsgCi0JCi0JCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC90ZXN0cy9QbGR0QmFzZVRlc3RGcmFtZXdvcmsuamF2YSBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3Rlc3RzL1BsZHRCYXNlVGVzdEZyYW1ld29yay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmFlMGRkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudGVzdHMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3Rlc3RzL1BsZHRCYXNlVGVzdEZyYW1ld29yay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS50ZXN0cy5CYXNlVGVzdEZyYW1ld29yazsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIGJldGgKLSAqIAotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGxkdEJhc2VUZXN0RnJhbWV3b3JrIGV4dGVuZHMgQmFzZVRlc3RGcmFtZXdvcmsgewotCXByaXZhdGUgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBBcnJheUxpc3Q8SW50ZWdlcj4+IGxpbmVNYXBzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBBcnJheUxpc3Q8SW50ZWdlcj4+KCk7Ci0KLQlwcm90ZWN0ZWQgSUZpbGUgaW1wb3J0RmlsZShTdHJpbmcgc3JjRGlyLCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBwcm9qZWN0LmdldFByb2plY3QoKS5nZXRGaWxlKGZpbGVuYW1lKS5kZWxldGUodHJ1ZSwgbmV3Ci0JCS8vIE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCUlGaWxlIHJlc3VsdCA9IHN1cGVyLmltcG9ydEZpbGUoZmlsZW5hbWUsIHJlYWRUZXN0RmlsZShzcmNEaXIsIGZpbGVuYW1lKSk7Ci0JCS8vIHByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbmV3Ci0JCS8vIE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyByZWFkVGVzdEZpbGUoU3RyaW5nIHNyY0RpciwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIFVSSVN5bnRheEV4Y2VwdGlvbiB7Ci0JCUFycmF5TGlzdDxJbnRlZ2VyPiBsaW5lTWFwID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPig1MCk7Ci0JCWxpbmVNYXBzLnB1dChmaWxlbmFtZSwgbGluZU1hcCk7Ci0JCWxpbmVNYXAuYWRkKDApOyAvLyBPZmZzZXQgb2YgbGluZSAxCi0JCXJldHVybiByZWFkU3RyZWFtKGxpbmVNYXAsIGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiLyIgKyBzcmNEaXIgKyAiLyIgKyBmaWxlbmFtZSkpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgcmVhZFN0cmVhbShBcnJheUxpc3Q8SW50ZWdlcj4gbGluZU1hcCwgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoNDA5Nik7Ci0JCUJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSkpOwotCQlmb3IgKGludCBvZmZzZXQgPSAwLCBjaCA9IGluLnJlYWQoKTsgY2ggPj0gMDsgY2ggPSBpbi5yZWFkKCkpIHsKLQkJCXNiLmFwcGVuZCgoY2hhcikgY2gpOwotCQkJb2Zmc2V0Kys7Ci0KLQkJCWlmIChjaCA9PSAnXG4nICYmIGxpbmVNYXAgIT0gbnVsbCkgewotCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiTGluZSAiICsgKGxpbmVNYXAuc2l6ZSgpKzEpICsKLQkJCQkvLyAiIHN0YXJ0cyBhdCBvZmZzZXQgIiArIG9mZnNldCk7Ci0JCQkJbGluZU1hcC5hZGQob2Zmc2V0KTsKLQkJCX0KLQkJfQotCQlpbi5jbG9zZSgpOwotCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHJlYWRTdHJlYW0oSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiByZWFkU3RyZWFtKG51bGwsIGlucHV0U3RyZWFtKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHJlYWRXb3Jrc3BhY2VGaWxlKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHJlYWRTdHJlYW0ocHJvamVjdC5nZXRGaWxlKGZpbGVuYW1lKS5nZXRDb250ZW50cygpKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gbGluZQotCSAqICAgICAgICAgICAgbGluZSBudW1iZXIsIHN0YXJ0aW5nIGF0IDEKLQkgKiBAcGFyYW0gY29sCi0JICogICAgICAgICAgICBjb2x1bW4gbnVtYmVyLCBzdGFydGluZyBhdCAxCi0JICovCi0JcHJvdGVjdGVkIGludCBnZXRMaW5lQ29sT2Zmc2V0KFN0cmluZyBmaWxlbmFtZSwgaW50IGxpbmUsIGludCBjb2wpIHsKLQkJcmV0dXJuIGxpbmVNYXBzLmdldChmaWxlbmFtZSkuZ2V0KGxpbmUgLSAxKSArIChjb2wgLSAxKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC90ZXN0cy9UZXN0LmphdmEgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC90ZXN0cy9UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NmNhY2IuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdGVzdHMvVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5tb2RlbC5JQ0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmNvcmUuTXBpSURzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5jb3JlLmFjdGlvbnMuUnVuQW5hbHlzZU1QSWNvbW1hbmRIYW5kbGVyOwotCi0KLS8qKgotICogQGF1dGhvciBiZXRoCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVGVzdCBleHRlbmRzIFBsZHRCYXNlVGVzdEZyYW1ld29ya3sKLQotCi0JCi0JcHVibGljIHZvaWQgdGVzdE1QSWFydGlmYWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gaW1wb3J0RmlsZSgicmVzb3VyY2VzIiwgInRlc3RNUEkuYyIpOwotCQlhc3NlcnROb3ROdWxsKGZpbGUpOwotCQkKLQkJSUZpbGUgbXBpSW5jbHVkZSA9IGltcG9ydEZpbGUoInJlc291cmNlcy9pbmNsdWRlcyIsIm1waS5oIik7Ci0JCWFzc2VydE5vdE51bGwobXBpSW5jbHVkZSk7Ci0JCVN0cmluZyB0ZW1wUGF0aCA9IG1waUluY2x1ZGUuZ2V0RnVsbFBhdGgoKS50b09TU3RyaW5nKCk7Ly9pbmNsdWRlUGF0aD0gL1JlZ3Jlc3Npb25UZXN0UHJvamVjdC9tcGkuaAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInRlbXBQYXRoPSIrdGVtcFBhdGgpOwotCQlTdHJpbmcgaW5jbHVkZVBhdGggPSBtcGlJbmNsdWRlLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRSYXdMb2NhdGlvbigpLnRvT1NTdHJpbmcoKQotCQkJKyBtcGlJbmNsdWRlLmdldEZ1bGxQYXRoKCkudG9GaWxlKCkuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiaW5jbHVkZVBhdGg9ICIraW5jbHVkZVBhdGgpOwotCi0JCWFzc2VydFRydWUoZmlsZSBpbnN0YW5jZW9mIElBZGFwdGFibGUpOwotCi0JCS8vIElDRWxlbWVudCBjb3ZlcnMgZm9sZGVycyBhbmQgdHJhbnNsYXRpb251bml0cwotCQlmaW5hbCBJQ0VsZW1lbnQgY2UgPSAoSUNFbGVtZW50KSAoKElBZGFwdGFibGUpIGZpbGUpLmdldEFkYXB0ZXIoSUNFbGVtZW50LmNsYXNzKTsKLQkJLy8gYXNzZXJ0Tm90TnVsbChjZSk7Ci0JCUxpc3Q8U3RyaW5nPiBpbmNsdWRlcyA9IEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHtpbmNsdWRlUGF0aH0pOwotCQlSdW5BbmFseXNlTVBJY29tbWFuZEhhbmRsZXIgcmFjbSA9IG5ldyBSdW5BbmFseXNlTVBJY29tbWFuZEhhbmRsZXIoKTsKLQkJCi0JCXJhY20ucnVuUmVzb3VyY2UobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSwgY2UsIDAsIGluY2x1ZGVzKTsKLQkJCi0JCUlNYXJrZXJbXSBtYXJrZXJzPWZpbGUuZmluZE1hcmtlcnMoTXBpSURzLk1BUktFUl9JRCwgdHJ1ZSwgSVJlc291cmNlLkRFUFRIX0lORklOSVRFKTsKLQkJYXNzZXJ0Tm90TnVsbChtYXJrZXJzKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJudW1NYXJrZXJzOiAiK21hcmtlcnMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJTWFya2VyIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oaSsgIiBtYXJrZXI6ICIrbWFya2VyLnRvU3RyaW5nKCkpOwotCQkJCi0JCQkKLQkJfQotCQkKLQkJCi0vLwkJcHJvdGVjdGVkIGJvb2xlYW4gcnVuUmVzb3VyY2UoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQ0VsZW1lbnQgY2UsCi0vLwkJCQlpbnQgaW5kZW50LCBMaXN0PFN0cmluZz4gaW5jbHVkZXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvLmNsYXNzcGF0aCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLy5jdnNpZ25vcmUgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2M4ZGQxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJpbgotaWNvbnMtb2xkCmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy8ucHJvamVjdCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzQ5MzY3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UucHRwLnBsZHQudXBjPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL01FVEEtSU5GL01BTklGRVNULk1GIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NmFlM2YuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDMuMC4wLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLlVQQ1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJXBsdWdpblByb3ZpZGVyCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY2R0LmNvcmUsCi0gb3JnLmVjbGlwc2UuY2R0LnVpLAotIG9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbiwKLSBvcmcuZWNsaXBzZS5oZWxwLAotIG9yZy5lY2xpcHNlLmNkdC5kb2MudXNlciwKLSBvcmcuZWNsaXBzZS5jZHQuY29yZS5wYXJzZXIudXBjO2J1bmRsZS12ZXJzaW9uPSI1LjAuMCIKLUVjbGlwc2UtQXV0b1N0YXJ0OiB0cnVlCi1CdW5kbGUtQ2xhc3NQYXRoOiAuCmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9idWlsZC5wcm9wZXJ0aWVzIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNjMmM2NS4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1zb3VyY2UuLiA9IHNyYy8KLW91dHB1dC4uID0gYmluLwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBpY29ucy8sXAotICAgICAgICAgICAgICAgaHRtbC8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvaWRfTVlUSFJFQUQuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvaWRfTVlUSFJFQUQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3MjIxYy4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL2lkX01ZVEhSRUFELmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08aDI+PGNvZGU+TVlUSFJFQUQ8L2NvZGU+IGtleXdvcmQ8L2gyPgotCi0KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci08cD4KLTxjb2RlPk1ZVEhSRUFEPC9jb2RlPiAgaXMgYW4gZXhwcmVzc2lvbiB3aXRoIGEgdmFsdWUgb2YgdHlwZSBpbnQ7IGl0IHNwZWNpZmllcyB0aGUgdW5pcXVlCi10aHJlYWQgaW5kZXguIAotPGJyPlRoZSByYW5nZSBvZiBwb3NzaWJsZSB2YWx1ZXMgaXMgPGNvZGU+MC4uVEhSRUFEUy0xNjwvY29kZT4uCi08aDQ+RXhhbXBsZTwvaDQ+Ci08cD5UaGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIHRoZSBudW1iZXJzIDAKLXRocm91Z2ggPGNvZGU+VEhSRUFEUy0xPC9jb2RlPiwgaW4gc29tZSBvcmRlci4KLTxwcmU+Ci0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIG1haW4oKXsgCi0gICAgICBwcmludGYoIiVkICIsTVlUSFJFQUQpOyAKLSAgICB9Ci08L3ByZT4KLTxwPlNlZSBhbHNvIDxhIGhyZWY9ImlkX1RIUkVBRFMuaHRtbCI+PGNvZGU+VEhSRUFEUzwvY29kZT48L2E+LAotCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvaWRfVEhSRUFEUy5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9pZF9USFJFQURTLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMDAzODMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9pZF9USFJFQURTLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08aDI+PGNvZGU+PGNvZGU+VEhSRUFEUzwvY29kZT48L2NvZGU+IGtleXdvcmQ8L2gyPgotCi0KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci08cD4KLTxjb2RlPlRIUkVBRFM8L2NvZGU+IGlzIGFuIGV4cHJlc3Npb24gd2l0aCBhIHZhbHVlIG9mIHR5cGUgPGNvZGU+aW50PC9jb2RlPjsgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YKLXRocmVhZHMgYW5kIGhhcyB0aGUgc2FtZSB2YWx1ZSBvbiBldmVyeSB0aHJlYWQuIFVuZGVyIHRoZSBzdGF0aWMgPGNvZGU+VEhSRUFEUzwvY29kZT4KLXRyYW5zbGF0aW9uIGVudmlyb25tZW50LCA8Y29kZT5USFJFQURTPC9jb2RlPiBpcyBhbiA8Y29kZT5pbnQ8L2NvZGU+ZWdlciBjb25zdGFudCBzdWl0YWJsZSBmb3IgdXNlIGluCi0jaWYgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzLgotCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9pZF9VUENfTUFYX0JMT0NLX1NJWkUuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvaWRfVVBDX01BWF9CTE9DS19TSVpFLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MWY1OWMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9pZF9VUENfTUFYX0JMT0NLX1NJWkUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTxoMj48Y29kZT5VUENfTUFYX0JMT0NLX1NJWkU8L2NvZGU+IGlkZW50aWZpZXI8L2gyPgotCi0KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci08cD4KLTxjb2RlPlVQQ19NQVhfQkxPQ0tfU0laRTwvY29kZT4gIGlzIGEgcHJlZGVmaW5lZCBpbnRlZ2VyIGNvbnN0YW50IHZhbHVlLiBJdCBpbmRpY2F0ZXMgdGhlCi1tYXhpbXVtIHZhbHVlIGFsbG93ZWQgaW4gYSBsYXlvdXQgcXVhbGlmaWVyIGZvciBzaGFyZWQgZGF0YS4gSXQgc2hhbGwgYmUKLXN1aXRhYmxlIGZvciB1c2UgaW4gPGNvZGU+I2lmPC9jb2RlPiBwcmVwcm9jZXNzaW5nIGRpcmVjdGl2ZXMuCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9pbmRleC5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWJiNDc2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTxoMiBpZD0idG9wIj5VUEMgU3RhdGVtZW50czwvaDI+Ci08dWw+Ci08bGk+PGEgaHJlZj0ia2V5d29yZHMuaHRtbCI+S2V5d29yZHMvSWRlbnRpZmllcnM8L2E+Ci08bGk+PGEgaHJlZj0ia2V5d29yZHMuaHRtbCI+S2V5d29yZHM8L2E+Ci0KLTwvdWw+Ci08aDIgaWQ9InRvcCI+VVBDIGZ1bmN0aW9uczwvaDI+Ci08cD5UZXJtaW5hdGlvbiBvZiBhbGwgdGhyZWFkcwotPHVsPgotPGxpPjxhIGhyZWY9InVwY19nbG9iYWxfZXhpdC5odG1sIj4gPGNvZGU+dXBjX2dsb2JhbF9leGl0PC9jb2RlPiA8L2E+Ci08L3VsPgotPHA+U2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotPHVsPgotPGxpPjxhIGhyZWY9InVwY19nbG9iYWxfYWxsb2MuaHRtbCI+IDxjb2RlPnVwY19nbG9iYWxfYWxsb2M8L2NvZGU+IDwvYT4KLTxsaT48YSBocmVmPSJ1cGNfYWxsX2FsbG9jLmh0bWwiPiA8Y29kZT51cGNfYWxsX2FsbG9jPC9jb2RlPiA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX2FsbG9jLmh0bWwiPiA8Y29kZT51cGNfYWxsb2M8L2NvZGU+IDwvYT4KLTxsaT48YSBocmVmPSJ1cGNfbG9jYWxfYWxsb2MuaHRtbCI+IDxjb2RlPnVwY19sb2NhbF9hbGxvYzwvY29kZT4gPC9hPiAgPGk+ZGVwcmVjYXRlZDwvaT4KLTxsaT48YSBocmVmPSJ1cGNfZnJlZS5odG1sIj4gPGNvZGU+dXBjX2ZyZWU8L2NvZGU+IDwvYT4KLTwvdWw+Ci0KLTxwPlBvaW50ZXItdG8tc2hhcmVkIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMKLTx1bD4KLTxsaT48YSBocmVmPSJ1cGNfdGhyZWFkb2YuaHRtbCI+IDxjb2RlPnVwY190aHJlYWRvZjwvY29kZT4gPC9hPgotPGxpPjxhIGhyZWY9InVwY19waGFzZW9mLmh0bWwiPiA8Y29kZT51cGNfcGhhc2VvZjwvY29kZT4gPC9hPgotPGxpPjxhIGhyZWY9InVwY19yZXNldHBoYXNlLmh0bWwiPiA8Y29kZT51cGNfcmVzZXRwaGFzZTwvY29kZT4gPC9hPgotPGxpPjxhIGhyZWY9InVwY19hZGRyZmllbGQuaHRtbCI+IDxjb2RlPnVwY19hZGRyZmllbGQ8L2NvZGU+IDwvYT4KLTxsaT48YSBocmVmPSJ1cGNfYWZmaW5pdHlzaXplLmh0bWwiPiA8Y29kZT51cGNfYWZmaW5pdHlzaXplPC9jb2RlPiA8L2E+Ci08L3VsPgotCi08cD5Mb2NrIGZ1bmN0aW9ucwotPHVsPgotPGxpPjxhIGhyZWY9InVwY19sb2NrX3QuaHRtbCI+IDxjb2RlPnVwY19sb2NrX3Q8L2NvZGU+IDwvYT4gJm5ic3A7IHR5cGUgCi08bGk+PGEgaHJlZj0idXBjX2dsb2JhbF9sb2NrX2FsbG9jLmh0bWwiPiA8Y29kZT51cGNfZ2xvYmFsX2xvY2tfYWxsb2M8L2NvZGU+ICA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX2FsbF9sb2NrX2FsbG9jLmh0bWwiPiA8Y29kZT51cGNfYWxsX2xvY2tfYWxsb2M8L2NvZGU+ICA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX2xvY2tfZnJlZS5odG1sIj4gPGNvZGU+dXBjX2xvY2tfZnJlZTwvY29kZT4gIDwvYT4KLTxsaT48YSBocmVmPSJ1cGNfbG9jay5odG1sIj4gPGNvZGU+dXBjX2xvY2s8L2NvZGU+ICA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX2xvY2tfYXR0ZW1wdC5odG1sIj4gPGNvZGU+dXBjX2xvY2tfYXR0ZW1wdDwvY29kZT4gIDwvYT4KLTxsaT48YSBocmVmPSJ1cGNfdW5sb2NrLmh0bWwiPiA8Y29kZT51cGNfdW5sb2NrPC9jb2RlPiAgPC9hPgotPC91bD4KLQotPHA+U2hhcmVkIHN0cmluZyBoYW5kbGluZyBmdW5jdGlvbnMKLTx1bD4KLTxsaT48YSBocmVmPSJ1cGNfbWVtY3B5Lmh0bWwiPiA8Y29kZT51cGNfbWVtY3B5PC9jb2RlPiA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX21lbWdldC5odG1sIj4gPGNvZGU+dXBjX21lbWdldDwvY29kZT4gPC9hPgotPGxpPjxhIGhyZWY9InVwY19tZW1jcHkuaHRtbCI+IDxjb2RlPnVwY19tZW1jcHk8L2NvZGU+IDwvYT4KLTxsaT48YSBocmVmPSJ1cGNfbWVtc2V0Lmh0bWwiPiA8Y29kZT51cGNfbWVtc2V0PC9jb2RlPiA8L2E+Ci08L3VsPgotCi08cD5Db2xsZWN0aXZlIFV0aWxpdGllcwotPHVsPgotPGxpPjxhIGhyZWY9InVwY19hbGxfYnJvYWRjYXN0Lmh0bWwiPiA8Y29kZT51cGNfYWxsX2Jyb2FkY2FzdDwvY29kZT4gPC9hPgotPGxpPjxhIGhyZWY9InVwY19hbGxfc2NhdHRlci5odG1sIj4gPGNvZGU+dXBjX2FsbF9zY2F0dGVyPC9jb2RlPiA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX2FsbF9nYXRoZXIuaHRtbCI+IDxjb2RlPnVwY19hbGxfZ2F0aGVyPC9jb2RlPiA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX2FsbF9nYXRoZXJfYWxsLmh0bWwiPiA8Y29kZT51cGNfYWxsX2dhdGhlcl9hbGw8L2NvZGU+IDwvYT4KLTxsaT48YSBocmVmPSJ1cGNfYWxsX2V4Y2hhbmdlLmh0bWwiPiA8Y29kZT51cGNfYWxsX2V4Y2hhbmdlPC9jb2RlPiA8L2E+Ci08bGk+PGEgaHJlZj0idXBjX2FsbF9wZXJtdXRlLmh0bWwiPiA8Y29kZT51cGNfYWxsX3Blcm11dGU8L2NvZGU+IDwvYT4KLQotPC91bD4KLTxwPgotU2VlIGFsc28gPGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT4KLTxwPgotPGEgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9rZXl3b3Jkcy5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC9rZXl3b3Jkcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTIxYWMzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwva2V5d29yZHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTxoMj5VUEMgS2V5d29yZHMvSWRlbnRpZmllcnM8L2gyPgotPGNvZGU+Ci08dWw+ICAgIAotPGxpPjxhIGhyZWY9ImlkX01ZVEhSRUFELmh0bWwiPk1ZVEhSRUFEICAgPC9hPgotPGxpPjxhIGhyZWY9ImlkX3JlbGF4ZWQuaHRtbCI+cmVsYXhlZCAgICAgICA8L2E+Ci08bGk+PGEgaHJlZj0iaWRfc2hhcmVkLmh0bWwiPnNoYXJlZCAgICAgICAgPC9hPgotPGxpPjxhIGhyZWY9ImlkX3N0cmljdC5odG1sIj5zdHJpY3QgICAgICAgPC9hPgotPGxpPjxhIGhyZWY9ImlkX1RIUkVBRFMuaHRtbCI+VEhSRUFEUyAgICAgIDwvYT4KLTxsaT48YSBocmVmPSJpZF91cGNfYmFycmllci5odG1sIj51cGNfYmFycmllciAgICAgICAgIDwvYT4KLTxsaT48YSBocmVmPSJpZF91cGNfYmxvY2tzaXplb2YuaHRtbCI+dXBjX2Jsb2Nrc2l6ZW9mICAgICAgPC9hPgotPGxpPjxhIGhyZWY9ImlkX3VwY19lbGVtc2l6ZW9mLmh0bWwiPnVwY19lbGVtc2l6ZW9mICAgICAgPC9hPgotPGxpPjxhIGhyZWY9ImlkX3VwY19mZW5jZS5odG1sIj51cGNfZmVuY2UgICAgICAgICAgIDwvYT4KLTxsaT48YSBocmVmPSJpZF91cGNfbG9jYWxzaXplb2YuaHRtbCI+dXBjX2xvY2Fsc2l6ZW9mICAgPC9hPgotPGxpPjxhIGhyZWY9ImlkX1VQQ19NQVhfQkxPQ0tTSVpFLmh0bWwiPlVQQ19NQVhfQkxPQ0tTSVpFICAgPC9hPgotPGxpPjxhIGhyZWY9ImlkX3VwY19ub3RpZnkuaHRtbCI+dXBjX25vdGlmeSAgIDwvYT4KLTxsaT48YSBocmVmPSJpZF91cGNfd2FpdC5odG1sIj51cGNfd2FpdCAgIDwvYT4KLTxsaT48YSBocmVmPSJpZF91cGNfZm9yYWxsLmh0bWwiPnVwY19mb3JhbGwgICAgICAgIDwvYT4gICAgIAotPC91bD4KLTwvY29kZT4KLQotCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvc2hhcmVkLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3NoYXJlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWZlMzhkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvc2hhcmVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08aDI+PGNvZGU+PGNvZGU+c2hhcmVkPC9jb2RlPjwvY29kZT4ga2V5d29yZDwvaDI+Ci0KLQotPGg0PkRlc2NyaXB0aW9uPC9oND4KLTxwPgotPGNvZGU+c2hhcmVkPC9jb2RlPiBpbmRpY2F0ZXMgYSB2YXJpYWJsZSBpcyBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLgotPHA+Ci08cHJlPgotc2hhcmVkIGludCBpOwotc2hhcmVkIFsyXSBpbnQgYVsyMDBdOwotc3RyaWN0IHNoYXJlZCBpbnQgaTsKLTwvcHJlPgotCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC90ZXJtcy5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC90ZXJtcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmZhMjUwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdGVybXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTxoNCBpZD0idG9wIj5VUEMgVGVybXMsIGRlZmluaXRpb25zIGFuZCBzeW1ib2xzPC9oND4KLTxwPgotRm9yIHRoZSBwdXJwb3NlIG9mIHRoZXNlIHNwZWNpZmljYXRpb25zIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXBwbHkuCi0KLTxkbD4KLTxkdD48c3Ryb25nPjxzdHJvbmc+dGhyZWFkPC9zdHJvbmc+PC9zdHJvbmc+PC9kdD4KLTxkZD4KLWFuIGluc3RhbmNlIG9mIGV4ZWN1dGlvbiBpbml0aWF0ZWQgYnkgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBhdCBwcm9ncmFtCi1zdGFydHVwLjwvZGQ+Ci0KLTxkdD48c3Ryb25nPiA8L3N0cm9uZz48L2R0PgotPGRkPiA8L2RkPgotCi08ZHQ+PHN0cm9uZz5vYmplY3Q8L3N0cm9uZz48L2R0PgotPGRkPgotcmVnaW9uIG9mIGRhdGEgc3RvcmFnZSBpbiB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IHdoaWNoIGNhbiByZXByZXNlbnQKLXZhbHVlcy48L2RkPgotCi08ZHQ+PHN0cm9uZz5zaGFyZWQgb2JqZWN0IDwvc3Ryb25nPjwvZHQ+Ci08ZGQ+Ci1hbiBvYmplY3QgYWxsb2NhdGVkIHVzaW5nIGEgc2hhcmVkLXF1YWxpZmllZCBkZWNsYXJhdG9yIG9yIGJ5IGEgbGlicmFyeSBmdW5jdGlvbgotZGVmaW5lZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuIAotPHA+Tm90ZTogCi1BbGwgdGhyZWFkcyBtYXkgYWNjZXNzIHNoYXJlZCBvYmplY3RzLjwvZGQ+Ci0KLTxkdD48c3Ryb25nPnByaXZhdGUgb2JqZWN0PC9zdHJvbmc+PC9kdD4KLTxkZD4KLWFueSBvYmplY3Qgd2hpY2ggaXMgbm90IGEgc2hhcmVkIG9iamVjdC4KLTxwPk5vdGU6IEVhY2ggdGhyZWFkIGRlY2xhcmVzIGFuZCBjcmVhdGVzIGl0cyBvd24gcHJpdmF0ZSBvYmplY3RzIHdoaWNoIG5vCi1vdGhlciB0aHJlYWQgY2FuIGFjY2Vzcy48L2RkPgotPGR0PjxzdHJvbmc+IHNoYXJlZCBhcnJheTwvc3Ryb25nPjwvZHQ+Ci08ZGQ+Ci1hbiBhcnJheSB3aXRoIGVsZW1lbnRzIHRoYXQgaGF2ZSBzaGFyZWQgcXVhbGlmaWVkIHR5cGUuCi08L2RkPgotPGR0PjxzdHJvbmc+YWZmaW5pdHk8L3N0cm9uZz48L2R0PgotPGRkPgotbG9naWNhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHNoYXJlZCBvYmplY3RzIGFuZCB0aHJlYWRzLiBFYWNoIGVsZW1lbnQgb2YgZGF0YQotc3RvcmFnZSB0aGF0IGNvbnRhaW5zIHNoYXJlZCBvYmplY3RzIGhhcyBhZmZpbml0eSB0byBleGFjdGx5IG9uZSB0aHJlYWQuCi08L2RkPgotPGR0PjxzdHJvbmc+cG9pbnRlci10by1zaGFyZWQ8L3N0cm9uZz48L2R0PgotPGRkPgotYSBwb2ludGVyIHdob3NlIHJlZmVyZW5jZWQgdHlwZSBpcyBzaGFyZWQtcXVhbGlmaWVkLgotPC9kZD4KLTxkdD48c3Ryb25nPiBwb2ludGVyLXRvLWxvY2FsPC9zdHJvbmc+PC9kdD4KLTxkZD4KLWEgcG9pbnRlciB3aG9zZSByZWZlcmVuY2VkIHR5cGUgaXMgbm90IHNoYXJlZC1xdWFsaWZpZWQuCi08L2RkPgotPGR0PjxzdHJvbmc+YWNjZXNzPC9zdHJvbmc+PC9kdD4KLTxkZD4KLSZsdDtleGVjdXRpb24tdGltZSBhY3Rpb24mZ3Q7IHRvIHJlYWQgb3IgbW9kaWZ5IHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgYnkgYSB0aHJlYWQuCi08cD5UaGUgZmlsZSBzY29wZSBkZWNsYXJhdGlvbiBpbnQgeTsgY3JlYXRlcyBhIHNlcGFyYXRlIG9iamVjdCBmb3IgZWFjaCB0aHJlYWQgdG8gYWNjZXNzLgotPC9kZD4KLTxkdD48c3Ryb25nPnNoYXJlZCBhY2Nlc3M8L3N0cm9uZz48L2R0PgotPGRkPgotYW4gYWNjZXNzIHVzaW5nIGFuIGV4cHJlc3Npb24gd2hvc2UgdHlwZSBpcyBzaGFyZWQtcXVhbGlmaWVkLjwvZGQ+Ci08ZHQ+PHN0cm9uZz4gc3RyaWN0IHNoYXJlZCByZWFkPC9zdHJvbmc+PC9kdD4KLTxkZD4KLWEgc2hhcmVkIHJlYWQgYWNjZXNzIHdoaWNoIGlzIGRldGVybWluZWQgdG8gYmUgc3RyaWN0LjwvZGQ+Ci08ZHQ+PHN0cm9uZz5zdHJpY3Qgc2hhcmVkIHdyaXRlPC9zdHJvbmc+PC9kdD4KLTxkZD4KLWEgc2hhcmVkIG1vZGlmeSBhY2Nlc3Mgd2hpY2ggaXMgZGV0ZXJtaW5lZCB0byBiZSBzdHJpY3QgPC9kZD4KLTxkdD48c3Ryb25nPnJlbGF4ZWQgc2hhcmVkIHJlYWQ8L3N0cm9uZz48L2R0PgotPGRkPgotYSBzaGFyZWQgcmVhZCBhY2Nlc3Mgd2hpY2ggaXMgZGV0ZXJtaW5lZCB0byBiZSByZWxheGVkPC9kZD4KLTxkdD48c3Ryb25nPnJlbGF4ZWQgc2hhcmVkIHdyaXRlPC9zdHJvbmc+PC9kdD4KLTxkZD4KLWEgc2hhcmVkIG1vZGlmeSBhY2Nlc3Mgd2hpY2ggaXMgZGV0ZXJtaW5lZCB0byBiZSByZWxheGVkIDwvZGQ+Ci08ZHQ+PHN0cm9uZz5sb2NhbCBhY2Nlc3M8L3N0cm9uZz48L2R0PgotPGRkPgotYW4gYWNjZXNzIHVzaW5nIGFuIGV4cHJlc3Npb24gd2hvc2UgdHlwZSBpcyBub3Qgc2hhcmVkLXF1YWxpZmllZC4KLTwvZGQ+Ci08ZHQ+PHN0cm9uZz5jb2xsZWN0aXZlPC9zdHJvbmc+PC9kdD4KLTxkZD4KLWEgY29uc3RyYWludCBwbGFjZWQgb24gc29tZSBsYW5ndWFnZSBvcGVyYXRpb25zIHdoaWNoIHJlcXVpcmVzIGV2YWx1YXRpb24KLW9mIHN1Y2ggb3BlcmF0aW9ucyB0byBiZSBtYXRjaGVkIGFjcm9zcyBhbGwgdGhyZWFkcy4gVGhlIGJlaGF2aW9yIG9mIGNvbGxlY3RpdmUKLW9wZXJhdGlvbnMgaXMgdW5kZWZpbmVkIHVubGVzcyBhbGwgdGhyZWFkcyBleGVjdXRlIHRoZSBzYW1lIHNlcXVlbmNlIG9mCi1jb2xsZWN0aXZlIG9wZXJhdGlvbnMuPC9kZD4KLTxkdD48c3Ryb25nPnNpbmdsZS12YWx1ZWQ8L3N0cm9uZz48L2R0PgotPGRkPgotYW4gb3BlcmFuZCB0byBhIGNvbGxlY3RpdmUgb3BlcmF0aW9uLCB3aGljaCBoYXMgdGhlIHNhbWUgdmFsdWUgb24gZXZlcnkKLXRocmVhZC4gVGhlIGJlaGF2aW9yIG9mIHRoZSBvcGVyYXRpb24gaXMgb3RoZXJ3aXNlIHVuZGVmaW5lZC48L2RkPgotPGR0PjxzdHJvbmc+cGhhc2U8L3N0cm9uZz48L2R0PgotPGRkPgotYW4gdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBwb2ludGVyLXRvLXNoYXJlZCB3aGljaCBpbmRpY2F0ZXMKLXRoZSBlbGVtZW50LW9mZnNldCB3aXRoaW4gYW4gYWZmaW5pdHkgYmxvY2s7IHVzZWQgaW4gcG9pbnRlci10by1zaGFyZWQKLWFyaXRobWV0aWMgdG8gZGV0ZXJtaW5lIGFmZmluaXR5IGJvdW5kYXJpZXM8L2RkPgotPC9kbD4KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0iI3RvcCI+QmFjayB0byAgdG9wPC9hPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hZGRyZmllbGQuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FkZHJmaWVsZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDEzM2U2OC4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hZGRyZmllbGQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxoMj5UaGUgPGNvZGU+dXBjX2FkZHJmaWVsZDwvY29kZT4gZnVuY3Rpb248L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gICAgCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHNpemVfdCB1cGNfYWRkcmZpZWxkKHNoYXJlZCB2b2lkICpwdHIpOyAgICAgICAgICAgICAgICAgCi08L3ByZT4KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLTxwPgotVGhlIDxjb2RlPnVwY19hZGRyZmllbGQgPC9jb2RlPiAgZnVuY3Rpb24gcmV0dXJucyBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlIHJlZmxlY3RpbmcKLXRoZSA8cT5sb2NhbCBhZGRyZXNzPC9xPm9mIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgcG9pbnRlci10by1zaGFyZWQKLWFyZ3VtZW50LgotCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfYWZmaW5pdHlzaXplLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hZmZpbml0eXNpemUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2YjgxZi4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hZmZpbml0eXNpemUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTxoMj5UaGUgPGNvZGU+dXBjX2FmZmluaXR5c2l6ZTwvY29kZT4gZnVuY3Rpb248L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gICAgCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHNpemVfdCB1cGNfYWZmaW5pdHlzaXplKHNpemVfdCB0b3RhbHNpemUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRocmVhZGlkKTsgICAgICAgICAgICAgICAgCi08L3ByZT4KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLTxwPgotVGhlIDxjb2RlPnVwY19hZmZpbml0eXNpemUgPC9jb2RlPiAgZnVuY3Rpb24gaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB3aGljaCBjYWxjdWxhdGVzIHRoZSBleGFjdCBzaXplCi1vZiB0aGUgbG9jYWwgcG9ydGlvbiBvZiB0aGUgZGF0YSBpbiBhIHNoYXJlZCBvYmplY3Qgd2l0aCBhZmZpbml0eSB0byA8Y29kZT50aHJlYWRpZDwvY29kZT4uCi08cD5JbiB0aGUgY2FzZSBvZiBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzaGFyZWQgb2JqZWN0LCB0aGUgPGNvZGU+dG90YWxzaXplPC9jb2RlPiBhcmd1bWVudAotc2hhbGwgYmUgPGNvZGU+bmJ5dGVzKm5ibG9ja3M8L2NvZGU+IGFuZCB0aGUgPGNvZGU+bmJ5dGVzPC9jb2RlPiBhcmd1bWVudCBzaGFsbCBiZSA8Y29kZT5uYnl0ZXM8L2NvZGU+LAotd2hlcmUgPGNvZGU+bmJsb2NrczwvY29kZT4gYW5kIDxjb2RlPm5ieXRlczwvY29kZT4gYXJlIGV4YWN0bHkgYXMgcGFzc2VkIHRvIDxjb2RlPnVwY19nbG9iYWxfYWxsb2M8L2NvZGU+IG9yCi08Y29kZT51cGNfYWxsX2FsbG9jPC9jb2RlPiB3aGVuIHRoZSBvYmplY3Qgd2FzIGFsbG9jYXRlZC4KLTxwPkluIHRoZSBjYXNlIG9mIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgc2hhcmVkIG9iamVjdCB3aXRoIGRlY2xhcmF0aW9uOgotPHByZT4KLSAgIHNoYXJlZCBbYl0gdCBkW3NdOwotICAgPC9wcmU+Ci10aGUgPGNvZGU+dG90YWxzaXplPC9jb2RlPiBhcmd1bWVudCBzaGFsbCBiZSA8Y29kZT5zICogc2l6ZW9mKHQpPC9jb2RlPiBhbmQgdGhlIDxjb2RlPm5ieXRlczwvY29kZT4gYXJndW1lbnQKLXNoYWxsIGJlIDxjb2RlPmIgKiBzaXplb2YodCk8L2NvZGU+LiBJZiB0aGUgYmxvY2sgc2l6ZSBpcyBpbmRlZmluaXRlLCA8Y29kZT5uYnl0ZXM8L2NvZGU+IHNoYWxsIGJlIDAuCi08cD48Y29kZT50aHJlYWRpZDwvY29kZT4gc2hhbGwgYmUgYSB2YWx1ZSBpbiA8Y29kZT4wLi4oVEhSRUFEUy0xKTwvY29kZT4uCi0KLQotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfYWxsb2MuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9hbGxvYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2IwOTQzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9hbGxvYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX2FsbF9hbGxvYzwvY29kZT4gICAgIDwvaDI+Ci0KLTxoND5TeW5vcHNpczwvaDQ+Ci08cHJlPiAKLSAgICAjaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0gICAgc2hhcmVkIHZvaWQgKnVwY19hbGxfYWxsb2Moc2l6ZV90IG5ibG9ja3MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYnl0ZXMpOyAgIAotPC9wcmU+Ci08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci0KLTxwPgotVGhlIDxjb2RlPnVwY19hbGxfYWxsb2MgICA8L2NvZGU+IGZ1bmN0aW9uIGFsbG9jYXRlcyBzaGFyZWQgc3BhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcKLWRlY2xhcmF0aW9uOgotPHA+PGNvZGU+Ci1zaGFyZWQgW25ieXRlc10gY2hhcltuYmxvY2tzICogbmJ5dGVzXS4KLTwvY29kZT48L3A+Ci08cD4KLVRoZSA8Y29kZT51cGNfYWxsX2FsbG9jICAgPC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHBvaW50ZXIgdmFsdWUgb24gYWxsIHRocmVhZHMuCi1JZiBuYmxvY2tzKm5ieXRlcyBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGEgbnVsbCBwb2ludGVyLXRvLXNoYXJlZC4KLTxwPlRoZSBkeW5hbWljIGxpZmV0aW1lIG9mIGFuIGFsbG9jYXRlZCBvYmplY3QgZXh0ZW5kcyBmcm9tIHRoZSB0aW1lIGFueSB0aHJlYWQKLWNvbXBsZXRlcyB0aGUgY2FsbCB0byA8Y29kZT51cGNfYWxsX2FsbG9jICAgPC9jb2RlPiB1bnRpbCBhbnkgdGhyZWFkIGhhcyBkZWFsbG9jYXRlZCB0aGUKLW9iamVjdC4KLQotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfYnJvYWRjYXN0Lmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfYnJvYWRjYXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNDkwM2MuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfYWxsX2Jyb2FkY2FzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPGgyPlRoZSA8Y29kZT51cGNfYWxsX2Jyb2FkY2FzdDwvY29kZT4gZnVuY3Rpb248L2gyPgotPGg0PlB1cnBvc2U8L2g0PgotPHA+Q29waWVzIGEgYmxvY2sgb2YgbWVtb3J5Ci08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gICAgCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgICNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotICAgIHZvaWQgdXBjX2FsbF9icm9hZGNhc3Qoc2hhcmVkIHZvaWQgKiByZXN0cmljdCBkc3QsIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCBzaXplX3QgbmJ5dGVzLCB1cGNfZmxhZ190IGZsYWdzKTsgICAgICAgICAgICAgCi08L3ByZT4KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLTxwPgotVGhlIDxjb2RlPnVwY19hbGxfYnJvYWRjYXN0IDwvY29kZT4gIGZ1bmN0aW9uICAKLWNvcGllcyBhIGJsb2NrIG9mIG1lbW9yeSB3aXRoIGFmZmluaXR5IHRvCi1hIHNpbmdsZSB0aHJlYWQgdG8gYSBibG9jayBvZiBzaGFyZWQgbWVtb3J5IG9uIGVhY2ggdGhyZWFkLiBUaGUgbnVtYmVyIG9mCi1ieXRlcyBpbiBlYWNoIGJsb2NrIGlzIDxjb2RlPm5ieXRlczwvY29kZT4uCi08cD48Y29kZT5uYnl0ZXM8L2NvZGU+IG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCi08cD48Y29kZT51cGNfYWxsX2Jyb2FkY2FzdCA8L2NvZGU+IGZ1bmN0aW9uIHRyZWF0cyB0aGUgPGNvZGU+c3JjPC9jb2RlPiBwb2ludGVyIGFzIGlmIGl0IHBvaW50ZWQgdG8gYQotc2hhcmVkIG1lbW9yeSBhcmVhIHdpdGggdGhlIHR5cGU6Ci08cHJlPgotICAgIHNoYXJlZCBbXSBjaGFyW25ieXRlc10KLSAgICA8L3ByZT4KLTxwPlRoZSBlZmZlY3QgaXMgZXF1aXZhbGVudCB0byBjb3B5aW5nIHRoZSBlbnRpcmUgYXJyYXkgcG9pbnRlZCB0byBieSA8Y29kZT5zcmM8L2NvZGU+IHRvIGVhY2gKLWJsb2NrIG9mIDxjb2RlPm5ieXRlczwvY29kZT4gYnl0ZXMgb2YgYSBzaGFyZWQgYXJyYXkgPGNvZGU+ZHN0PC9jb2RlPiB3aXRoIHRoZSB0eXBlOgotPHByZT4KLSAgICBzaGFyZWQgW25ieXRlc10gY2hhcltuYnl0ZXMgKiBUSFJFQURTXQotPC9wcmU+Ci08cD5UaGUgdGFyZ2V0IG9mIHRoZSA8Y29kZT5kc3Q8L2NvZGU+IHBvaW50ZXIgbXVzdCBoYXZlIGFmZmluaXR5IHRvIHRocmVhZCAwLgotPHA+VGhlIDxjb2RlPmRzdDwvY29kZT4gcG9pbnRlciBpcyB0cmVhdGVkIGFzIGlmIGl0IGhhcyBwaGFzZSAwLgotCi08dWw+Ci08bGk+RVhBTVBMRSAxIHNob3dzIHVwY19hbGxfYnJvYWRjYXN0Ci0KLTxwcmU+Ci0jaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLXNoYXJlZCBpbnQgQVtUSFJFQURTXTsKLXNoYXJlZCBpbnQgQltUSFJFQURTXTsKLS8vIEluaXRpYWxpemUgQS4KLXVwY19iYXJyaWVyOwotdXBjX2FsbF9icm9hZGNhc3QoIEIsICZBWzFdLCBzaXplb2YoaW50KSwKLSAgICAgICAgICAgICAgICAgICBVUENfSU5fTk9TWU5DIHwgVVBDX09VVF9OT1NZTkMgKTsKLXVwY19iYXJyaWVyOwotPC9wcmU+Ci0KLTxsaT5FWEFNUExFIDI6Ci0KLTxwcmU+Ci0jaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLSNkZWZpbmUgTkVMRU1TIDEwCi1zaGFyZWQgW10gaW50IEFbTkVMRU1TXTsKLXNoYXJlZCBbTkVMRU1TXSBpbnQgQltORUxFTVMqVEhSRUFEU107Ci0vLyBJbml0aWFsaXplIEEuCi11cGNfYWxsX2Jyb2FkY2FzdCggQiwgQSwgc2l6ZW9mKGludCkqTkVMRU1TLAotICAgICAgICAgICAgICAgICAgIFVQQ19JTl9BTExTWU5DIHwgVVBDX09VVF9BTExTWU5DICk7Ci08L3ByZT4KLTxsaT5FWEFNUExFIDMgc2hvd3MgPGNvZGU+KEFbM10sQVs0XSk8L2NvZGU+IGlzIGJyb2FkY2FzdCB0byA8Y29kZT4oQlswXSxCWzFdKSwgKEJbMTBdLEJbMTFdKSwKLShCWzIwXSxCWzIxXSksIC4uLiwgKEJbTkVMRU1TKihUSFJFQURTLTEpXSxCW05FTEVNUyooVEhSRUFEUy0xKSsxXSkuPC9jb2RlPgotCi08cHJlPgotI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotI2luY2x1ZGUgJmx0O3VwY19jb2xsZWN0aXZlLmgmZ3Q7Ci0jZGVmaW5lIE5FTEVNUyAxMAotc2hhcmVkIFtORUxFTVNdIGludCBBW05FTEVNUypUSFJFQURTXTsKLXNoYXJlZCBbTkVMRU1TXSBpbnQgQltORUxFTVMqVEhSRUFEU107Ci0vLyBJbml0aWFsaXplIEEuCi11cGNfYmFycmllcjsKLXVwY19hbGxfYnJvYWRjYXN0KCBCLCAmQVszXSwgc2l6ZW9mKGludCkqMiwKLSAgICAgICAgICAgICAgICAgICBVUENfSU5fTk9TWU5DIHwgVVBDX09VVF9OT1NZTkMgKTsKLXVwY19iYXJyaWVyOwotPC9wcmU+Ci08L3VsPgotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfZXhjaGFuZ2UuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9leGNoYW5nZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzUwMzM4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9leGNoYW5nZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotPGgyPlRoZSA8Y29kZT51cGNfYWxsX2V4Y2hhbmdlPC9jb2RlPiBmdW5jdGlvbiAgICAgPC9oMj4KLQotPGg0PlN5bm9wc2lzPC9oND4KLTxwcmU+IAotICAgICNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSAgICAjaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLSAgICB2b2lkIHVwY19hbGxfZXhjaGFuZ2Uoc2hhcmVkIHZvaWQgKiByZXN0cmljdCBkc3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYnl0ZXMsIHVwY19mbGFnX3QgZmxhZ3MpOyAgCi0gICAgPC9wcmU+Ci08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci0KLTxwPgotVGhlIDxjb2RlPnVwY19hbGxfZXhjaGFuZ2UgICA8L2NvZGU+IGZ1bmN0aW9uICAgY29waWVzIHRoZSBpdGggYmxvY2sgb2YgbWVtb3J5IGZyb20gYSBzaGFyZWQKLW1lbW9yeSBhcmVhIHRoYXQgaGFzIGFmZmluaXR5IHRvIHRocmVhZCBqIHRvIHRoZSBqdGggYmxvY2sgb2YgYSBzaGFyZWQgbWVtb3J5Ci1hcmVhIHRoYXQgaGFzIGFmZmluaXR5IHRvIHRocmVhZCBpLiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggYmxvY2sgaXMKLTxjb2RlPm5ieXRlczwvY29kZT4uCi08cD48Y29kZT5uYnl0ZXM8L2NvZGU+IG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCi08cD4KLTxwPlRoZSA8Y29kZT51cGNfYWxsX2V4Y2hhbmdlICAgPC9jb2RlPiBmdW5jdGlvbiB0cmVhdHMgdGhlIDxjb2RlPnNyYzwvY29kZT4gcG9pbnRlciBhbmQgdGhlIDxjb2RlPmRzdDwvY29kZT4gcG9pbnRlcgotYXMgaWYgZWFjaCBwb2ludGVkIHRvIGEgc2hhcmVkIG1lbW9yeSBhcmVhIG9mIDxjb2RlPm5ieXRlcyAqIFRIUkVBRFM8L2NvZGU+AyBieXRlcyBvbiBlYWNoCi10aHJlYWQgYW5kIHRoZXJlZm9yZSBoYWQgdHlwZToKLTxwcmU+Ci0gICAgc2hhcmVkIFtuYnl0ZXMgKiBUSFJFQURTXSBjaGFyW25ieXRlcyAqIFRIUkVBRFMgKiBUSFJFQURTXQotPC9wcmU+Ci08cD5UaGUgdGFyZ2V0cyBvZiB0aGUgPGNvZGU+c3JjPC9jb2RlPiBhbmQgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVycyBtdXN0IGhhdmUgYWZmaW5pdHkgdG8gdGhyZWFkIDAuCi08cD5UaGUgPGNvZGU+c3JjPC9jb2RlPiBhbmQgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVycyBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IGhhdmUgcGhhc2UgMC4KLTxwPkZvciBlYWNoIHBhaXIgb2YgdGhyZWFkcyBpIGFuZCBqLCB0aGUgZWZmZWN0IGlzIGVxdWl2YWxlbnQgdG8gY29weWluZyB0aGUgaXRoCi1ibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzIHRoYXQgaGFzIGFmZmluaXR5IHRvIHRocmVhZCBqIHBvaW50ZWQgdG8gYnkgPGNvZGU+c3JjPC9jb2RlPiB0byB0aGUKLWp0aCBibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzIHRoYXQgaGFzIGFmZmluaXR5IHRvIHRocmVhZCBpIHBvaW50ZWQgdG8gYnkgPGNvZGU+ZHN0PC9jb2RlPi4KLTx1bD4KLTxsaT5FWEFNUExFIDEgPGNvZGU+dXBjX2FsbF9leGNoYW5nZSAgIDwvY29kZT4gZm9yIHRoZSBzdGF0aWMgVEhSRUFEUyB0cmFuc2xhdGlvbiBlbnZpcm9ubWVudC4KLTxwcmU+Ci0jaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLSNkZWZpbmUgTkVMRU1TIDEwCi1zaGFyZWQgW05FTEVNUypUSFJFQURTXSBpbnQgQVtUSFJFQURTXVtORUxFTVMqVEhSRUFEU107Ci1zaGFyZWQgW05FTEVNUypUSFJFQURTXSBpbnQgQltUSFJFQURTXVtORUxFTVMqVEhSRUFEU107Ci0vLyBJbml0aWFsaXplIEEuCi11cGNfYmFycmllcjsKLXVwY19hbGxfZXhjaGFuZ2UoIEIsIEEsIE5FTEVNUypzaXplb2YoaW50KSwKLVVQQ19JTl9OT1NZTkMgfCBVUENfT1VUX05PU1lOQyApOwotdXBjX2JhcnJpZXI7Ci08L3ByZT4KLQotPGxpPkVYQU1QTEUgMiA8Y29kZT51cGNfYWxsX2V4Y2hhbmdlICAgPC9jb2RlPiBmb3IgdGhlIGR5bmFtaWMgVEhSRUFEUyB0cmFuc2xhdGlvbiBlbnZpcm9ubWVudC4KLTxwcmU+Ci0jaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLSNkZWZpbmUgTkVMRU1TIDEwCi1zaGFyZWQgaW50ICpBZGF0YSwgKkJkYXRhOwotc2hhcmVkIFtdIGludCAqbXlBLCAqbXlCOwotaW50IGk7Ci0KLUFkYXRhID0gdXBjX2FsbF9hbGxvYyhUSFJFQURTKlRIUkVBRFMsIE5FTEVNUypzaXplb2YoaW50KSk7Ci1teUEgPSAoc2hhcmVkIFtdIGludCAqKSZBZGF0YVtNWVRIUkVBRF07Ci1CZGF0YSA9IHVwY19hbGxfYWxsb2MoVEhSRUFEUypUSFJFQURTLCBORUxFTVMqc2l6ZW9mKGludCkpOwotbXlCID0gKHNoYXJlZCBbXSBpbnQgKikmQmRhdGFbTVlUSFJFQURdOwotLy8gQWRhdGEgYW5kIEJkYXRhIGNvbnRhaW4gVEhSRUFEUypUSFJFQURTKk5FTEVNUyBlbGVtZW50cy4KLS8vIG15QSBhbmQgbXlCIGFyZSBNWVRIUkVBRCdzIHJvd3Mgb2YgQWRhdGEgYW5kIEJkYXRhLCByZXNwLgotLy8gSW5pdGlhbGl6ZSBNWVRIUkVBRCdzIHJvdyBvZiBBLiBGb3IgZXhhbXBsZSwKLWZvciAoaT0wOyBpJmx0O05FTEVNUypUSFJFQURTOyBpKyspCi1teUFbaV0gPSBNWVRIUkVBRCoxMCArIGk7Ci11cGNfYWxsX2V4Y2hhbmdlKCBCZGF0YSwgQWRhdGEsIE5FTEVNUypzaXplb2YoaW50KSwKLSAgICAgICAgICAgICAgICAgIFVQQ19JTl9BTExTWU5DIHwgVVBDX09VVF9BTExTWU5DICk7Ci08L3ByZT4KLTwvdWw+Ci08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9nYXRoZXIuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9nYXRoZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVlNTVjYS4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfZ2F0aGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi08aDI+VGhlIDxjb2RlPnVwY19hbGxfZ2F0aGVyPC9jb2RlPiBmdW5jdGlvbjwvaDI+Ci0KLTxoND5TeW5vcHNpczwvaDQ+Ci08cHJlPiAgICAKLSAgICAjaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0gICAgI2luY2x1ZGUgJmx0O3VwY19jb2xsZWN0aXZlLmgmZ3Q7Ci0gICAgdm9pZCB1cGNfYWxsX2dhdGhlcihzaGFyZWQgdm9pZCAqIHJlc3RyaWN0IGRzdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywgCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJ5dGVzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwY19mbGFnX3QgZmxhZ3MpOyAKLTwvcHJlPgotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotPHA+Ci1UaGUgPGNvZGU+dXBjX2FsbF9nYXRoZXIgPC9jb2RlPiAgZnVuY3Rpb24gCi1jb3BpZXMgYSBibG9jayBvZiBzaGFyZWQgbWVtb3J5IHRoYXQgaGFzCi1hZmZpbml0eSB0byB0aGUgaXRoIHRocmVhZCB0byB0aGUgaXRoIGJsb2NrIG9mIGEgc2hhcmVkIG1lbW9yeSBhcmVhIHRoYXQgaGFzCi1hZmZpbml0eSB0byBhIHNpbmdsZSB0aHJlYWQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBibG9jayBpcyA8Y29kZT5uYnl0ZXM8L2NvZGU+LgotPHA+PGNvZGU+bmJ5dGVzPC9jb2RlPiBtdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgotPHA+VGhlIHVwYyBhbGwgZ2F0aGVyIGZ1bmN0aW9uIHRyZWF0cyB0aGUgPGNvZGU+c3JjPC9jb2RlPiBwb2ludGVyIGFzIGlmIGl0IHBvaW50ZWQgdG8gYQotc2hhcmVkIG1lbW9yeSBhcmVhIG9mIDxjb2RlPm5ieXRlczwvY29kZT4gYnl0ZXMgb24gZWFjaCB0aHJlYWQgYW5kIHRoZXJlZm9yZSBoYWQgdHlwZToKLTxwcmU+Ci0gICAgc2hhcmVkIFtuYnl0ZXNdIGNoYXJbbmJ5dGVzICogVEhSRUFEU10KLTwvcHJlPgotPHA+YW5kIGl0IHRyZWF0cyB0aGUgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVyIGFzIGlmIGl0IHBvaW50ZWQgdG8gYSBzaGFyZWQgbWVtb3J5IGFyZWEgd2l0aAotdGhlIHR5cGU6Ci08cHJlPgotICAgIHNoYXJlZCBbXSBjaGFyW25ieXRlcyAqIFRIUkVBRFNdCi0gICAgPC9wcmU+Ci08cD5UaGUgdGFyZ2V0IG9mIHRoZSA8Y29kZT5zcmM8L2NvZGU+IHBvaW50ZXIgbXVzdCBoYXZlIGFmZmluaXR5IHRvIHRocmVhZCAwLgotPHA+VGhlIDxjb2RlPnNyYzwvY29kZT4gcG9pbnRlciBpcyB0cmVhdGVkIGFzIGlmIGl0IGhhcyBwaGFzZSAwLgotPHA+Rm9yIGVhY2ggdGhyZWFkIGksIHRoZSBlZmZlY3QgaXMgZXF1aXZhbGVudCB0byBjb3B5aW5nIHRoZSBibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzCi1wb2ludGVkIHRvIGJ5IDxjb2RlPnNyYzwvY29kZT4gdGhhdCBoYXMgYWZmaW5pdHkgdG8gdGhyZWFkIGkgdG8gdGhlIGl0aCBibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+Ci1ieXRlcyBwb2ludGVkIHRvIGJ5IDxjb2RlPmRzdDwvY29kZT4uCi08cD4KLTx1bD4KLTxsaT5FWEFNUExFIDEgPGNvZGU+dXBjX2FsbF9nYXRoZXIgPC9jb2RlPiBmb3IgdGhlIHN0YXRpYyBUSFJFQURTIHRyYW5zbGF0aW9uIGVudmlyb25tZW50LgotPHByZT4KLSNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotI2RlZmluZSBORUxFTVMgMTAKLXNoYXJlZCBbTkVMRU1TXSBpbnQgQVtORUxFTVMqVEhSRUFEU107Ci1zaGFyZWQgW10gaW50IEJbTkVMRU1TKlRIUkVBRFNdOwotLy8gSW5pdGlhbGl6ZSBBLgotdXBjX2FsbF9nYXRoZXIoIEIsIEEsIHNpemVvZihpbnQpKk5FTEVNUywKLVVQQ19JTl9BTExTWU5DIHwgVVBDX09VVF9BTExTWU5DICk7Ci08L3ByZT4KLTxsaT5FWEFNUExFIDIgPGNvZGU+dXBjX2FsbF9nYXRoZXIgPC9jb2RlPiBmb3IgdGhlIGR5bmFtaWMgVEhSRUFEUyB0cmFuc2xhdGlvbiBlbnZpcm9ubWVudC4KLTxwcmU+Ci0jaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLSNkZWZpbmUgTkVMRU1TIDEwCi1zaGFyZWQgW05FTEVNU10gaW50IEFbTkVMRU1TKlRIUkVBRFNdOwotc2hhcmVkIFtdIGludCAqQjsKLUIgPSAoc2hhcmVkIFtdIGludCAqKSB1cGNfYWxsX2FsbG9jKDEsTkVMRU1TKlRIUkVBRFMqc2l6ZW9mKGludCkpOwotLy8gSW5pdGlhbGl6ZSBBLgotdXBjX2JhcnJpZXI7Ci11cGNfYWxsX2dhdGhlciggQiwgQSwgc2l6ZW9mKGludCkqTkVMRU1TLAotVVBDX0lOX05PU1lOQyB8IFVQQ19PVVRfTk9TWU5DICk7Ci11cGNfYmFycmllcjsKLTwvcHJlPgotPGxpPgotPGxpPgotPC91bD4KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+PHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9nYXRoZXJfYWxsLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfZ2F0aGVyX2FsbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTMxOTllLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9nYXRoZXJfYWxsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08aDI+VGhlIDxjb2RlPnVwY19hbGxfZ2F0aGVyX2FsbDwvY29kZT4gZnVuY3Rpb248L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gICAgCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgICNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotICAgIHZvaWQgdXBjX2FsbF9nYXRoZXJfYWxsKHNoYXJlZCB2b2lkICogcmVzdHJpY3QgZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwY19mbGFnX3QgZmxhZ3MpOwotPC9wcmU+Ci08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci08cD4KLVRoZSA8Y29kZT51cGNfYWxsX2dhdGhlcl9hbGwgPC9jb2RlPiAgZnVuY3Rpb24gCi1jb3BpZXMgYSBibG9jayBvZiBtZW1vcnkgZnJvbSBvbmUgc2hhcmVkCi1tZW1vcnkgYXJlYSB3aXRoIGFmZmluaXR5IHRvIHRoZSBpdGggdGhyZWFkIHRvIHRoZSBpdGggYmxvY2sgb2YgYSBzaGFyZWQKLW1lbW9yeSBhcmVhIG9uIGVhY2ggdGhyZWFkLiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggYmxvY2sgaXMgPGNvZGU+bmJ5dGVzPC9jb2RlPi4KLTxwPjxjb2RlPm5ieXRlczwvY29kZT4gbXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMC4KLTxwPlRoZSB1cGNfYWxsX2dhdGhlcl9hbGwgZnVuY3Rpb24gdHJlYXRzIHRoZSA8Y29kZT5zcmM8L2NvZGU+IHBvaW50ZXIgYXMgaWYgaXQgcG9pbnRlZCB0byBhCi1zaGFyZWQgbWVtb3J5IGFyZWEgb2YgPGNvZGU+bmJ5dGVzPC9jb2RlPiBieXRlcyBvbiBlYWNoIHRocmVhZCBhbmQgdGhlcmVmb3JlIGhhZCB0eXBlOgotPHByZT4KLXNoYXJlZCBbbmJ5dGVzXSBjaGFyW25ieXRlcyAqIFRIUkVBRFNdCi08L3ByZT4KLTxwPmFuZCBpdCB0cmVhdHMgdGhlIDxjb2RlPmRzdDwvY29kZT4gIHBvaW50ZXIgYXMgaWYgaXQgcG9pbnRlZCB0byBhIHNoYXJlZCBtZW1vcnkgYXJlYSB3aXRoCi10aGUgdHlwZToKLXNoYXJlZCBbbmJ5dGVzICogVEhSRUFEU10gY2hhcltuYnl0ZXMgKiBUSFJFQURTICogVEhSRUFEU10KLTxwPlRoZSB0YXJnZXRzIG9mIHRoZSA8Y29kZT5zcmM8L2NvZGU+IGFuZCA8Y29kZT5kc3Q8L2NvZGU+IHBvaW50ZXJzIG11c3QgaGF2ZSBhZmZpbml0eSB0byB0aHJlYWQgMC4KLTxwPlRoZSA8Y29kZT5zcmM8L2NvZGU+IGFuZCA8Y29kZT5kc3Q8L2NvZGU+ICBwb2ludGVycyBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IGhhdmUgcGhhc2UgMC4KLTxwPlRoZSBlZmZlY3QgaXMgZXF1aXZhbGVudCB0byBjb3B5aW5nIHRoZSBpdGggYmxvY2sgb2YgPGNvZGU+bmJ5dGVzPC9jb2RlPiBieXRlcyBwb2ludGVkIHRvCi1ieSA8Y29kZT5zcmM8L2NvZGU+IHRvIHRoZSBpdGggYmxvY2sgb2YgPGNvZGU+bmJ5dGVzPC9jb2RlPiBieXRlcyBwb2ludGVkIHRvIGJ5IDxjb2RlPmRzdDwvY29kZT4gdGhhdCBoYXMgYWZmaW5pdHkKLXRvIGVhY2ggdGhyZWFkLgotCi0KLQotPHA+Ci08dWw+Ci08bGk+IEVYQU1QTEUgMSA8Y29kZT51cGNfYWxsX2dhdGhlcl9hbGwgPC9jb2RlPiBmb3IgdGhlIHN0YXRpYyBUSFJFQURTIHRyYW5zbGF0aW9uIGVudmlyb25tZW50LgotPHByZT4KLSNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotI2RlZmluZSBORUxFTVMgMTAKLXNoYXJlZCBbTkVMRU1TXSBpbnQgQVtORUxFTVMqVEhSRUFEU107Ci1zaGFyZWQgW05FTEVNUypUSFJFQURTXSBpbnQgQltUSFJFQURTXVtORUxFTVMqVEhSRUFEU107Ci0vLyBJbml0aWFsaXplIEEuCi11cGNfYmFycmllcjsKLXVwY19hbGxfZ2F0aGVyX2FsbCggQiwgQSwgc2l6ZW9mKGludCkqTkVMRU1TLAotVVBDX0lOX05PU1lOQyB8IFVQQ19PVVRfTk9TWU5DICk7Ci11cGNfYmFycmllcjsKLTwvcHJlPgotPGxpPkVYQU1QTEUgMiA8Y29kZT51cGNfYWxsX2dhdGhlcl9hbGwgPC9jb2RlPiBhbGwgZm9yIHRoZSBkeW5hbWljIFRIUkVBRFMgdHJhbnNsYXRpb24KLWVudmlyb25tZW50LgotPHByZT4KLSNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotI2RlZmluZSBORUxFTVMgMTAKLXNoYXJlZCBbTkVMRU1TXSBpbnQgQVtORUxFTVMqVEhSRUFEU107Ci1zaGFyZWQgaW50ICpCZGF0YTsKLXNoYXJlZCBbXSBpbnQgKm15QjsKLUJkYXRhID0gdXBjX2FsbF9hbGxvYyhUSFJFQURTKlRIUkVBRFMsIE5FTEVNUypzaXplb2YoaW50KSk7Ci1teUIgPSAoc2hhcmVkIFtdIGludCAqKSZCZGF0YVtNWVRIUkVBRF07Ci0vLyBCZGF0YSBjb250YWlucyBUSFJFQURTKlRIUkVBRFMqTkVMRU1TIGVsZW1lbnRzLgotLy8gbXlCIGlzIE1ZVEhSRUFE1XMgcm93IG9mIEJkYXRhLgotLy8gSW5pdGlhbGl6ZSBBLgotdXBjX2FsbF9nYXRoZXJfYWxsKCBCZGF0YSwgQSwgTkVMRU1TKnNpemVvZihpbnQpLAotVVBDX0lOX0FMTFNZTkMgfCBVUENfT1VUX0FMTFNZTkMgKTsKLTwvcHJlPgotPGxpPgotPGxpPgotPC91bD4KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfYWxsX2xvY2tfYWxsb2MuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9sb2NrX2FsbG9jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjI5MTMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfYWxsX2xvY2tfYWxsb2MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTxoMiA+VGhlIDxjb2RlPnVwY19hbGxfbG9ja19hbGxvYzwvY29kZT4gZnVuY3Rpb24gICA8L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHVwY19sb2NrX3QgKnVwY19hbGxfbG9ja19hbGxvYyh2b2lkKTsgICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotCi08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci0KLTxwPgotVGhlIDxjb2RlPnVwY19hbGxfbG9ja19hbGxvYzwvY29kZT4gICAgZnVuY3Rpb24gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgbG9jayBhbmQgcmV0dXJucwotYSBwb2ludGVyIHRvIGl0LiBUaGUgbG9jayBpcyBjcmVhdGVkIGluIGFuIHVubG9ja2VkIHN0YXRlLgotPHA+VGhlIDxjb2RlPnVwY19hbGxfbG9ja19hbGxvYzwvY29kZT4gIGZ1bmN0aW9uIGlzICBhIDxpPmNvbGxlY3RpdmU8L2k+IGZ1bmN0aW9uLiAKLVRoZSByZXR1cm4gdmFsdWUgb24gZXZlcnkKLXRocmVhZCBwb2ludHMgdG8gdGhlIHNhbWUgbG9jayBvYmplY3QuCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9wZXJtdXRlLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfcGVybXV0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmI5M2I0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9wZXJtdXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08aDI+VGhlIDxjb2RlPnVwY19hbGxfcGVybXV0ZTwvY29kZT4gZnVuY3Rpb248L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gICAgCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgICNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotICAgIHZvaWQgdXBjX2FsbF9wZXJtdXRlKHNoYXJlZCB2b2lkICogcmVzdHJpY3QgZHN0LAotICAgICAgICBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywKLSAgICAgICAgc2hhcmVkIGNvbnN0IGludCAqIHJlc3RyaWN0IHBlcm0sCi0gICAgICAgIHNpemVfdCBuYnl0ZXMsIHVwY19mbGFnX3QgZmxhZ3MpOwotPC9wcmU+Ci08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci08cD4KLVRoZSA8Y29kZT51cGNfYWxsX3Blcm11dGUgPC9jb2RlPiAgZnVuY3Rpb24gCi1jb3BpZXMgYSBibG9jayBvZiBtZW1vcnkgZnJvbSBhIHNoYXJlZCBtZW1vcnkKLWFyZWEgdGhhdCBoYXMgYWZmaW5pdHkgdG8gdGhlIGl0aCB0aHJlYWQgdG8gYSBibG9jayBvZiBhIHNoYXJlZCBtZW1vcnkKLXRoYXQgaGFzIGFmZmluaXR5IHRvIHRocmVhZCBwZXJtW2ldLiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggYmxvY2sgaXMKLTxjb2RlPm5ieXRlczwvY29kZT4uCi08cD48Y29kZT5uYnl0ZXM8L2NvZGU+IG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCi08cD48Y29kZT5wZXJtWzAuLlRIUkVBRFMtMV08L2NvZGU+IG11c3QgY29udGFpbiA8Y29kZT5USFJFQURTPC9jb2RlPgotZGlzdGluY3QgdmFsdWVzOiAKLTxjb2RlPjAsIDEsIC4uLiwgVEhSRUFEUy0xLjwvY29kZT4KLTxwPlRoZSA8Y29kZT51cGNfYWxsX3Blcm11dGUgPC9jb2RlPiBmdW5jdGlvbiB0cmVhdHMgdGhlIDxjb2RlPnNyYzwvY29kZT4gcG9pbnRlciBhbmQgdGhlIDxjb2RlPmRzdDwvY29kZT4gcG9pbnRlcgotYXMgaWYgZWFjaCBwb2ludGVkIHRvIGEgc2hhcmVkIG1lbW9yeSBhcmVhIG9mIDxjb2RlPm5ieXRlczwvY29kZT4gYnl0ZXMgb24gZWFjaCB0aHJlYWQKLWFuZCB0aGVyZWZvcmUgaGFkIHR5cGU6Ci08cHJlPgotICAgIHNoYXJlZCBbPGNvZGU+bmJ5dGVzPC9jb2RlPl0gY2hhcls8Y29kZT5uYnl0ZXM8L2NvZGU+ICogVEhSRUFEU10KLSAgICA8L3ByZT4KLTxwPlRoZSB0YXJnZXRzIG9mIHRoZSA8Y29kZT5zcmM8L2NvZGU+LCBwZXJtLCBhbmQgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVycyBtdXN0IGhhdmUgYWZmaW5pdHkgdG8gdGhyZWFkIDAuCi08cD5UaGUgPGNvZGU+c3JjPC9jb2RlPiBhbmQgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVycyBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IGhhdmUgcGhhc2UgMC4KLTxwPlRoZSBlZmZlY3QgaXMgZXF1aXZhbGVudCB0byBjb3B5aW5nIHRoZSBibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzIHRoYXQgaGFzIGFmZmluaXR5Ci10byB0aHJlYWQgaSBwb2ludGVkIHRvIGJ5IDxjb2RlPnNyYzwvY29kZT4gdG8gdGhlIGJsb2NrIG9mIDxjb2RlPm5ieXRlczwvY29kZT4gYnl0ZXMgdGhhdCBoYXMgYWZmaW5pdHkKLXRvIHRocmVhZCBwZXJtW2ldIHBvaW50ZWQgdG8gYnkgPGNvZGU+ZHN0PC9jb2RlPi4KLTx1bD4KLTxsaT5FWEFNUExFIDE6IDxjb2RlPnVwY19hbGxfcGVybXV0ZTwvY29kZT4KLTxwcmU+Ci0jaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLSNkZWZpbmUgTkVMRU1TIDEwCi1zaGFyZWQgW05FTEVNU10gaW50IEFbTkVMRU1TKlRIUkVBRFNdLCBCW05FTEVNUypUSFJFQURTXTsKLXNoYXJlZCBpbnQgUFtUSFJFQURTXTsKLS8vIEluaXRpYWxpemUgQSBhbmQgUC4KLXVwY19iYXJyaWVyOwotdXBjX2FsbF9wZXJtdXRlKCBCLCBBLCBQLCBzaXplb2YoaW50KSpORUxFTVMsCi1VUENfSU5fTk9TWU5DIHwgVVBDX09VVF9OT1NZTkMgKTsKLXVwY19iYXJyaWVyOwotPC9wcmU+Ci0KLTwvdWw+Ci0KLSAKLTwvdWw+Ci08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9zY2F0dGVyLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxfc2NhdHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjIxZTkyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2FsbF9zY2F0dGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08aDI+VGhlIDxjb2RlPnVwY19hbGxfc2NhdHRlcjwvY29kZT4gZnVuY3Rpb248L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gICAgCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgICNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotICAgIHZvaWQgdXBjX2FsbF9zY2F0dGVyKHNoYXJlZCB2b2lkICogcmVzdHJpY3QgZHN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ieXRlcywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXBjX2ZsYWdfdCBmbGFncyk7Ci0gICAgICAgICAgICAgICAKLTwvcHJlPgotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotPHA+Ci1UaGUgPGNvZGU+dXBjX2FsbF9zY2F0dGVyIDwvY29kZT4gIGZ1bmN0aW9uIAotY29waWVzIHRoZSBpdGggYmxvY2sgb2YgYW4gYXJlYSBvZiBzaGFyZWQKLW1lbW9yeSB3aXRoIGFmZmluaXR5IHRvIGEgc2luZ2xlIHRocmVhZCB0byBhIGJsb2NrIG9mIHNoYXJlZCBtZW1vcnkgd2l0aAotYWZmaW5pdHkgdG8gdGhlIGl0aCB0aHJlYWQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBibG9jayBpcyA8Y29kZT5uYnl0ZXM8L2NvZGU+LgotPHA+PGNvZGU+bmJ5dGVzPC9jb2RlPiBtdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgotPHA+VGhlIDxjb2RlPnVwY19hbGxfc2NhdHRlciA8L2NvZGU+ICBmdW5jdGlvbiB0cmVhdHMgdGhlIDxjb2RlPnNyYzwvY29kZT4gcG9pbnRlciBhcyBpZiBpdCBwb2ludGVkIHRvIGEKLXNoYXJlZCBtZW1vcnkgYXJlYSB3aXRoIHRoZSB0eXBlOgotPHByZT4KLSAgICBzaGFyZWQgW10gY2hhcltuYnl0ZXMgKiBUSFJFQURTXQotIDwvcHJlPgotPHA+YW5kIGl0IHRyZWF0cyB0aGUgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVyIGFzIGlmIGl0IHBvaW50ZWQgdG8gYSBzaGFyZWQgbWVtb3J5IGFyZWEgd2l0aAotdGhlIHR5cGU6Ci08cHJlPgotICAgIHNoYXJlZCBbbmJ5dGVzXSBjaGFyW25ieXRlcyAqIFRIUkVBRFNdCi08L3ByZT4KLTxwPlRoZSB0YXJnZXQgb2YgdGhlIDxjb2RlPmRzdDwvY29kZT4gcG9pbnRlciBtdXN0IGhhdmUgYWZmaW5pdHkgdG8gdGhyZWFkIDAuCi08cD5UaGUgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVyIGlzIHRyZWF0ZWQgYXMgaWYgaXQgaGFzIHBoYXNlIDAuCi08cD5Gb3IgZWFjaCB0aHJlYWQgaSwgdGhlIGVmZmVjdCBpcyBlcXVpdmFsZW50IHRvIGNvcHlpbmcgdGhlIGl0aCBibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+Ci1ieXRlcyBwb2ludGVkIHRvIGJ5IDxjb2RlPnNyYzwvY29kZT4gdG8gdGhlIGJsb2NrIG9mIDxjb2RlPm5ieXRlczwvY29kZT4gYnl0ZXMgcG9pbnRlZCB0byBieSAKLTxjb2RlPmRzdDwvY29kZT4gdGhhdAotaGFzIGFmZmluaXR5IHRvIHRocmVhZCBpLgotPHVsPgotPGxpPkVYQU1QTEUgMTogPGNvZGU+dXBjX2FsbF9zY2F0dGVyPC9jb2RlPiBmb3IgdGhlIGR5bmFtaWMgVEhSRUFEUyB0cmFuc2xhdGlvbiBlbnZpcm9ubWVudC4KLTxwcmU+Ci0jaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKLSNkZWZpbmUgTlVNRUxFTVMgMTAKLSNkZWZpbmUgU1JDX1RIUkVBRCAxCi1zaGFyZWQgaW50ICpBOwotc2hhcmVkIFtdIGludCAqbXlBLCAqc3JjQTsKLXNoYXJlZCBbTlVNRUxFTVNdIGludCBCW05VTUVMRU1TKlRIUkVBRFNdOwotLy8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gYXJyYXkgZGlzdHJpYnV0ZWQgYWNyb3NzIGFsbCB0aHJlYWRzCi1BID0gdXBjX2FsbF9hbGxvYyhUSFJFQURTLCBUSFJFQURTKk5VTUVMRU1TKnNpemVvZihpbnQpKTsKLW15QSA9IChzaGFyZWQgW10gaW50ICopICZBW01ZVEhSRUFEXTsKLWZvciAoaT0wOyBpPE5VTUVMRU1TKlRIUkVBRFM7IGkrKykKLW15QVtpXSA9IGkgKyBOVU1FTEVNUypUSFJFQURTKk1ZVEhSRUFEOyAvLyAoZm9yIGV4YW1wbGUpCi0vLyBzY2F0dGVyIHRoZSBTUkNfVEhSRUFE1XMgcm93IG9mIHRoZSBhcnJheQotc3JjQSA9IChzaGFyZWQgW10gaW50ICopICZBW1NSQ19USFJFQURdOwotdXBjX2JhcnJpZXI7Ci11cGNfYWxsX3NjYXR0ZXIoIEIsIHNyY0EsIHNpemVvZihpbnQpKk5VTUVMRU1TLAotVVBDX0lOX05PU1lOQyB8IFVQQ19PVVRfTk9TWU5DKTsKLXVwY19iYXJyaWVyOwotPC9wcmU+Ci08bGk+RVhBTVBMRSAyOiA8Y29kZT51cGNfYWxsX3NjYXR0ZXI8L2NvZGU+ICBmb3IgdGhlIHN0YXRpYyBUSFJFQURTIHRyYW5zbGF0aW9uIGVudmlyb25tZW50LgotPHByZT4KLSNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwotI2RlZmluZSBORUxFTVMgMTAKLXNoYXJlZCBbXSBpbnQgQVtORUxFTVMqVEhSRUFEU107Ci1zaGFyZWQgW05FTEVNU10gaW50IEJbTkVMRU1TKlRIUkVBRFNdOwotIAotLy8gSW5pdGlhbGl6ZSBBLgotdXBjX2FsbF9zY2F0dGVyKCBCLCBBLCBzaXplb2YoaW50KSpORUxFTVMsCi1VUENfSU5fQUxMU1lOQyB8IFVQQ19PVVRfQUxMU1lOQyApOwotPC9wcmU+Ci0gCi08L3VsPgotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxvYy5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfYWxsb2MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY5NGJiMC4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19hbGxvYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX2FsbG9jPC9jb2RlPiBmdW5jdGlvbiAgICA8L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHByZT4gCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHNoYXJlZCB2b2lkICp1cGNfYWxsb2Moc2l6ZV90IG5ieXRlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotCi08cD4KLVRoZSA8Y29kZT51cGNfYWxsb2MgIDwvY29kZT4gYWxsb2NhdGVzIHNoYXJlZCBzcGFjZSBvZiBhdCBsZWFzdCA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzIHdpdGgKLWFmZmluaXR5IHRvIHRoZSBjYWxsaW5nIHRocmVhZC4KLTxwPgotPGNvZGU+dXBjX2FsbG9jPC9jb2RlPiBpcyBzaW1pbGFyIHRvIG1hbGxvYygpIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgYSBwb2ludGVyLXRvLXNoYXJlZAotdmFsdWUuIEl0IGlzIG5vdCBhIDxpPmNvbGxlY3RpdmU8L2k+IGZ1bmN0aW9uLiBJZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGlzIHplcm8sIHRoZSByZXN1bHQgaXMgYSBudWxsCi1wb2ludGVyLXRvLXNoYXJlZC4KLQotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19mcmVlLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19mcmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYmY2NzkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfZnJlZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX2ZyZWU8L2NvZGU+IGZ1bmN0aW9uICAgPC9oMj4KLTxoND5TeW5vcHNpczwvaDQ+Ci08cHJlPiAKLSAgICAjaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0gICAgdm9pZCB1cGNfZnJlZShzaGFyZWQgdm9pZCAqcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgCi08L3ByZT4KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLQotPHA+Ci1UaGUgPGNvZGU+dXBjX2ZyZWUgPC9jb2RlPiAgIGZ1bmN0aW9uIGZyZWVzIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc2hhcmVkIHN0b3JhZ2UgcG9pbnRlZAotdG8gYnkgPGNvZGU+cHRyPC9jb2RlPi4gSWYgPGNvZGU+cHRyPC9jb2RlPiBpcyBhIG51bGwgcG9pbnRlciwgbm8gYWN0aW9uIG9jY3Vycy4gT3RoZXJ3aXNlLCBpZiB0aGUKLWFyZ3VtZW50IGRvZXMgbm90IG1hdGNoIGEgcG9pbnRlciBlYXJsaWVyIHJldHVybmVkIGJ5IHRoZSAKLTxhIGhyZWY9InVwY19hbGxvYy5odG1sIj48Y29kZT51cGNfYWxsb2M8L2NvZGU+PC9hPiwKLTxhIGhyZWY9InVwY19nbG9iYWxfYWxsb2MuaHRtbCI+PGNvZGU+dXBjX2dsb2JhbF9hbGxvYzwvY29kZT48L2E+LAotPGEgaHJlZj0idXBjX2FsbF9hbGxvYy5odG1sIj48Y29kZT51cGNfYWxsX2FsbG9jPC9jb2RlPjwvYT4sIG9yIAotPGEgaHJlZj0idXBjX2xvY2FsX2FsbG9jLmh0bWwiPjxjb2RlPnVwY19sb2NhbF9hbGxvYzwvY29kZT48L2E+Ci1mdW5jdGlvbiwgb3IgaWYgdGhlCi1zcGFjZSBoYXMgYmVlbiBkZWFsbG9jYXRlZCBieSBhIHByZXZpb3VzIGNhbGwsIGJ5IGFueSB0aHJlYWQgCi0oaS5lLiwgb25seSBvbmUgdGhyZWFkIG1heSBjYWxsIDxjb2RlPnVwY19mcmVlIDwvY29kZT4gZm9yIGVhY2ggYWxsb2NhdGlvbiksCi10byA8Y29kZT51cGNfZnJlZTwvY29kZT4sCi10aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgotCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2dsb2JhbF9hbGxvYy5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfZ2xvYmFsX2FsbG9jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNzM1MjUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfZ2xvYmFsX2FsbG9jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08aDIgPnVwY19nbG9iYWxfYWxsb2M8L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHA+Ci08cHJlPgotICAgICNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSAgICBzaGFyZWQgdm9pZCAqdXBjX2dsb2JhbF9hbGxvYyhzaXplX3QgbmJsb2NrcywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ieXRlcyk7Ci08L3ByZT4KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLQotPHA+Ci1UaGUgPGNvZGU+dXBjX2dsb2JhbF9hbGxvYzwvY29kZT4gYWxsb2NhdGVzIHNoYXJlZCBzcGFjZSBjb21wYXRpYmxlIHdpdGggdGhlIGRlY2xhcmF0aW9uOgotPHA+Ci08Y29kZT4KLXNoYXJlZCBbbmJ5dGVzXSBjaGFyW25ibG9ja3MgKiBuYnl0ZXNdPC9jb2RlPgotPHA+Ci08Y29kZT51cGNfZ2xvYmFsX2FsbG9jPC9jb2RlPiBmdW5jdGlvbiBpcyBub3QgYSBjb2xsZWN0aXZlIGZ1bmN0aW9uLiBJZiBjYWxsZWQgYnkKLW11bHRpcGxlIHRocmVhZHMsIGFsbCB0aHJlYWRzIHdoaWNoIG1ha2UgdGhlIGNhbGwgZ2V0IGRpZmZlcmVudCBhbGxvY2F0aW9ucy4gSWYKLTxjb2RlPm5ibG9ja3MqbmJ5dGVzPC9jb2RlPiBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGEgbnVsbCBwb2ludGVyLXRvLXNoYXJlZC4KLQotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19nbG9iYWxfZXhpdC5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfZ2xvYmFsX2V4aXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyZjk5OC4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19nbG9iYWxfZXhpdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX2dsb2JhbF9leGl0PC9jb2RlPiBmdW5jdGlvbiA8L2gyPgotPGg0PlN5bm9wc2lzPC9oND4KLTxwcmU+Ci0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHZvaWQgdXBjX2dsb2JhbF9leGl0KGludCBzdGF0dXMpOwotPC9wcmU+Ci08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci08cD4KLTxjb2RlPnVwY19nbG9iYWxfZXhpdCgpIDwvY29kZT4KLWZsdXNoZXMgYWxsIEkvTywgcmVsZWFzZXMgYWxsIHN0b3JhZ2UsIGFuZCB0ZXJtaW5hdGVzIHRoZQotZXhlY3V0aW9uIGZvciBhbGwgYWN0aXZlIHRocmVhZHMuCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgotCmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19nbG9iYWxfbG9ja19hbGxvYy5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfZ2xvYmFsX2xvY2tfYWxsb2MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRlMzVmZi4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19nbG9iYWxfbG9ja19hbGxvYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX2dsb2JhbF9sb2NrX2FsbG9jPC9jb2RlPiBmdW5jdGlvbiAgIDwvaDI+Ci08aDQ+U3lub3BzaXM8L2g0PgotPHA+Ci0KLTxwcmU+IAotICAgICNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSAgICB1cGNfbG9ja190ICp1cGNfZ2xvYmFsX2xvY2tfYWxsb2Modm9pZCk7ICAgICAgICAgICAgICAgICAgICAgIAotPC9wcmU+Ci0KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLQotPHA+Ci1UaGUgPGNvZGU+dXBjX2dsb2JhbF9sb2NrX2FsbG9jIDwvY29kZT4gICBmdW5jdGlvbiBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYSBsb2NrIGFuZCByZXR1cm5zCi1hIHBvaW50ZXIgdG8gaXQuIFRoZSBsb2NrIGlzIGNyZWF0ZWQgaW4gYW4gdW5sb2NrZWQgc3RhdGUuCi08cD5UaGUgPGNvZGU+dXBjX2dsb2JhbF9sb2NrX2FsbG9jIDwvY29kZT4gZnVuY3Rpb24gaXMgbm90IGEgPGk+Y29sbGVjdGl2ZTwvaT4gZnVuY3Rpb24uICBJZiBjYWxsZWQKLWJ5IG11bHRpcGxlIHRocmVhZHMsIGFsbCB0aHJlYWRzIHdoaWNoIG1ha2UgdGhlIGNhbGwgZ2V0IGRpZmZlcmVudCBhbGxvY2F0aW9ucy4KLQotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19sb2NhbF9hbGxvYy5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbG9jYWxfYWxsb2MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI0N2ExYS4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19sb2NhbF9hbGxvYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX2xvY2FsX2FsbG9jPC9jb2RlPiBmdW5jdGlvbiAmbmJzcDsmbmJzcDsgPGk+ZGVwcmVjYXRlZDwvaT4gPC9oMj4KLQotPGg0PlN5bm9wc2lzPC9oND4KLTxwPgotPHByZT4gCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHNoYXJlZCB2b2lkICp1cGNfbG9jYWxfYWxsb2Moc2l6ZV90IG5ibG9ja3MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ieXRlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotCi08cD4KLVRoZSA8Y29kZT51cGNfbG9jYWxfYWxsb2MgPC9jb2RlPiBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIFVQQwotcHJvZ3JhbXMgc2hvdWxkIHVzZSB0aGUgPGNvZGU+dXBjX2FsbG9jIDwvY29kZT4gZnVuY3Rpb24gaW5zdGVhZC4gU3VwcG9ydCBtYXkgYmUgcmVtb3ZlZAotaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgc3BlY2lmaWNhdGlvbi4KLTxwPgotVGhlIDxjb2RlPnVwY19sb2NhbF9hbGxvYyA8L2NvZGU+IGZ1bmN0aW9uIGFsbG9jYXRlcyBzaGFyZWQgc3BhY2Ugb2YgYXQgbGVhc3QgCi08Y29kZT5uYmxvY2tzICogbmJ5dGVzIDwvY29kZT4gYnl0ZXMgd2l0aCBhZmZpbml0eSB0byB0aGUgY2FsbGluZyB0aHJlYWQuIElmIAotPGNvZGU+bmJsb2NrcyAqIG5ieXRlcyA8L2NvZGU+ICBpcyB6ZXJvLAotdGhlIHJlc3VsdCBpcyBhIG51bGwgcG9pbnRlci10by1zaGFyZWQuCi08cD4KLTxjb2RlPnVwY19sb2NhbF9hbGxvYyA8L2NvZGU+IGlzIHNpbWlsYXIgdG8gbWFsbG9jKCkgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyBhIHBvaW50ZXItdG8tc2hhcmVkCi12YWx1ZS4gSXQgaXMgbm90IGEgPGk+Y29sbGVjdGl2ZTwvaT4gZnVuY3Rpb24uCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbG9jay5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbG9jay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTA5MTllLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2xvY2suaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTxoMiA+VGhlIDxjb2RlPnVwY19sb2NrPC9jb2RlPiBmdW5jdGlvbiAgIDwvaDI+Ci0KLTxoND5TeW5vcHNpczwvaDQ+Ci08cD4KLQotPHByZT4gCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHZvaWQgdXBjX2xvY2sodXBjX2xvY2tfdCAqcHRyKTsgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotCi08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci0KLTxwPgotVGhlIDxjb2RlPnVwY19sb2NrPC9jb2RlPiAgICBmdW5jdGlvbiAgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIGxvY2sgcG9pbnRlZCB0byBieSA8Y29kZT5wdHI8L2NvZGU+IHRvIGxvY2tlZC4KLTxwPklmIHRoZSBsb2NrIGlzIGFscmVhZHkgaW4gbG9ja2VkIHN0YXRlIGR1ZSB0byB0aGUgY2FsbGluZyB0aHJlYWQgc2V0dGluZyBpdCB0bwotbG9ja2VkIHN0YXRlLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KLTxwPklmIHRoZSBsb2NrIGlzIGFscmVhZHkgaW4gbG9ja2VkIHN0YXRlLCB0aGVuIHRoZSBjYWxsaW5nIHRocmVhZCB3YWl0cyBmb3Igc29tZQotb3RoZXIgdGhyZWFkIHRvIHNldCB0aGUgc3RhdGUgdG8gdW5sb2NrZWQuIAotPHA+T25jZSB0aGUgbG9jayBpcyBpbiBzdGF0ZSB1bmxvY2tlZCwgYSBzaW5nbGUgY2FsbGluZyB0aHJlYWQgc2V0cyB0aGUgc3RhdGUgdG8KLWxvY2tlZCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMuCi08cD5BIG51bGwgc3RyaWN0IGFjY2VzcyBpcyBpbXBsaWVkIGFmdGVyIGEgY2FsbCB0byB1cGNfbG9jaygpLgotCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX2xvY2tfYXR0ZW1wdC5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbG9ja19hdHRlbXB0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOTJhOWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbG9ja19hdHRlbXB0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08aDIgPlRoZSA8Y29kZT51cGNfbG9ja19hdHRlbXB0PC9jb2RlPiBmdW5jdGlvbiAgIDwvaDI+Ci0KLTxoND5TeW5vcHNpczwvaDQ+Ci08cD4KLQotPHByZT4gCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIGludCB1cGNfbG9ja19hdHRlbXB0KHVwY19sb2NrX3QgKnB0cik7ICAgICAgICAgICAgICAgCi08L3ByZT4KLQotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotCi08cD4KLVRoZSA8Y29kZT51cGNfbG9ja19hdHRlbXB0PC9jb2RlPiAgICBmdW5jdGlvbiAgYXR0ZW1wdHMgdG8gc2V0IHRoZSBzdGF0ZSBvZiB0aGUgbG9jayBwb2ludGVkCi10byBieSA8Y29kZT5wdHI8L2NvZGU+IHRvIGxvY2tlZC4KLTxwPklmIHRoZSBsb2NrIGlzIGFscmVhZHkgaW4gbG9ja2VkIHN0YXRlIGR1ZSB0byB0aGUgY2FsbGluZyB0aHJlYWQgc2V0dGluZyBpdCB0bwotbG9ja2VkIHN0YXRlLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KLTxwPklmIHRoZSBsb2NrIGlzIGFscmVhZHkgaW4gbG9ja2VkIHN0YXRlIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuCi08cD5JZiB0aGUgbG9jayBpcyBpbiBzdGF0ZSB1bmxvY2tlZCwgYSBzaW5nbGUgY2FsbGluZyB0aHJlYWQgc2V0cyB0aGUgc3RhdGUgdG8gbG9ja2VkCi1hbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMS4KLTxwPkEgbnVsbCBzdHJpY3QgYWNjZXNzIGlzIGltcGxpZWQgYWZ0ZXIgYSBjYWxsIHRvIHVwY19sb2NrX2F0dGVtcHQoKSB0aGF0IHJldHVybnMKLTEuCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbG9ja19mcmVlLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19sb2NrX2ZyZWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2ZDNmMy4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19sb2NrX2ZyZWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTxoMiA+VGhlIDxjb2RlPnVwY19sb2NrX2ZyZWU8L2NvZGU+IGZ1bmN0aW9uICAgPC9oMj4KLQotPGg0PlN5bm9wc2lzPC9oND4KLTxwPgotCi08cHJlPiAKLSAgICAjaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0gICAgdXBjX2xvY2tfdCAqdXBjX2xvY2tfZnJlZSh1cGNfbG9ja190ICpwdHIpOyAgICAgICAgICAgICAgICAgICAgIAotPC9wcmU+Ci0KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLQotPHA+Ci1UaGUgPGNvZGU+dXBjX2xvY2tfZnJlZTwvY29kZT4gICAgZnVuY3Rpb24gIGZyZWVzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkeW5hbWljYWxseQotYWxsb2NhdGVkIDxjb2RlPnVwY19sb2NrX3Q8L2NvZGU+IHBvaW50ZWQgdG8gYnkgPGNvZGU+cHRyPC9jb2RlPi4gCi1JZiA8Y29kZT5wdHI8L2NvZGU+IGlzIGEgbnVsbCBwb2ludGVyLCBubwotYWN0aW9uIG9jY3Vycy4gCi1PdGhlcndpc2UsIGlmIHRoZSBhcmd1bWVudCBkb2VzIG5vdCBtYXRjaCBhIHBvaW50ZXIgZWFybGllcgotcmV0dXJuZWQgYnkgdGhlIDxjb2RlPnVwY19nbG9iYWxfbG9ja19hbGxvYzwvY29kZT4gb3IgCi08Y29kZT51cGNfYWxsX2xvY2tfYWxsb2M8L2NvZGU+IGZ1bmN0aW9uLAotb3IgaWYgdGhlIGxvY2sgaGFzIGJlZW4gZGVhbGxvY2F0ZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvIDxjb2RlPnVwY19sb2NrX2ZyZWU8L2NvZGU+LAotdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KLTxwPgotPGNvZGU+dXBjX2xvY2tfZnJlZTwvY29kZT4gc3VjY2VlZHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSByZWZlcmVuY2VkIGxvY2sgaXMgY3VycmVudGx5Ci11bmxvY2tlZCBvciBjdXJyZW50bHkgbG9ja2VkIChieSBhbnkgdGhyZWFkKS4KLTxwPkFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIGxvY2tpbmcgZnVuY3Rpb25zIGZyb20gYW55IHRocmVhZCB1c2luZyA8Y29kZT5wdHI8L2NvZGU+IGhhdmUKLXVuZGVmaW5lZCBlZmZlY3RzLiBUaGlzIGFsc28gYXBwbGllcyB0byBhbnkgdGhyZWFkIGN1cnJlbnRseSBjYWxsaW5nIDxjb2RlPnVwY19sb2NrPC9jb2RlPi4KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbG9ja190Lmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19sb2NrX3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJhYTU5Ni4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19sb2NrX3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTxoMj5UaGUgPGNvZGU+dXBjX2xvY2tfdDwvY29kZT4gdHlwZTwvaDI+Ci0KLTxoND5TeW5vcHNpczwvaDQ+Ci08cD5UaGUgdHlwZSBkZWNsYXJlZCBpcwotPHByZT4gICAKLSAgICB1cGNfbG9ja190ICAgICAgICAgICAgICAgCi08L3ByZT4KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLTxwPgotVGhlIHR5cGUgPGNvZGU+dXBjX2xvY2tfdCA8L2NvZGU+ICBpcyBhbiBvcGFxdWUgVVBDIHR5cGUuIDxjb2RlPnVwY19sb2NrX3QgPC9jb2RlPiBpcyBhIHNoYXJlZAotZGF0YXR5cGUgd2l0aCBpbmNvbXBsZXRlIHR5cGUgKGFzIGRlZmluZWQgaW4gW0lTTy9JRUMwMCBTZWMgNi4yLjVdKS4gCi1PYmplY3RzCi1vZiB0eXBlIDxjb2RlPnVwY19sb2NrX3QgPC9jb2RlPiBtYXkgdGhlcmVmb3JlIG9ubHkgYmUgbWFuaXB1bGF0ZWQgdGhyb3VnaCBwb2ludGVycy4KLVN1Y2ggb2JqZWN0cyBoYXZlIHR3byBzdGF0ZXMgY2FsbGVkIGxvY2tlZCBhbmQgdW5sb2NrZWQuCi08cD5Ud28gcG9pbnRlcnMgdG8gdGhhdCByZWZlcmVuY2UgdGhlIHNhbWUgbG9jayBvYmplY3Qgd2lsbCBjb21wYXJlIGFzIGVxdWFsLgotVGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdXBjX3BoYXNlb2YoKSwgdXBjX3RocmVhZG9mKCksIGFuZCB1cGNfYWRkcmZpZWxkKCkKLXRvIHN1Y2ggcG9pbnRlcnMgYXJlIHVuZGVmaW5lZC4KLQotCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX21lbWNweS5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbWVtY3B5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZTRhZjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfbWVtY3B5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08aDIgPlRoZSA8Y29kZT51cGNfbWVtY3B5PC9jb2RlPiBmdW5jdGlvbiAgIDwvaDI+Ci0KLTxoND5TeW5vcHNpczwvaDQ+Ci08cD4KLQotPHByZT4gCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHZvaWQgdXBjX21lbWNweShzaGFyZWQgdm9pZCAqIHJlc3RyaWN0IGRzdCwgCi0gICAgICAgICAgICAgICAgICAgIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCAKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwotICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotCi08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci0KLTxwPgotVGhlIDxjb2RlPnVwY19tZW1jcHk8L2NvZGU+ICAgIGZ1bmN0aW9uICBjb3BpZXMgbiBjaGFyYWN0ZXJzIGZyb20gYSBzaGFyZWQgb2JqZWN0IGhhdmluZwotYWZmaW5pdHkgd2l0aCBvbmUgdGhyZWFkIHRvIGEgc2hhcmVkIG9iamVjdCBoYXZpbmcgYWZmaW5pdHkgd2l0aCB0aGUgc2FtZSBvcgotYW5vdGhlciB0aHJlYWQuCi08cD5UaGUgPGNvZGU+dXBjX21lbWNweTwvY29kZT4gZnVuY3Rpb24gdHJlYXRzIHRoZSA8Y29kZT5kc3Q8L2NvZGU+IGFuZCA8Y29kZT5zcmM8L2NvZGU+IHBvaW50ZXJzIGFzIGlmIAotdGhleSBoYWQgdHlwZToKLTxwcmU+Ci0gICAgc2hhcmVkIFtdIGNoYXJbbl0KLTwvcHJlPgotVGhlIGVmZmVjdCBpcyBlcXVpdmFsZW50IHRvIGNvcHlpbmcgdGhlIGVudGlyZSBjb250ZW50cyBmcm9tIG9uZSBzaGFyZWQgYXJyYXkKLW9iamVjdCB3aXRoIHRoaXMgdHlwZSAodGhlIDxjb2RlPnNyYzwvY29kZT4gYXJyYXkpIHRvIGFub3RoZXIgc2hhcmVkIGFycmF5IG9iamVjdCB3aXRoCi10aGlzIHR5cGUgKHRoZSA8Y29kZT5kc3Q8L2NvZGU+IGFycmF5KS4KLQotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19tZW1nZXQuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX21lbWdldC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2JjNDQ0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX21lbWdldC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX21lbWdldDwvY29kZT4gZnVuY3Rpb24gICA8L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHA+Ci0KLTxwcmU+IAotICAgICNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSAgICB2b2lkIHVwY19tZW1nZXQodm9pZCAqIHJlc3RyaWN0IGRzdCwgCi0gICAgICAgICAgICAgICAgICAgIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCAKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwotICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotCi08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci0KLTxwPgotVGhlIDxjb2RlPnVwY19tZW1nZXQ8L2NvZGU+ICAgIGZ1bmN0aW9uICBjb3BpZXMgbiBjaGFyYWN0ZXJzIGZyb20gYSBzaGFyZWQgb2JqZWN0IHdpdGggYWZmaW5pdHkKLXRvIGFueSBzaW5nbGUgdGhyZWFkIHRvIGFuIG9iamVjdCBvbiB0aGUgY2FsbGluZyB0aHJlYWQuCi08cD5UaGUgPGNvZGU+dXBjX21lbWdldDwvY29kZT4gZnVuY3Rpb24gdHJlYXRzIHRoZSA8Y29kZT5zcmM8L2NvZGU+IHBvaW50ZXIgYXMgaWYgaXQgaGFkIHR5cGU6Ci08cHJlPgotICAgIHNoYXJlZCBbXSBjaGFyW25dCi0gICAgPC9wcmU+Ci1UaGUgZWZmZWN0IGlzIGVxdWl2YWxlbnQgdG8gY29weWluZyB0aGUgZW50aXJlIGNvbnRlbnRzIGZyb20gb25lIHNoYXJlZCBhcnJheQotb2JqZWN0IHdpdGggdGhpcyB0eXBlICh0aGUgPGNvZGU+c3JjPC9jb2RlPiBhcnJheSkgdG8gYW4gYXJyYXkgb2JqZWN0ICh0aGUgPGNvZGU+ZHN0PC9jb2RlPiBhcnJheSkKLWRlY2xhcmVkIHdpdGggdGhlIHR5cGUKLTxwcmU+Ci0gICAgY2hhcltuXQotPC9wcmU+Ci0KLQotPHA+Jm5ic3AKLTxwPiZuYnNwCi08cD48YSBocmVmPSJ0ZXJtcy5odG1sIj5UZXJtcywgZGVmaW5pdGlvbnMsIGFuZCBzeW1ib2xzPC9hPjxicj4KLTxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkJhY2sgdG8gaW5kZXggb2YgYWxsIFVQQyBmdW5jdGlvbnM8L2E+CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY19tZW1zZXQuaHRtbCBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX21lbXNldC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODRkODIwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX21lbXNldC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPGgyID5UaGUgPGNvZGU+dXBjX21lbXNldDwvY29kZT4gZnVuY3Rpb24gICA8L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHA+Ci0KLTxwcmU+IAotICAgICNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSAgICB2b2lkIHVwY19tZW1zZXQoc2hhcmVkIHZvaWQgKmRzdCwgCi0gICAgICAgICAgICAgICAgICAgIGludCBjLCAKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG4pOwotICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotCi08cD4KLTxoND5EZXNjcmlwdGlvbjwvaDQ+Ci0KLTxwPgotVGhlIDxjb2RlPnVwY19tZW1zZXQ8L2NvZGU+ICAgIGZ1bmN0aW9uICBjb3BpZXMgdGhlIHZhbHVlIG9mIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZAotY2hhciwgdG8gYSBzaGFyZWQgb2JqZWN0IHdpdGggYWZmaW5pdHkgdG8gYW55IHNpbmdsZSB0aHJlYWQuIFRoZSBudW1iZXIgb2YKLWJ5dGVzIHNldCBpcyBuLgotPHA+VGhlIDxjb2RlPnVwY19tZW1zZXQ8L2NvZGU+ICBmdW5jdGlvbiB0cmVhdHMgdGhlIDxjb2RlPmRzdDwvY29kZT4gcG9pbnRlciBhcyBpZiBoYWQgdHlwZToKLTxwcmU+Ci0gICAgc2hhcmVkIFtdIGNoYXJbbl0KLTwvcHJlPgotICAgIAotVGhlIGVmZmVjdCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGVudGlyZSBjb250ZW50cyBvZiBhIHNoYXJlZCBhcnJheSBvYmplY3QKLXdpdGggdGhpcyB0eXBlICh0aGUgPGNvZGU+ZHN0PC9jb2RlPiBhcnJheSkgdG8gdGhlIHZhbHVlIGMuCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfcGhhc2VvZi5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfcGhhc2VvZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWU0YmZhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX3BoYXNlb2YuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxoMj5UaGUgPGNvZGU+dXBjX3BoYXNlb2Y8L2NvZGU+IGZ1bmN0aW9uPC9oMj4KLQotPGg0PlN5bm9wc2lzPC9oND4KLTxwcmU+ICAgICNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSAgICBzaXplX3QgdXBjX3BoYXNlb2Yoc2hhcmVkIHZvaWQgKnB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotCi08cD4KLVRoZSA8Y29kZT51cGNfcGhhc2VvZiA8L2NvZGU+IGZ1bmN0aW9uICByZXR1cm5zIHRoZSBwaGFzZSBjb21wb25lbnQgb2YgdGhlIHBvaW50ZXItdG8tc2hhcmVkCi1hcmd1bWVudC4KLTxwPklmIDxjb2RlPnB0cjwvY29kZT4gaXMgYSBudWxsIHBvaW50ZXItdG8tc2hhcmVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgotCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfcmVzZXRwaGFzZS5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfcmVzZXRwaGFzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzI3ODAyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX3Jlc2V0cGhhc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxoMj5UaGUgPGNvZGU+dXBjX3Jlc2V0cGhhc2U8L2NvZGU+IGZ1bmN0aW9uPC9oMj4KLQotPGg0PlN5bm9wc2lzPC9oND4KLTxwcmU+ICAgIAotICAgICNpbmNsdWRlICZsdDt1cGMuaCZndDsKLSAgICBzaGFyZWQgdm9pZCAqdXBjX3Jlc2V0cGhhc2Uoc2hhcmVkIHZvaWQgKnB0cik7ICAgICAgICAgICAgICAgICAgICAgCi08L3ByZT4KLTxwPgotPGg0PkRlc2NyaXB0aW9uPC9oND4KLQotPHA+Ci1UaGUgPGNvZGU+dXBjX3Jlc2V0cGhhc2UgPC9jb2RlPiBmdW5jdGlvbiAgIHJldHVybnMgYSBwb2ludGVyLXRvLXNoYXJlZCB3aGljaCBpcyBpZGVudGljYWwKLXRvIGl0cyBpbnB1dCBleGNlcHQgdGhhdCBpdCBoYXMgemVybyBwaGFzZS4KLQotCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX3RocmVhZG9mLmh0bWwgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9odG1sL3VwY190aHJlYWRvZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGI0MTBiLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX3RocmVhZG9mLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08aDIgPlRoZSA8Y29kZT51cGNfdGhyZWFkb2Y8L2NvZGU+IGZ1bmN0aW9uICZuYnNwOyZuYnNwOyA8L2gyPgotCi08aDQ+U3lub3BzaXM8L2g0PgotPHA+Ci08cHJlPiAKLSAgICAjaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7Ci0gICAgc2l6ZV90IHVwY190aHJlYWRvZihzaGFyZWQgdm9pZCAqcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAKLTwvcHJlPgotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotPHA+Ci1UaGUgPGNvZGU+dXBjX3RocmVhZG9mIDwvY29kZT5mdW5jdGlvbiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGhyZWFkIHRoYXQgaGFzIGFmZmluaXR5Ci10byB0aGUgc2hhcmVkIG9iamVjdCBwb2ludGVkIHRvIGJ5IDxjb2RlPnB0cjwvY29kZT4uCi08cD4KLUlmIDxjb2RlPnB0cjwvY29kZT4gaXMgYSBudWxsIHBvaW50ZXItdG8tc2hhcmVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgotCi08cD4mbmJzcAotPHA+Jm5ic3AKLTxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgotPHA+PGEgaHJlZj0iaW5kZXguaHRtbCI+QmFjayB0byBpbmRleCBvZiBhbGwgVVBDIGZ1bmN0aW9uczwvYT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2h0bWwvdXBjX3VubG9jay5odG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfdW5sb2NrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMmQwYWIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaHRtbC91cGNfdW5sb2NrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08aDIgPlRoZSA8Y29kZT51cGNfdW5sb2NrPC9jb2RlPiBmdW5jdGlvbiAgIDwvaDI+Ci0KLTxoND5TeW5vcHNpczwvaDQ+Ci08cD4KLQotPHByZT4gCi0gICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwotICAgIHZvaWQgdXBjX3VubG9jayh1cGNfbG9ja190ICpwdHIpOyAgICAgICAgICAgICAgCi08L3ByZT4KLQotPHA+Ci08aDQ+RGVzY3JpcHRpb248L2g0PgotCi08cD4KLVRoZSA8Y29kZT51cGNfdW5sb2NrPC9jb2RlPiAgICBmdW5jdGlvbiAgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIGxvY2sgcG9pbnRlZCB0byBieSA8Y29kZT5wdHI8L2NvZGU+IHRvCi11bmxvY2tlZC4KLTxwPlVubGVzcyB0aGUgbG9jayBpcyBpbiBsb2NrZWQgc3RhdGUgYW5kIHRoZSBjYWxsaW5nIHRocmVhZCBpcyB0aGUgbG9ja2luZyB0aHJlYWQsCi10aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KLTxwPkEgbnVsbCBzdHJpY3QgYWNjZXNzIGlzIGltcGxpZWQgYmVmb3JlIGEgY2FsbCB0byB1cGMgdW5sb2NrKCkuCi0KLTxwPiZuYnNwCi08cD4mbmJzcAotPHA+PGEgaHJlZj0idGVybXMuaHRtbCI+VGVybXMsIGRlZmluaXRpb25zLCBhbmQgc3ltYm9sczwvYT48YnI+Ci08cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaWNvbnMvLmN2c2lnbm9yZSBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2ljb25zLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZjJlYjguLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaWNvbnMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXBzcGJyd3NlLmpiZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaWNvbnMvdXBjLmdpZiBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL2ljb25zL3VwYy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYTg3MzMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvaWNvbnMvdXBjLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmM2ZkZGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXBsdWdpbk5hbWU9VVBDIHN1cHBvcnQgZm9yIFBMRFQKLXBsdWdpblByb3ZpZGVyPUVjbGlwc2Uub3JnCi0KLXZpZXcubmFtZT1VUEMgQXJ0aWZhY3QgVmlldwotdmlld2NhdC5uYW1lPVBUUCBVUEMgVmlld3MKLXJ1bi5sYWJlbD1SdW4gVVBDIEFuYWx5c2lzCi1ydW4udG9vbHRpcD1SdW4gVVBDIEFuYWx5c2lzIG9uIHNlbGVjdGVkIGZpbGUsIGZvbGRlciwgb3IgcHJvamVjdCB0byBmaW5kIFVQQyBBcnRpZmFjdHMKLQotI25lZWQgdG8gYWRkIG1vcmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9wbHVnaW4ueG1sIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZmZjQ0NC4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0gICAKLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotICAgICAgICAgPHBhZ2UKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMucHJlZnMuVVBDUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLnByZWZwYWdlIgotICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbi5wcmVmcy5QTERUUHJlZmVyZW5jZVBhZ2UiCi0gICAgICAgICAgICBuYW1lPSJVUEMiLz4KLSAgICAgICAgIAotICAgPC9leHRlbnNpb24+Ci0KLSAgIDwhLS0gIFVQQyBtYXJrZXJzIC0tPgotICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubWFya2VycyIKLQkJaWQ9InVwY01hcmtlciIKLSAgICAgICAgbmFtZT0idXBjIEFydGlmYWN0IE1hcmtlciI+Ci0gICAgICA8c3VwZXIgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMudGV4dG1hcmtlciIvPgotICAgPC9leHRlbnNpb24+Ci0gICA8IS0tIHRoaXMgY2hhbmdlcyB0aGUgbWFya2VyIGltYWdlIGluIHRoZSBlZGl0b3IgbWFya2VyIGJhciAgLS0+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycy5hbm5vdGF0aW9uVHlwZXMiPgotICAgICAgPHR5cGUKLSAgICAgICAgICAgIG1hcmtlclR5cGU9Im9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy51cGNNYXJrZXIiCi0gICAgICAgICAgICBuYW1lPSJvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMudXBjTWFya2VyQW5ub3RhdGlvbiI+Ci0gICAgICA8L3R5cGU+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzLm1hcmtlckFubm90YXRpb25TcGVjaWZpY2F0aW9uIj4KLSAgICAgIDxzcGVjaWZpY2F0aW9uCi0gICAgICAgICAgICBhbm5vdGF0aW9uVHlwZT0ib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLnVwY01hcmtlckFubm90YXRpb24iCi0gICAgICAgICAgICBpY29uPSJpY29ucy91cGMuZ2lmIiAKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHJlc2VudGF0aW9uTGF5ZXI9IjMiCi0gICAgICAgICAgICBsYWJlbD0idXBjIEFubm90YXRpb24gTWFya2VyIgotICAgICAgICAgICAgCi0gICAgICAgICAgICB0ZXh0UHJlZmVyZW5jZUtleT0idXBjSW5kaWNhdGlvbiIKLSAgICAgICAgICAgIHRleHRQcmVmZXJlbmNlVmFsdWU9InRydWUiCi0gICAgICAgICAgICBoaWdobGlnaHRQcmVmZXJlbmNlS2V5PSJhcnRpZmFjdEhpZ2hsaWdodGluZyIKLSAgICAgICAgICAgIGhpZ2hsaWdodFByZWZlcmVuY2VWYWx1ZT0iZmFsc2UiCi0gICAgICAgICAgICBjb2xvclByZWZlcmVuY2VLZXk9ImFydGlmYWN0SW5kaWNhdGlvbkNvbG9yIgotICAgICAgICAgICAgY29sb3JQcmVmZXJlbmNlVmFsdWU9IjEyOCwxMjgsMTkyIgotICAgICAgICAgICAgdmVydGljYWxSdWxlclByZWZlcmVuY2VLZXk9ImFydGlmYWN0SW5kaWNhdGlvbkluVmVydGljYWxSdWxlciIKLSAgICAgICAgICAgIHZlcnRpY2FsUnVsZXJQcmVmZXJlbmNlVmFsdWU9InRydWUiCi0JCQlzaG93SW5OZXh0UHJldkRyb3Bkb3duVG9vbGJhckFjdGlvbktleT0ic2hvd1BvcnRpbmdJbk5leHRQcmV2RHJvcGRvd25Ub29sYmFyQWN0aW9uIgotICAgICAgICAgICAgc2hvd0luTmV4dFByZXZEcm9wZG93blRvb2xiYXJBY3Rpb249ImZhbHNlIgotICAgICAgICAgICAgb3ZlcnZpZXdSdWxlclByZWZlcmVuY2VLZXk9ImFydGlmYWN0SW5kaWNhdGlvbkluT3ZlcnZpZXdSdWxlciIKLSAgICAgICAgICAgIG92ZXJ2aWV3UnVsZXJQcmVmZXJlbmNlVmFsdWU9InRydWUiCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGluY2x1ZGVPblByZWZlcmVuY2VQYWdlPSJ0cnVlIgotICAgICAgICAgICAgaXNHb1RvUHJldmlvdXNOYXZpZ2F0aW9uVGFyZ2V0S2V5PSJpc1BvcnRpbmdHb1RvUHJldmlvdXNOYXZpZ2F0aW9uVGFyZ2V0IgotCi0gICAgICAgICAgICBpc0dvVG9OZXh0TmF2aWdhdGlvblRhcmdldEtleT0iaXNQb3J0aW5nUmVjb3JkR29Ub05leHROYXZpZ2F0aW9uVGFyZ2V0IgotICAgICAgICAgICAgPgotICAgICAgPC9zcGVjaWZpY2F0aW9uPiAgCi0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0gICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgICAgIG5hbWU9IiV2aWV3Y2F0Lm5hbWUiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjIj4KLSAgICAgIDwvY2F0ZWdvcnk+Ci0gICAgICA8dmlldwotICAgICAgICAgICAgbmFtZT0iJXZpZXcubmFtZSIKLSAgICAgICAgICAgIGljb249Imljb25zL3VwYy5naWYiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy52aWV3cy5VUENBcnRpZmFjdFZpZXciCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLnZpZXdzLnVwY0FydGlmYWN0VmlldyI+Ci0gICAgICA8L3ZpZXc+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQudWkuQ0hlbHBQcm92aWRlciI+Ci0gICAgICA8cHJvdmlkZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuZWRpdG9ySGVscC5VUENDSGVscEluZm9Qcm92aWRlciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuZWRpdG9ySGVscC5VUENDSGVscEluZm9Qcm92aWRlciIvPgotICAgPC9leHRlbnNpb24+Ci0KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+Ci0gICAgICA8Y29tbWFuZAotICAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy5hY3Rpb25zLlJ1bkFuYWx5c2VVUENjb21tYW5kSGFuZGxlciIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuY29tbWFuZDIiCi0gICAgICAgICAgICBuYW1lPSJmaW5kIHVwYyBhcnRpZmFjdHMiPgotICAgICAgPC9jb21tYW5kPgotICAgPC9leHRlbnNpb24+Ci0gICAgICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgotICAgICAgPG1lbnVDb250cmlidXRpb24KLSAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJtZW51Om9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbi50b29sYmFyLmNvbW1hbmQxICI+Ci0gICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuY29tbWFuZDIiCi0gICAgICAgICAgICAgICBpY29uPSJpY29ucy91cGMuZ2lmIgotICAgICAgICAgICAgICAgbGFiZWw9IlNob3cgVVBDIEFydGlmYWN0cyI+Ci0gICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgICA8L21lbnVDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9VUENBcnRpZmFjdE1hcmtpbmdWaXNpdG9yLmphdmEgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL1VQQ0FydGlmYWN0TWFya2luZ1Zpc2l0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNkZjUwNS4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL1VQQ0FydGlmYWN0TWFya2luZ1Zpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQuY29tbW9uLkFydGlmYWN0TWFya2luZ1Zpc2l0b3I7Ci0KLXB1YmxpYyBjbGFzcyBVUENBcnRpZmFjdE1hcmtpbmdWaXNpdG9yIGV4dGVuZHMgQXJ0aWZhY3RNYXJraW5nVmlzaXRvcgotewotICAgIHB1YmxpYyBVUENBcnRpZmFjdE1hcmtpbmdWaXNpdG9yKFN0cmluZyBtYXJrZXJJZCkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG1hcmtlcklkKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL1VQQ0lEcy5qYXZhIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9VUENJRHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjNGVlNy4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL1VQQ0lEcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC51cGM7Ci0KLS8qKgotICogVVBDIFBsdWdpbiBjb25zdGFudHMKLSAqIAotICogQGF1dGhvciBCZXRoIFRpYmJpdHRzCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVVBDSURzCi17Ci0gICAgLy8gcHJlZmVyZW5jZSBwYWdlIG5hbWUgZm9yIFVQQwotICAgIFN0cmluZyBVUENfSU5DTFVERVMgICAgPSAiVVBDIEluY2x1ZGVzIjsKLSAgICAKLSAgICBTdHJpbmcgTUFSS0VSX0lEICAgICAgID0gIm9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy51cGNNYXJrZXIiOwotICAgIFN0cmluZyBNQVJLRVJfRVJST1JfSUQgPSAib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLnVwY0Vycm9yTWFya2VyIjsKLSAgICAKLSAgICAvLyBhcnRpZmFjdCB2aWV3IGlkCi0gICAgU3RyaW5nIFVQQ19WSUVXX0lEID0gIm9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy52aWV3cy51cGNBcnRpZmFjdFZpZXciOwotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9VUENQbHVnaW4uamF2YSBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC91cGMvVVBDUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNjdmMDcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9VUENQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFVQQ1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLyoqIFRoZSBzaGFyZWQgaW5zdGFuY2UuICovCi0JcHJpdmF0ZSBzdGF0aWMgVVBDUGx1Z2luIHBsdWdpbjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UucHRwLnBsZHQudXBjIjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFVQQ1BsdWdpbigpIHsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFVQQ1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIGltYWdlIGZpbGUgYXQgdGhlIGdpdmVuCi0JICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoLgotCSAqCi0JICogQHBhcmFtIHBhdGggdGhlIHBhdGgKLQkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0JICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7Ci0JCXJldHVybiBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oIm9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYyIsIHBhdGgpOwotCX0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBwcmVmZXJlbmNlIHNldHRpbmcgZm9yIFVQQyBpbmNsdWRlIHBhdGhzCi0gICAgICogCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0VVBDSW5jbHVkZURpcnMoKQotICAgIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZ0xpc3QgPSBnZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhVUENJRHMuVVBDX0lOQ0xVREVTKTsKLSAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHJpbmdMaXN0LCBGaWxlLnBhdGhTZXBhcmF0b3IgKyAiXG5cciIpOy8vJE5PTi1OTFMtMSQKLSAgICAgICAgTGlzdDxTdHJpbmc+IGRpcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgICAgICAgICBkaXJzLmFkZChzdC5uZXh0VG9rZW4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRpcnM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsdWdpbklkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBQTFVHSU5fSUQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9hY3Rpb25zL1J1bkFuYWx5c2VVUENjb21tYW5kSGFuZGxlci5qYXZhIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9hY3Rpb25zL1J1bkFuYWx5c2VVUENjb21tYW5kSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M5MzU2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC91cGMvYWN0aW9ucy9SdW5BbmFseXNlVVBDY29tbWFuZEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1RUcmFuc2xhdGlvblVuaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLnVwYy5VUENMYW5ndWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5tb2RlbC5JTGFuZ3VhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUubW9kZWwuSVRyYW5zbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC5jb21tb24uU2NhblJldHVybjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC5jb21tb24uYWN0aW9ucy5SdW5BbmFseXNlSGFuZGxlckJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQuY29tbW9uLnV0aWwuVmlld0FjdGl2YXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuVVBDQXJ0aWZhY3RNYXJraW5nVmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuVVBDSURzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy5VUENQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLmFuYWx5c2lzLlVQQ0NBU1RWaXNpdG9yOwotCi0vKioKLSAqIFRoZSAiRmluZCBVUEMgQXJ0aWZhY3RzIiBhY3Rpb24vY29tbWFuZAotICogQGF1dGhvciBCZXRoIFRpYmJpdHRzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUnVuQW5hbHlzZVVQQ2NvbW1hbmRIYW5kbGVyIGV4dGVuZHMgUnVuQW5hbHlzZUhhbmRsZXJCYXNlCi17Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIHRoZSAiUnVuIEFuYWx5c2lzIiBhY3Rpb24KLQkgKi8KLQlwdWJsaWMgUnVuQW5hbHlzZVVQQ2NvbW1hbmRIYW5kbGVyKCkgewotCQlzdXBlcigiVVBDIiwgbmV3IFVQQ0FydGlmYWN0TWFya2luZ1Zpc2l0b3IoVVBDSURzLk1BUktFUl9JRCksIFVQQ0lEcy5NQVJLRVJfSUQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogUmV0dXJucyBVUEMgYW5hbHlzaXMgYXJ0aWZhY3RzIGZvciBmaWxlCi0JICogCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcGFyYW0gaW5jbHVkZXMKLQkgKiAgICAgICAgICAgIFVQQyBpbmNsdWRlIHBhdGhzCi0JICogQHJldHVybgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBTY2FuUmV0dXJuIGRvQXJ0aWZhY3RBbmFseXNpcyhmaW5hbCBJVHJhbnNsYXRpb25Vbml0IHR1LAlmaW5hbCBMaXN0PFN0cmluZz4gaW5jbHVkZXMpIHsKLQkJZmluYWwgU2NhblJldHVybiBtc3IgPSBuZXcgU2NhblJldHVybigpOwotCQlmaW5hbCBTdHJpbmcgZmlsZU5hbWUgPSB0dS5nZXRFbGVtZW50TmFtZSgpOwotCQlJTGFuZ3VhZ2UgbGFuZzsKLQkJdHJ5IHsKLQkJCWxhbmcgPSB0dS5nZXRMYW5ndWFnZSgpOwotICAgICAgICAgICAgCi0JCQlJQVNUVHJhbnNsYXRpb25Vbml0IGF0dSA9IHR1LmdldEFTVCgpOwotCQkJaWYgKGxhbmcuZ2V0SWQoKS5lcXVhbHMoVVBDTGFuZ3VhZ2UuSUQpKSB7Ly8gY2R0NDAKLQkJCQlhdHUuYWNjZXB0KG5ldyBVUENDQVNUVmlzaXRvcihpbmNsdWRlcywgZmlsZU5hbWUsIG1zcikpOwotCQkJfSAKLQotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1zcjsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gZmlsZW5hbWUgaXMgdmFsaWQgZm9yIFVQQyBhcnRpZmFjdCBhbmFseXNpcwotCSAqIDxicj5UT0RPICBDb25zaWRlciB1c2luZyBsYW5ndWFnZSBvciBjb250ZW50LXR5cGUgaW5zdGVhZCBvZiBmaWxlIGV4dGVuc2lvbj8KLQkgKiBSZS12aXNpdCBhZnRlciBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MzMxIGlzIHJlc29sdmVkIChVUEMgIGNvbnRlbnQtdHlwZSBub3QgcmVjb2duaXplZCkKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gaXNDUFAgIGlzIHRoZSBwcm9qZWN0IGEgQysrIHByb2plY3Qgb3Igbm90Ci0JICogQHJldHVybgotCSAqIAotCSAqLwotCUBPdmVycmlkZQotCXByb3RlY3RlZCBib29sZWFuIHZhbGlkRm9yQW5hbHlzaXMoU3RyaW5nIGZpbGVuYW1lLCBib29sZWFuIGlzQ1BQKSB7Ci0JCWludCBsb2MgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZigiLiIpOwotCQlpZiAobG9jIDw9IDApIC8vIGlmIG5vIGRvdCwgb3IgZmlsZW5hbWUgaXMgIi5mb28iLCBub3QgdmFsaWQgZm9yCi0JCQkJCQkvLyBhbmFseXNpcy4KLQkJCXJldHVybiBmYWxzZTsKLQkJU3RyaW5nIGV4dCA9IGZpbGVuYW1lLnN1YnN0cmluZyhsb2MgKyAxKTsKLQkJZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaWYgKGV4dC5lcXVhbHMoInVwYyIpKSAKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCWVsc2UKLQkJCXJlc3VsdCA9IGZhbHNlOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGdldEluY2x1ZGVQYXRoKCkgewotCQlyZXR1cm4gVVBDUGx1Z2luLmdldERlZmF1bHQoKS5nZXRVUENJbmNsdWRlRGlycygpOwotCX0KLQlAT3ZlcnJpZGUKLQlwcm90ZWN0ZWQgdm9pZCBhY3RpdmF0ZUFydGlmYWN0VmlldygpIHsKLQkJVmlld0FjdGl2YXRlci5hY3RpdmF0ZVZpZXcoVVBDSURzLlVQQ19WSUVXX0lEKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL2FuYWx5c2lzL1VQQ0NBU1RWaXNpdG9yLmphdmEgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL2FuYWx5c2lzL1VQQ0NBU1RWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZTcyYjkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9hbmFseXNpcy9VUENDQVNUVmlzaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuYW5hbHlzaXM7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNURXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1RGdW5jdGlvbkNhbGxFeHByZXNzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5jb3JlLmRvbS5hc3QuSUFTVElkRXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1RMaXRlcmFsRXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1ROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbi5TY2FuUmV0dXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbi5hbmFseXNpcy5QbGR0QXN0VmlzaXRvcjsKLQotLyoqCi0gKiBUaGlzIGRvbS13YWxrZXIgY29sbGVjdHMgImFydGlmYWN0cyIgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWMgZG9tYWluIDxicj4KLSAqIChlLmcuIFVQQykuIEN1cnJlbnRseSB0aGVzZSBhcnRpZmFjdHMgaW5jbHVkZSBmdW5jdGlvbiBjYWxscwotICogYW5kIGNvbnN0YW50cy4gSXQgYWRkIG1hcmtlcnMgdG8gdGhlIHNvdXJjZSBmaWxlIGZvciBDIGNvZGUsIG1hcmtpbmcgdGhlCi0gKiBwb3NpdGlvbiBvZiB0aGUgYXJ0aWZhY3RzIGZvdW5kLgotICogCi0gKiBUaGlzIHZlcnNpb24gZXh0ZW5kcyBQbGR0QXN0VmlzaXRvciBpbnN0ZWFkIG9mIGRlbGVnYXRpbmcgdG88YnI+Ci0gKiBNcGlHZW5lcmFsQVNUVmlzaXRvckJlaGF2aW9yLgotICoKLSAqIEBhdXRob3IgdGliYml0dHMKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVVBDQ0FTVFZpc2l0b3IgZXh0ZW5kcyBQbGR0QXN0VmlzaXRvciAKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRklYPSJ1cGNfIjsKLQotICAgIHsKLSAgICAgICAgdGhpcy5zaG91bGRWaXNpdEV4cHJlc3Npb25zID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5zaG91bGRWaXNpdFN0YXRlbWVudHMgPSB0cnVlOwotICAgICAgICB0aGlzLnNob3VsZFZpc2l0RGVjbGFyYXRpb25zID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5zaG91bGRWaXNpdFRyYW5zbGF0aW9uVW5pdCA9IHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIFVQQ0NBU1RWaXNpdG9yKExpc3QgdXBjSW5jbHVkZXMsIFN0cmluZyBmaWxlTmFtZSwgU2NhblJldHVybiBtc3IpCi0gICAgewotICAgICAgICBzdXBlcih1cGNJbmNsdWRlcywgZmlsZU5hbWUsIG1zcik7Ci0JCUFSVElGQUNUX0NBTEwgPSAiVVBDIENhbGwiOwotCQlBUlRJRkFDVF9DT05TVEFOVD0iVVBDIENvbnN0YW50IjsKLSAgICB9Ci0KLQotCi0gICAgLyoKLSAgICAgKiAobm9uLUphdmFkb2MpCi0gICAgICogCi0gICAgICogQHNlZSBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LkFTVFZpc2l0b3IjdmlzaXQob3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNURXhwcmVzc2lvbikKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IHZpc2l0KElBU1RFeHByZXNzaW9uIGV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIElBU1RGdW5jdGlvbkNhbGxFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBJQVNURXhwcmVzc2lvbiBhc3RFeHByID0gKChJQVNURnVuY3Rpb25DYWxsRXhwcmVzc2lvbikgZXhwcmVzc2lvbikuZ2V0RnVuY3Rpb25OYW1lRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSA9IGFzdEV4cHIuZ2V0UmF3U2lnbmF0dXJlKCk7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZnVuYyBzaWduYXR1cmU9IiArIHNpZ25hdHVyZSk7Ci0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlLnN0YXJ0c1dpdGgoUFJFRklYKSkgewotICAgICAgICAgICAgICAgIGlmIChhc3RFeHByIGluc3RhbmNlb2YgSUFTVElkRXhwcmVzc2lvbikgewotICAgICAgICAgICAgICAgICAgICBJQVNUTmFtZSBmdW5jTmFtZSA9ICgoSUFTVElkRXhwcmVzc2lvbikgYXN0RXhwcikuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRnVuY05hbWUoZnVuY05hbWUsIGFzdEV4cHIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgSUFTVExpdGVyYWxFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBwcm9jZXNzTWFjcm9MaXRlcmFsKChJQVNUTGl0ZXJhbEV4cHJlc3Npb24pIGV4cHJlc3Npb24pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQUk9DRVNTX0NPTlRJTlVFOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL2VkaXRvckhlbHAvVVBDQ0hlbHBCb29rLmphdmEgYi90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL2VkaXRvckhlbHAvVVBDQ0hlbHBCb29rLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYmE5MzcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy9lZGl0b3JIZWxwL1VQQ0NIZWxwQm9vay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLmVkaXRvckhlbHA7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LnVpLklGdW5jdGlvblN1bW1hcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQuY29tbW9uLmVkaXRvckhlbHAuQ0hlbHBCb29rSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC5jb21tb24uZWRpdG9ySGVscC5GdW5jdGlvblByb3RvdHlwZVN1bW1hcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbi5lZGl0b3JIZWxwLkZ1bmN0aW9uU3VtbWFyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLlVQQ1BsdWdpbjsKLQotLyoqCi0gKiBVUEMgaGVscCBib29rIC0gdGhpcyBpcyB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyB1c2VkIGZvciB0aGUgaG92ZXIgaGVscAotICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyAoYW5kIEYxL2R5bmFtaWMgaGVscCBhcyB3ZWxsKSByZXF1aXJlcyBhIGZpeCB0byBDRFQgcG9zdC01LjAuMCByZWxlYXNlCi0gKiB0byBvcmcuZWNsaXBzZS5jZHQuaW50ZXJuYWwuY29yZS5tb2RlbC5UcmFuc2xhdGlvblVuaXQgIC0gdG8gcmVjb2duaXplIGNvbnRlbnQtdHlwZSBvZiBVUEMgdG8gYmUgYSBkZXJpdmlhdGl2ZSAoImtpbmRPZiIpIHRoZSBDIGNvbnRlbnQgdHlwZS4KLSAqIDxwPlNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MzMxICAKLSAqIEBhdXRob3IgQmV0aCBUaWJiaXR0cwotICoKLSAqLwotcHVibGljIGNsYXNzIFVQQ0NIZWxwQm9vayBleHRlbmRzIENIZWxwQm9va0ltcGwgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSVRMRSA9ICJVUEMgQyBIZWxwIEJvb2siOwotCXByaXZhdGUgTWFwPFN0cmluZyxTdHJpbmc+IGRlc2M9bmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0KLQkKLQlwdWJsaWMgVVBDQ0hlbHBCb29rKCkgewotICAgICAgICBzdXBlcihVUENQbHVnaW4uZ2V0UGx1Z2luSWQoKSk7Ci0gICAgICAgIC8vIHBvcHVsYXRlIGRlc2NyaXB0aW9uIG1hcCAtIHRoaXMganVzdCBtYWtlcyB0aGUgZnVuY05hbWUyRnVuY0luZm8gaW5pdCBsaW5lcyBhIGJpdCBtb3JlIHRlcnNlCi0gICAgICAKLSAgICAgICAgZGVzYy5wdXQoInVwY19hZGRyZmllbGQiLCAiUmV0dXJucyBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlIHJlZmxlY3RpbmcgdGhlIDxxPmxvY2FsIGFkZHJlc3M8L3E+b2YgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IHRoZSBwb2ludGVyLXRvLXNoYXJlZCBhcmd1bWVudC4iKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY19hZmZpbml0eXNpemUiLCAiQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB3aGljaCBjYWxjdWxhdGVzIHRoZSBleGFjdCBzaXplIG9mIHRoZSBsb2NhbCBwb3J0aW9uIG9mIHRoZSBkYXRhIGluIGEgc2hhcmVkIG9iamVjdCB3aXRoIGFmZmluaXR5IHRvIDxjb2RlPnRocmVhZGlkPC9jb2RlPi4iKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY19hbGxfYWxsb2MiLCAiQWxsb2NhdGVzIHNoYXJlZCBzcGFjZSIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX2FsbF9icm9hZGNhc3QiLCAiQ29waWVzIGEgYmxvY2sgb2YgbWVtb3J5IHdpdGggYWZmaW5pdHkgdG8gYSBzaW5nbGUgdGhyZWFkIHRvIGEgYmxvY2sgb2Ygc2hhcmVkIG1lbW9yeSBvbiBlYWNoIHRocmVhZC4iKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY19hbGxfbG9ja19hbGxvYyIsICJEeW5hbWljYWxseSBhbGxvY2F0ZXMgYSBsb2NrIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4gVGhlIGxvY2sgaXMgY3JlYXRlZCBpbiBhbiB1bmxvY2tlZCBzdGF0ZS4iKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY19hbGxfZXhjaGFuZ2UiLCAiQ29waWVzIHRoZSBpdGggYmxvY2sgb2YgbWVtb3J5IGZyb20gYSBzaGFyZWQgbWVtb3J5IGFyZWEgdGhhdCBoYXMgYWZmaW5pdHkgdG8gdGhyZWFkIGogdG8gdGhlIGp0aCBibG9jayBvZiBhIHNoYXJlZCBtZW1vcnkgYXJlYSB0aGF0IGhhcyBhZmZpbml0eSB0byB0aHJlYWQgaSIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX2FsbF9nYXRoZXIiLCAgICAgIkNvcGllcyBhIGJsb2NrIG9mIHNoYXJlZCBtZW1vcnkgdGhhdCBoYXMgYWZmaW5pdHkgdG8gdGhlIGl0aCB0aHJlYWQgdG8gdGhlIGl0aCBibG9jayBvZiBhIHNoYXJlZCBtZW1vcnkgYXJlYSB0aGF0IGhhcyBhZmZpbml0eSB0byBhIHNpbmdsZSB0aHJlYWQuIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfYWxsX2dhdGhlcl9hbGwiLCAiQ29waWVzIGEgYmxvY2sgb2YgbWVtb3J5IGZyb20gb25lIHNoYXJlZCBtZW1vcnkgYXJlYSB3aXRoIGFmZmluaXR5IHRvIHRoZSBpdGggdGhyZWFkIHRvIHRoZSBpdGggYmxvY2sgb2YgYSBzaGFyZWQgbWVtb3J5IGFyZWEgb24gZWFjaCB0aHJlYWQuIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfYWxsX2xvY2tfYWxsb2MiLCAiRHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgbG9jayBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuIFRoZSBsb2NrIGlzIGNyZWF0ZWQgaW4gYW4gdW5sb2NrZWQgc3RhdGUuIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfYWxsX3Blcm11dGUiLCAiQ29waWVzIGEgYmxvY2sgb2YgbWVtb3J5IGZyb20gYSBzaGFyZWQgbWVtb3J5IGFyZWEgdGhhdCBoYXMgYWZmaW5pdHkgdG8gdGhlIGl0aCB0aHJlYWQgdG8gYSBibG9jayBvZiBhIHNoYXJlZCBtZW1vcnkgdGhhdCBoYXMgYWZmaW5pdHkgdG8gdGhyZWFkIHBlcm1baV0uIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfYWxsX3NjYXR0ZXIiLCAiQ29waWVzIHRoZSBpdGggYmxvY2sgb2YgYW4gYXJlYSBvZiBzaGFyZWQgbWVtb3J5IHdpdGggYWZmaW5pdHkgdG8gYSBzaW5nbGUgdGhyZWFkIHRvIGEgYmxvY2sgb2Ygc2hhcmVkIG1lbW9yeSB3aXRoIGFmZmluaXR5IHRvIHRoZSBpdGggdGhyZWFkLiIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX2FsbG9jIiwgIkFsbG9jYXRlcyBzaGFyZWQgc3BhY2Ugb2YgYXQgbGVhc3QgbmJ5dGVzIHdpdGggYWZmaW5pdHkgdG8gdGhlIGNhbGxpbmcgdGhyZWFkLiIpOyAgICAgIAotICAgICAgICBkZXNjLnB1dCgidXBjX2ZyZWUiLCAiRnJlZXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHNoYXJlZCBzdG9yYWdlIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfZ2xvYmFsX2FsbG9jIiwiQWxsb2NhdGVzIHNoYXJlZCBzcGFjZSIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX2dsb2JhbF9leGl0IiwiRmx1c2hlcyBhbGwgSS9PLCByZWxlYXNlcyBhbGwgc3RvcmFnZSwgYW5kIHRlcm1pbmF0ZXMgdGhlIGV4ZWN1dGlvbiBmb3IgYWxsIGFjdGl2ZSB0aHJlYWRzLiIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX2dsb2JhbF9sb2NrX2FsbG9jIiwgIkR5bmFtaWNhbGx5IGFsbG9jYXRlcyBhIGxvY2sgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGl0LiBUaGUgbG9jayBpcyBjcmVhdGVkIGluIGFuIHVubG9ja2VkIHN0YXRlLiIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX2xvY2FsX2FsbG9jIiwiRGVwcmVjYXRlZC4gVXNlIHVwY19hbGxvYyBpbnN0ZWFkLlxuQWxsb2NhdGVzIHNoYXJlZCBzcGFjZS4iKTsgICAgICAKLSAgICAgICAgZGVzYy5wdXQoInVwY19sb2NrX2F0dGVtcHQiLCAiQXR0ZW1wdHMgdG8gc2V0IHRoZSBzdGF0ZSBvZiBhIGxvY2sgdG8gbG9ja2VkLiBSZXR1cm4gY29kZSBpbmRpY2F0ZXMgcHJldmlvdXMgc3RhdGUuIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfbG9ja19mcmVlIiwgIkZyZWVzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbG9jay4iKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY19sb2NrX3QiLCAiVVBDIHR5cGUgZm9yIGEgbG9jayIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX2xvY2siLCAiU2V0cyB0aGUgc3RhdGUgb2YgYSBsb2NrIHRvIGxvY2tlZC4iKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY19tZW1jcHkiLCAiQ29waWVzIG4gY2hhcmFjdGVycyBmcm9tIGEgc2hhcmVkIG9iamVjdCBoYXZpbmcgYWZmaW5pdHkgd2l0aCBvbmUgdGhyZWFkIHRvIGEgc2hhcmVkIG9iamVjdCBoYXZpbmcgYWZmaW5pdHkgd2l0aCB0aGUgc2FtZSBvciBhbm90aGVyIHRocmVhZC4iKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY19tZW1nZXQiLCAiQ29waWVzIG4gY2hhcmFjdGVycyBmcm9tIGEgc2hhcmVkIG9iamVjdCB3aXRoIGFmZmluaXR5IHRvIGFueSBzaW5nbGUgdGhyZWFkIHRvIGFuIG9iamVjdCBvbiB0aGUgY2FsbGluZyB0aHJlYWQuIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfbWVtc2V0IiwgIkNvcGllcyBhIHZhbHVlLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgdG8gYSBzaGFyZWQgb2JqZWN0IHdpdGggYWZmaW5pdHkgdG8gYW55IHNpbmdsZSB0aHJlYWQuIik7Ci0gICAgICAgIGRlc2MucHV0KCJ1cGNfcGhhc2VvZiIsICJSZXR1cm5zIHRoZSBwaGFzZSBjb21wb25lbnQgb2YgdGhlIHBvaW50ZXItdG8tc2hhcmVkIGFyZ3VtZW50LiIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX3Jlc2V0cGhhc2UiLCAiUmV0dXJucyBhIHBvaW50ZXItdG8tc2hhcmVkIHdoaWNoIGlzIGlkZW50aWNhbCB0byBpdHMgaW5wdXQgZXhjZXB0IHRoYXQgaXQgaGFzIHplcm8gcGhhc2UiKTsKLSAgICAgICAgZGVzYy5wdXQoInVwY190aHJlYWRvZiIsICJSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgdGhyZWFkIHRoYXQgaGFzIGFmZmluaXR5IHRvIHRoZSBzaGFyZWQgb2JqZWN0IHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50LiIpOwotICAgICAgICBkZXNjLnB1dCgidXBjX3VubG9jayIsICJTZXRzIHRoZSBzdGF0ZSBvZiBhIGxvY2sgdG8gdW5sb2NrZWQuIik7IAotICAgICAgICBkZXNjLnB1dCgic2hhcmVkIiwgInRoaXMgaXMgYSBzaGFyZWQgVVBDIGtleXdvcmQiKTsKLSAgICAgICAgCi0gICAgICAgIAotCQkvLyBwb3B1bGF0ZSBmdW5jIG1hcAotICAgICAgICAvL2Z1bmNOYW1lMkZ1bmNJbmZvLnB1dCgidXBjX2ZyZWUiLCBuZXcgRnVuY3Rpb25TdW1tYXJ5SW1wbCgidXBjX2ZyZWUiLCAiIiwgInVwY19mcmVlIHRlc3QgZGVzY3JpcHRpb24iLAotICAgICAgICAvLyAgICAgICAgbmV3IEZ1bmN0aW9uUHJvdG90eXBlU3VtbWFyeUltcGwoInVwY19mcmVlIiwgInZvaWQiLCAic2hhcmVkIHZvaWQgKnB0ciIpLCBudWxsKSk7Ci0gICAgICAgIFN0cmluZyBkZXNjID0gIiI7IC8vIHdpbGwgZG8gbWFwIGxvb2t1cCBmb3IgZGVzY3JpcHRpb24gaW4gZnBzIG1ldGhvZC4KLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfYWRkcmZpZWxkIiwgZnBzKCJ1cGNfYWRkcmZpZWxkIiwgIiIsIGRlc2MsICJzaXplX3QiLCAic2hhcmVkIHZvaWQgKnB0ciIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfYWZmaW5pdHlzaXplIiwgZnBzKCJ1cGNfYWZmaW5pdHlzaXplIiwgIiIsIGRlc2MsICJzaXplX3QiLCAic2l6ZV90IHRvdGFsc2l6ZSwgc2l6ZV90IG5ieXRlcywgc2l6ZV90IHRocmVhZGlkIikpOwotICAgICAgICBmdW5jTmFtZTJGdW5jSW5mby5wdXQoInVwY19hbGxfYWxsb2MiLCBmcHMoInVwY19hbGxfYWxsb2MiLCAiIiwgZGVzYywgInZvaWQiLCAic2l6ZV90IG5ibG9ja3MsIHNpemVfdCBuYnl0ZXMiKSk7Ci0gICAgICAgIGZ1bmNOYW1lMkZ1bmNJbmZvLnB1dCgidXBjX2FsbF9icm9hZGNhc3QiLCBmcHMoInVwY19hbGxfYnJvYWRjYXN0IiwgIiIsIGRlc2MsICJ2b2lkIiwgInNoYXJlZCB2b2lkICogcmVzdHJpY3QgZHN0LCBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywgc2l6ZV90IG5ieXRlcywgdXBjX2ZsYWdfdCBmbGFncyIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfYWxsX2V4Y2hhbmdlIiwgZnBzKCJ1cGNfYWxsX2V4Y2hhbmdlIiwgIiIsIGRlc2MsICJ2b2lkIiwgInNoYXJlZCB2b2lkICogcmVzdHJpY3QgZHN0LCBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywgc2l6ZV90IG5ieXRlcywgdXBjX2ZsYWdfdCBmbGFncyIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfYWxsX2dhdGhlcl9hbGwiLCBmcHMoInVwY19hbGxfZ2F0aGVyX2FsbCIsICIiLCBkZXNjLCAidm9pZCIsICJzaGFyZWQgdm9pZCAqIHJlc3RyaWN0IGRzdCwgc2hhcmVkIGNvbnN0IHZvaWQgKiByZXN0cmljdCBzcmMsIHNpemVfdCBuYnl0ZXMsIHVwY19mbGFnX3QgZmxhZ3MiKSk7Ci0gICAgICAgIGZ1bmNOYW1lMkZ1bmNJbmZvLnB1dCgidXBjX2FsbF9nYXRoZXIiLCBmcHMoInVwY19hbGxfZ2F0aGVyIiwgIiIsIGRlc2MsICJ2b2lkIiwgInNoYXJlZCB2b2lkICogcmVzdHJpY3QgZHN0LCBzaGFyZWQgY29uc3Qgdm9pZCAqIHJlc3RyaWN0IHNyYywgc2l6ZV90IG5ieXRlcywgdXBjX2ZsYWdfdCBmbGFncyIpKTsgICAgICAJCQotICAgICAgICBmdW5jTmFtZTJGdW5jSW5mby5wdXQoInVwY19hbGxfbG9ja19hbGxvYyIsIGZwcygidXBjX2FsbF9sb2NrX2FsbG9jIiwgIiIsIGRlc2MsICJ1cGNfbG9ja190IiwgInZvaWQiKSk7Ci0gICAgICAgIGZ1bmNOYW1lMkZ1bmNJbmZvLnB1dCgidXBjX2FsbF9wZXJtdXRlIiwgZnBzKCJ1cGNfYWxsX3Blcm11dGUiLCAiIiwgZGVzYywgInZvaWQiLCAic2hhcmVkIHZvaWQgKiByZXN0cmljdCBkc3QsIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCBzaGFyZWQgY29uc3QgaW50ICogcmVzdHJpY3QgcGVybSwgc2l6ZV90IG5ieXRlcywgdXBjX2ZsYWdfdCBmbGFncyIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfYWxsX3NjYXR0ZXIiLCBmcHMoInVwY19hbGxfc2NhdHRlciIsICIiLCBkZXNjLCAidm9pZCIsICJzaGFyZWQgdm9pZCAqIHJlc3RyaWN0IGRzdCwgc2hhcmVkIGNvbnN0IHZvaWQgKiByZXN0cmljdCBzcmMsIHNpemVfdCBuYnl0ZXMsIHVwY19mbGFnX3QgZmxhZ3MiKSk7Ci0gICAgICAgIGZ1bmNOYW1lMkZ1bmNJbmZvLnB1dCgidXBjX2FsbG9jIiwgZnBzKCJ1cGNfYWxsb2MiLCAiIiwgZGVzYywgInZvaWQiLCAic2l6ZV90IG5ieXRlcyIpKTsgICAgICAKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfZnJlZSIsIGZwcygidXBjX2ZyZWUiLCAiIiwgZGVzYywgInZvaWQiLCAic2hhcmVkIHZvaWQgKnB0ciIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfZ2xvYmFsX2FsbG9jIiwgZnBzKCJ1cGNfZ2xvYmFsX2FsbG9jIiwgIiIsIGRlc2MsICJ2b2lkIiwgImludCBzdGF0dXMiKSk7Ci0gICAgICAgIGZ1bmNOYW1lMkZ1bmNJbmZvLnB1dCgidXBjX2dsb2JhbF9leGl0IiwgZnBzKCJ1cGNfZ2xvYmFsX2V4aXQiLCAiIiwgZGVzYywgInZvaWQiLCAiaW50IHN0YXR1cyIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfZ2xvYmFsX2xvY2tfYWxsb2MiLCBmcHMoInVwY19nbG9iYWxfbG9ja19hbGxvYyIsICIiLCBkZXNjLCAidXBjX2xvY2tfdCIsICJ2b2lkIikpOwotICAgICAgICBmdW5jTmFtZTJGdW5jSW5mby5wdXQoInVwY19sb2NhbF9hbGxvYyIsIGZwcygidXBjX2xvY2FsX2FsbG9jIiwgIiIsIGRlc2MsICJ2b2lkIiwgInNpemVfdCBuYmxvY2tzLCBzaXplX3QgbmJ5dGVzIikpOyAgICAKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfbG9ja19hdHRlbXB0IiwgZnBzKCJ1cGNfbG9ja19hdHRlbXB0IiwgIiIsIGRlc2MsICJpbnQiLCAidXBjX2xvY2tfdCAqcHRyIikpOwotICAgICAgICBmdW5jTmFtZTJGdW5jSW5mby5wdXQoInVwY19sb2NrX2ZyZWUiLCBmcHMoInVwY19sb2NrX2ZyZWUiLCAiIiwgZGVzYywgInVwY19sb2NrX3QiLCAidm9pZCIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfbG9jayIsIGZwcygidXBjX2xvY2siLCAiIiwgZGVzYywgInZvaWQiLCAidXBjX2xvY2tfdCAqcHRyIikpOwotICAgICAgICBmdW5jTmFtZTJGdW5jSW5mby5wdXQoInVwY19tZW1jcHkiLCBmcHMoInVwY19tZW1jcHkiLCAiIiwgZGVzYywgInZvaWQiLCAic2hhcmVkIHZvaWQgKiByZXN0cmljdCBkc3QsIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCBzaXplX3QgbiIpKTsgICAgICAKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfbWVtZ2V0IiwgZnBzKCJ1cGNfbWVtZ2V0IiwgIiIsIGRlc2MsICJ2b2lkIiwgInZvaWQgKiByZXN0cmljdCBkc3QsIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCBzaXplX3QgbiIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfbWVtc2V0IiwgZnBzKCJ1cGNfbWVtc2V0IiwgIiIsIGRlc2MsICJ2b2lkIiwgInNoYXJlZCB2b2lkICpkc3QsIGludCBjLCBzaXplX3QgbiIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfcGhhc2VvZiIsIGZwcygidXBjX21lbXNldCIsICIiLCBkZXNjLCAic2l6ZV90IiwgInNoYXJlZCB2b2lkICpwdHIiKSk7ICAgICAKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfcmVzZXRwaGFzZSIsIGZwcygidXBjX3Jlc2V0cGhhc2UiLCAiIiwgZGVzYywgInZvaWQiLCAic2hhcmVkIHZvaWQgKnB0ciIpKTsKLSAgICAgICAgZnVuY05hbWUyRnVuY0luZm8ucHV0KCJ1cGNfdGhyZWFkb2YiLCBmcHMoInVwY190aHJlYWRvZiIsICIiLCBkZXNjLCAic2l6ZV90IiwgInNoYXJlZCB2b2lkICpwdHIiKSk7Ci0gICAgICAgIGZ1bmNOYW1lMkZ1bmNJbmZvLnB1dCgidXBjX3VubG9jayIsIGZwcygidXBjX3VubG9jayIsICIiLCBkZXNjLCAidm9pZCIsICJ1cGNfbG9ja190ICpwdHIiKSk7Ci0gICAgICAgIGZ1bmNOYW1lMkZ1bmNJbmZvLnB1dCgic2hhcmVkIiwgZnBzKCJzaGFyZWQiLCAiIiwgZGVzYywgIiIsICIiKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBzZXQgdGl0bGUKLSAgICAgICAgc2V0VGl0bGUoVElUTEUpOwotCX0KLQkKLQkvKioKLQkgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgaW5wdXR0aW5nIHRoZXNlIEZ1bmN0aW9uUHJvdG90eXBlU3VtbWFyeSBhbmQgRnVuY3Rpb25TdW1tYXJ5IGFyZ3VtZW50cy4KLQkgKiBAcGFyYW0gbmFtZQotCSAqIEBwYXJhbSBuYW1lc3BhY2UKLQkgKiBAcGFyYW0gZGVzY3JpcHRpb24gaWYgZW1wdHkgd2lsbCBkbyBsb29rdXAgaW4gTWFwCi0JICogQHBhcmFtIHJldHVyblR5cGUKLQkgKiBAcGFyYW0gYXJncwotCSAqIEByZXR1cm4KLQkgKi8KLQlwcm90ZWN0ZWQgSUZ1bmN0aW9uU3VtbWFyeSBmcHMoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBkZXNjcmlwdGlvbiwgU3RyaW5nIHJldHVyblR5cGUsIFN0cmluZyBhcmdzKXsKLQkJaWYoZGVzY3JpcHRpb249PW51bGwgfHwgZGVzY3JpcHRpb24ubGVuZ3RoKCk9PTApIHsKLQkJCWRlc2NyaXB0aW9uPWdldERlc2MobmFtZSk7Ci0JCX0KLQkJSUZ1bmN0aW9uU3VtbWFyeSBmcHMgPSBuZXcgRnVuY3Rpb25TdW1tYXJ5SW1wbChuYW1lLCBuYW1lc3BhY2UsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgIG5ldyBGdW5jdGlvblByb3RvdHlwZVN1bW1hcnlJbXBsKG5hbWUsIHJldHVyblR5cGUsIGFyZ3MpLCBudWxsKTsKLQkJcmV0dXJuIGZwczsKLQl9Ci0JcHJvdGVjdGVkIFN0cmluZyBnZXREZXNjKFN0cmluZyBrZXkpIHsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gKFN0cmluZylkZXNjLmdldChrZXkpOwotCQlpZihkZXNjcmlwdGlvbj09bnVsbCkKLQkJCWRlc2NyaXB0aW9uPWtleSsiIGRlc2NyaXB0aW9uIjsKLQkJcmV0dXJuIGRlc2NyaXB0aW9uOwotCX0KLQkKLQkvKioKLQkgKiBXb3JrYXJvdW5kIGZvciBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MzMxCi0JICogKCJDSGVscFByb3ZpZGVyIG5vdCBjYWxsZWQgZm9yIFVQQyIpCi0JICogc28gdGhhdCBVUEMgaGVscCB3aWxsIGdldCBjYWxsZWQuCi0JICogQ0RUIGJ1ZyBmaXggcmVxdWlyZWQgZm9yIHRoaXMgdG8gd29yayBvdGhlcndpc2UuCi0JICogRm9yIGV4YW1wbGUsIGluIFRyYW5zbGF0aW9uVW5pdCB0byBtYWtlIHRoZSBVUEMgdHlwZSAnaW5oZXJpdCcgZnJvbSB0aGUgQyB0eXBlLgotCSAqIDxwPgotCSAqIFRoaXMgcmV0dXJucyBhbiBpbnZhbGlkIG51bWJlciBhcyBhIHdvcmthcm91bmQuCi0JICogVGhpcyB3aWxsIGNhdXNlIHRoZSBkZWZhdWx0IHBhcnQgb2YgdGhlIHN3aXRjaCBpbiBDSGVscEJvb2tEZXNjcmlwdG9yLm1hdGNoZXMoKQotCSAqIHRvIGV4ZWN1dGUgYW5kIHRoZSBVUEMgaGVscCB3aWxsCi0JICogbWF0Y2ggZm9yIGFsbCBmaWxlcy4gTm90IHByZXR0eSBidXQgaXQgd2lsbCB3b3JrIGZvciBub3cuCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jZHQuaW50ZXJuYWwuY29yZS5tb2RlbC5UcmFuc2xhdGlvblVuaXQKLQkgKiAKLQkgKi8KLQlAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKS8vIGp1c3QgZm9yIHRoZSBqYXZhZG9jIGNvbW1lbnQgdG8gbm90IGdldCB3YXJuaW5nIDopCi0JQE92ZXJyaWRlCi0JcHVibGljIGludCBnZXRDSGVscFR5cGUoKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci19CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL2VkaXRvckhlbHAvVVBDQ0hlbHBJbmZvUHJvdmlkZXIuamF2YSBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC91cGMvZWRpdG9ySGVscC9VUENDSGVscEluZm9Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjY4YjM2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC91cGMvZWRpdG9ySGVscC9VUENDSGVscEluZm9Qcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMuZWRpdG9ySGVscDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbi5lZGl0b3JIZWxwLkNIZWxwUHJvdmlkZXJJbXBsOwotCi0vKioKLSAqIAotICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIElDSGVscFByb3ZpZGVyIGFuZCBwcm92aWRlcyBVUEMgaW5mb3JtYXRpb24gPGJyPgotICogKEYxLCBob3ZlciwgY29udGVudCBhc3Npc3QsIGV0Yy4pCi0gICogPHA+Ci0gKiA8Yj5Ob3RlOjwvYj4gVGhpcyAgcmVxdWlyZXMgYSBmaXggdG8gQ0RUIHBvc3QtNS4wLjAgcmVsZWFzZQotICogdG8gb3JnLmVjbGlwc2UuY2R0LmludGVybmFsLmNvcmUubW9kZWwuVHJhbnNsYXRpb25Vbml0ICAtIHRvIHJlY29nbml6ZSBjb250ZW50LXR5cGUgb2YgVVBDIHRvIGJlIGEgZGVyaXZpYXRpdmUgKCJraW5kT2YiKSB0aGUgQyBjb250ZW50IHR5cGUuCi0gKiA8cD5TZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIzNzMzMSAgCi0gKiA8cD5GdXJ0aGVyIG5vdGU6IGEgd29ya2Fyb3VuZCBoYXMgYmVlbiBhcHBsaWVkIGluIFVDQ0NIZWxwQm9vayB0byBub3QgcmVxdWlyZSB0aGUgQ0RUIHBhdGNoCi0gKiAKLSAqIAotICogQGF1dGhvciBCZXRoIFRpYmJpdHRzCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVVBDQ0hlbHBJbmZvUHJvdmlkZXIgZXh0ZW5kcyBDSGVscFByb3ZpZGVySW1wbCB7Ci0KLQlwdWJsaWMgVVBDQ0hlbHBJbmZvUHJvdmlkZXIoKSB7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKCJVUENDSGVscEluZm9Qcm92aWRlciBjdG9yKCkuLi4iKTsvL2RlYnVnIG9ubHkgLCB0byBzZWUgd2hlbiBjYWxsZWQKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCQloZWxwQm9vayA9IG5ldyBVUENDSGVscEJvb2soKTsKLQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIlVQQ0NIZWxwSW5mb1Byb3ZpZGVyIGluaXRpYWxpemUoKS4uLiIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC91cGMvcHJlZnMvVVBDUHJlZmVyZW5jZVBhZ2UuamF2YSBiL3Rvb2xzL3BsZHQvb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC91cGMvcHJlZnMvVVBDUHJlZmVyZW5jZVBhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkNDliOC4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL3ByZWZzL1VQQ1ByZWZlcmVuY2VQYWdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMucHJlZnM7Ci0KLQotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlBhdGhFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy5VUENJRHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLlVQQ1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKLQotCi0vKioKLSAqIFByZWZlcmVuY2UgcGFnZSBiYXNlZCBvbiBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlCi0gKiAKLSAqIEBhdXRob3IgeHVlCi0gKi8KLQotcHVibGljIGNsYXNzIFVQQ1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZQotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNMVURFU19QUkVGRVJFTkNFX0xBQkVMICA9ICJVUEMgaW5jbHVkZSBwYXRoczoiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNMVURFU19QUkVGRVJFTkNFX0JST1dTRSA9ICJQbGVhc2UgY2hvb3NlIGEgZGlyZWN0b3J5OiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQQ19IRUxQPSJMb2NhdGlvbiBvZiBVUEMgaGVscCBmaWxlczoiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUENfSEVMUF9ERUZBVUxUPSJVc2UgZGVmYXVsdCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQQ19IRUxQX0RFRkFVTFRfSUQ9InVwY0hlbHBVc2VEZWZhdWx0IjsKLSAgICAvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUENfSEVMUF9MSU5VWD0iVXNlIExpbnV4IGxvY2F0aW9uOiAiOwotICAgIC8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQQ19IRUxQX0FJWD0iVXNlIEFJWCBsb2NhdGlvbjogIjsKLSAgICAvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUENfSEVMUF9PVEhFUj0iT3RoZXI6IjsKLSAgICAvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUENfSEVMUF9PVEhFUl9JRD0idXBjSGVscE90aGVyIjsKLSAgICAKLSAgICAvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUENfTE9DQVRJT05fQUlYPSIvb3B0L3JzY3QvbGFwaS9lY2xpcHNlL2hlbHAiOwotICAgIC8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQQ19MT0NBVElPTl9MSU5VWD0ib3B0L2libWhwYy9sYXBpL2VjbGlwc2UvaGVscCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQQ19XSElDSF9IRUxQX0lEPSJkZWZhdWx0IjsgIC8vIGFsdGVybmF0aXZlcyBhcmU6IGRlZmF1bHQsIGFpeCwgbGludXgsIG90aGVyCi0KLSAgICBwdWJsaWMgVVBDUHJlZmVyZW5jZVBhZ2UoKQotICAgIHsKLSAgICAgICAgc3VwZXIoRkxBVCk7Ci0gICAgICAgIGluaXRQcmVmZXJlbmNlU3RvcmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVVBDUHJlZmVyZW5jZVBhZ2UoaW50IHN0eWxlKQotICAgIHsKLSAgICAgICAgc3VwZXIoc3R5bGUpOwotICAgICAgICBpbml0UHJlZmVyZW5jZVN0b3JlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFVQQ1ByZWZlcmVuY2VQYWdlKFN0cmluZyB0aXRsZSwgSW1hZ2VEZXNjcmlwdG9yIGltYWdlLCBpbnQgc3R5bGUpCi0gICAgewotICAgICAgICBzdXBlcih0aXRsZSwgaW1hZ2UsIHN0eWxlKTsKLSAgICAgICAgaW5pdFByZWZlcmVuY2VTdG9yZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBVUENQcmVmZXJlbmNlUGFnZShTdHJpbmcgdGl0bGUsIGludCBzdHlsZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKHRpdGxlLCBzdHlsZSk7Ci0gICAgICAgIGluaXRQcmVmZXJlbmNlU3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0IHByZWZlcmVuY2Ugc3RvcmUgYW5kIHNldCB0aGUgcHJlZmVyZW5jZSBzdG9yZSBmb3IgdGhlIHByZWZlcmVuY2UgcGFnZQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBpbml0UHJlZmVyZW5jZVN0b3JlKCkKLSAgICB7Ci0gICAgICAgIElQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBVUENQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotICAgICAgICBzZXRQcmVmZXJlbmNlU3RvcmUoc3RvcmUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpCi0gICAgewotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpCi0gICAgewotICAgICAgICBQYXRoRWRpdG9yIHBhdGhFZGl0b3IgPSBuZXcgUGF0aEVkaXRvcihVUENJRHMuVVBDX0lOQ0xVREVTLCBJTkNMVURFU19QUkVGRVJFTkNFX0xBQkVMLAotICAgICAgICAgICAgICAgIElOQ0xVREVTX1BSRUZFUkVOQ0VfQlJPV1NFLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKLSAgICAgICAgYWRkRmllbGQocGF0aEVkaXRvcik7Ci0KLSAgICAgICAgLy8iVXNlIGRlZmF1bHQ/IgotLy8gICAgICAgIEJvb2xlYW5GaWVsZEVkaXRvciBiZWQgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKFVQQ19IRUxQX0RFRkFVTFRfSUQsVVBDX0hFTFBfREVGQVVMVCxnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKLS8vICAgICAgICBhZGRGaWVsZChiZWQpOwotICAvKiAgICAgIAotICAgICAgICBpbnQgbnVtQ29sPTE7Ci0gICAgCVJhZGlvR3JvdXBGaWVsZEVkaXRvciBjaG9pY2VGRSA9IG5ldyBSYWRpb0dyb3VwRmllbGRFZGl0b3IoVVBDX1dISUNIX0hFTFBfSUQsIFVQQ19IRUxQLCBudW1Db2wsIG5ldyBTdHJpbmdbXVtdIHsKLQkJCQl7IFVQQ19IRUxQX0RFRkFVTFQsICJjaG9pY2UxIiB9LCAKLQkJCQl7IFVQQ19IRUxQX0FJWCtVUENfTE9DQVRJT05fQUlYLCAiY2hvaWNlMiIgfSwgCi0JCQkJeyBVUENfSEVMUF9MSU5VWCtVUENfTE9DQVRJT05fTElOVVgsICJDaG9pY2UzIiB9LAotCQkJCXsgVVBDX0hFTFBfT1RIRVIsICJDaG9pY2U0IiB9fSwKLQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKLSAgICAJYWRkRmllbGQoY2hvaWNlRkUpOwotICAgIAkKLSAgICAJU3RyaW5nRmllbGRFZGl0b3Igb3RoZXJMb2M9bmV3IFN0cmluZ0ZpZWxkRWRpdG9yKFVQQ19IRUxQX09USEVSX0lELCBVUENfSEVMUF9PVEhFUixnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKLSAgICAJYWRkRmllbGQob3RoZXJMb2MpOwotICAgIAkqLwotICAgIAkKLSAgICB9Ci0gICAgCi19CmRpZmYgLS1naXQgYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL3ZpZXdzL1VQQ0FydGlmYWN0Vmlldy5qYXZhIGIvdG9vbHMvcGxkdC9vcmcuZWNsaXBzZS5wdHAucGxkdC51cGMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3VwYy92aWV3cy9VUENBcnRpZmFjdFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q3MjhkNS4uMDAwMDAwMAotLS0gYS90b29scy9wbGR0L29yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvdXBjL3ZpZXdzL1VQQ0FydGlmYWN0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC51cGMudmlld3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC5jb21tb24udmlld3MuU2ltcGxlVGFibGVNYXJrZXJWaWV3OwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0LnVwYy5VUENJRHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQudXBjLlVQQ1BsdWdpbjsKLQotCi0KLS8qKgotICogQSBVUEMgYXJ0aWZhY3QgdmlldyBiYXNlZCBvbiBTaW1wbGVUYWJsZVZpZXcgPGJyPgotICogTm90ZSB0aGF0IHRoZSBJRCBtdXN0IGJlIHVuaXF1ZS4KLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVVBDQXJ0aWZhY3RWaWV3IGV4dGVuZHMgU2ltcGxlVGFibGVNYXJrZXJWaWV3Ci17Ci0gICAgcHVibGljIFVQQ0FydGlmYWN0VmlldygpCi0gICAgewotICAgICAgICAvLyBpZiB5b3UgbmVlZCB0byByZWFkIGljb24gaW1hZ2VzLCBldGMuIGZyb20gdGhlIHBsdWctaW4sIGJlIHN1cmUgdG8gcGFzcwotICAgICAgICAvLyBpbiBhbiBhY3R1YWwgUGx1Z2luIGNsYXNzIGluc3RhbmNlIGZvciBmaXJzdCBhcmcKLSAgICAgICAgc3VwZXIoVVBDUGx1Z2luLmdldERlZmF1bHQoKSwgIlVQQyBBcnRpZmFjdCIsICJVUEMgQXJ0aWZhY3RzIiwgIkNvbnN0cnVjdCIsIFVQQ0lEcy5NQVJLRVJfSUQpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvLmNsYXNzcGF0aCBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzLy5wcm9qZWN0IGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI2ZjY3My4uMDAwMDAwMAotLS0gYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ODRhYjcuLjAwMDAwMDAKLS0tIGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IFNhbXBsZSBDRFQgU3RhdGljIEFuYWx5c2lzCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMuQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNkdC5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnB0cC5wbGR0LmNvbW1vbiwKLSBvcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuYW5hbHlzaXMsCi0gb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmFuYWx5c2lzLmNkdAotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1WZW5kb3I6IElCTSBSZXNlYXJjaApkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9idWlsZC5wcm9wZXJ0aWVzIGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDNkM2E3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIC4sXAotICAgICAgICAgICAgICAgaWNvbnMvCmRpZmYgLS1naXQgYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2ljb25zL2NhbGxzLmdpZiBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvY2FsbHMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTVlNWE1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvY2FsbHMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9pY29ucy9jYWxsc0MuZ2lmIGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9pY29ucy9jYWxsc0MuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjlmYTI1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvY2FsbHNDLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvY2FsbHNDRi5naWYgYi90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2ljb25zL2NhbGxzQ0YuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDMzYjE5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvY2FsbHNDRi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2ljb25zL2NsYXNzX2hpLmdpZiBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvY2xhc3NfaGkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2Y5MjdlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvY2xhc3NfaGkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9pY29ucy9ncmFwaEMuZ2lmIGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9pY29ucy9ncmFwaEMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDVjMzM4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvZ3JhcGhDLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvZ3JhcGhXLmdpZiBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaWNvbnMvZ3JhcGhXLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiMjk0Yi4uMDAwMDAwMAotLS0gYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2ljb25zL2dyYXBoVy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2ljb25zL3NhbXBsZS5naWYgYi90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2ljb25zL3NhbXBsZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZmIzYzkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9pY29ucy9zYW1wbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9wbHVnaW4ueG1sIGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmE2ZTc1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Ci08cGx1Z2luPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICBuYW1lPSJTYW1wbGUgQ2F0ZWdvcnkiCi0gICAgICAgICAgICBpZD0iY2R0QVNUMi5jb21tYW5kcy5jYXRlZ29yeSI+Ci0gICAgICA8L2NhdGVnb3J5PgotICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgIG5hbWU9IkNhbGxHcmFwaCBDb21tYW5kIgotICAgICAgICAgICAgY2F0ZWdvcnlJZD0iY2R0QVNUMi5jb21tYW5kcy5jYXRlZ29yeSIKLSAgICAgICAgICAgIGlkPSJjZHRBU1QyLmNvbW1hbmRzLmNnQ29tbWFuZCI+Ci0gICAgICA8L2NvbW1hbmQ+Ci0gICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgIG5hbWU9IkNGRyBDb21tYW5kIgotICAgICAgICAgICAgY2F0ZWdvcnlJZD0iY2R0QVNUMi5jb21tYW5kcy5jYXRlZ29yeSIKLSAgICAgICAgICAgIGlkPSJjZHRBU1QyLmNvbW1hbmRzLmNmZ0NvbW1hbmQiPgotICAgICAgPC9jb21tYW5kPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPgotICAgICAgPGhhbmRsZXIKLSAgICAgICAgICAgIGNvbW1hbmRJZD0iY2R0QVNUMi5jb21tYW5kcy5jZ0NvbW1hbmQiCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMuaGFuZGxlcnMuQnVpbGRDYWxsR3JhcGhIYW5kbGVyIj4KLSAgICAgIDwvaGFuZGxlcj4KLSAgICAgIDxoYW5kbGVyCi0gICAgICAgICAgICBjb21tYW5kSWQ9ImNkdEFTVDIuY29tbWFuZHMuY2ZnQ29tbWFuZCIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy5oYW5kbGVycy5CdWlsZENGR3JhcGhIYW5kbGVyIj4KLSAgICAgIDwvaGFuZGxlcj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmJpbmRpbmdzIj4KLSAgICAgIDxrZXkKLSAgICAgICAgICAgIGNvbW1hbmRJZD0iY2R0QVNUMi5jb21tYW5kcy5jZ0NvbW1hbmQiCi0gICAgICAgICAgICBjb250ZXh0SWQ9Im9yZy5lY2xpcHNlLnVpLmNvbnRleHRzLndpbmRvdyIKLSAgICAgICAgICAgIHNlcXVlbmNlPSJNMSs2IgotICAgICAgICAgICAgc2NoZW1lSWQ9Im9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb24iPgotICAgICAgPC9rZXk+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+Ci0gICAgICA8bWVudUNvbnRyaWJ1dGlvbgotICAgICAgICAgICAgbG9jYXRpb25VUkk9Im1lbnU6b3JnLmVjbGlwc2UudWkubWFpbi5tZW51P2FmdGVyPWFkZGl0aW9ucyI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgbGFiZWw9IlNhbXBsZSBNZW51IgotICAgICAgICAgICAgICAgbW5lbW9uaWM9Ik0iCi0gICAgICAgICAgICAgICBpZD0iY2R0QVNUMi5tZW51cy5zYW1wbGVNZW51Ij4KLSAgICAgICAgICAgIDxjb21tYW5kCi0gICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9ImNkdEFTVDIuY29tbWFuZHMuY2dDb21tYW5kIgotICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZ3JhcGhXLmdpZiIKLSAgICAgICAgICAgICAgICAgIGlkPSJjZHRBU1QyLm1lbnVzLmNnQ29tbWFuZCIKLSAgICAgICAgICAgICAgICAgIGxhYmVsPSJXYWxrIEFTVCB0cmVlIgotICAgICAgICAgICAgICAgICAgbW5lbW9uaWM9IlMiCi0gICAgICAgICAgICAgICAgICB0b29sdGlwPSJXYWxrIEFTVCBUcmVlIHRvb2x0aXAiPgotICAgICAgICAgICAgPC9jb21tYW5kPgotICAgICAgICAgPC9tZW51PgotICAgICAgPC9tZW51Q29udHJpYnV0aW9uPgotICAgICAgPG1lbnVDb250cmlidXRpb24KLSAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJ0b29sYmFyOm9yZy5lY2xpcHNlLnVpLm1haW4udG9vbGJhcj9hZnRlcj1hZGRpdGlvbnMiPgotICAgICAgICAgPHRvb2xiYXIKLSAgICAgICAgICAgICAgIGlkPSJjZHRBU1QyLnRvb2xiYXJzLnNhbXBsZVRvb2xiYXIiPgotICAgICAgICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0iY2R0QVNUMi5jb21tYW5kcy5jZ0NvbW1hbmQiCi0gICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9jYWxsc0MuZ2lmIgotICAgICAgICAgICAgICAgICAgaWQ9ImNkdEFTVDIudG9vbGJhcnMuYnVpbGRDYWxsR3JhcGhDb21tYW5kIgotICAgICAgICAgICAgICAgICAgbGFiZWw9IkJ1aWxkIENhbGwgR3JhcGgiCi0gICAgICAgICAgICAgICAgICB0b29sdGlwPSJCdWlsZCBDYWxsIEdyYXBoIj4KLSAgICAgICAgICAgIDwvY29tbWFuZD4KLSAgICAgICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJjZHRBU1QyLmNvbW1hbmRzLmNmZ0NvbW1hbmQiCi0gICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9jYWxsc0NGLmdpZiIKLSAgICAgICAgICAgICAgICAgIGlkPSJjZHRBU1QyLnRvb2xiYXJzLmJ1aWxkQ2FsbEdyYXBoQ29tbWFuZCIKLSAgICAgICAgICAgICAgICAgIGxhYmVsPSJCdWlsZCBDRkdyYXBoIgotICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iQnVpbGQgQ29udHJvbCBGbG93IEdyYXBoIj4KLSAgICAgICAgICAgIDwvY29tbWFuZD4KLSAgICAgICAgIDwvdG9vbGJhcj4KLSAgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldHMiPgotICAgICAgPGFjdGlvblNldAotICAgICAgICAgICAgbGFiZWw9IlNhbXBsZSBBY3Rpb24gU2V0IgotICAgICAgICAgICAgdmlzaWJsZT0idHJ1ZSIKLSAgICAgICAgICAgIGlkPSJjZHRBU1QyLmFjdGlvblNldCI+Ci0gICAgICAgICA8YWN0aW9uCi0gICAgICAgICAgICAgICBsYWJlbD0iV2FsayBBU1QiCi0gICAgICAgICAgICAgICBpY29uPSJpY29ucy9ncmFwaFcuZ2lmIgotICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzLmFjdGlvbnMuQVNUV2Fsa2VyQWN0aW9uIgotICAgICAgICAgICAgICAgdG9vbHRpcD0iV2FsayBBU1QgdG9vbHRpcCIKLSAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJzYW1wbGVNZW51L3NhbXBsZUdyb3VwIgotICAgICAgICAgICAgICAgdG9vbGJhclBhdGg9InNhbXBsZUdyb3VwIgotICAgICAgICAgICAgICAgaWQ9ImNkdGFzdDIuYWN0aW9ucy5TYW1wbGVBY3Rpb24iPgotICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICA8L2FjdGlvblNldD4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc2FtcGxlcy9IZWxsby5jIGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zYW1wbGVzL0hlbGxvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZTI4MmIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zYW1wbGVzL0hlbGxvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIE1ZVkFSIDQyCi0KLWludCBncmFwaHRlc3Qodm9pZCkgewotCWludCBhLGI7Ci0JaW50IHBpPTMuMTQ7Ci0JYT0wOwotCWI9TVlWQVI7IC8vIHVzZSBkZWZpbmVkCi0JYiA9IGIgKyBhOwotCWE9My4xNDsKLQlyZXR1cm4gYjsKLX0KLQpkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zYW1wbGVzL2dyYXBoLmMgYi90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL3NhbXBsZXMvZ3JhcGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZmYzJjNS4uMDAwMDAwMAotLS0gYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL3NhbXBsZXMvZ3JhcGguYworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpbmNsdWRlICJtcGkuaCIKLSNpbmNsdWRlICJzdGRpby5oIgotIAotdm9pZCBmb28oaW50IHgpOwotdm9pZCBnZWUoaW50IHgpOwotdm9pZCBrZWkoaW50IHgpOwotCi12b2lkIGZvbyhpbnQgeCl7Ci0gIHggKys7Ci0gIGdlZSh4KTsKLX0KLQotdm9pZCBnZWUoaW50IHgpewotICB4ICo9IDM7Ci0gIGtlaSh4KTsKLX0KLQotdm9pZCBrZWkoaW50IHgpewotICB4ID0geCAlIDEwOwotICBmb28oeCk7Ci19Ci0KLXZvaWQgYShpbnQgeCl7Ci0gIHggLS07Ci19Ci0KLWludCBtYWluMyhpbnQgYXJnYywgY2hhciogYXJndltdKXsKLSAgaW50IHggPSAwOwotICBmb28oeCk7Ci0gIGEoeCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zYW1wbGVzL3dhbGthc3QuYyBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc2FtcGxlcy93YWxrYXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZGViODkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zYW1wbGVzL3dhbGthc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vIHAxNgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIE1ZVkFSIDQyCi0KLWludCBtYWluKHZvaWQpIHsKLQlpbnQgYSxiOwotCWE9MDsKLQliPU1ZVkFSOyAvLyB1c2UgZGVmaW5lZAotCWIgPSBiICsgYTsKLQlyZXR1cm4gYjsKLX0KLWludCBmb28oaW50IGJhcil7Ci0gIGludCB6ID0gYmFyOwotICByZXR1cm4gejsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL3NhbXBsZXMvd2Fsa2FzdF9lZGdlLmMgYi90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL3NhbXBsZXMvd2Fsa2FzdF9lZGdlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYTgxYjkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zYW1wbGVzL3dhbGthc3RfZWRnZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXZvaWQgZWRnZShpbnQgYSkgewotCWludCB4LHk7Ci0JaWYoYT4wKQotCQl4PTA7Ci0JZWxzZSAKLQkJeD0xOwotCXk9eDsKLX0KLWludCBmb28oaW50IGJhcil7Ci0gIGludCB6ID0gYmFyOwotICByZXR1cm4gejsKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc2FtcGxlcy93YWxrYXN0X2VkZ2VfY29tbWVudHMuYyBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc2FtcGxlcy93YWxrYXN0X2VkZ2VfY29tbWVudHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE3MDBlYi4uMDAwMDAwMAotLS0gYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL3NhbXBsZXMvd2Fsa2FzdF9lZGdlX2NvbW1lbnRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vLyNpbmNsdWRlIDxzdGRpby5oPgotLyoqIGZ1bmN0aW9uIHRoYXQgc2hvd3MgYSBzaG9ydCBlZGdlIGluIGEgQ0ZHICovCi12b2lkIGVkZ2UoaW50IGEpIHsKLQlpbnQgeCx5OwotCWlmKGE+MCkKLQkJeD0wOyAgLy8gdGhlIHRoZW4gY2FzZQotCWVsc2UgCi0JCXg9MTsgIC8vIHRoZSBlbHNlIGNhc2UKLQkvLyB1c2UgcmVzdWx0YW50IHZhbHVlIG9mIHgKLQkvKiBwYXJ0TGluZSBjb21tZW50ICovIHk9eDsgCi19Ci0vKiogdGhlIGV2ZXItcHJlc2VudCBmb28gZnVuY3Rpb24gKi8KLWludCBmb28oaW50IGJhcil7Ci0gIGludCB6ID0gYmFyOwotICByZXR1cm4gejsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC9zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9BY3RpdmF0b3IuamF2YSBiL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3NhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL0FjdGl2YXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjI2MGNhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3NhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL0FjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAiY2R0QVNUMiI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4KLQkgKiBwbHVnLWluIHJlbGF0aXZlIHBhdGgKLQkgKgotCSAqIEBwYXJhbSBwYXRoIHRoZSBwYXRoCi0JICogQHJldHVybiB0aGUgaW1hZ2UgZGVzY3JpcHRvcgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgewotCQlyZXR1cm4gaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIHBhdGgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3NhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2FjdGlvbnMvQVNUV2Fsa2VyQWN0aW9uLmphdmEgYi90b29scy9zYW1wbGVzL29yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9wdHAvcGxkdC9zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9hY3Rpb25zL0FTVFdhbGtlckFjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjMyM2JjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3NhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2FjdGlvbnMvQVNUV2Fsa2VyQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy5hY3Rpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5BU1RWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5jb3JlLmRvbS5hc3QuSUFTVEJpbmFyeUV4cHJlc3Npb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNUQ29tbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1RDb21wb3VuZFN0YXRlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1REZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1RFeHByZXNzaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5jb3JlLmRvbS5hc3QuSUFTVE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNUUHJlcHJvY2Vzc29ySW5jbHVkZVN0YXRlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklBU1RQcmVwcm9jZXNzb3JTdGF0ZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNUU3RhdGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5jb3JlLmRvbS5hc3QuSUFTVFRyYW5zbGF0aW9uVW5pdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5kb20uYXN0LklUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5jb3JlLmRvbS5hc3QuSUFTVFRyYW5zbGF0aW9uVW5pdC5JRGVwZW5kZW5jeVRyZWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNUVHJhbnNsYXRpb25Vbml0LklEZXBlbmRlbmN5VHJlZS5JQVNUSW5jbHVzaW9uTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5tb2RlbC5JQ0VsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUubW9kZWwuSUNFbGVtZW50VmlzaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jZHQuY29yZS5tb2RlbC5JVHJhbnNsYXRpb25Vbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNkdC5pbnRlcm5hbC5jb3JlLmRvbS5wYXJzZXIuYy5DQVNURXhwcmVzc2lvblN0YXRlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOwotCi0vKioKLSAqIFRoaXMgd2FzIGluaXRpYWxseSBidWlsdCBmcm9tIHRoZSAiU2FtcGxlIEFjdGlvbiIgcGx1Z2luIGV4YW1wbGUuCi0gKiAKLSAqIFRoaXMgc2FtcGxlIGFjdGlvbiB3YWxrcyBhbiBBU1QgdHJlZSBmb3IgYSBzZWxlY3RlZCBDIHNvdXJjZSBmaWxlLgotICogU2VsZWN0IGEgQyBzb3VyY2UgZmlsZSBpbiB0aGUgUHJvamVjdHMgdmlldyBhbmQgY2xpY2sgdGhlIGljb24gaW4gdGhlIHRvb2xiYXIKLSAqIHRvIHByaW50IEFTVCB3YWxraW5nIGluZm9ybWF0aW9uLgotICogCi0gKiBAc2VlIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZQotICogCi0gKiBAYXV0aG9yIEJldGggVGliYml0dHMgdGliYml0dHNAdXMuaWJtLmNvbQotICovCi1wdWJsaWMgY2xhc3MgQVNUV2Fsa2VyQWN0aW9uIGltcGxlbWVudHMgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKLQlwcml2YXRlIElXb3JrYmVuY2hXaW5kb3cgd2luZG93OwotCXByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBBU1RXYWxrZXJBY3Rpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogVGhlIGFjdGlvbiBoYXMgYmVlbiBhY3RpdmF0ZWQuIFRoZSBhcmd1bWVudCBvZiB0aGUgbWV0aG9kIHJlcHJlc2VudHMgdGhlCi0JICogJ3JlYWwnIGFjdGlvbiBzaXR0aW5nIGluIHRoZSB3b3JrYmVuY2ggVUkuCi0JICogCi0JICogQHNlZSBJV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUjcnVuCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7Ci0JCU1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKHdpbmRvdy5nZXRTaGVsbCgpLCAiQ2R0QVNUMiBQbHVnLWluIiwKLQkJCQkiU2VlIENvbnNvbGUgZm9yIEFTVCB3YWxraW5nIHJlc3VsdHMiKTsKLQkJdHJ5IHsKLQkJCXJ1blNlbGVjdGlvbkV4YW1wbGUoc2VsZWN0aW9uKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogU2VsZWN0aW9uIGluIHRoZSB3b3JrYmVuY2ggaGFzIGJlZW4gY2hhbmdlZC4gV2UgY2FuIGNoYW5nZSB0aGUgc3RhdGUgb2YKLQkgKiB0aGUgJ3JlYWwnIGFjdGlvbiBoZXJlIGlmIHdlIHdhbnQsIGJ1dCB0aGlzIGNhbiBvbmx5IGhhcHBlbiBhZnRlciB0aGUKLQkgKiBkZWxlZ2F0ZSBoYXMgYmVlbiBjcmVhdGVkLgotCSAqIAotCSAqIEBzZWUgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCXRoaXMuc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHJ1blNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oInNlbGVjdGlvbj0iICsgc2VsZWN0aW9uKTsKLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElUcmFuc2xhdGlvblVuaXQpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgSVRyYW5zbGF0aW9uVW5pdCIpOwotCQl9Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJQ0VsZW1lbnQpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSUNFbGVtZW50Iik7Ci0JCQl3YWxrSUNFbGVtZW50KChJQ0VsZW1lbnQpIHNlbGVjdGlvbik7Ci0KLQkJfQotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNzID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oIiBJU3RydWN0dXJlZFNlbGVjdGlvbiwgY29udGVudHM6Iik7Ci0KLQkJCWZvciAoSXRlcmF0b3IgaXRlciA9IHNzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCU9iamVjdCBvYmogPSAoT2JqZWN0KSBpdGVyLm5leHQoKTsKLQkJCQkvLyBJdCBjYW4gYmUgYSBQcm9qZWN0LCBGb2xkZXIsIEZpbGUsIGV0Yy4uLgotCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJQWRhcHRhYmxlKSB7Ci0JCQkJCUlBZGFwdGFibGUgaWFkID0gKElBZGFwdGFibGUpIG9iajsKLQkJCQkJZmluYWwgSVJlc291cmNlIHJlcyA9IChJUmVzb3VyY2UpIGlhZAotCQkJCQkJCS5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICBnb3QgcmVzb3VyY2U6ICIgKyByZXMpOwotCi0JCQkJCS8vIElDRWxlbWVudCBjb3ZlcnMgZm9sZGVycyBhbmQgdHJhbnNsYXRpb251bml0cwotCQkJCQlmaW5hbCBJQ0VsZW1lbnQgY2UgPSAoSUNFbGVtZW50KSBpYWQKLQkJCQkJCQkuZ2V0QWRhcHRlcihJQ0VsZW1lbnQuY2xhc3MpOy8vIGNkdDQwCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICBnb3QgSUNFbGVtZW50OiAiICsgY2UpOwotCi0JCQkJCUlUcmFuc2xhdGlvblVuaXQgdHUgPSAoSVRyYW5zbGF0aW9uVW5pdCkgaWFkCi0JCQkJCQkJLmdldEFkYXB0ZXIoSVRyYW5zbGF0aW9uVW5pdC5jbGFzcyk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICBnb3QgSVRyYW5zbGF0aW9uVW5pdDogIiArIHR1KTsKLQkJCQkJdHJ5IHsKLQkJCQkJCWxpc3RGbGF0SW5mbyh0dSk7Ci0JCQkJCQl3YWxrSVRVKHR1KTsKLQkJCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfS8vIGVuZCBmb3IKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHJ1blNlbGVjdGlvbkV4YW1wbGUoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzcyA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJZm9yIChJdGVyYXRvciBpdGVyID0gc3MuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJT2JqZWN0IG9iaiA9IChPYmplY3QpIGl0ZXIubmV4dCgpOwotCQkJCS8vIEl0IGNhbiBiZSBhIFByb2plY3QsIEZvbGRlciwgRmlsZSwgZXRjLi4uCi0JCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElBZGFwdGFibGUpIHsKLQkJCQkJSUFkYXB0YWJsZSBpYWQgPSAoSUFkYXB0YWJsZSkgb2JqOwotCQkJCQlmaW5hbCBJUmVzb3VyY2UgcmVzID0gKElSZXNvdXJjZSkgaWFkCi0JCQkJCQkJLmdldEFkYXB0ZXIoSVJlc291cmNlLmNsYXNzKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgIGdvdCByZXNvdXJjZTogIiArIHJlcyk7Ci0KLQkJCQkJLy8gSUNFbGVtZW50IGNvdmVycyBmb2xkZXJzIGFuZCB0cmFuc2xhdGlvbiB1bml0cwotCQkJCQlmaW5hbCBJQ0VsZW1lbnQgY2UgPSAoSUNFbGVtZW50KSBpYWQKLQkJCQkJCQkuZ2V0QWRhcHRlcihJQ0VsZW1lbnQuY2xhc3MpOy8vIGNkdDQwCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICBnb3QgSUNFbGVtZW50OiAiICsgY2UpOwotCi0JCQkJCUlUcmFuc2xhdGlvblVuaXQgdHUgPSAoSVRyYW5zbGF0aW9uVW5pdCkgaWFkCi0JCQkJCQkJLmdldEFkYXB0ZXIoSVRyYW5zbGF0aW9uVW5pdC5jbGFzcyk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICBnb3QgSVRyYW5zbGF0aW9uVW5pdDogIiArIHR1KTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbj09PT09PT09PT1saXN0RmxhdEluZm8oKToiKTsKLQkJCQkJbGlzdEZsYXRJbmZvKHR1KTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbj09PT09PT09PT13YWxrSVRVKCk6Iik7Ci0JCQkJCXdhbGtJVFUodHUpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuPT09PT09PT09PXdhbGtJVFVfQVNUKCk6Iik7Ci0JCQkJCXdhbGtJVFVfQVNUKHR1KTsKLQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFdlIGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gZGlzcG9zZSBvZiBhbnkgc3lzdGVtIHJlc291cmNlcyB3ZSBwcmV2aW91c2x5Ci0JICogYWxsb2NhdGVkLgotCSAqIAotCSAqIEBzZWUgSVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlI2Rpc3Bvc2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCX0KLQotCS8qKgotCSAqIFdlIHdpbGwgY2FjaGUgd2luZG93IG9iamVjdCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHByb3ZpZGUgcGFyZW50IHNoZWxsCi0JICogZm9yIHRoZSBtZXNzYWdlIGRpYWxvZy4KLQkgKiAKLQkgKiBAc2VlIElXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSNpbml0Ci0JICovCi0JcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoV2luZG93IHdpbmRvdykgewotCQl0aGlzLndpbmRvdyA9IHdpbmRvdzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3YWxrSUNFbGVtZW50KElDRWxlbWVudCBpY2UpIHsKLQkJLy8gSUNFbGVtZW50IGljZSA9IChJQ0VsZW1lbnQpc2VsZWN0aW9uOwotCQlTdHJpbmcgZU5hbWUgPSBpY2UuZ2V0RWxlbWVudE5hbWUoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJQ0VsZW1lbnQgbmFtZTogIiArIGVOYW1lKTsKLQotCX0KLQotCS8qKgotCSAqIFdhbGsgdGhlIElUcmFuc2xhdGlvblVuaXQgd2l0aCBhIHZpc2l0b3IsIHdoaWNoIChvbmx5KSB2aXNpdHMgSUNFbGVtZW50cwotCSAqIAotCSAqIEBwYXJhbSB0dQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgdm9pZCB3YWxrSVRVKElUcmFuc2xhdGlvblVuaXQgdHUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHR1TmFtZSA9IHR1LmdldEVsZW1lbnROYW1lKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSVRyYW5zbGF0aW9uVW5pdCBuYW1lOiAiICsgdHVOYW1lKTsKLQkJdHUuYWNjZXB0KG5ldyBJQ0VsZW1lbnRWaXNpdG9yKCkgewotCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSUNFbGVtZW50IGVsZW1lbnQpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlib29sZWFuIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVmlzaXRpbmc6ICIgKyBlbGVtZW50LmdldEVsZW1lbnROYW1lKCkpOwotCQkJCXJldHVybiB2aXNpdENoaWxkcmVuOwotCQkJfQotCQl9KTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBU1QgdmlzaXRvciBmb3IgIiArIHR1TmFtZSk7Ci0JCUlBU1RUcmFuc2xhdGlvblVuaXQgYXN0ID0gdHUuZ2V0QVNUKCk7Ci0JCWFzdC5hY2NlcHQobmV3IE15QVNUVmlzaXRvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBXYWxrIHRoZSBJQVNUVHJhbnNsYXRpb25Vbml0J3MgQVNUIHRyZWUsIHdoaWNoIGNhbiB2aXNpdCBtYW55IHR5cGVzIG9mCi0JICogbm9kZXMKLQkgKiAKLQkgKiBAcGFyYW0gdHUKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHZvaWQgd2Fsa0lUVV9BU1QoSVRyYW5zbGF0aW9uVW5pdCB0dSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFTVCB2aXNpdG9yIGZvciAiICsgdHUuZ2V0RWxlbWVudE5hbWUoKSk7Ci0JCUlBU1RUcmFuc2xhdGlvblVuaXQgYXN0ID0gdHUuZ2V0QVNUKCk7Ci0JCVN5c3RlbS5vdXQKLQkJCQkucHJpbnRsbigiXG49PT09PT09PT09PT09PT09PU15QVNUVmlzaXRvcjIgYWxzbyBpbXBsZW1lbnRzIGxlYXZlKCkgXG4iKTsKLQkJYXN0LmFjY2VwdChuZXcgTXlBU1RWaXNpdG9yMigpKTsKLQl9Ci0KLQljbGFzcyBNeUFTVFZpc2l0b3IgZXh0ZW5kcyBBU1RWaXNpdG9yIHsKLQotCQlNeUFTVFZpc2l0b3IoKSB7Ci0JCQl0aGlzLnNob3VsZFZpc2l0U3RhdGVtZW50cyA9IHRydWU7IC8vIGxvdHMgbW9yZQotCQkJdGhpcy5zaG91bGRWaXNpdERlY2xhcmF0aW9ucyA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgaW50IHZpc2l0KElBU1RTdGF0ZW1lbnQgc3RtdCkgeyAvLyBsb3RzIG1vcmUKLQkJCVN0cmluZyBzaWcgPSBzdG10LmdldFJhd1NpZ25hdHVyZSgpOwotCQkJaWYgKHNpZy5sZW5ndGgoKSA+IDApCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJWaXNpdGluZyBzdG10OiAiICsgc3RtdC5nZXRSYXdTaWduYXR1cmUoKSk7Ci0JCQllbHNlIGlmIChzdG10IGluc3RhbmNlb2YgSUFTVENvbXBvdW5kU3RhdGVtZW50KSB7Ci0JCQkJSUFTVENvbXBvdW5kU3RhdGVtZW50IGNzdG10ID0gKElBU1RDb21wb3VuZFN0YXRlbWVudCkgc3RtdDsKLQkJCQlJQVNUU3RhdGVtZW50W10gc3RtdHMgPSBjc3RtdC5nZXRTdGF0ZW1lbnRzKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJWaXNpdGluZyBjb21wb3VuZCBzdG10IHdpdGggc3RtdHM6ICIKLQkJCQkJCSsgc3RtdHMubGVuZ3RoKTsKLQkJCQlmb3IgKElBU1RTdGF0ZW1lbnQgc3QgOiBzdG10cykgewotCQkJCQlTdHJpbmcgcmF3U2lnID0gc3QuZ2V0UmF3U2lnbmF0dXJlKCk7Ci0KLQkJCQkJaWYgKHJhd1NpZy5sZW5ndGgoKSA9PSAwKSB7Ci0JCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgIC0+IiArIHN0KTsKLQkJCQkJCWlmIChzdCBpbnN0YW5jZW9mIENBU1RFeHByZXNzaW9uU3RhdGVtZW50KSB7Ci0JCQkJCQkJQ0FTVEV4cHJlc3Npb25TdGF0ZW1lbnQgZXMgPSAoQ0FTVEV4cHJlc3Npb25TdGF0ZW1lbnQpIHN0OwotCQkJCQkJCUlBU1RFeHByZXNzaW9uIGV4cCA9IGVzLmdldEV4cHJlc3Npb24oKTsKLQkJCQkJCQlpZiAoZXhwIGluc3RhbmNlb2YgSUFTVEJpbmFyeUV4cHJlc3Npb24pIHsKLQkJCQkJCQkJSUFTVEJpbmFyeUV4cHJlc3Npb24gYmV4cCA9IChJQVNUQmluYXJ5RXhwcmVzc2lvbikgZXhwOwotCi0JCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgIGJpbmFyeSBleHA6ICIKLQkJCQkJCQkJCQkrIGJleHAuZ2V0T3BlcmFuZDEoKSArICIgIgotCQkJCQkJCQkJCSsgYmV4cC5nZXRPcGVyYXRvcigpICsgIiAiCi0JCQkJCQkJCQkJKyBiZXhwLmdldE9wZXJhbmQyKCkpOwotCQkJCQkJCX0KLQkJCQkJCQlTdHJpbmcgZXhwU3RyID0gZXhwLmdldFJhd1NpZ25hdHVyZSgpOwotCQkJCQkJCUlUeXBlIHR5cGUgPSBleHAuZ2V0RXhwcmVzc2lvblR5cGUoKTsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgLT4iICsgcmF3U2lnKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXJldHVybiBQUk9DRVNTX0NPTlRJTlVFOwotCQl9Ci0KLQkJcHVibGljIGludCB2aXNpdChJQVNURGVjbGFyYXRpb24gZGVjbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJWaXNpdGluZyBkZWNsOiAiICsgZGVjbC5nZXRSYXdTaWduYXR1cmUoKSk7Ci0JCQlyZXR1cm4gUFJPQ0VTU19DT05USU5VRTsKLQkJfQotCi0JfQotCi0KLQkvKiogVmlzaXRvciB0aGF0IHVzZXMgbGVhdmUoKSB0byBzaG93IG5lc3RpbmcgKi8KLQljbGFzcyBNeUFTVFZpc2l0b3IyIGV4dGVuZHMgQVNUVmlzaXRvciB7Ci0KLQkJTXlBU1RWaXNpdG9yMigpIHsKLQkJCXRoaXMuc2hvdWxkVmlzaXRTdGF0ZW1lbnRzID0gdHJ1ZTsKLQkJCXRoaXMuc2hvdWxkVmlzaXREZWNsYXJhdGlvbnMgPSB0cnVlOwotCQkJdGhpcy5zaG91bGRWaXNpdE5hbWVzID0gdHJ1ZTsKLQkJfQotCi0JCS8qKgotCQkgKiBQcmludCBzdGF0ZW1lbnQgaW5mbzogaWYgYWx0ZXJlZCBieSBwcmVwcm9jZXNzb3IsIHRoZW4KLQkJICogZ2V0UmF3U2lnbmF0dXJlKCkgaXMgZW1wdHk7IHVzZSBhbHRlcm5hdGUgcmVwcmVzZW50YXRpb24KLQkJICovCi0JCXB1YmxpYyBpbnQgdmlzaXQoSUFTVFN0YXRlbWVudCBzdG10KSB7Ci0JCQlTdHJpbmcgc2lnID0gc3RtdC5nZXRSYXdTaWduYXR1cmUoKTsKLQkJCWlmIChzaWcubGVuZ3RoKCkgPiAwKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVmlzaXRpbmcgc3RtdDogIiArIHN0bXQuZ2V0UmF3U2lnbmF0dXJlKCkpOwotCQkJZWxzZQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVmlzaXRpbmcgc3RtdDogIiArIHN0bXQudG9TdHJpbmcoKSk7Ci0JCQlyZXR1cm4gUFJPQ0VTU19DT05USU5VRTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgdmlzaXQoSUFTVERlY2xhcmF0aW9uIGRlY2wpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVmlzaXRpbmcgZGVjbDogIiArIGRlY2wuZ2V0UmF3U2lnbmF0dXJlKCkpOwotCQkJcmV0dXJuIFBST0NFU1NfQ09OVElOVUU7Ci0JCX0KLQotCQlwdWJsaWMgaW50IHZpc2l0KElBU1ROYW1lIG5hbWUpIHsKLQkJCVN0cmluZyBwcnROYW1lID0gbmFtZS50b1N0cmluZygpOwotCQkJaWYgKHBydE5hbWUubGVuZ3RoKCkgPT0gMCkKLQkJCQlwcnROYW1lID0gbmFtZS5nZXRSYXdTaWduYXR1cmUoKTsgLy8gdXNlIHByZSBwcmUtcHJvY2Vzc29yCi0JCQkvLyB2YWx1ZQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJWaXNpdGluZyBuYW1lOiAiICsgcHJ0TmFtZSk7Ci0JCQlyZXR1cm4gUFJPQ0VTU19DT05USU5VRTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgbGVhdmUoSUFTVFN0YXRlbWVudCBzdG10KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBMZWF2aW5nIHN0bXQ6ICIgKyBzdG10LmdldFJhd1NpZ25hdHVyZSgpKTsKLQkJCXJldHVybiBQUk9DRVNTX0NPTlRJTlVFOwotCQl9Ci0KLQkJcHVibGljIGludCBsZWF2ZShJQVNURGVjbGFyYXRpb24gZGVjbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgTGVhdmluZyBkZWNsOiAiICsgZGVjbC5nZXRSYXdTaWduYXR1cmUoKSk7Ci0JCQlyZXR1cm4gUFJPQ0VTU19DT05USU5VRTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgbGVhdmUoSUFTVE5hbWUgbmFtZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgTGVhdmluZyBuYW1lOiAiICsgbmFtZSk7Ly8gcG9zc2libHkgZW1wdHkKLQkJCXJldHVybiBQUk9DRVNTX0NPTlRJTlVFOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTGlzdCAiZmxhdCBpbmZvIiB0eXBlIHF1ZXJpZXMgdGhhdCByZXR1cm4gbGlzdHMgb2YgdGhpbmdzIG9uIHRoZSBhc3QKLQkgKiAKLQkgKiBAcGFyYW0gdHUKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKi8KLQl2b2lkIGxpc3RGbGF0SW5mbyhJVHJhbnNsYXRpb25Vbml0IHR1KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlBU1RUcmFuc2xhdGlvblVuaXQgYXN0ID0gdHUuZ2V0QVNUKCk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJBU1QgZm9yOiAiICsgYXN0LmdldENvbnRhaW5pbmdGaWxlbmFtZSgpKTsKLQotCQlJQVNUUHJlcHJvY2Vzc29yU3RhdGVtZW50W10gcHBzcyA9IGFzdC5nZXRBbGxQcmVwcm9jZXNzb3JTdGF0ZW1lbnRzKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUHJlcHJvY2Vzc29yU3RtdHM6IChvbWl0IC91c3IvLi4uKSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBwc3MubGVuZ3RoOyBpKyspIHsKLQkJCUlBU1RQcmVwcm9jZXNzb3JTdGF0ZW1lbnQgcHBzID0gcHBzc1tpXTsKLQkJCVN0cmluZyBmbiA9IHBwcy5nZXRDb250YWluaW5nRmlsZW5hbWUoKTsKLQkJCWlmICghZm4uc3RhcnRzV2l0aCgiL3VzciIpKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGkgKyAiICBQcmVwcm9jZXNzb3JTdG10OiAiICsgbGFzdHBhcnQoZm4pCi0JCQkJCQkrICIgIiArIHBwcy5nZXRSYXdTaWduYXR1cmUoKSk7Ci0JCQl9Ci0JCX0KLQkJSUFTVERlY2xhcmF0aW9uW10gZGVjbHMgPSBhc3QuZ2V0RGVjbGFyYXRpb25zKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGVjbGFyYXRpb25zOiAob21pdCAvdXNyLy4uLikiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNscy5sZW5ndGg7IGkrKykgewotCQkJSUFTVERlY2xhcmF0aW9uIGRlY2wgPSBkZWNsc1tpXTsKLQkJCVN0cmluZyBmbiA9IGRlY2wuZ2V0Q29udGFpbmluZ0ZpbGVuYW1lKCk7Ci0JCQlpZiAoIWZuLnN0YXJ0c1dpdGgoIi91c3IiKSkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihpICsgIiAgRGVjbGFyYXRpb246ICIgKyBsYXN0cGFydChmbikgKyAiICIKLQkJCQkJCSsgZGVjbC5nZXRSYXdTaWduYXR1cmUoKSk7Ci0JCQl9Ci0JCX0KLQkJSUFTVFByZXByb2Nlc3NvclN0YXRlbWVudFtdIGlkaXJzID0gYXN0LmdldEluY2x1ZGVEaXJlY3RpdmVzKCk7Ci0JCS8vIHJlY3Vyc2VzIHRocnUgaW5jbHVkZXMgaW5jbHVkZWQgYnkgb3RoZXIgaW5jbHVkZXMuLi4KLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmNsdWRlIGRpcmVjdGl2ZXM6ICIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGlkaXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQVNUUHJlcHJvY2Vzc29yU3RhdGVtZW50IGlkaXIgPSBpZGlyc1tpXTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihpICsgIiBpbmNsdWRlIGRpcmVjdGl2ZTogIiArIGlkaXIpOwotCi0JCX0KLQotCQlJRGVwZW5kZW5jeVRyZWUgZHQgPSBhc3QuZ2V0RGVwZW5kZW5jeVRyZWUoKTsKLQkJSUFTVEluY2x1c2lvbk5vZGVbXSBpbnMgPSBkdC5nZXRJbmNsdXNpb25zKCk7Ci0JCS8vIHRoaXMgbGlzdHMgb25seSB0aGUgaW5jbHVkZXMgaW1tZWRpYXRlbHkgaW5jbHVkZWQgYnkgdGhpcyBzcmMgZmlsZQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlcGVuZGVuY3kgdHJlZS9JbmNsdWRlIHN0YXRlbWVudHM6Iik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaW5zLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQVNUSW5jbHVzaW9uTm9kZSBpbiA9IGluc1tpXTsKLQkJCUlBU1RQcmVwcm9jZXNzb3JJbmNsdWRlU3RhdGVtZW50IGlzID0gaW4uZ2V0SW5jbHVkZURpcmVjdGl2ZSgpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGkgKyAiICBpbmNsdWRlIHN0bXQ6ICIgKyBpcyk7Ci0JCX0KLQkJLy8gbm90ZTogY29tbWVudHMgYXJlIG5vdCBhdmFpbGFibGUgYXMgQVNUIE5vZGVzIGJ1dCBhcmUgYXZhaWxhYmxlIGhlcmUuCi0JCS8vIChJbiBzcGl0ZSBvZiB0aGUgZXhpc3RlbmNlIG9mIElBU1RDb21tZW50IGNsYXNzIGFuZCB2aXNpdChJQVNUQ29tbWVudCkgbWV0aG9kLikKLQkJLy8gVGhlc2UgYXJlIGRlcHJlY2F0ZWQgaW4gQ0RUIDUuMAotCQlhc3QgPSB0dS5nZXRBU1QobnVsbCxJVHJhbnNsYXRpb25Vbml0LkFTVF9DUkVBVEVfQ09NTUVOVF9OT0RFUyk7Ci0JCUlBU1RDb21tZW50W10gY210cyA9IGFzdC5nZXRDb21tZW50cygpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvbW1lbnRzIGZvdW5kOiAiK2NtdHMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQVNUQ29tbWVudCBjb21tZW50ID0gY210c1tpXTsKLQkJCWNoYXJbXSBjbXRDaGFyPWNvbW1lbnQuZ2V0Q29tbWVudCgpOwotCQkJU3RyaW5nIGNtdFN0cj1TdHJpbmcudmFsdWVPZihjbXRDaGFyKTsKLQkJCQotCQkJU3lzdGVtLm91dC5wcmludGxuKGkgKyAiIENvbW1lbnQ6IFsiICsgY210U3RyICsgIl0gcmF3U2lnOiBbIitjb21tZW50LmdldFJhd1NpZ25hdHVyZSgpKyJdIGxpbmUgIgotCQkJCQkrIGNvbW1lbnQuZ2V0RmlsZUxvY2F0aW9uKCkpOwotCi0JCX0KLQotCX0KLQotCS8qKgotCSAqIFJldHVybiBsYXN0IHBhcnQgb2Ygc3RyaW5nIHBhdGhuYW1lOiBlLmcuIGEvYi9jL2Zvby5jIHJldHVybnMgZm9vLmMKLQkgKiAKLQkgKiBAcGFyYW0gcGF0aG5hbWUKLQkgKiBAcmV0dXJuCi0JICovCi0JU3RyaW5nIGxhc3RwYXJ0KFN0cmluZyBwYXRobmFtZSkgewotCQlpbnQgbG9jID0gcGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKTsKLQkJcmV0dXJuIHBhdGhuYW1lLnN1YnN0cmluZyhsb2MgKyAxKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaGFuZGxlcnMvQnVpbGRDRkdyYXBoSGFuZGxlci5qYXZhIGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaGFuZGxlcnMvQnVpbGRDRkdyYXBoSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjRhZDhlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3NhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2hhbmRsZXJzL0J1aWxkQ0ZHcmFwaEhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLnB0cC5wbGR0LnNhbXBsZUNEVHN0YXRpY0FuYWx5c2lzLmhhbmRsZXJzOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY2R0LmNvcmUuZG9tLmFzdC5JQVNUU3RhdGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuYW5hbHlzaXMuY2R0LmdyYXBocy5HcmFwaENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmFuYWx5c2lzLmNkdC5ncmFwaHMuSUJsb2NrOwotaW1wb3J0IG9yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5hbmFseXNpcy5jZHQuZ3JhcGhzLklDYWxsR3JhcGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmFuYWx5c2lzLmNkdC5ncmFwaHMuSUNhbGxHcmFwaE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmFuYWx5c2lzLmNkdC5ncmFwaHMuSUNvbnRyb2xGbG93R3JhcGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmFuYWx5c2lzLmNkdC5ncmFwaHMuaW1wbC5Db250cm9sRmxvd0dyYXBoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOwotCi0vKioKLSAqIEJ1aWxkIENvbnRyb2wgRmxvdyBHcmFwaAotICogCi0gKiBAYXV0aG9yIEJldGggVGliYml0dHMgIHRpYmJpdHRzQHVzLmlibS5jb20KLSAqICAKLSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcgotICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcgotICogQHNlZSBvcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuYW5hbHlzaXMuY2R0LmdyYXBocy5HcmFwaENyZWF0b3IKLSAqLwotcHVibGljIGNsYXNzIEJ1aWxkQ0ZHcmFwaEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cwotCQlJU2VsZWN0aW9uTGlzdGVuZXIgewotCXByaXZhdGUgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOwotCXByb3RlY3RlZCBJQ2FsbEdyYXBoIGNhbGxHcmFwaDsKLQlwcm90ZWN0ZWQgR3JhcGhDcmVhdG9yIGdyYXBoQ3JlYXRvcjsKLQlwcm90ZWN0ZWQgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3c7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEJ1aWxkQ0ZHcmFwaEhhbmRsZXIoKSB7Ci0JCWdyYXBoQ3JlYXRvciA9IG5ldyBHcmFwaENyZWF0b3IoKTsKLQotCX0KLQotCS8qKgotCSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQ6IGV4dHJhY3QgZXh0cmFjdCB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIGZyb20gdGhlCi0JICogYXBwbGljYXRpb24gY29udGV4dC4gPGJyPgotCSAqIEEgbmV3IGNhbGwgZ3JhcGggaXMgY29uc3RydWN0ZWQgZm9yIHRoZSBzZWxlY3RlZCByZXNvdXJjZXMuCi0JICogCi0JICogQHBhcmFtIGV2ZW50Ci0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBleGVjdXRpb24uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGJ5IElIYW5kbGVyCi0JICogICAgICAgICBpbnRlcmZhY2UsIG11c3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCi0JICovCi0JcHVibGljIE9iamVjdCBleGVjdXRlKEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJd2luZG93ID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChldmVudCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRDRkdyYXBoSGFuZGxlci5leGVjdXRlKCkiKTsKLQkJLy8gY3JlYXRlIGFuIGVtcHR5IGNhbGwgZ3JhcGggdG8gYmVnaW4gd2l0aAotCQljYWxsR3JhcGggPSBncmFwaENyZWF0b3IuaW5pdENhbGxHcmFwaCgpOwotCQkvLyBHZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCi0JCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkgewotCQkJSVNlbGVjdGlvbiBzZWwgPSBIYW5kbGVyVXRpbC5nZXRDdXJyZW50U2VsZWN0aW9uKGV2ZW50KTsKLQkJCWlmIChzZWwgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCXNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsOwotCQkJfQotCQkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0JCQkJbWVzc2FnZSgiTm8gc2VsZWN0aW9uIGRldGVjdGVkLiBQbGVhc2Ugc2VsZWN0IGEgZmlsZSwgZm9sZGVyLCBvciBwcm9qZWN0IGluIHRoZSBQcm9qZWN0cyBWaWV3LiIpOwotCQkJCXNlbGVjdGlvbj1udWxsOwotCQkJCXJldHVybiBudWxsOwotCQkJfQotCQl9Ci0KLQkJLy8gV2UgaXRlcmF0ZSBoZXJlIG9ubHkgdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSBvZiBtdWx0aXBsZS1zZWxlY3Rpb24uCi0JCS8vIGdyYXBoQ3JlYXRvciB3aWxsIGRlc2NlbmQgaW50byBjaGlsZCBub2Rlcy4KLQkJLypmaW5hbCovIElSZXNvdXJjZSByZXM9bnVsbDsKLQkJZm9yIChJdGVyYXRvciBpdGVyID0gc2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJT2JqZWN0IG9iaiA9IChPYmplY3QpIGl0ZXIubmV4dCgpOwotCQkJLy8gSXQgY2FuIGJlIGEgUHJvamVjdCwgRm9sZGVyLCBGaWxlLCBldGMuLi4KLQkJCWlmIChvYmogaW5zdGFuY2VvZiBJQWRhcHRhYmxlKSB7Ci0JCQkJSUFkYXB0YWJsZSBpYWQgPSAoSUFkYXB0YWJsZSkgb2JqOwotCQkJCXJlcyA9IChJUmVzb3VyY2UpIGlhZC5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCQkJLy8gTm90ZTogcHV0IHRoaXMgaW4gYSBKb2Igb3IgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGlmIHJlc291cmNlcwotCQkJCS8vIHdpbGwgYmUgY2hhbmdlZC4KLQkJCQlpZiAocmVzICE9IG51bGwpIHsKLQkJCQkJY2FsbEdyYXBoID0gZ3JhcGhDcmVhdG9yLmluaXRDYWxsR3JhcGgocmVzKTsKLQkJCQl9IGVsc2UgewotCQkJCQltZXNzYWdlKCJQbGVhc2Ugc2VsZWN0IGEgZmlsZSwgZm9sZGVyLCBvciBwcm9qZWN0IGluIHRoZSBQcm9qZWN0cyB2aWV3Iik7Ci0JCQkJCXNlbGVjdGlvbj1udWxsOwotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlncmFwaENyZWF0b3IuY29tcHV0ZUNhbGxHcmFwaChjYWxsR3JhcGgpOwotCQkvLyBnZXQgdGhlIGZpcnN0IG5vZGUKLQkJSUNhbGxHcmFwaE5vZGUgdG9wTm9kZSA9IGNhbGxHcmFwaC50b3BFbnRyeSgpOwotCQlTdHJpbmcgdG9wTmFtZT10b3BOb2RlLmdldEZ1bmNOYW1lKCk7Ci0JCQotCQlJQ2FsbEdyYXBoTm9kZSBmaXJzdE5vZGU9Y2FsbEdyYXBoLmdldEFsbE5vZGVzKCkuZ2V0KDApOwotCQlTdHJpbmcgZmlyc3ROYW1lPWZpcnN0Tm9kZS5nZXRGdW5jTmFtZSgpOwotCQkvLyBnZXQgYSBub2RlIGJ5IGZ1bmN0aW9uIG5hbWUKLQkJSUNhbGxHcmFwaE5vZGUgbmFtZWROb2RlID0gY2FsbEdyYXBoLmdldE5vZGUocmVzLmdldE5hbWUoKSwgImZvbyIpOwotCQlTdHJpbmcgbmFtZWROYW1lPSIiOwotCQlpZihuYW1lZE5vZGUhPW51bGwpIHsKLQkJCW5hbWVkTmFtZT1uYW1lZE5vZGUuZ2V0RnVuY05hbWUoKTsKLQkJfQotCQkKLQkJSUNhbGxHcmFwaE5vZGUgbm9kZSA9IHRvcE5vZGU7Ci0JCUlBU1RTdGF0ZW1lbnQgZnVuY0JvZHk9bm9kZS5nZXRGdW5jRGVmKCkuZ2V0Qm9keSgpOwotCQlJQ29udHJvbEZsb3dHcmFwaCBjZmcgPSBuZXcgQ29udHJvbEZsb3dHcmFwaChmdW5jQm9keSk7Ci0JCWNmZy5idWlsZENGRygpOwotCQkKLQkJSUJsb2NrIGVudHJ5QmxvY2sgPSBjZmcuZ2V0RW50cnkoKTsKLQkJZm9yIChJQmxvY2sgYmxvY2s9IGNmZy5nZXRFbnRyeSgpOyBibG9jayE9bnVsbDsgYmxvY2sgPSBibG9jay5nZXRUb3BOZXh0KCkpIHsKLQkJCWJsb2NrLnByaW50KCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCXRoaXMuc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJ1aWxkQ2FsbEdyYXBoSGFuZGxlciBnb3Qgc2VsZWN0aW9uIik7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIG1lc3NhZ2UoU3RyaW5nIG1zZykgewotCQlNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbih3aW5kb3cuZ2V0U2hlbGwoKSwKLQkJCQkiSG91c3Rvbiwgd2UgaGF2ZSBhIHByb2JsZW0iLCBtc2cpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3NhbXBsZXMvb3JnLmVjbGlwc2UucHRwLnBsZHQuc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3B0cC9wbGR0L3NhbXBsZUNEVHN0YXRpY0FuYWx5c2lzL2hhbmRsZXJzL0J1aWxkQ2FsbEdyYXBoSGFuZGxlci5qYXZhIGIvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaGFuZGxlcnMvQnVpbGRDYWxsR3JhcGhIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YzY4NjEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvc2FtcGxlcy9vcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy9zcmMvb3JnL2VjbGlwc2UvcHRwL3BsZHQvc2FtcGxlQ0RUc3RhdGljQW5hbHlzaXMvaGFuZGxlcnMvQnVpbGRDYWxsR3JhcGhIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS5wdHAucGxkdC5zYW1wbGVDRFRzdGF0aWNBbmFseXNpcy5oYW5kbGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5wdHAucGxkdC5tcGkuYW5hbHlzaXMuY2R0LmdyYXBocy5HcmFwaENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UucHRwLnBsZHQubXBpLmFuYWx5c2lzLmNkdC5ncmFwaHMuSUNhbGxHcmFwaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKLQotLyoqCi0gKiBUaGlzIGhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIsIGFuIElIYW5kbGVyIGJhc2UgY2xhc3MuIFRoaXMgaGFuZGxlcgotICogYnVpbGRzIGEgY2FsbCBncmFwaCBmb3IgdGhlIHNlbGVjdGVkIHJlc291cmNlKHMpIGluIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcuIDxicj4KLSAqIAotICogVHdvIHN0ZXBzIHRvIGJ1aWxkaW5nIGNhbGwgZ3JhcGg6IDxicj4KLSAqIDEuIGNvbGxlY3QgYWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zIGluIHRoZSBjYWxsIGdyYXBoIDxicj4KLSAqIDIuIGNvbnN0cnVjdCB0aGUgY2FsbGVyIGFuZCBjYWxsZWUgcmVsYXRpb25zaGlwIGFtb25nIHRoZSBDYWxsR3JhcGhOb2RlcwotICogPGJyPk1vc3Qgb2YgdGhlIHdvcmsgaXMgZG9uZSBieSBHcmFwaENyZWF0b3IKLSAqIAotICogQGF1dGhvciBCZXRoIFRpYmJpdHRzIHRpYmJpdHRzQHVzLmlibS5jb20KLSAqIAotICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyCi0gKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyCi0gKiBAc2VlIG9yZy5lY2xpcHNlLnB0cC5wbGR0Lm1waS5hbmFseXNpcy5jZHQuZ3JhcGhzLkdyYXBoQ3JlYXRvcgotICovCi1wdWJsaWMgY2xhc3MgQnVpbGRDYWxsR3JhcGhIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIGltcGxlbWVudHMKLQkJSVNlbGVjdGlvbkxpc3RlbmVyIHsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKLQlwcm90ZWN0ZWQgSUNhbGxHcmFwaCBjYWxsR3JhcGg7Ci0JcHJvdGVjdGVkIEdyYXBoQ3JlYXRvciBncmFwaENyZWF0b3I7Ci0JcHJvdGVjdGVkIElXb3JrYmVuY2hXaW5kb3cgd2luZG93OwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBCdWlsZENhbGxHcmFwaEhhbmRsZXIoKSB7Ci0JCWdyYXBoQ3JlYXRvciA9IG5ldyBHcmFwaENyZWF0b3IoKTsKLQotCX0KLQotCS8qKgotCSAqIEV4ZWN1dGUgdGhlIGNvbW1hbmQ6IGV4dHJhY3QgZXh0cmFjdCB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIGZyb20gdGhlCi0JICogYXBwbGljYXRpb24gY29udGV4dC4gPGJyPgotCSAqIEEgbmV3IGNhbGwgZ3JhcGggaXMgY29uc3RydWN0ZWQgZm9yIHRoZSBzZWxlY3RlZCByZXNvdXJjZXMuCi0JICogCi0JICogQHBhcmFtIGV2ZW50Ci0JICogQHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBleGVjdXRpb24uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGJ5IElIYW5kbGVyCi0JICogICAgICAgICBpbnRlcmZhY2UsIG11c3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCi0JICovCi0JcHVibGljIE9iamVjdCBleGVjdXRlKEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJd2luZG93ID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChldmVudCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGRDYWxsR3JhcGhIYW5kbGVyLmV4ZWN1dGUoKSIpOwotCQkvLyBjcmVhdGUgYW4gZW1wdHkgY2FsbCBncmFwaCB0byBiZWdpbiB3aXRoCi0JCWNhbGxHcmFwaCA9IGdyYXBoQ3JlYXRvci5pbml0Q2FsbEdyYXBoKCk7Ci0JCS8vIEdldCB0aGUgY3VycmVudCBzZWxlY3Rpb24KLQkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0JCQlJU2VsZWN0aW9uIHNlbCA9IEhhbmRsZXJVdGlsLmdldEN1cnJlbnRTZWxlY3Rpb24oZXZlbnQpOwotCQkJaWYgKHNlbCBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWw7Ci0JCQl9Ci0JCQlpZiAoc2VsZWN0aW9uID09IG51bGwpIHsKLQkJCQltZXNzYWdlKCJObyBzZWxlY3Rpb24gZGV0ZWN0ZWQuIFBsZWFzZSBzZWxlY3QgYSBmaWxlLCBmb2xkZXIsIG9yIHByb2plY3QgaW4gdGhlIFByb2plY3RzIFZpZXcuIik7Ci0JCQkJc2VsZWN0aW9uPW51bGw7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX0KLQotCQkvLyBXZSBpdGVyYXRlIGhlcmUgb25seSB0byBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IG9mIG11bHRpcGxlLXNlbGVjdGlvbi4KLQkJLy8gZ3JhcGhDcmVhdG9yIHdpbGwgZGVzY2VuZCBpbnRvIGNoaWxkIG5vZGVzLgotCQlmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQlPYmplY3Qgb2JqID0gKE9iamVjdCkgaXRlci5uZXh0KCk7Ci0JCQkvLyBJdCBjYW4gYmUgYSBQcm9qZWN0LCBGb2xkZXIsIEZpbGUsIGV0Yy4uLgotCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElBZGFwdGFibGUpIHsKLQkJCQlJQWRhcHRhYmxlIGlhZCA9IChJQWRhcHRhYmxlKSBvYmo7Ci0JCQkJZmluYWwgSVJlc291cmNlIHJlcyA9IChJUmVzb3VyY2UpIGlhZC5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCQkJLy8gTm90ZTogcHV0IHRoaXMgaW4gYSBKb2Igb3IgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGlmIHJlc291cmNlcwotCQkJCS8vIHdpbGwgYmUgY2hhbmdlZC4KLQkJCQlpZiAocmVzICE9IG51bGwpIHsKLQkJCQkJY2FsbEdyYXBoID0gZ3JhcGhDcmVhdG9yLmluaXRDYWxsR3JhcGgocmVzKTsKLQkJCQl9IGVsc2UgewotCQkJCQltZXNzYWdlKCJQbGVhc2Ugc2VsZWN0IGEgZmlsZSwgZm9sZGVyLCBvciBwcm9qZWN0IGluIHRoZSBQcm9qZWN0cyB2aWV3Iik7Ci0JCQkJCXNlbGVjdGlvbj1udWxsOwotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJyZXNvdXJjZXMgc2Nhbm5lZC4gTm93IHNlYXJjaCBmb3IgY2FsbGVycy9jYWxsZWVzIik7Ci0JCWdyYXBoQ3JlYXRvci5jb21wdXRlQ2FsbEdyYXBoKGNhbGxHcmFwaCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigic2hvd0NhbGxHcmFwaC4uLiIpOwotCQlncmFwaENyZWF0b3Iuc2hvd0NhbGxHcmFwaChjYWxsR3JhcGgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oInNob3dDYWxsR3JhcGggY29tcGxldGUuIik7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSVdvcmtiZW5jaFBhcnQgcGFydCwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQl0aGlzLnNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJCdWlsZENhbGxHcmFwaEhhbmRsZXIgZ290IHNlbGVjdGlvbiIpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBtZXNzYWdlKFN0cmluZyBtc2cpIHsKLQkJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24od2luZG93LmdldFNoZWxsKCksCi0JCQkJIkhvdXN0b24sIHdlIGhhdmUgYSBwcm9ibGVtIiwgbXNnKTsKLQl9Ci19Cg==